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.
55 lines
1.2 KiB
55 lines
1.2 KiB
/*global module, process*/ |
|
var Buffer = require('safe-buffer').Buffer; |
|
var Stream = require('stream'); |
|
var util = require('util'); |
|
|
|
function DataStream(data) { |
|
this.buffer = null; |
|
this.writable = true; |
|
this.readable = true; |
|
|
|
// No input |
|
if (!data) { |
|
this.buffer = Buffer.alloc(0); |
|
return this; |
|
} |
|
|
|
// Stream |
|
if (typeof data.pipe === 'function') { |
|
this.buffer = Buffer.alloc(0); |
|
data.pipe(this); |
|
return this; |
|
} |
|
|
|
// Buffer or String |
|
// or Object (assumedly a passworded key) |
|
if (data.length || typeof data === 'object') { |
|
this.buffer = data; |
|
this.writable = false; |
|
process.nextTick(function () { |
|
this.emit('end', data); |
|
this.readable = false; |
|
this.emit('close'); |
|
}.bind(this)); |
|
return this; |
|
} |
|
|
|
throw new TypeError('Unexpected data type ('+ typeof data + ')'); |
|
} |
|
util.inherits(DataStream, Stream); |
|
|
|
DataStream.prototype.write = function write(data) { |
|
this.buffer = Buffer.concat([this.buffer, Buffer.from(data)]); |
|
this.emit('data', data); |
|
}; |
|
|
|
DataStream.prototype.end = function end(data) { |
|
if (data) |
|
this.write(data); |
|
this.emit('end', data); |
|
this.emit('close'); |
|
this.writable = false; |
|
this.readable = false; |
|
}; |
|
|
|
module.exports = DataStream;
|
|
|