It's just a wrapper to build Stream transformers with functional style. It's like the koa / expressjs middlewares !
const ezs = require('ezs')
ezs.use(require('ezs-basics'));
process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin
.pipe(ezs('split', { delimiter: "\n" }))
.pipe(ezs('counter'))
.pipe(ezs((input, output) => output.send(input.toString()));
.pipe(process.stdout);With npm:
$ npm install ezs
Each statement function have its own scope and can access to few methods :
- this.isLast()
- this.isFirst()
- this.getIndex()
- this.getParam(name, defaultValue)
Output object is an object with few methods :
- output.write(something)
- output.end()
- output.send(something)
- output.close()
- output.stop(withAnError)
With a sync statement, you can break the pipe with throw but with an async statement, you should use stop(with An Error) instead of throw.
The command line interface is used to create run pipelines described in .ini files.
It is also possible to launch a web server allowing remote execution of .ini files
$ ezs -h ven. 15 mars 2019 16:15:20 CET
Usage: ezs [options] [<file>|<directory>] [<file2> <file3> ...]
Options:
--help Affiche de l'aide [booléen]
--version Affiche le numéro de version [booléen]
--verbose, -v Enable debug mode with DEBUG=ezs [booléen] [défaut: false]
--daemon, -d Launch daemon on a directory containing commands script
[chaine de caractère]
--server, -s Server to dispach commands [chaine de caractère]
--env, -e Execute commands with environement variables as input
[booléen] [défaut: false]
for more information, find our manual at https://github.com/touv/node-ezs
Converts a transform stream with existing function or adhoc function.
const ezs = require('ezs'),
let transformer = ezs(function(input, output) {
output.send(input.toString())
})Adding bundle of statements. see the avaible modules here : https://www.npmjs.com/browse/keyword/ezs
import ezs from 'ezs';
import basics from 'ezs-basics';
import files from 'ezs-files';
ezs.use(basics);
ezs.use(files);catch Error in NodeJS pipeline
// Example #1
process.stdin
.pipe(ezs('truncate', { length: 100 }))
.pipe(ezs((d, f) => f.send(new Error('Badaboum')))))
.pipe(ezs.catch(e => e)) // catch errors in chunks and throw a error, which breaking the pipeline
.on('error', console.error)
// Example #2
process.stdin
.pipe(ezs('truncate', { length: 100 }))
.pipe(ezs((d, f) => f.send(new Error('Badaboum')))))
.pipe(ezs.catch(e => console.error('Warning:', e))) // catch errors in chunks to display them without breaking the pipelineget chunk of in NodeJS pipeline and send Buffer of the chunk
process.stdin
.pipe(ezs('replace', { path: 'id', value: 'xxxxx' }))
.pipe(ezs('dump'))
.pipe(ezs.toBuffer())
.pipe(process.stdout);- assign
- concat
- debug
- delegate
- dispatch
- dump
- env
- extract
- group
- keep
- pack
- replace
- shift
- shuffle
- tracer
- transit
- truncate
- ungroup
- unpack
- validate
Take Object and add new field
Returns Object
Take all String, concat them and thow just one
datafeedbeginWithString? Add value at the beginjoinWithString? use value to join 2 chunkendWithString? Add value at the end
Returns String
Take Object , print it and throw the same object
datafeedlevelString console level : log or error (optional, defaultlog)textString text before the dump (optional, defaultvalueOf)pathString? path of field to print
Returns Object
Takes an Object delegate processing to an external pipeline
datafeedfileString? the external pipeline is descrbied in a filescriptString? the external pipeline is descrbied in a sting of characterscommandsString? the external pipeline is descrbied in object
Returns Object
Takes an Object dispatch processing to an external pipeline in one or more servers
datafeedserverString? servers to dispatch datafileString? the external pipeline is descrbied in a filescriptString? the external pipeline is descrbied in a sting of characterscommandsString? the external pipeline is descrbied in object
Returns Object
Take all Object and genereta a json array
datafeedindentString indent JSON (optional, defaultfalse)
Returns String
Take Object and send the same object
but in the meantime, it is possible to add
new environment field
Returns Object
Take Object and throw each value of fields
datafeedpathString? path of field to extract
Returns Object
Take all chunk, and throw array of chunks
datafeedsizeNumber? Size of each partition
Returns String
Take Object and throw the same object but keep only
spefici fields
datafeedpathString? path of field to keep
Returns Object
Take all Object, throw encoded String
datafeed
Returns String
Take Object and create a new object with some fields
Returns Object
Take the first Object and close the feed
datafeed
Returns Object
Take Object, shuffle data of the whole object or only some fields specified by path
datafeedpathString? path of field to shuffle
Returns Object
Take Object, print a character and throw the same object
datafeedprintString character to print at each object (optional, default.)lastString character to print at last call (optional, default.)firstString character to print at first call (optional, default.)
Returns Object
Take Object and throw the same object
datafeed
Returns Object
Takes all the chunks, and closes the feed when the total length is equal to the parameter
datafeedlengthNumber? Length of the feed
Returns Mixed
Take all chunk, and throw each item of chunks
datafeed
Returns String
Take String and throw Object builded by JSON.parse on each line
datafeed
Returns String
- See: laravel validtor rules
Take Object and throw the same object if all rules passes
Returns Object
