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)

45 lines 1.47 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.sizedChunkTransformer = void 0; /** * ChunkerTransformStream, a transform stream to take arbitrary chunk sizes and make them consistent * https://codereview.stackexchange.com/q/57492/185709 */ const stream_1 = __importDefault(require("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_1.default.Transform({ flush, objectMode: true, transform, }); return chunker; } exports.sizedChunkTransformer = sizedChunkTransformer; //# sourceMappingURL=sized-chunk-transformer.js.map