Split Stream

Transform stream which splits streamed data.

Usage

var splitStream = require( '@stdlib/streams/utils/split' );

splitStream( [options] )

Creates a transform stream which splits streamed data.

var stream = splitStream();

stream.pipe( process.stdout );
stream.write( '1\n2\n3' );
// => 1 => 2 => 3

stream.end();

The function accepts the following options:

  • sep: separator used to split streamed data. Similar to String#split, a separator may be either a regular expression or a string. Default: /\r?\n/.
  • objectMode: specifies whether a stream should operate in objectMode. Default: false.
  • encoding: specifies how Buffer objects should be decoded to strings. Default: null.
  • highWaterMark: specifies the Buffer level at which write() calls start returning false.
  • allowHalfOpen: specifies whether a stream should remain open even if one side ends. Default: false.
  • writableObjectMode: specifies whether the writable side should be in objectMode. Default: false.

To set stream options,

var opts = {
    'sep': ',',
    'objectMode': true,
    'encoding': 'utf8',
    'highWaterMark': 64,
    'allowHalfOpen': true,
    'writableObjectMode': false // overridden by `objectMode` option when `objectMode=true`
};

var stream = splitStream( opts );

splitStream.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 = {
    'sep': '\t',
    'objectMode': true,
    'encoding': 'utf8',
    'highWaterMark': 64
};

var factory = splitStream.factory( opts );

// Create 10 identically configured streams...
var streams = [];
var i;
for ( i = 0; i < 10; i++ ) {
    streams.push( factory() );
}

splitStream.objectMode( [options] )

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 stream = splitStream.objectMode({
    'sep': ','
});

stream.pipe( process.stdout );
stream.write( 'a,b,c' );
// => a => b => c

stream.end();

Notes

  • Similar to String#split, a separator which is a regular expression containing a matching group will result in the separator being retained in the output stream.

    var stream = splitStream({
        'sep': /(,)/
    });
    
    stream.pipe( process.stdout );
    stream.write( '1,2,3' );
    // => 1 => , => 2 => , => 3
    
    stream.end();
    

Examples

var transformStream = require( '@stdlib/streams/utils/transform' );
var splitStream = require( '@stdlib/streams/utils/split' );

function append( chunk, enc, clbk ) {
    clbk( null, chunk.toString()+'\n' );
}

var newline;
var stream;
var i;

// Create a split stream to split tab delimited data:
stream = splitStream({
    'sep': /\t/
});

// Create a transform stream to make newline delimited data...
newline = transformStream({
    'transform': append,
    'objectMode': true
});

// Create a stream pipeline:
stream
    .pipe( newline )
    .pipe( process.stdout );

// Write data to the pipeline...
for ( i = 0; i < 10; i++ ) {
    stream.write( i+'\t', 'utf8' );
}
stream.end();