| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- 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;
|