Filter object streams
The cop Node.js package offers a
Transform stream to conventiently cop data from object streams.
require('cop') to get a
function that returns a
Transform stream, configured in object mode, to which you can write arbitrary data. This constructor function takes either a
String or a
function as its sole argument.
String to select a property, and the cop stream will emit the values of matching properties for all objects written to it. If an object doesn't have a property with this name, or the property's value is
null, the stream doesn't end, but just skips the object and moves on the next.
keyThe name of the property of which to emit the value.
var cop = require'cop'var stream = require'stream'var objs =name: 'Moe'name: 'Larry'name: 'Curly'var stooges = objectMode: truestoogespushobjsshift || nullstoogespipecop'name'pipeprocessstdout
To apply custom transformations to each object, you can supply your own synchronous map
function, which is applied with each object and is expected to return an arbitrary object to be emitted by the cop stream. If you want to skip the current object, you can return
undefined—the stream won't stop. For asynchronous work, of course, you should write your own stream.
functionwhich is applied to each object written to the stream.
The following use case, streaming file entries with fstream and emitting just the filenames, filtering out directories; is the origin of this module. The filtering happens internally btw, sorry about that. But you get the point, you can do anything you want in the map
var cop = require'cop'var fstream = require'fstream'return obj ? obj'path' + '\n' : undefinedfstreamReader path: __dirnamepipecopmappipeprocessstdout
With npm do:
$ npm install cop