62 lines
1.5 KiB
JavaScript
62 lines
1.5 KiB
JavaScript
var Stream = require("stream").Stream;
|
|
var util = require('util');
|
|
|
|
// For Node 0.8 users
|
|
if (!Stream.Writable) {
|
|
Stream = require('readable-stream')
|
|
}
|
|
|
|
// Internal proto for buffering memory stream
|
|
var MemoryStream = function(options) {
|
|
if (!(this instanceof MemoryStream)) {
|
|
return new MemoryStream();
|
|
}
|
|
|
|
this.options = options = options || {};
|
|
if (!this.options.encoding && !this.options.objectMode) {
|
|
this.options.encoding = 'Buffer';
|
|
}
|
|
|
|
Stream.Writable.call(this, options);
|
|
this.buffer = [];
|
|
|
|
};
|
|
|
|
util.inherits(MemoryStream, Stream.Writable);
|
|
|
|
MemoryStream.prototype._write = function(chunk, encoding, cb) {
|
|
if (!this._writableState.objectMode && this.options.encoding === 'Buffer' && encoding === 'utf8') {
|
|
this.buffer.push(new Buffer(chunk));
|
|
} else if (this._writableState.objectMode) {
|
|
this.buffer.push(Buffer.isBuffer(chunk) ? JSON.parse(chunk) : chunk);
|
|
} else {
|
|
this.buffer.push(chunk);
|
|
}
|
|
cb();
|
|
};
|
|
|
|
MemoryStream.prototype.get = function() {
|
|
if (this._writableState.objectMode) {
|
|
return this.buffer;
|
|
} else {
|
|
return this.toBuffer();
|
|
}
|
|
};
|
|
|
|
MemoryStream.prototype.toString = function() {
|
|
if (this._writableState.objectMode) {
|
|
JSON.stringify(this.buffer);
|
|
} else {
|
|
return this.buffer.join('');
|
|
}
|
|
};
|
|
|
|
MemoryStream.prototype.toBuffer = function() {
|
|
if (this._writableState.objectMode) {
|
|
return new Buffer(this.toString());
|
|
} else {
|
|
return Buffer.concat(this.buffer);
|
|
}
|
|
};
|
|
|
|
module.exports = MemoryStream; |