npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

better-sse

v0.14.1

Published

Dead simple, dependency-less, spec-compliant server-sent events implementation for Node, written in TypeScript.

Downloads

20,279

Readme

Better SSE

A dead simple, dependency-less, spec-compliant server-sent events implementation for Node, written in TypeScript.

This package aims to be the easiest to use, most compliant and most streamlined solution to server-sent events with Node that is framework-agnostic and feature-rich.

Please consider starring the project on GitHub ⭐.

Why use Server-sent Events?

Server-sent events (SSE) is a standardised protocol that allows web-servers to push data to clients without the need for alternative mechanisms such as pinging, long-polling or WebSockets.

Using SSE can allow for significant savings in bandwidth and battery life on portable devices and will work with your existing infrastructure as it operates directly over the HTTP protocol without the need for the connection upgrade that WebSockets require.

Compared to WebSockets it has comparable performance and bandwidth usage, especially over HTTP/2, and natively includes event ID generation and automatic reconnection when clients are disconnected.

Highlights

See a comparison with other Node SSE libraries in the documentation.

Installation

# npm
npm install better-sse

# Yarn
yarn add better-sse

# pnpm
pnpm add better-sse

Better SSE ships with types built in. No need to install from DefinitelyTyped for TypeScript users!

Usage

The following example shows usage with Express, but Better SSE works with any web-server framework that uses the underlying Node HTTP module.

See the Recipes section of the documentation for use with other frameworks and libraries.


Use sessions to push events to clients:

// Server
import { createSession } from "better-sse";

app.get("/sse", async (req, res) => {
	const session = await createSession(req, res);

	session.push("Hello world!");
});
// Client
const sse = new EventSource("/sse");

sse.addEventListener("message", ({ data }) => {
	console.log(JSON.parse(data));
});

Use channels to send events to many clients at once:

import { createSession, createChannel } from "better-sse";

const channel = createChannel();

app.get("/sse", async (req, res) => {
	const session = await createSession(req, res);

	channel.register(session);

	channel.broadcast("A user has joined.", "join-notification");
});

Loop over sync and async iterables and send each value as an event:

const session = await createSession(req, res);

const list = [1, 2, 3];

await session.iterate(list);

Pipe readable stream data to the client as a stream of events:

const session = await createSession(req, res);

const stream = Readable.from([1, 2, 3]);

await session.stream(stream);

Check the API documentation and live examples for information on getting more fine-tuned control over your data such as managing event IDs, data serialization, event filtering, dispatch controls and more!

Documentation

API documentation, getting started guides and usage with other frameworks is available on the documentation website.

Contributing

This library is always open to contributions whether it be code, bug reports, documentation or anything else.

Please submit suggestions, bugs and issues to the GitHub issues page.

For code or documentation changes submit a pull request on GitHub.

Local Development

Install Node:

curl -L https://git.io/n-install | bash
n auto

Install pnpm:

npm i -g pnpm

Install dependencies:

pnpm i

Run tests:

pnpm t

License

This project is licensed under the MIT license.