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

stream-spec

v0.3.6

Published

executable specification for Stream (to make testing streams easy)

Readme

StreamSpec

Automatic checking of the Stream implementations. stream-spec instruments your stream to verify that it has correct behaviour. All you need to do to test a stream is to wrap it with stream-spec, and then pipe some test data through it. it's purpose it to make it easy to test user-land streams have correct behavour.

correct stream behaviour illustrated

correct stream behaviour explained

stream api design style

a simple test

using stream-tester

var spec = require('stream-spec')
var tester = require('stream-tester')

spec(stream)
  .through({strict: true})
  .validateOnExit()

tester.createRandomStream(function () {
    return 'line ' + Math.random() + '\n'
  }, 1000)
  .pipe(stream)
  .pipe(tester.createPauseStream())

send 1000 random lines through the stream and check that it buffers on pause.

types of Stream

Writable (but not readable)

a WritableStream must implement write, end, destroy and emit 'drain' if it pauses, and 'close' after the stream ends, or is destroyed.

If the stream is sync (does no io) it probably does not need to pause, so the write() should never equal false

spec(stream)
  .writable()
  .drainable()
  .validateOnExit()

Readable (but not writable)

a ReadableStream must emit 'data', 'end', and implement destroy, and 'close' after the stream ends, or is destroyed. is strongly recommended to implement pause and resume

If the option {strict: true} is passed, it means the stream is not allowed to emit 'data' or 'end' when the stream is paused.

If the option {end: false} is passed, then end may not be emitted.

spec(stream)
  .readable()
  .pausable({strict: true})) //strict is optional.
  .validateOnExit()

Through (sync writable and readable, aka: 'filter')

A Stream that is both readable and writable, and where the input is processed and then emitted as output, more or less directly. Example, zlib. contrast this with duplex stream.

when you call pause() on a ThroughStream, it should change it into a paused state on the writable side also, and write()===false. Calling resume() should cause 'drain' to be emitted eventually.

If the option {strict: true} is passed, it means the stream is not allowed to emit 'data' or 'end' when the stream is paused.

spec(stream)
  .through({strict: true}) //strict is optional. 
  .validateOnExit()

Duplex

A Stream that is both readable and writable, but the streams go off to some other place or thing, and are not coupled directly. The readable and writable side of a DuplexStream each have their own pause state.

If the option {strict: true} is passed, it means the stream is not allowed to emit 'data' or 'end' when the stream is paused.

spec(stream)
  .duplex({strict: true})
  .validateOnExit()

other options

spec(stream, name) //use name as the name of the stream in error messages.

spec(stream, {
  name: name,   //same as above.
  strict: true, //'data' nor 'end' may be emitted when paused.
  error: true,  //this stream *must* error.
  error: false, //this stream *must not* error.
                //if neither error: boolean option is passed, the stream *may* error.
  })