-
Notifications
You must be signed in to change notification settings - Fork 2
๐ Utility function for plugging callbags together in chain
License
staltz/callbag-pipe
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
ย | ย | |||
ย | ย | |||
ย | ย | |||
ย | ย | |||
ย | ย | |||
ย | ย | |||
ย | ย | |||
ย | ย | |||
Repository files navigation
/** * callbag-pipe * ------------ * * Utility function for plugging callbags together in chain. This utility * actually doesn't rely on Callbag specifics, and is really similar to * Ramda's `pipe` or lodash's `flow`. * * Implementation of `callbag-pipe` using `R.pipe` could look like this: * * const pipe = (source, ...cbs) => R.pipe(...cbs)(source) * * This exists to play nicely with the ecosystem, * and to facilitate the import of the function. * * `npm install callbag-pipe` * * Example: * * Create a source with `pipe`, then pass it to a `forEach`: * * const interval = require('callbag-interval'); * const forEach = require('callbag-for-each'); * const combine = require('callbag-combine'); * const pipe = require('callbag-pipe'); * const take = require('callbag-take'); * const map = require('callbag-map'); * * const source = pipe( * combine(interval(100), interval(350)), * map(([x, y]) => `X${x},Y${y}`), * take(10) * ); * * forEach(x => console.log(x))(source); // X2,Y0 * // X3,Y0 * // X4,Y0 * // X5,Y0 * // X6,Y0 * // X6,Y1 * // X7,Y1 * // X8,Y1 * // X9,Y1 * // X9,Y2 * * * Or use `pipe` to go all the way from source to sink: * * const interval = require('callbag-interval'); * const forEach = require('callbag-for-each'); * const combine = require('callbag-combine'); * const pipe = require('callbag-pipe'); * const take = require('callbag-take'); * const map = require('callbag-map'); * * pipe( * combine(interval(100), interval(350)), * map(([x, y]) => `X${x},Y${y}`), * take(10), * forEach(x => console.log(x)) * ); * // X2,Y0 * // X3,Y0 * // X4,Y0 * // X5,Y0 * // X6,Y0 * // X6,Y1 * // X7,Y1 * // X8,Y1 * // X9,Y1 * // X9,Y2 * * * Nesting * ------- * * To use pipe inside another pipe, you need to give the inner pipe an * argument, e.g. `s => pipe(s, ...`: * * const interval = require('callbag-interval'); * const forEach = require('callbag-for-each'); * const combine = require('callbag-combine'); * const pipe = require('callbag-pipe'); * const take = require('callbag-take'); * const map = require('callbag-map'); * * pipe( * combine(interval(100), interval(350)), * s => pipe(s, * map(([x, y]) => `X${x},Y${y}`), * take(10) * ), * forEach(x => console.log(x)) * ); * * * This means you can use pipe to create a new operator: * * const mapThenTake = (f, amount) => * s => pipe(s, map(f), take(amount)); * * pipe( * combine(interval(100), interval(350)), * mapThenTake(([x, y]) => `X${x},Y${y}`, 10), * forEach(x => console.log(x)) * ); * */ function pipe(...cbs) { let res = cbs[0]; for (let i = 1, n = cbs.length; i < n; i++) res = cbs[i](res); return res; } module.exports = pipe;
About
๐ Utility function for plugging callbags together in chain
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published