src/Pipeline/Iterator.js
- import {Pipeline} from "./Pipeline";
-
- const _iterators = new WeakMap();
- const _pipes = new WeakMap();
-
- export class Iterator {
- constructor(...pipesOrSchemas) {
- const _pipe = new Pipeline(...pipesOrSchemas);
- _pipes.set(this, _pipe);
- _iterators.set(this, [...pipesOrSchemas]);
- }
-
- get schema() {
- return _pipes.get(this).schema;
- }
-
- loop(records) {
- if (!Array.isArray(records)) {
- throw {
- error: {
- message: "iterators accept iterable values only"
- },
- data: records,
- }
- }
-
- let _res = [];
- records.forEach(
- (__) => {
- const _it = _pipes.get(this).yield(__);
- let _done = false;
- let _value = __;
- while (!_done) {
- try {
- let {done, value} = _it.next(_value);
- if (!(_done = done)) {
- _value = value;
- }
- } catch (e) {
- _value = void 0;
- }
- }
-
- if (_value !== void 0) {
- _res[_res.length] = _value;
- }
- });
-
- return _res;
- }
- }