Skip to content
This repository has been archived by the owner on Jan 15, 2022. It is now read-only.

strong-roots-capital/publishable

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.