simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

buffer-stream.js (894B)


      1 'use strict';
      2 const {PassThrough: PassThroughStream} = require('stream');
      3 
      4 module.exports = options => {
      5 	options = {...options};
      6 
      7 	const {array} = options;
      8 	let {encoding} = options;
      9 	const isBuffer = encoding === 'buffer';
     10 	let objectMode = false;
     11 
     12 	if (array) {
     13 		objectMode = !(encoding || isBuffer);
     14 	} else {
     15 		encoding = encoding || 'utf8';
     16 	}
     17 
     18 	if (isBuffer) {
     19 		encoding = null;
     20 	}
     21 
     22 	const stream = new PassThroughStream({objectMode});
     23 
     24 	if (encoding) {
     25 		stream.setEncoding(encoding);
     26 	}
     27 
     28 	let length = 0;
     29 	const chunks = [];
     30 
     31 	stream.on('data', chunk => {
     32 		chunks.push(chunk);
     33 
     34 		if (objectMode) {
     35 			length = chunks.length;
     36 		} else {
     37 			length += chunk.length;
     38 		}
     39 	});
     40 
     41 	stream.getBufferedValue = () => {
     42 		if (array) {
     43 			return chunks;
     44 		}
     45 
     46 		return isBuffer ? Buffer.concat(chunks, length) : chunks.join('');
     47 	};
     48 
     49 	stream.getBufferedLength = () => length;
     50 
     51 	return stream;
     52 };