UNPKG

@naturalcycles/nodejs-lib

Version:
49 lines (48 loc) 1.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.transformLimit = exports.TransformLimit = void 0; const index_1 = require("../../index"); const stream_util_1 = require("../stream.util"); /** * Class only exists to be able to do `instanceof TransformLimit` * and to set sourceReadable+streamDone to it in `_pipeline`. */ class TransformLimit extends index_1.AbortableTransform { } exports.TransformLimit = TransformLimit; /** * 0 or falsy value means "no limit" */ function transformLimit(opt = {}) { const { logger = console, limit, debug } = opt; if (!limit) { // No limit - returning pass-through transform return (0, index_1.transformNoOp)(); } let i = 0; // so we start first chunk with 1 let ended = false; return new TransformLimit({ objectMode: true, ...opt, transform(chunk, _, cb) { i++; if (i === limit) { ended = true; logger.log(`transformLimit of ${limit} reached`); this.push(chunk); (0, stream_util_1.pipelineClose)('transformLimit', this, opt.sourceReadable || this.sourceReadable, opt.streamDone || this.streamDone, logger); cb(); // after pause } else if (!ended) { cb(null, chunk); } else { if (debug) logger.log(`transformLimit.transform after limit`, i); // If we ever HANG (don't call cb) - Node will do process.exit(0) to us cb(); // ended, don't emit anything } }, }); } exports.transformLimit = transformLimit;