@reactivex/ix-es5-esm
Version:
The Interactive Extensions for JavaScript
74 lines (72 loc) • 2.47 kB
JavaScript
import { __extends } from "tslib";
import { IterableX } from '../iterable/iterablex.js';
import { Readable } from 'stream';
var done = function (_) { return null; };
/** @ignore */
/** @ignore */
var IterableReadable = /** @class */ (function (_super) {
__extends(IterableReadable, _super);
function IterableReadable(source, options) {
var _this = _super.call(this, options) || this;
_this._pulling = false;
_this._objectMode = true;
_this._iterator = source[Symbol.iterator]();
_this._objectMode = !options || !!options.objectMode;
return _this;
}
IterableReadable.prototype._read = function (size) {
var it = this._iterator;
if (it && !this._pulling && (this._pulling = true)) {
this._pulling = this._pull(it, size);
}
};
IterableReadable.prototype._destroy = function (err, cb) {
var it = this._iterator;
this._iterator = undefined;
var fn = (it && (err ? it.throw : it.return)) || done;
fn.call(it, err);
if (cb) {
cb(null);
}
};
// eslint-disable-next-line complexity
IterableReadable.prototype._pull = function (it, size) {
var innerSize = size;
var objectMode = this._objectMode;
var r;
while (this.readable && !(r = it.next(innerSize)).done) {
if (innerSize != null) {
if (objectMode) {
innerSize -= 1;
}
else {
innerSize -= Buffer.byteLength(r.value || '');
}
}
if (!this.push(r.value) || innerSize <= 0) {
break;
}
}
if ((r && r.done) || !this.readable) {
this.push(null);
if (it.return) {
it.return();
}
}
return !this.readable;
};
return IterableReadable;
}(Readable));
export { IterableReadable };
export function toNodeStream(source, options) {
return !options || options.objectMode === true
? new IterableReadable(source, options)
: new IterableReadable(source, options);
}
export function toNodeStreamProto(options) {
return !options || options.objectMode === true
? new IterableReadable(this, options)
: new IterableReadable(this, options);
}
IterableX.prototype.toNodeStream = toNodeStreamProto;
//# sourceMappingURL=tonodestream.js.map