deep-iterator
Version:
Deep iteration of any object or iterable collection.
70 lines (55 loc) • 5.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _create = require('babel-runtime/core-js/object/create');
var _create2 = _interopRequireDefault(_create);
var _iterator = require('babel-runtime/core-js/symbol/iterator');
var _iterator2 = _interopRequireDefault(_iterator);
exports.getTypeFromTag = getTypeFromTag;
exports.getTag = getTag;
exports.getTagMap = getTagMap;
var _generators = require('./generators');
var gen = _interopRequireWildcard(_generators);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var TYPE_POSITION_IN_TAG = 8;
var tagMap = {
'[object Null]': gen.LEAF,
'[object Undefined]': gen.LEAF,
'[object Boolean]': gen.LEAF,
'[object Number]': gen.LEAF,
'[object String]': gen.LEAF, // strings are excluded although they are iterable
'[object Symbol]': gen.LEAF,
'[object Date]': gen.LEAF,
'[object RegExp]': gen.LEAF,
'[object Function]': gen.LEAF,
'[object GeneratorFunction]': gen.LEAF,
'[object Promise]': gen.LEAF,
'[object Array]': gen.arrayIterator,
'[object Set]': gen.genericIterator,
'[object Map]': gen.mapIterator,
'[object UserDefinedIterable]': gen.genericIterator,
'[object NonIterableObject]': gen.objectIterator
};
function getTypeFromTag(tag) {
return tag.slice(TYPE_POSITION_IN_TAG, tag.length - 1);
}
function getTag(element) {
var stringTag = Object.prototype.toString.call(element);
if (stringTag in tagMap) {
return stringTag;
}
if (typeof element[_iterator2.default] === 'function') {
return '[object UserDefinedIterable]';
}
return '[object NonIterableObject]';
}
function getTagMap(config) {
var myTagMap = (0, _create2.default)(tagMap);
if (!config.iterateOverObject) {
myTagMap['[object NonIterableObject]'] = gen.LEAF;
}
return myTagMap;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90YWcuanMiXSwibmFtZXMiOlsiZ2V0VHlwZUZyb21UYWciLCJnZXRUYWciLCJnZXRUYWdNYXAiLCJnZW4iLCJUWVBFX1BPU0lUSU9OX0lOX1RBRyIsInRhZ01hcCIsIkxFQUYiLCJhcnJheUl0ZXJhdG9yIiwiZ2VuZXJpY0l0ZXJhdG9yIiwibWFwSXRlcmF0b3IiLCJvYmplY3RJdGVyYXRvciIsInRhZyIsInNsaWNlIiwibGVuZ3RoIiwiZWxlbWVudCIsInN0cmluZ1RhZyIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImNvbmZpZyIsIm15VGFnTWFwIiwiaXRlcmF0ZU92ZXJPYmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O1FBdUJnQkEsYyxHQUFBQSxjO1FBSUFDLE0sR0FBQUEsTTtRQVdBQyxTLEdBQUFBLFM7O0FBdENoQjs7SUFBWUMsRzs7Ozs7O0FBRVosSUFBTUMsdUJBQXVCLENBQTdCOztBQUVBLElBQU1DLFNBQVM7QUFDYixtQkFBaUJGLElBQUlHLElBRFI7QUFFYix3QkFBc0JILElBQUlHLElBRmI7QUFHYixzQkFBb0JILElBQUlHLElBSFg7QUFJYixxQkFBbUJILElBQUlHLElBSlY7QUFLYixxQkFBbUJILElBQUlHLElBTFYsRUFLZ0I7QUFDN0IscUJBQW1CSCxJQUFJRyxJQU5WO0FBT2IsbUJBQWlCSCxJQUFJRyxJQVBSO0FBUWIscUJBQW1CSCxJQUFJRyxJQVJWO0FBU2IsdUJBQXFCSCxJQUFJRyxJQVRaO0FBVWIsZ0NBQThCSCxJQUFJRyxJQVZyQjtBQVdiLHNCQUFvQkgsSUFBSUcsSUFYWDtBQVliLG9CQUFrQkgsSUFBSUksYUFaVDtBQWFiLGtCQUFnQkosSUFBSUssZUFiUDtBQWNiLGtCQUFnQkwsSUFBSU0sV0FkUDtBQWViLGtDQUFnQ04sSUFBSUssZUFmdkI7QUFnQmIsZ0NBQThCTCxJQUFJTztBQWhCckIsQ0FBZjs7QUFtQk8sU0FBU1YsY0FBVCxDQUF3QlcsR0FBeEIsRUFBNkI7QUFDbEMsU0FBT0EsSUFBSUMsS0FBSixDQUFVUixvQkFBVixFQUFnQ08sSUFBSUUsTUFBSixHQUFhLENBQTdDLENBQVA7QUFDRDs7QUFFTSxTQUFTWixNQUFULENBQWdCYSxPQUFoQixFQUF5QjtBQUM5QixNQUFNQyxZQUFZQyxPQUFPQyxTQUFQLENBQWlCQyxRQUFqQixDQUEwQkMsSUFBMUIsQ0FBK0JMLE9BQS9CLENBQWxCO0FBQ0EsTUFBSUMsYUFBYVYsTUFBakIsRUFBeUI7QUFDdkIsV0FBT1UsU0FBUDtBQUNEO0FBQ0QsTUFBSSxPQUFPRCwyQkFBUCxLQUFvQyxVQUF4QyxFQUFvRDtBQUNsRCxXQUFPLDhCQUFQO0FBQ0Q7QUFDRCxTQUFPLDRCQUFQO0FBQ0Q7O0FBRU0sU0FBU1osU0FBVCxDQUFtQmtCLE1BQW5CLEVBQTJCO0FBQ2hDLE1BQU1DLFdBQVcsc0JBQWNoQixNQUFkLENBQWpCO0FBQ0EsTUFBSSxDQUFDZSxPQUFPRSxpQkFBWixFQUErQjtBQUM3QkQsYUFBUyw0QkFBVCxJQUF5Q2xCLElBQUlHLElBQTdDO0FBQ0Q7QUFDRCxTQUFPZSxRQUFQO0FBQ0QiLCJmaWxlIjoidGFnLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZ2VuIGZyb20gJy4vZ2VuZXJhdG9ycyc7XG5cbmNvbnN0IFRZUEVfUE9TSVRJT05fSU5fVEFHID0gODtcblxuY29uc3QgdGFnTWFwID0ge1xuICAnW29iamVjdCBOdWxsXSc6IGdlbi5MRUFGLFxuICAnW29iamVjdCBVbmRlZmluZWRdJzogZ2VuLkxFQUYsXG4gICdbb2JqZWN0IEJvb2xlYW5dJzogZ2VuLkxFQUYsXG4gICdbb2JqZWN0IE51bWJlcl0nOiBnZW4uTEVBRixcbiAgJ1tvYmplY3QgU3RyaW5nXSc6IGdlbi5MRUFGLCAvLyBzdHJpbmdzIGFyZSBleGNsdWRlZCBhbHRob3VnaCB0aGV5IGFyZSBpdGVyYWJsZVxuICAnW29iamVjdCBTeW1ib2xdJzogZ2VuLkxFQUYsXG4gICdbb2JqZWN0IERhdGVdJzogZ2VuLkxFQUYsXG4gICdbb2JqZWN0IFJlZ0V4cF0nOiBnZW4uTEVBRixcbiAgJ1tvYmplY3QgRnVuY3Rpb25dJzogZ2VuLkxFQUYsXG4gICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSc6IGdlbi5MRUFGLFxuICAnW29iamVjdCBQcm9taXNlXSc6IGdlbi5MRUFGLFxuICAnW29iamVjdCBBcnJheV0nOiBnZW4uYXJyYXlJdGVyYXRvcixcbiAgJ1tvYmplY3QgU2V0XSc6IGdlbi5nZW5lcmljSXRlcmF0b3IsXG4gICdbb2JqZWN0IE1hcF0nOiBnZW4ubWFwSXRlcmF0b3IsXG4gICdbb2JqZWN0IFVzZXJEZWZpbmVkSXRlcmFibGVdJzogZ2VuLmdlbmVyaWNJdGVyYXRvcixcbiAgJ1tvYmplY3QgTm9uSXRlcmFibGVPYmplY3RdJzogZ2VuLm9iamVjdEl0ZXJhdG9yXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZUZyb21UYWcodGFnKSB7XG4gIHJldHVybiB0YWcuc2xpY2UoVFlQRV9QT1NJVElPTl9JTl9UQUcsIHRhZy5sZW5ndGggLSAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhZyhlbGVtZW50KSB7XG4gIGNvbnN0IHN0cmluZ1RhZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlbGVtZW50KTtcbiAgaWYgKHN0cmluZ1RhZyBpbiB0YWdNYXApIHtcbiAgICByZXR1cm4gc3RyaW5nVGFnO1xuICB9XG4gIGlmICh0eXBlb2YgZWxlbWVudFtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0IFVzZXJEZWZpbmVkSXRlcmFibGVdJztcbiAgfVxuICByZXR1cm4gJ1tvYmplY3QgTm9uSXRlcmFibGVPYmplY3RdJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhZ01hcChjb25maWcpIHtcbiAgY29uc3QgbXlUYWdNYXAgPSBPYmplY3QuY3JlYXRlKHRhZ01hcCk7XG4gIGlmICghY29uZmlnLml0ZXJhdGVPdmVyT2JqZWN0KSB7XG4gICAgbXlUYWdNYXBbJ1tvYmplY3QgTm9uSXRlcmFibGVPYmplY3RdJ10gPSBnZW4uTEVBRjtcbiAgfVxuICByZXR1cm4gbXlUYWdNYXA7XG59XG4iXX0=