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