Home Reference Source

src/Pipeline/Iterator.js

  1. import {Pipeline} from "./Pipeline";
  2.  
  3. const _iterators = new WeakMap();
  4. const _pipes = new WeakMap();
  5.  
  6. export class Iterator {
  7. constructor(...pipesOrSchemas) {
  8. const _pipe = new Pipeline(...pipesOrSchemas);
  9. _pipes.set(this, _pipe);
  10. _iterators.set(this, [...pipesOrSchemas]);
  11. }
  12.  
  13. get schema() {
  14. return _pipes.get(this).schema;
  15. }
  16.  
  17. loop(records) {
  18. if (!Array.isArray(records)) {
  19. throw {
  20. error: {
  21. message: "iterators accept iterable values only"
  22. },
  23. data: records,
  24. }
  25. }
  26.  
  27. let _res = [];
  28. records.forEach(
  29. (__) => {
  30. const _it = _pipes.get(this).yield(__);
  31. let _done = false;
  32. let _value = __;
  33. while (!_done) {
  34. try {
  35. let {done, value} = _it.next(_value);
  36. if (!(_done = done)) {
  37. _value = value;
  38. }
  39. } catch (e) {
  40. _value = void 0;
  41. }
  42. }
  43.  
  44. if (_value !== void 0) {
  45. _res[_res.length] = _value;
  46. }
  47. });
  48.  
  49. return _res;
  50. }
  51. }