UNPKG

brush_cli

Version:

A tool for creating and developing cmos PC Framework project.

77 lines (65 loc) 2.02 kB
var Readable = require('readable-stream').Readable; // wrap an old-style stream as the async data source. // This is *not* part of the readable stream interface. // It is an ugly unfortunate mess of history. module.exports = wrap; module.exports.obj = function (stream, opts) { if (!opts) opts = {}; opts.objectMode = true; return wrap(stream, opts); }; function wrap (stream, opts) { var self = new Readable(opts) var state = self._readableState; var paused = false; stream.on('end', function() { if (state.decoder && !state.ended) { var chunk = state.decoder.end(); if (chunk && chunk.length) self.push(chunk); } self.push(null); }); stream.on('data', function(chunk) { if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode //if (state.objectMode && util.isNullOrUndefined(chunk)) if (state.objectMode && (chunk === null || chunk === undefined)) return else if (!state.objectMode && (!chunk || !chunk.length)) return; var ret = self.push(chunk); if (!ret) { paused = true; stream.pause(); } }); // proxy all the other methods. // important when wrapping filters and duplexes. for (var i in stream) { if (typeof stream[i] === 'function' && typeof self[i] === 'undefined') { self[i] = function(method) { return function() { return stream[method].apply(stream, arguments); }}(i); } } // proxy certain important events. var events = ['error', 'close', 'destroy', 'pause', 'resume']; for (var i = 0; i < events.length; i++) (function (ev) { stream.on(ev, function () { var args = [ ev ].concat([].slice.call(arguments)); self.emit.apply(self, args); }) })(events[i]); // when we try to consume some more bytes, simply unpause the // underlying stream. self._read = function(n) { if (paused) { paused = false; stream.resume(); } }; return self; };