UNPKG

1.08 kBJavaScriptView Raw
1'use strict';
2var call = require('../internals/function-call');
3var isCallable = require('../internals/is-callable');
4var anObject = require('../internals/an-object');
5var getIteratorDirect = require('../internals/get-iterator-direct');
6var getIteratorMethod = require('../internals/get-iterator-method');
7var getMethod = require('../internals/get-method');
8var wellKnownSymbol = require('../internals/well-known-symbol');
9var AsyncFromSyncIterator = require('../internals/async-from-sync-iterator');
10
11var ASYNC_ITERATOR = wellKnownSymbol('asyncIterator');
12
13module.exports = function (obj) {
14 var object = anObject(obj);
15 var alreadyAsync = true;
16 var method = getMethod(object, ASYNC_ITERATOR);
17 var iterator;
18 if (!isCallable(method)) {
19 method = getIteratorMethod(object);
20 alreadyAsync = false;
21 }
22 if (method !== undefined) {
23 iterator = call(method, object);
24 } else {
25 iterator = object;
26 alreadyAsync = true;
27 }
28 anObject(iterator);
29 return getIteratorDirect(alreadyAsync ? iterator : new AsyncFromSyncIterator(getIteratorDirect(iterator)));
30};