deep-iterator
Version:
Deep iteration of any object or iterable collection.
89 lines (67 loc) • 6.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
exports.default = deepIterator;
var _search = require('./search');
var search = _interopRequireWildcard(_search);
var _rootNode = require('./root-node');
var _rootNode2 = _interopRequireDefault(_rootNode);
var _seen = require('./seen');
var _seen2 = _interopRequireDefault(_seen);
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 _marked = [deepIterator].map(_regenerator2.default.mark);
function deepIterator(rootElement) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var config, node, seen;
return _regenerator2.default.wrap(function deepIterator$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
config = {
onlyLeaves: false,
circularReference: 'leaf',
search: 'dfsPreOrder',
iterateOverObject: true,
skipIteration: function skipIteration() {
return false;
}
};
if (options.onlyLeaves !== undefined) {
config.onlyLeaves = options.onlyLeaves;
}
if (options.circularReference !== undefined) {
config.circularReference = options.circularReference;
}
if (options.iterateOverObject !== undefined) {
config.iterateOverObject = options.iterateOverObject;
}
if (options.skipIteration !== undefined) {
config.skipIteration = options.skipIteration;
}
if (!(options.search !== undefined)) {
_context.next = 9;
break;
}
if (options.search in search) {
_context.next = 8;
break;
}
throw new Error('The search algorithm ' + options.search + ' is incorrect.');
case 8:
config.search = options.search;
case 9:
node = new _rootNode2.default(rootElement, config);
seen = (0, _seen2.default)(config.circularReference);
return _context.delegateYield(search[config.search](node, config.onlyLeaves, seen), 't0', 12);
case 12:
case 'end':
return _context.stop();
}
}
}, _marked[0], this);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWVwLWl0ZXJhdG9yLmpzIl0sIm5hbWVzIjpbImRlZXBJdGVyYXRvciIsInNlYXJjaCIsInJvb3RFbGVtZW50Iiwib3B0aW9ucyIsImNvbmZpZyIsIm9ubHlMZWF2ZXMiLCJjaXJjdWxhclJlZmVyZW5jZSIsIml0ZXJhdGVPdmVyT2JqZWN0Iiwic2tpcEl0ZXJhdGlvbiIsInVuZGVmaW5lZCIsIkVycm9yIiwibm9kZSIsInNlZW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7a0JBSXlCQSxZOztBQUp6Qjs7SUFBWUMsTTs7QUFDWjs7OztBQUNBOzs7Ozs7OztlQUV5QkQsWTs7QUFBVixTQUFVQSxZQUFWLENBQXVCRSxXQUF2QjtBQUFBLE1BQW9DQyxPQUFwQyx1RUFBOEMsRUFBOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ1BDLGdCQURPLEdBQ0U7QUFDYkMsd0JBQVksS0FEQztBQUViQywrQkFBbUIsTUFGTjtBQUdiTCxvQkFBUSxhQUhLO0FBSWJNLCtCQUFtQixJQUpOO0FBS2JDLDJCQUFlO0FBQUEscUJBQU0sS0FBTjtBQUFBO0FBTEYsV0FERjs7O0FBU2IsY0FBSUwsUUFBUUUsVUFBUixLQUF1QkksU0FBM0IsRUFBc0M7QUFDcENMLG1CQUFPQyxVQUFQLEdBQW9CRixRQUFRRSxVQUE1QjtBQUNEO0FBQ0QsY0FBSUYsUUFBUUcsaUJBQVIsS0FBOEJHLFNBQWxDLEVBQTZDO0FBQzNDTCxtQkFBT0UsaUJBQVAsR0FBMkJILFFBQVFHLGlCQUFuQztBQUNEO0FBQ0QsY0FBSUgsUUFBUUksaUJBQVIsS0FBOEJFLFNBQWxDLEVBQTZDO0FBQzNDTCxtQkFBT0csaUJBQVAsR0FBMkJKLFFBQVFJLGlCQUFuQztBQUNEO0FBQ0QsY0FBSUosUUFBUUssYUFBUixLQUEwQkMsU0FBOUIsRUFBeUM7QUFDdkNMLG1CQUFPSSxhQUFQLEdBQXVCTCxRQUFRSyxhQUEvQjtBQUNEOztBQXBCWSxnQkFxQlRMLFFBQVFGLE1BQVIsS0FBbUJRLFNBckJWO0FBQUE7QUFBQTtBQUFBOztBQUFBLGNBc0JMTixRQUFRRixNQUFSLElBQWtCQSxNQXRCYjtBQUFBO0FBQUE7QUFBQTs7QUFBQSxnQkF1QkgsSUFBSVMsS0FBSiwyQkFBa0NQLFFBQVFGLE1BQTFDLG9CQXZCRzs7QUFBQTtBQXlCWEcsaUJBQU9ILE1BQVAsR0FBZ0JFLFFBQVFGLE1BQXhCOztBQXpCVztBQTJCUFUsY0EzQk8sR0EyQkEsdUJBQWFULFdBQWIsRUFBMEJFLE1BQTFCLENBM0JBO0FBNEJQUSxjQTVCTyxHQTRCQSxvQkFBU1IsT0FBT0UsaUJBQWhCLENBNUJBO0FBQUEsd0NBNkJOTCxPQUFPRyxPQUFPSCxNQUFkLEVBQXNCVSxJQUF0QixFQUE0QlAsT0FBT0MsVUFBbkMsRUFBK0NPLElBQS9DLENBN0JNOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBIiwiZmlsZSI6ImRlZXAtaXRlcmF0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzZWFyY2ggZnJvbSAnLi9zZWFyY2gnO1xuaW1wb3J0IFJvb3ROb2RlIGZyb20gJy4vcm9vdC1ub2RlJztcbmltcG9ydCBtYWtlU2VlbiBmcm9tICcuL3NlZW4nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiogZGVlcEl0ZXJhdG9yKHJvb3RFbGVtZW50LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgY29uZmlnID0ge1xuICAgIG9ubHlMZWF2ZXM6IGZhbHNlLFxuICAgIGNpcmN1bGFyUmVmZXJlbmNlOiAnbGVhZicsXG4gICAgc2VhcmNoOiAnZGZzUHJlT3JkZXInLFxuICAgIGl0ZXJhdGVPdmVyT2JqZWN0OiB0cnVlLFxuICAgIHNraXBJdGVyYXRpb246ICgpID0+IGZhbHNlXG4gIH07XG5cbiAgaWYgKG9wdGlvbnMub25seUxlYXZlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uZmlnLm9ubHlMZWF2ZXMgPSBvcHRpb25zLm9ubHlMZWF2ZXM7XG4gIH1cbiAgaWYgKG9wdGlvbnMuY2lyY3VsYXJSZWZlcmVuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbmZpZy5jaXJjdWxhclJlZmVyZW5jZSA9IG9wdGlvbnMuY2lyY3VsYXJSZWZlcmVuY2U7XG4gIH1cbiAgaWYgKG9wdGlvbnMuaXRlcmF0ZU92ZXJPYmplY3QgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbmZpZy5pdGVyYXRlT3Zlck9iamVjdCA9IG9wdGlvbnMuaXRlcmF0ZU92ZXJPYmplY3Q7XG4gIH1cbiAgaWYgKG9wdGlvbnMuc2tpcEl0ZXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uZmlnLnNraXBJdGVyYXRpb24gPSBvcHRpb25zLnNraXBJdGVyYXRpb247XG4gIH1cbiAgaWYgKG9wdGlvbnMuc2VhcmNoICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIShvcHRpb25zLnNlYXJjaCBpbiBzZWFyY2gpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZWFyY2ggYWxnb3JpdGhtICR7b3B0aW9ucy5zZWFyY2h9IGlzIGluY29ycmVjdC5gKTtcbiAgICB9XG4gICAgY29uZmlnLnNlYXJjaCA9IG9wdGlvbnMuc2VhcmNoO1xuICB9XG4gIGNvbnN0IG5vZGUgPSBuZXcgUm9vdE5vZGUocm9vdEVsZW1lbnQsIGNvbmZpZyk7XG4gIGNvbnN0IHNlZW4gPSBtYWtlU2Vlbihjb25maWcuY2lyY3VsYXJSZWZlcmVuY2UpO1xuICB5aWVsZCogc2VhcmNoW2NvbmZpZy5zZWFyY2hdKG5vZGUsIGNvbmZpZy5vbmx5TGVhdmVzLCBzZWVuKTtcbn1cbiJdfQ==