mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-31 10:27:01 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| //
 | |
| // Source: https://github.com/jpommerening/node-lazystream
 | |
| //
 | |
| 
 | |
| var util = require('util');
 | |
| var PassThrough = require('./readable-stream/passthrough')
 | |
| 
 | |
| module.exports = {
 | |
|   Readable: Readable,
 | |
|   Writable: Writable
 | |
| };
 | |
| 
 | |
| util.inherits(Readable, PassThrough);
 | |
| util.inherits(Writable, PassThrough);
 | |
| 
 | |
| // Patch the given method of instance so that the callback
 | |
| // is executed once, before the actual method is called the
 | |
| // first time.
 | |
| function beforeFirstCall(instance, method, callback) {
 | |
|   instance[method] = function () {
 | |
|     delete instance[method];
 | |
|     callback.apply(this, arguments);
 | |
|     return this[method].apply(this, arguments);
 | |
|   };
 | |
| }
 | |
| 
 | |
| function Readable(fn, options) {
 | |
|   if (!(this instanceof Readable))
 | |
|     return new Readable(fn, options);
 | |
| 
 | |
|   PassThrough.call(this, options);
 | |
| 
 | |
|   beforeFirstCall(this, '_read', function () {
 | |
|     var source = fn.call(this, options);
 | |
|     var emit = this.emit.bind(this, 'error');
 | |
|     source.on('error', emit);
 | |
|     source.pipe(this);
 | |
|   });
 | |
| 
 | |
|   this.emit('readable');
 | |
| }
 | |
| 
 | |
| function Writable(fn, options) {
 | |
|   if (!(this instanceof Writable))
 | |
|     return new Writable(fn, options);
 | |
| 
 | |
|   PassThrough.call(this, options);
 | |
| 
 | |
|   beforeFirstCall(this, '_write', function () {
 | |
|     var destination = fn.call(this, options);
 | |
|     var emit = this.emit.bind(this, 'error');
 | |
|     destination.on('error', emit);
 | |
|     this.pipe(destination);
 | |
|   });
 | |
| 
 | |
|   this.emit('writable');
 | |
| }
 |