esnext.async-iterator.from.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. // https://github.com/tc39/proposal-iterator-helpers
  2. var $ = require('../internals/export');
  3. var path = require('../internals/path');
  4. var anObject = require('../internals/an-object');
  5. var toObject = require('../internals/to-object');
  6. var createAsyncIteratorProxy = require('../internals/async-iterator-create-proxy');
  7. var getAsyncIterator = require('../internals/get-async-iterator');
  8. var getIterator = require('../internals/get-iterator');
  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 ASYNC_ITERATOR = wellKnownSymbol('asyncIterator');
  14. var AsyncIterator = path.AsyncIterator;
  15. var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise, args) {
  16. return anObject(this.next.apply(this.iterator, args));
  17. }, true);
  18. $({ target: 'AsyncIterator', stat: true }, {
  19. from: function from(O) {
  20. var object = toObject(O);
  21. var usingIterator = getMethod(object[ASYNC_ITERATOR]);
  22. var iterator;
  23. if (usingIterator !== undefined) {
  24. iterator = getAsyncIterator(object, usingIterator);
  25. if (iterator instanceof AsyncIterator) return iterator;
  26. }
  27. if (iterator === undefined) {
  28. usingIterator = getIteratorMethod(object);
  29. if (usingIterator !== undefined) return new AsyncFromSyncIterator(getIterator(object, usingIterator));
  30. }
  31. return new AsyncIteratorProxy({
  32. iterator: iterator !== undefined ? iterator : object
  33. });
  34. }
  35. });