@strong-roots-capital/publishable
TypeScript icon, indicating that this package has built-in type declarations

2.0.1 • Public • Published

publishable Build status npm version codecov

Publishable (Readable) stream

Motivation

This package is an experiment to provide a Readable-stream with push functionality.

But wait, push() is already the cornerstone of Readable streams! Unfortunately the true push functionality is only available when all data is known (and buffered!) before the Readable is piped to a sink, otherwise you'll get a read() not implemented error. If either of these conditions is impossible, you're required to find a way to offer data up for the read() function, which at times is unwieldy, if only conceptually.

Sometimes it is easier to publish chunks when they become known, e.g. with EventEmitters or Observables. Publishable extends an ordinary Readable stream to offer publish(chunk: T | null) in stead of read(size?: number).

Install

npm install @strong-roots-capital/publishable

Use

import Publishable from '@strong-roots-capital/publishable'
const source = new Publishable()

const sink = new Writable({
    write(chunk: Buffer, _: string, callback: any) {
        console.log(chunk.toString())
        callback()
    }
})

source.pipe(sink)

source.publish('hi there')
source.publish('face here')
source.publish(null)

Note that objectMode is supported as are all other _Readable.ReadableOptions

const source = new Publishable<T>({objectMode: true})

Generics are accepted to a limited extent (they do not carry over to any piped streams but can be used to limit what is published through a Publishable).

Related

For more experiments with streams, check out the following projects

Do note they are not compatible with node's built-in streams.

Package Sidebar

Install

npm i @strong-roots-capital/publishable

Weekly Downloads

1

Version

2.0.1

License

ISC

Unpacked Size

7.45 kB

Total Files

4

Last publish

Collaborators

  • amchelle
  • hamroctopus