UNPKG

streamsplit

Version:

Memory/CPU efficient stream splitter by token

71 lines (57 loc) 7.19 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = function (params) { var mySplitter = new _core2.default((0, _extend2.default)(params, { noEmptyMatches: true })); var curBuffer = new Buffer(0); var curBuffPos = new _long2.default(0); mySplitter.ss.on('info', function (isMatch) { var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Buffer(0); var start = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var end = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; var tmpBuff = new Buffer(end - start); data.copy(tmpBuff, 0, start, end); curBuffer = Buffer.concat([curBuffer, tmpBuff]); if (isMatch) { curBuffer = Buffer.concat([curBuffer, new Buffer(params.token, 'utf8')]); } }); return mySplitter.observe() // .doOnNext(({start,end}) => console.log({ start: start.toNumber(), end: end.toNumber() })) .map(function (_ref) { var start = _ref.start, end = _ref.end; return { start: start.sub(curBuffPos), end: end.sub(curBuffPos) }; }) // .doOnNext(({start,end}) => console.log({ start: start.toNumber(), end: end.toNumber() })) .map(function (_ref2) { var start = _ref2.start, end = _ref2.end; var chunkLength = end.sub(start).toNumber(); curBuffPos = curBuffPos.add(start).add(chunkLength); var chunkBuffer = new Buffer(chunkLength); var newCurBuffer = new Buffer(curBuffer.length - chunkLength - start.toNumber()); curBuffer.copy(chunkBuffer, 0, start.toNumber(), start.add(chunkLength).toNumber()); curBuffer.copy(newCurBuffer, 0, start.add(chunkLength).toNumber()); curBuffer = newCurBuffer; return chunkBuffer; }); }; var _long = require('long'); var _long2 = _interopRequireDefault(_long); var _core = require('../core.class'); var _core2 = _interopRequireDefault(_core); var _extend = require('extend'); var _extend2 = _interopRequireDefault(_extend); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } module.exports = exports['default']; /** * Creates a splitter that emits chunks of data in the form of a Buffer * @param {object} params the constructor params for the Splitter * @returns {Observable.<Buffer>} */ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNwbGl0dGVycy90b2J1ZmZlci5qcyJdLCJuYW1lcyI6WyJwYXJhbXMiLCJteVNwbGl0dGVyIiwibm9FbXB0eU1hdGNoZXMiLCJjdXJCdWZmZXIiLCJCdWZmZXIiLCJjdXJCdWZmUG9zIiwic3MiLCJvbiIsImlzTWF0Y2giLCJkYXRhIiwic3RhcnQiLCJlbmQiLCJ0bXBCdWZmIiwiY29weSIsImNvbmNhdCIsInRva2VuIiwib2JzZXJ2ZSIsIm1hcCIsInN1YiIsImNodW5rTGVuZ3RoIiwidG9OdW1iZXIiLCJhZGQiLCJjaHVua0J1ZmZlciIsIm5ld0N1ckJ1ZmZlciIsImxlbmd0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O2tCQVNlLFVBQVVBLE1BQVYsRUFBa0I7QUFDL0IsTUFBTUMsYUFBYSxtQkFBYSxzQkFBT0QsTUFBUCxFQUFlLEVBQUVFLGdCQUFnQixJQUFsQixFQUFmLENBQWIsQ0FBbkI7QUFDQSxNQUFJQyxZQUFlLElBQUlDLE1BQUosQ0FBVyxDQUFYLENBQW5CO0FBQ0EsTUFBSUMsYUFBZSxtQkFBUyxDQUFULENBQW5CO0FBQ0FKLGFBQVdLLEVBQVgsQ0FBY0MsRUFBZCxDQUFpQixNQUFqQixFQUF5QixVQUFDQyxPQUFELEVBQXVEO0FBQUEsUUFBN0NDLElBQTZDLHVFQUF0QyxJQUFJTCxNQUFKLENBQVcsQ0FBWCxDQUFzQztBQUFBLFFBQXZCTSxLQUF1Qix1RUFBZixDQUFlO0FBQUEsUUFBWkMsR0FBWSx1RUFBTixDQUFNOztBQUM5RSxRQUFNQyxVQUFVLElBQUlSLE1BQUosQ0FBV08sTUFBTUQsS0FBakIsQ0FBaEI7QUFDQUQsU0FBS0ksSUFBTCxDQUFVRCxPQUFWLEVBQW1CLENBQW5CLEVBQXNCRixLQUF0QixFQUE2QkMsR0FBN0I7O0FBRUFSLGdCQUFZQyxPQUFPVSxNQUFQLENBQWMsQ0FBQ1gsU0FBRCxFQUFZUyxPQUFaLENBQWQsQ0FBWjtBQUNBLFFBQUlKLE9BQUosRUFBYTtBQUNYTCxrQkFBWUMsT0FBT1UsTUFBUCxDQUFjLENBQUNYLFNBQUQsRUFBWSxJQUFJQyxNQUFKLENBQVdKLE9BQU9lLEtBQWxCLEVBQXlCLE1BQXpCLENBQVosQ0FBZCxDQUFaO0FBQ0Q7QUFDRixHQVJEO0FBU0EsU0FBT2QsV0FBV2UsT0FBWDtBQUNMO0FBREssR0FFSkMsR0FGSSxDQUVBO0FBQUEsUUFBR1AsS0FBSCxRQUFHQSxLQUFIO0FBQUEsUUFBVUMsR0FBVixRQUFVQSxHQUFWO0FBQUEsV0FBcUI7QUFDeEJELGFBQU9BLE1BQU1RLEdBQU4sQ0FBVWIsVUFBVixDQURpQjtBQUV4Qk0sV0FBT0EsSUFBSU8sR0FBSixDQUFRYixVQUFSO0FBRmlCLEtBQXJCO0FBQUEsR0FGQTtBQU1MO0FBTkssR0FPSlksR0FQSSxDQU9BLGlCQUFvQjtBQUFBLFFBQWpCUCxLQUFpQixTQUFqQkEsS0FBaUI7QUFBQSxRQUFWQyxHQUFVLFNBQVZBLEdBQVU7O0FBQ3ZCLFFBQU1RLGNBQWVSLElBQUlPLEdBQUosQ0FBUVIsS0FBUixFQUFlVSxRQUFmLEVBQXJCO0FBQ0FmLGlCQUFxQkEsV0FBV2dCLEdBQVgsQ0FBZVgsS0FBZixFQUFzQlcsR0FBdEIsQ0FBMEJGLFdBQTFCLENBQXJCO0FBQ0EsUUFBTUcsY0FBZSxJQUFJbEIsTUFBSixDQUFXZSxXQUFYLENBQXJCO0FBQ0EsUUFBTUksZUFBZSxJQUFJbkIsTUFBSixDQUFXRCxVQUFVcUIsTUFBVixHQUFtQkwsV0FBbkIsR0FBaUNULE1BQU1VLFFBQU4sRUFBNUMsQ0FBckI7QUFDQWpCLGNBQVVVLElBQVYsQ0FBZVMsV0FBZixFQUE0QixDQUE1QixFQUErQlosTUFBTVUsUUFBTixFQUEvQixFQUFpRFYsTUFBTVcsR0FBTixDQUFVRixXQUFWLEVBQXVCQyxRQUF2QixFQUFqRDtBQUNBakIsY0FBVVUsSUFBVixDQUFlVSxZQUFmLEVBQTZCLENBQTdCLEVBQWdDYixNQUFNVyxHQUFOLENBQVVGLFdBQVYsRUFBdUJDLFFBQXZCLEVBQWhDO0FBQ0FqQixnQkFBWW9CLFlBQVo7QUFDQSxXQUFPRCxXQUFQO0FBQ0QsR0FoQkksQ0FBUDtBQWlCRCxDOztBQXZDRDs7OztBQUNBOzs7O0FBQ0E7Ozs7Ozs7O0FBRUEiLCJmaWxlIjoic3BsaXR0ZXJzL3RvYnVmZmVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvbmcgZnJvbSAnbG9uZyc7XG5pbXBvcnQgU3BsaXR0ZXIgZnJvbSAnLi4vY29yZS5jbGFzcyc7XG5pbXBvcnQgZXh0ZW5kIGZyb20gJ2V4dGVuZCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNwbGl0dGVyIHRoYXQgZW1pdHMgY2h1bmtzIG9mIGRhdGEgaW4gdGhlIGZvcm0gb2YgYSBCdWZmZXJcbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXMgdGhlIGNvbnN0cnVjdG9yIHBhcmFtcyBmb3IgdGhlIFNwbGl0dGVyXG4gKiBAcmV0dXJucyB7T2JzZXJ2YWJsZS48QnVmZmVyPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBhcmFtcykge1xuICBjb25zdCBteVNwbGl0dGVyID0gbmV3IFNwbGl0dGVyKGV4dGVuZChwYXJhbXMsIHsgbm9FbXB0eU1hdGNoZXM6IHRydWUgfSkpO1xuICBsZXQgY3VyQnVmZmVyICAgID0gbmV3IEJ1ZmZlcigwKTtcbiAgbGV0IGN1ckJ1ZmZQb3MgICA9IG5ldyBMb25nKDApO1xuICBteVNwbGl0dGVyLnNzLm9uKCdpbmZvJywgKGlzTWF0Y2gsIGRhdGEgPSBuZXcgQnVmZmVyKDApLCBzdGFydCA9IDAsIGVuZCA9IDApID0+IHtcbiAgICBjb25zdCB0bXBCdWZmID0gbmV3IEJ1ZmZlcihlbmQgLSBzdGFydCk7XG4gICAgZGF0YS5jb3B5KHRtcEJ1ZmYsIDAsIHN0YXJ0LCBlbmQpO1xuXG4gICAgY3VyQnVmZmVyID0gQnVmZmVyLmNvbmNhdChbY3VyQnVmZmVyLCB0bXBCdWZmXSk7XG4gICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgIGN1ckJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW2N1ckJ1ZmZlciwgbmV3IEJ1ZmZlcihwYXJhbXMudG9rZW4sICd1dGY4JyldKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbXlTcGxpdHRlci5vYnNlcnZlKClcbiAgICAvLyAuZG9Pbk5leHQoKHtzdGFydCxlbmR9KSA9PiBjb25zb2xlLmxvZyh7IHN0YXJ0OiBzdGFydC50b051bWJlcigpLCBlbmQ6IGVuZC50b051bWJlcigpIH0pKVxuICAgIC5tYXAoKHsgc3RhcnQsIGVuZCB9KSA9PiAoe1xuICAgICAgc3RhcnQ6IHN0YXJ0LnN1YihjdXJCdWZmUG9zKSxcbiAgICAgIGVuZCAgOiBlbmQuc3ViKGN1ckJ1ZmZQb3MpXG4gICAgfSkpXG4gICAgLy8gLmRvT25OZXh0KCh7c3RhcnQsZW5kfSkgPT4gY29uc29sZS5sb2coeyBzdGFydDogc3RhcnQudG9OdW1iZXIoKSwgZW5kOiBlbmQudG9OdW1iZXIoKSB9KSlcbiAgICAubWFwKCh7IHN0YXJ0LCBlbmQgfSkgPT4ge1xuICAgICAgY29uc3QgY2h1bmtMZW5ndGggID0gZW5kLnN1YihzdGFydCkudG9OdW1iZXIoKTtcbiAgICAgIGN1ckJ1ZmZQb3MgICAgICAgICA9IGN1ckJ1ZmZQb3MuYWRkKHN0YXJ0KS5hZGQoY2h1bmtMZW5ndGgpO1xuICAgICAgY29uc3QgY2h1bmtCdWZmZXIgID0gbmV3IEJ1ZmZlcihjaHVua0xlbmd0aCk7XG4gICAgICBjb25zdCBuZXdDdXJCdWZmZXIgPSBuZXcgQnVmZmVyKGN1ckJ1ZmZlci5sZW5ndGggLSBjaHVua0xlbmd0aCAtIHN0YXJ0LnRvTnVtYmVyKCkpO1xuICAgICAgY3VyQnVmZmVyLmNvcHkoY2h1bmtCdWZmZXIsIDAsIHN0YXJ0LnRvTnVtYmVyKCksIHN0YXJ0LmFkZChjaHVua0xlbmd0aCkudG9OdW1iZXIoKSk7XG4gICAgICBjdXJCdWZmZXIuY29weShuZXdDdXJCdWZmZXIsIDAsIHN0YXJ0LmFkZChjaHVua0xlbmd0aCkudG9OdW1iZXIoKSk7XG4gICAgICBjdXJCdWZmZXIgPSBuZXdDdXJCdWZmZXI7XG4gICAgICByZXR1cm4gY2h1bmtCdWZmZXI7XG4gICAgfSk7XG59XG4iXX0=