esnext.async-iterator.from.js 1.5 KB

1234567891011121314151617181920212223242526272829303132
  1. // https://github.com/tc39/proposal-iterator-helpers
  2. var $ = require('../internals/export');
  3. var toObject = require('../internals/to-object');
  4. var isPrototypeOf = require('../internals/object-is-prototype-of');
  5. var AsyncIteratorPrototype = require('../internals/async-iterator-prototype');
  6. var getAsyncIterator = require('../internals/get-async-iterator');
  7. var getIterator = require('../internals/get-iterator');
  8. var getIteratorDirect = require('../internals/get-iterator-direct');
  9. var getIteratorMethod = require('../internals/get-iterator-method');
  10. var getMethod = require('../internals/get-method');
  11. var wellKnownSymbol = require('../internals/well-known-symbol');
  12. var AsyncFromSyncIterator = require('../internals/async-from-sync-iterator');
  13. var WrapAsyncIterator = require('../internals/async-iterator-wrap');
  14. var ASYNC_ITERATOR = wellKnownSymbol('asyncIterator');
  15. $({ target: 'AsyncIterator', stat: true, forced: true }, {
  16. from: function from(O) {
  17. var object = toObject(O);
  18. var usingIterator = getMethod(object, ASYNC_ITERATOR);
  19. var iterator;
  20. if (usingIterator) {
  21. iterator = getAsyncIterator(object, usingIterator);
  22. if (isPrototypeOf(AsyncIteratorPrototype, iterator)) return iterator;
  23. }
  24. if (iterator === undefined) {
  25. usingIterator = getIteratorMethod(object);
  26. if (usingIterator) iterator = new AsyncFromSyncIterator(getIterator(object, usingIterator));
  27. }
  28. return new WrapAsyncIterator(getIteratorDirect(iterator !== undefined ? iterator : object));
  29. }
  30. });