Debug Stream
Writable stream for debugging stream pipelines.
Usage
var debugSinkStream = require( '@stdlib/streams/node/debug-sink' );
debugSinkStream( [options,] [clbk] )
Creates a writable stream for debugging stream pipelines.
var ENV = require( '@stdlib/process/env' );
// Set the `DEBUG` environment variable...
ENV.DEBUG = '*';
var stream = debugSinkStream({
'name': 'my-stream'
});
stream.write( 'a' );
stream.write( 'b' );
stream.write( 'c' );
stream.end();
The function accepts the following options
:
- name: debug namespace.
- objectMode: specifies whether a stream should operate in objectMode. Default:
false
. - highWaterMark: specifies the
Buffer
level at whichwrite()
calls start returningfalse
. - decodeStrings: specifies whether to encode strings as
Buffer
objects before writing data to a returned stream. Default:true
. - defaultEncoding: default encoding when not explicitly specified when writing data. Default:
'utf8'
.
To set stream options
,
var opts = {
'name': 'my-app',
'objectMode': true,
'highWaterMark': 64,
'decodeStrings': false,
'defaultEncoding': 'utf8'
};
var stream = debugSinkStream( opts );
By default, each chunk
is logged as a JSON stringified string
, along with the chunk
index. For more control over logging behavior, provide a callback
.
function logger( debug, chunk, idx ) {
debug( 'Received a new chunk...' );
debug( 'Beep: %s', chunk.beep );
debug( 'Boop: %s', chunk.boop );
}
var opts = {
'name': 'my-pipeline'
};
var stream = debugSinkStream( opts, logger );
debugSinkStream.factory( [options] )
Returns a function
for creating streams which are identically configured according to provided options
.
var opts = {
'objectMode': true,
'highWaterMark': 64
};
var factory = debugSinkStream.factory( opts );
This method accepts the same options
as debugSinkStream()
, except for name
, which must be provided explicitly.
factory( name[, clbk] )
Creates a debug stream.
var factory = debugSinkStream.factory();
var streams = [];
var i;
// Assign each stream to a separate debug namespace...
for ( i = 0; i < 10; i++ ) {
streams.push( factory( 'stream '+i ) );
}
debugSinkStream.objectMode( [options,] [clbk] )
This method is a convenience function to create streams which always operate in objectMode.
var stream = debugSinkStream.objectMode({
'name': 'beep-boop'
});
stream.write({
'value': 'a'
});
stream.write({
'value': 'b'
});
stream.write({
'value': 'c'
});
stream.end();
This method accepts the same options
as debugSinkStream()
; however, the method will always override the objectMode option in options
.
Notes
Examples
var parseJSON = require( '@stdlib/utils/parse-json' );
var transformFactory = require( '@stdlib/streams/node/transform' ).factory;
var debug = require( '@stdlib/streams/node/debug-sink' ).objectMode;
function parse( chunk, enc, clbk ) {
clbk( null, parseJSON( chunk ) );
}
function pluck( chunk, enc, clbk ) {
clbk( null, chunk.value );
}
function square( chunk, enc, clbk ) {
var v = +chunk;
clbk( null, v*v );
}
function toStr( chunk, enc, clbk ) {
clbk( null, chunk.toString() );
}
function join( chunk, enc, clbk ) {
clbk( null, chunk+'\n' );
}
// Create a factory for generating streams running in `objectMode`:
var tStream = transformFactory({
'objectMode': true
});
// Create streams for each transform:
var s1 = tStream( parse );
var s2 = tStream( pluck );
var s3 = tStream( square );
var s4 = tStream( toStr );
var s5 = tStream( join );
// Create a writable stream for debugging the result of the transformations:
var ds = debug({
'name': 'debugger'
});
// Create the pipeline:
s1.pipe( s2 )
.pipe( s3 )
.pipe( s4 )
.pipe( s5 )
.pipe( ds );
// Write data to the pipeline...
var v;
var i;
for ( i = 0; i < 100; i++ ) {
v = '{"value":'+i+'}';
s1.write( v, 'utf8' );
}
s1.end();