IteratorStep.js 996 B

1234567891011121314151617181920212223242526272829303132333435
  1. 'use strict';
  2. var $TypeError = require('es-errors/type');
  3. var IteratorComplete = require('./IteratorComplete');
  4. var IteratorNext = require('./IteratorNext');
  5. var isIteratorRecord = require('../helpers/records/iterator-record');
  6. // https://262.ecma-international.org/16.0/#sec-iteratorstep
  7. module.exports = function IteratorStep(iteratorRecord) {
  8. if (!isIteratorRecord(iteratorRecord)) {
  9. throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1
  10. }
  11. var result = IteratorNext(iteratorRecord); // step 1
  12. try {
  13. var done = IteratorComplete(result); // step 2
  14. } catch (e) { // step 3
  15. // eslint-disable-next-line no-param-reassign
  16. iteratorRecord['[[Done]]'] = true; // step 3.a
  17. throw e; // step 3.b
  18. }
  19. if (done) { // step 5
  20. // eslint-disable-next-line no-param-reassign
  21. iteratorRecord['[[Done]]'] = true; // step 5.a
  22. return false; // step 5.b. should be `~done~` but `false` is more convenient here.
  23. }
  24. return result; // steps 6
  25. };