|
|
@@ -1,94 +0,0 @@
|
|
|
-'use strict';
|
|
|
-
|
|
|
-const {Readable} = require('stream');
|
|
|
-
|
|
|
-class FromIterable extends Readable {
|
|
|
- constructor(options) {
|
|
|
- super(Object.assign({}, options, {objectMode: true}));
|
|
|
- this._iterable = null;
|
|
|
- this._next = null;
|
|
|
- if (options) {
|
|
|
- 'iterable' in options && (this._iterable = options.iterable);
|
|
|
- }
|
|
|
- !this._iterable && (this._read = this._readStop);
|
|
|
- }
|
|
|
-
|
|
|
- _read() {
|
|
|
- if (Symbol.asyncIterator && typeof this._iterable[Symbol.asyncIterator] == 'function') {
|
|
|
- this._next = this._iterable[Symbol.asyncIterator]();
|
|
|
- this._iterable = null;
|
|
|
- this._read = this._readNext;
|
|
|
- this._readNext();
|
|
|
- return;
|
|
|
- }
|
|
|
- if (Symbol.iterator && typeof this._iterable[Symbol.iterator] == 'function') {
|
|
|
- this._next = this._iterable[Symbol.iterator]();
|
|
|
- this._iterable = null;
|
|
|
- this._read = this._readNext;
|
|
|
- this._readNext();
|
|
|
- return;
|
|
|
- }
|
|
|
- if (typeof this._iterable.next == 'function') {
|
|
|
- this._next = this._iterable;
|
|
|
- this._iterable = null;
|
|
|
- this._read = this._readNext;
|
|
|
- this._readNext();
|
|
|
- return;
|
|
|
- }
|
|
|
- const result = this._iterable();
|
|
|
- this._iterable = null;
|
|
|
- if (result && typeof result.then == 'function') {
|
|
|
- result.then(value => this.push(value), error => this.emit('error', error));
|
|
|
- this._read = this._readStop;
|
|
|
- return;
|
|
|
- }
|
|
|
- if (result && typeof result.next == 'function') {
|
|
|
- this._next = result;
|
|
|
- this._read = this._readNext;
|
|
|
- this._readNext();
|
|
|
- return;
|
|
|
- }
|
|
|
- this.push(result);
|
|
|
- this._read = this._readStop;
|
|
|
- }
|
|
|
-
|
|
|
- _readNext() {
|
|
|
- for (;;) {
|
|
|
- const result = this._next.next();
|
|
|
- if (result && typeof result.then == 'function') {
|
|
|
- result.then(
|
|
|
- value => {
|
|
|
- if (value.done || value.value === null) {
|
|
|
- this.push(null);
|
|
|
- this._next = null;
|
|
|
- this._read = this._readStop;
|
|
|
- } else {
|
|
|
- this.push(value.value);
|
|
|
- }
|
|
|
- },
|
|
|
- error => this.emit('error', error)
|
|
|
- );
|
|
|
- break;
|
|
|
- }
|
|
|
- if (result.done || result.value === null) {
|
|
|
- this.push(null);
|
|
|
- this._next = null;
|
|
|
- this._read = this._readStop;
|
|
|
- break;
|
|
|
- }
|
|
|
- if (!this.push(result.value)) break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- _readStop() {
|
|
|
- this.push(null);
|
|
|
- }
|
|
|
-
|
|
|
- static make(iterable) {
|
|
|
- return new FromIterable(typeof iterable == 'object' && iterable.iterable ? iterable : {iterable});
|
|
|
- }
|
|
|
-}
|
|
|
-FromIterable.fromIterable = FromIterable.make;
|
|
|
-FromIterable.make.Constructor = FromIterable;
|
|
|
-
|
|
|
-module.exports = FromIterable;
|