implementation.js 1.0 KB

1234567891011121314151617181920212223242526272829303132
  1. 'use strict';
  2. var $TypeError = require('es-errors/type');
  3. var GetIteratorFlattenable = require('../aos/GetIteratorFlattenable');
  4. var OrdinaryHasInstance = require('es-abstract/2023/OrdinaryHasInstance');
  5. var OrdinaryObjectCreate = require('es-abstract/2023/OrdinaryObjectCreate');
  6. var $Iterator = require('../Iterator/polyfill')();
  7. var $WrapForValidIteratorPrototype = require('../WrapForValidIteratorPrototype');
  8. var SLOT = require('internal-slot');
  9. module.exports = function from(O) {
  10. if (this instanceof from) {
  11. throw new $TypeError('`Iterator.from` is not a constructor');
  12. }
  13. var iteratorRecord = GetIteratorFlattenable(O, 'iterate-strings'); // step 1
  14. var hasInstance = OrdinaryHasInstance($Iterator, iteratorRecord['[[Iterator]]']); // step 2
  15. if (hasInstance) { // step 3
  16. return iteratorRecord['[[Iterator]]']; // step 3.a
  17. }
  18. var wrapper = OrdinaryObjectCreate($WrapForValidIteratorPrototype); // , ['[[Iterated]]']); // step 4
  19. SLOT.set(wrapper, '[[Iterated]]', iteratorRecord); // step 5
  20. return wrapper; // step 6
  21. };