0.2.3 • Published 6 years ago

hashtag-stream-set v0.2.3

Weekly downloads
1
License
MIT
Repository
github
Last release
6 years ago

hashtag-stream-set

build status AppVeyor Build Status Security Responsible Disclosure


A StreamSet subtype whose add method tags all input streams in order to ensure that any time a stream gets removed from the set (manually or automatically) all streams with an equal tag are deleted as well.


Get it!

npm install --save hashtag-stream-set

Usage

Check out ./usage.js:

const { PassThrough } = require('stream')
const hashtagStreamSet = require('hashtag-stream-set')

// creating a HashtagStreamSet instance with a bound willDelete hook
const set = hashtagStreamSet((tag, del_streams, doDelete) => {
  console.log('set.size', set.size) // 3
  console.log('del_streams.length', del_streams.length) // 2
  // do some kind of cleanup
  del_streams.forEach(stream => stream.unpipe().destroy())
  // must do this call to perform actual deletion
  doDelete()
})

const a = new PassThrough()
const b = new PassThrough()
const c = new PassThrough()

set.add('#fraud', a)
set.add('#money', b, c)

set.delete('#money')

console.log('set.size', set.size) // 1

Note you can optionally pass a willDelete hook as second argument to a call of the set.delete method and it will override the general one (the optional hook passed to the constructor) for the current tag deletion.


API

set = new HashtagStreamSet([willDelete(tag, del_streams, doDelete)])

Create a HashtagStreamSet instance. willDelete is an optional function that will be called with all streams that are about to be removed from the set. Removal may be triggered by an end of a stream (eos), a call to set.remove(stream) or set.delete(tag). Make sure to call the doDelete callback to perform actual deletion.

set.add(tag, ...streams)

Add one or multiple streams to the set. tag must be a string and will be set as stream._hashtag for every stream added. Note that the _hashtag property will be removed from stream instances as they get removed from the set.

set.delete(tag[, willDelete(tag, del_streams, doDelete)])

Delete all streams with their _hashtag property equal to tag. If willDelete is provided it will override any hook passed at instantiation.


License

MIT