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 pipeline
get 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
data
feed
beginWith
String? Add value at the beginjoinWith
String? use value to join 2 chunkendWith
String? Add value at the end
Returns String
Take Object
, print it and throw the same object
data
feed
level
String console level : log or error (optional, defaultlog
)text
String text before the dump (optional, defaultvalueOf
)path
String? path of field to print
Returns Object
Takes an Object
delegate processing to an external pipeline
data
feed
file
String? the external pipeline is descrbied in a filescript
String? the external pipeline is descrbied in a sting of characterscommands
String? the external pipeline is descrbied in object
Returns Object
Takes an Object
dispatch processing to an external pipeline in one or more servers
data
feed
server
String? servers to dispatch datafile
String? the external pipeline is descrbied in a filescript
String? the external pipeline is descrbied in a sting of characterscommands
String? the external pipeline is descrbied in object
Returns Object
Take all Object
and genereta a json array
data
feed
indent
String 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
data
feed
path
String? path of field to extract
Returns Object
Take all chunk
, and throw array of chunks
data
feed
size
Number? Size of each partition
Returns String
Take Object
and throw the same object but keep only
spefici fields
data
feed
path
String? path of field to keep
Returns Object
Take all Object
, throw encoded String
data
feed
Returns String
Take Object
and create a new object with some fields
Returns Object
Take the first Object
and close the feed
data
feed
Returns Object
Take Object
, shuffle data of the whole object or only some fields specified by path
data
feed
path
String? path of field to shuffle
Returns Object
Take Object
, print a character and throw the same object
data
feed
print
String character to print at each object (optional, default.
)last
String character to print at last call (optional, default.
)first
String character to print at first call (optional, default.
)
Returns Object
Take Object
and throw the same object
data
feed
Returns Object
Takes all the chunks, and closes the feed when the total length is equal to the parameter
data
feed
length
Number? Length of the feed
Returns Mixed
Take all chunk
, and throw each item of chunks
data
feed
Returns String
Take String
and throw Object
builded by JSON.parse on each line
data
feed
Returns String
- See: laravel validtor rules
Take Object
and throw the same object if all rules passes
Returns Object