56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
| /*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;
 |