You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1010 B
51 lines
1010 B
'use strict' |
|
|
|
var Writable = require('readable-stream').Writable |
|
var inherits = require('inherits') |
|
|
|
function CallbackStream (options, callback) { |
|
if (!(this instanceof CallbackStream)) { |
|
return new CallbackStream(options, callback) |
|
} |
|
|
|
if (typeof options === 'function') { |
|
callback = options |
|
options = {} |
|
} |
|
|
|
Writable.call(this, options) |
|
|
|
this.results = [] |
|
this.callback = callback |
|
|
|
this.on('finish', deliversCallback) |
|
this.once('pipe', handlePipe) |
|
} |
|
|
|
function deliversCallback () { |
|
this.callback(null, this.results) |
|
} |
|
|
|
function handlePipe (source) { |
|
source.on('error', this.callback) |
|
} |
|
|
|
inherits(CallbackStream, Writable) |
|
|
|
CallbackStream.prototype._write = function (data, encoding, done) { |
|
this.results.push(data) |
|
done() |
|
} |
|
|
|
CallbackStream.obj = function (options, callback) { |
|
if (typeof options === 'function') { |
|
callback = options |
|
options = {} |
|
} |
|
|
|
options.objectMode = true |
|
|
|
return new CallbackStream(options, callback) |
|
} |
|
|
|
module.exports = CallbackStream
|
|
|