1'use strict'; 2 3Object.defineProperty(exports, "__esModule", { 4 value: true 5}); 6exports.default = createIterator; 7 8var _isArrayLike = require('./isArrayLike.js'); 9 10var _isArrayLike2 = _interopRequireDefault(_isArrayLike); 11 12var _getIterator = require('./getIterator.js'); 13 14var _getIterator2 = _interopRequireDefault(_getIterator); 15 16function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 17 18function createArrayIterator(coll) { 19 var i = -1; 20 var len = coll.length; 21 return function next() { 22 return ++i < len ? { value: coll[i], key: i } : null; 23 }; 24} 25 26function createES2015Iterator(iterator) { 27 var i = -1; 28 return function next() { 29 var item = iterator.next(); 30 if (item.done) return null; 31 i++; 32 return { value: item.value, key: i }; 33 }; 34} 35 36function createObjectIterator(obj) { 37 var okeys = obj ? Object.keys(obj) : []; 38 var i = -1; 39 var len = okeys.length; 40 return function next() { 41 var key = okeys[++i]; 42 if (key === '__proto__') { 43 return next(); 44 } 45 return i < len ? { value: obj[key], key } : null; 46 }; 47} 48 49function createIterator(coll) { 50 if ((0, _isArrayLike2.default)(coll)) { 51 return createArrayIterator(coll); 52 } 53 54 var iterator = (0, _getIterator2.default)(coll); 55 return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll); 56} 57module.exports = exports['default'];