ducted
v0.1.0
Published
general-purpose pipeline manager
Downloads
3
Readme
ducted
The purpose of ducted
is to act as a general-purpose pipeline manager. A pipeline is built from
steps, each of which processes a context (synchronously or asynchronously). A step is typically
either a function or itself a pipeline.
It essentially tries to hit a sweet spot not far from streams and promises, but without doing your head in and with a number of additional facilities that are useful when implementing a pipeline.
An example, even a stupid one like the following, should give you an idea.
import { pipe } from 'ducted';
import fs from 'fs';
pipe(
ctx => fs.readFile(ctx.data.source, 'utf8', (err, content) => {
if (err) ctx.error(err);
ctx.content = content;
ctx.done();
}),
ctx => {
if (/unicorn/i.test(ctx.data.content)) ctx.warn('Shh, do not mention the unicorns.');
ctx.done();
},
ctx => { ctx.data.content = ctx.data.content.toUpperCase(); ctx.done(); },
ctx => fs.writeFile(ctx.data.output, ctx.data.content, 'utf8', (err) => {
if (err) ctx.error(err);
ctx.done();
})
)
.on('duct:end', (data) => {
console.log('Uppercased some data');
})
.run({ source: 'in.txt', output: 'out.txt' });
Obviously, the above example is pretty contrived. It would be a lot easier to just code it out
without ducted
. But ducted
starts to shine in more elaborate pipelines, with more complex
flows, and when code is reused and pipelines get composed.