Map
Creates a transform stream which maps each streamed value to another value.
Installation
$ npm install flow-map
For use in the browser, use browserify.
Usage
var stream = ;
stream( [options,] fcn )
Creates a transform stream which maps each streamed value to another value using a provided function
.
var mStream = ;// Note: the index is zero-based...{value = ;return value * idx;}// Pipe the output from the map stream to stdout:mStream;// Write data to the stream:mStream;// => 0mStream;// => 4mStream;// => 20// End the stream:mStream;
The function accepts the following options
:
- highWaterMark: specifies the
Buffer
level at whichwrite()
calls start returningfalse
. Default:16
(i.e., 16 queued items). - allowHalfOpen: specifies whether a stream should remain open even if one side ends. Default:
false
.
To set stream options
,
var opts ='highWaterMark': 64'allowHalfOpen': true;var mStream = ;
Note: the returned stream always operates in objectMode
.
stream.factory( options )
Creates a reusable stream factory. The factory method ensures streams are configured identically by using the same set of provided options
.
var opts ='highWaterMark': 64;var factory = stream;// Create 10 identically configured streams...var streams = ;for var i = 0; i < 10; i++streams;
stream.objectMode( [options,] fcn )
This method is a convenience function to create streams which always operate in objectMode
. The method will always override the objectMode
option in options
.
var data ='value': 5;{return datavalue * 10;}var mStream = stream;mStream;mStream;// => 50mStream;
Note: this method behaves the same as the main method and is provided to maintain API consistency with other flow
modules.
Examples
var createStream = ;{return value * idx;}{return value + '\n';}var mStream =tsStream = ;mStream;for var i = 0; i < 1000; i++mStream;mStream;
To run the example code from the top-level application directory,
$ DEBUG=* node ./examples/index.js
CLI
Installation
To use the module as a general utility, install the module globally
$ npm install -g flow-map
Usage
Usage: flow-map [options] moduleOptions:-h, --help Print this message.-V, --version Print the package version.--split sep Separator used to split incoming data. Default: '/\\r?\\n/'.--join sep Separator used to join outgoing data. Default: '\n'.-hwm, --highwatermark hwm Specify how much data can be buffered into memorybefore applying back pressure. Default: 16.-aho, --allowhalfopen Keep the stream open if either the readable or writableside ends. Default: false.
The flow-map
command is available as a standard stream.
$ <stdout> | flow-map <module> | <stdin>
Notes
-
If the split separator is a regular expression, ensure that the
split
option is properly escaped.# Not escaped...$ <stdout> | flow-map <module> --split '/\r?\n/'# Escaped...$ <stdout> | flow-map <module> --split '/\\r?\\n/'
Examples
$ echo -n $'1\n2\n3\n4\n' | flow-map ./examples/script.js# => 0# => 2# => 6# => 12
For local installations, modify the above command to point to the local installation directory; e.g.,
$ echo -n $'1\n2\n3\n4\n' | ./node_modules/.bin/flow-map ./examples/script.js
Or, if you have cloned this repository and run npm install
, modify the command to point to the executable; e.g.,
$ echo -n $'1\n2\n3\n4\n' | node ./bin/cli ./examples/script.js
Tests
Unit
Unit tests use the Mocha test framework with Chai assertions. To run the tests, execute the following command in the top-level application directory:
$ make test
All new feature development should have corresponding unit tests to validate correct functionality.
Test Coverage
This repository uses Istanbul as its code coverage tool. To generate a test coverage report, execute the following command in the top-level application directory:
$ make test-cov
Istanbul creates a ./reports/coverage
directory. To access an HTML version of the report,
$ make view-cov
License
Copyright
Copyright © 2014-2015. The Flow.io Authors.