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.
		
		
		
		
		
			
		
			
				
					
					
						
							73 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							73 lines
						
					
					
						
							1.8 KiB
						
					
					
				const Stream = require('readable-stream');
 | 
						|
 | 
						|
// =============================================================================
 | 
						|
// StreamBase64 - A utility to convert to/from base64 stream
 | 
						|
// Note: does not buffer data, must be piped
 | 
						|
class StreamBase64 extends Stream.Duplex {
 | 
						|
  constructor() {
 | 
						|
    super();
 | 
						|
 | 
						|
    // consuming pipe streams go here
 | 
						|
    this.pipes = [];
 | 
						|
  }
 | 
						|
 | 
						|
  // writable
 | 
						|
  // event drain - if write returns false (which it won't), indicates when safe to write again.
 | 
						|
  // finish - end() has been called
 | 
						|
  // pipe(src) - pipe() has been called on readable
 | 
						|
  // unpipe(src) - unpipe() has been called on readable
 | 
						|
  // error - duh
 | 
						|
 | 
						|
  write(/* data, encoding */) {
 | 
						|
    return true;
 | 
						|
  }
 | 
						|
 | 
						|
  cork() {}
 | 
						|
 | 
						|
  uncork() {}
 | 
						|
 | 
						|
  end(/* chunk, encoding, callback */) {}
 | 
						|
 | 
						|
  // readable
 | 
						|
  // event readable - some data is now available
 | 
						|
  // event data - switch to flowing mode - feeds chunks to handler
 | 
						|
  // event end - no more data
 | 
						|
  // event close - optional, indicates upstream close
 | 
						|
  // event error - duh
 | 
						|
  read(/* size */) {}
 | 
						|
 | 
						|
  setEncoding(encoding) {
 | 
						|
    // causes stream.read or stream.on('data) to return strings of encoding instead of Buffer objects
 | 
						|
    this.encoding = encoding;
 | 
						|
  }
 | 
						|
 | 
						|
  pause() {}
 | 
						|
 | 
						|
  resume() {}
 | 
						|
 | 
						|
  isPaused() {}
 | 
						|
 | 
						|
  pipe(destination) {
 | 
						|
    // add destination to pipe list & write current buffer
 | 
						|
    this.pipes.push(destination);
 | 
						|
  }
 | 
						|
 | 
						|
  unpipe(destination) {
 | 
						|
    // remove destination from pipe list
 | 
						|
    this.pipes = this.pipes.filter(pipe => pipe !== destination);
 | 
						|
  }
 | 
						|
 | 
						|
  unshift(/* chunk */) {
 | 
						|
    // some numpty has read some data that's not for them and they want to put it back!
 | 
						|
    // Might implement this some day
 | 
						|
    throw new Error('Not Implemented');
 | 
						|
  }
 | 
						|
 | 
						|
  wrap(/* stream */) {
 | 
						|
    // not implemented
 | 
						|
    throw new Error('Not Implemented');
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
module.exports = StreamBase64;
 |