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.
		
		
		
		
		
			
		
			
				
					56 lines
				
				1.2 KiB
			
		
		
			
		
	
	
					56 lines
				
				1.2 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								/*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;
							 |