UNPKG

file-box

Version:

Pack a File into Box for easy move/transfer between servers no matter of where it is.(local path, remote url, or cloud storage)

39 lines 1.16 kB
/** * ChunkerTransformStream, a transform stream to take arbitrary chunk sizes and make them consistent * https://codereview.stackexchange.com/q/57492/185709 */ import stream from 'stream'; /** * TCP streaming workload tuning * https://www.ibm.com/docs/en/aix/7.2?topic=tuning-tcp-streaming-workload */ const DEFAULT_CHUNK_BYTE = 256 * 1024; // 256 KB /** * @param chunkByte The size of the chunks to be created * @returns */ function sizedChunkTransformer(chunkByte = DEFAULT_CHUNK_BYTE) { let buffer = Buffer.from([]); const transform = function (chunk, _, done) { buffer = Buffer.concat([buffer, chunk]); while (buffer.length >= chunkByte) { this.push(buffer.slice(0, chunkByte)); buffer = buffer.slice(chunkByte); } done(); }; const flush = function (done) { if (buffer.length) { this.push(buffer); } done(); }; const chunker = new stream.Transform({ flush, objectMode: true, transform, }); return chunker; } export { sizedChunkTransformer, }; //# sourceMappingURL=sized-chunk-transformer.js.map