1.0.0 • Published 7 years ago
pull-splitter v1.0.0
pull-splitter
Split a stream into other streams using filters
const { pull, drain } = require('pull-stream')
const { read, write } = require('pull-files')
const splitter = require('pull-splitter')
const { extname } = require('path')
const [split, channels, rest] = splitter({
js: file => extname(file.path) === '.js',
css: file => extname(file.path) === '.css',
html: file => extname(file.path) === '.html',
// Pass other files through
rest: true
})
// Pull files into splitter:
pull(
read('src/**/*'),
split
)
// Pull results out
pull(
channels.css,
write('out/css')
)
pull(
channels.js,
write('out/js')
)
// Pull results with no match
pull(
rest,
write('out/assets')
)
The splitter returns [split, channels, rest]
, where split
is a sink that pushes onto one of the channels
, or rest
if none match
See pull-merge
and pull-sorted-merge
for joining the streams back together
Install
npm install --save pull-splitter
yarn add pull-splitter
Usage
splitter(config)
Returns a sink and sources (channels
and rest
), based on the config provided
var [split, channels, rest] = splitter({
high: item => item > 10,
low: item => item > 5,
// ...
})
Each field in config turns into a source stream on channels
based on the filter
pull(
channels.high,
drain(console.log)
)
pull(
channels.low,
drain(console.log)
)
Then to stream data in, you use split.sink
:
pull(
values([ 3, 6, 9, 12, 15 ]),
split
)
Pull unmatching items through rest
:
pull(rest, drain(console.log))
Also see
pull-merge
to merge the streamspull-sorted-merge
to merge the streams with sortingpull-pair
for a basic way to link streamspull-tee
for a different mechanism of splitting a stream
Maintained by Jamen Marz (See on Twitter and GitHub for questions & updates)