stream-limit-throughput
Version:
Advanced throughput throttling for node streams
53 lines (34 loc) • 1.63 kB
JavaScript
;
exports.__esModule = true;
exports.MAX_ALLOWED_ITEMS = exports.DEFAULT_MAX_ITEMS_IN_FLIGHT = undefined;
exports['default'] = streamLimitThroughput;
var _events = require('events');
var _events2 = _interopRequireDefault(_events);
var _isStream = require('is-stream');
var _isStream2 = _interopRequireDefault(_isStream);
var _runGarbageCollection = require('./run-garbage-collection');
var _runGarbageCollection2 = _interopRequireDefault(_runGarbageCollection);
var _createFill = require('./create-fill');
var _createFill2 = _interopRequireDefault(_createFill);
var _createDrain = require('./create-drain');
var _createDrain2 = _interopRequireDefault(_createDrain);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
const DEFAULT_MAX_ITEMS_IN_FLIGHT = exports.DEFAULT_MAX_ITEMS_IN_FLIGHT = 50;
const MAX_ALLOWED_ITEMS = exports.MAX_ALLOWED_ITEMS = 4096;
function streamLimitThroughput({ input, max, objectMode } = {}) {
// set input stream property
if (!(0, _isStream2['default'])(input)) throw new Error('inputStream is required');
// context as EventEmitter
const context = new _events2['default']();
context.input = input;
context.objectMode = objectMode;
context.items = 0;
context.max = ~~max; // eslint-disable-line no-bitwise
if (context.max < 1 || context.max > MAX_ALLOWED_ITEMS) {
context.max = DEFAULT_MAX_ITEMS_IN_FLIGHT;
}
context.fill = (0, _createFill2['default'])(context);
context.drain = (0, _createDrain2['default'])(context);
context.on('filling', _runGarbageCollection2['default']);
return context;
}