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

pubsub-multi

v1.2.2

Published

Multiple implementations of Publish-Subscribe.

Downloads

6

Readme

PubSub Multi

Multiple implementations of Publish-Subscribe.

  • In-memory
  • HTTP EventSource and POST as transport

Both implementations share the same contract tests, allowing them to be used interchangeably.

The API for publishing is simple:

// publisher is an instance of MemoryPublisher
await publisher.publish('some-signal')

The API for publishing too:

// publisher is an instance of MemoryPublisher or EventSourcePubSub
const subscriber = publisher.makeSubscriber()
await subscriber.subscribe('some-signal', async () => {
  console.log('received some-signal')
})

HTTP

To use this over HTTP, mount the express middleware in your express app:

const express = require('express')
const bodyParser = require('body-parser')
const { MemoryPublisher, pubSubRouter } = require('pubsub-multi')

const publisher = new MemoryPublisher() // Implements both pub and sub interface

const app = express()
app.use(bodyParser.json())
app.use(bodyParser.text())
app.use(pubSubRouter({ publisher }))

To publish, you would use publisher.publish as described above. The pubSubRouter then sends signals to subscribers using Server-Sent Events as the transport.

Clients are configured as follows:

const { EventSourcePubSub } = require('pubsub-multi')
const Fetch22 = require('fetch-22') // Tiny lib that simplifies HTTP
const fetch = window.fetch.bind(window)
const baseUrl = 'http://host.com'
const fetch22 = new Fetch22({ baseUrl, fetch })
const eventSource = new EventSource(`${baseUrl}/pubsub`)

const publisher = new EventSourcePubSub({ fetch22, eventSource })
const subscriber = publisher.makeSubscriber()

To subscribe, you would use subscriber.subscribe as described above. The EventSourcePubSub registers subscriptions on the server with HTTP POST.