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 🙏

© 2026 – Pkg Stats / Ryan Hefner

preach

v0.3.0

Published

Lightweight pubsub utility for node and the browser

Downloads

20

Readme

preach

Build Status

Preach is a lightweight pubsub utility for node and the browser. The browser version is ~2kb gzipped.

Installation

For node

npm install preach --save

For browsers

bower install preach

or

git clone [email protected]:zeusdeux/preach.git

If you plan to use it with browserify, then just require index.js. If you plan to use it directly in the browser, then include browser/preach.min.js. This will export a global require function. You can then do:

<script>
  var Preach = require('Preach');
  var preachInstance = new Preach;
</script>

Changelog

  • 0.3.0
    • Preach is now a lot more forgiving (no more throws, yay!)
  • 0.2.0
    • Preach now exports a constructor when require-ed instead of a monolithic instance (incompatible change)
  • 0.1.0
    • Initial version

API

Preach.prototype.pub(channel, [data], [data], [...])

This method is used to publish data to channel.

This method takes the following parameters:

  • channel: String channel name or a regular expression (RegExp)
  • data : Any valid javascript value. Also, this is an optional parameter

Example:

var preach = new Preach;
preach.pub('channel1');
preach.pub('channel2', 1234);
preach.pub('channel3', {a: 100}, 'test');
preach.pub(/^channel.*/, 10, {a: 'boop'}); //will publish data to all channels beginning with 'channel'

Preach.prototype.sub(channel, subscriber)

This method is used to add a subscriber to channel.

This method takes the following parameters:

  • channel : String channel name or a regular expression (RegExp)
  • subscriber : A valid Function. This Function is called whenever data is published to the channel.

A subscriber can subscribe to as many channels as required and even publish to any channel.

####Note: If a subscriber publishes to a channel that it is subscribed to, then that will result in infinite recursion.

Example:

var preach = new Preach;
preach.sub('channel1', console.log.bind(window.console)); //true
preach.sub(/^channel.*/, function(){
  console.log('I will get subscribed to any existing channel that has a name starting with the string "channel"');
}); //true

####Note: If a String is passed as channel and there are no channels that match it, then a new channel will be created and subscriber will be subscribed to it.

Preach.prototype.unsub(channel, subscriber)

This method is used to unsubscribe a subscriber from channel.

This method takes the following parameters:

  • channel : String channel name or a regular expression (RegExp)
  • subscriber : A valid Function. This Function is removed as a subscriber of channel

Example:

var preach = new Preach;
preach.sub('channel1', console.log.bind(window.log)); //true
preach.unsub('channel1', console.log.bind(window.log)); //true

preach.sub('test1', function(){}); //true
preach.sub('test2', function(){}); //true
preach.unsub(/.*/, function(){}); //true
                                  //function(){} is now unsubscribed from *all* channels

Preach.prototype.purge()

This method purges all channels and their subscribers and gives you a fresh Preach instance to work with. This method is quite destructive and hence caution is advised in its usage.

Example:

var preach = new Preach;
preach.sub('test1', function(){});
preach.sub('test2', function(){});
preach.channels(); //["test1", "test2"]
preach.subscribers(); //Object {test1: Array[1], test2: Array[1]}
preach.purge(); //PURGE! return val -> true
preach.channels(); //[]
preach.subscribers(); //{}

Preach.prototype.channels()

This method returns an array of the current active channels.

var preach = new Preach;
preach.sub('test1', function(){}); //true
preach.sub('test2', function(){}); //true
preach.channels(); //["test1", "test2"]

Preach.prototype.subscribers(channel)

This method returns information about the subscribers for a channel.

This method takes the following parameter:

  • channel : String channel name or a regular expression (RegExp) Not providing a value for channel is the same as passing /.*/ i.e., basically "GET ALL THE CHANNELS AND THEIR SUBSCRIBERS!".

Example:

var preach = new Preach;
preach.sub('test1', function(){});
preach.sub('test2', function(){});
preach.subscribers(); //Object {test1: Array[1], test2: Array[1]}
preach.subscribers('test1'); //Object {test1: Array[1]}

####Note: If a RegExp or String is passed as channel and there are no channels that match it, then Preach.subscribers returns an empty object ie {} and does not throw.

Preach.prototype.subscriberCount(channel)

This method returns the no of subscribers a channel has.

This method takes the following parameter:

  • channel : String channel name or a regular expression (RegExp) Not providing a value for channel is the same as passing /.*/ i.e., basically "GET THE SUBSCRIBER COUNT FOR ALL THE CHANNELS".

Example:

var preach = new Preach;
preach.sub('test1', function(){});
preach.sub('test1', function(d){ console.log(d); });
preach.sub('test2', function(){});
preach.subscriberCount(); //Object {test1: 2, test2: 1}
preach.subscriberCount('test2'); //Object {test2: 1}
preach.subscriberCount(/1$/); //Object {test1: 2}

####Note: If a RegExp or String is passed as channel and there are no channels that match it, then Preach.subscriberCount returns an empty object ie {} and does not throw.

Preach.prototype.setMaxSubscribers(n)

This sets the max listeners for each channel at n. Default is unlimited which is set by making n zero. This can also be set during Preach initialization.

var preach = new Preach;
preach.setMaxSubscribers(10);
//analogous to
var preach = new Preach(10);

####Note: If n is lesser than zero then Preach will throw.