pull-splitter

1.0.0 • Public • Published

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


Maintained by Jamen Marz (See on Twitter and GitHub for questions & updates)

Package Sidebar

Install

npm i pull-splitter

Weekly Downloads

3

Version

1.0.0

License

none

Last publish

Collaborators

  • npm