UNPKG

deep-iterator

Version:

Deep iteration of any object or iterable collection.

315 lines (241 loc) 13.8 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray'); var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); var _getIterator2 = require('babel-runtime/core-js/get-iterator'); var _getIterator3 = _interopRequireDefault(_getIterator2); exports.dfsPreOrder = dfsPreOrder; exports.dfsPostOrder = dfsPostOrder; exports.bfs = bfs; var _node = require('./node'); var _node2 = _interopRequireDefault(_node); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var _marked = [dfsPreOrder, dfsPostOrder, bfs].map(_regenerator2.default.mark); function dfsPreOrder(node, onlyLeaves, parentSeen) { var seen, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _step$value, key, value; return _regenerator2.default.wrap(function dfsPreOrder$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!node.isLeaf()) { _context.next = 4; break; } _context.next = 3; return node; case 3: return _context.abrupt('return'); case 4: if (onlyLeaves) { _context.next = 7; break; } _context.next = 7; return node; case 7: seen = parentSeen.add(node.value); _iteratorNormalCompletion = true; _didIteratorError = false; _iteratorError = undefined; _context.prev = 11; _iterator = (0, _getIterator3.default)(node.createIterator()); case 13: if (_iteratorNormalCompletion = (_step = _iterator.next()).done) { _context.next = 19; break; } _step$value = (0, _slicedToArray3.default)(_step.value, 2), key = _step$value[0], value = _step$value[1]; return _context.delegateYield(dfsPreOrder(new _node2.default(key, value, node, seen.has(value)), onlyLeaves, seen), 't0', 16); case 16: _iteratorNormalCompletion = true; _context.next = 13; break; case 19: _context.next = 25; break; case 21: _context.prev = 21; _context.t1 = _context['catch'](11); _didIteratorError = true; _iteratorError = _context.t1; case 25: _context.prev = 25; _context.prev = 26; if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } case 28: _context.prev = 28; if (!_didIteratorError) { _context.next = 31; break; } throw _iteratorError; case 31: return _context.finish(28); case 32: return _context.finish(25); case 33: case 'end': return _context.stop(); } } }, _marked[0], this, [[11, 21, 25, 33], [26,, 28, 32]]); } function dfsPostOrder(node, onlyLeaves, parentSeen) { var seen, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, _step2$value, _key, _value; return _regenerator2.default.wrap(function dfsPostOrder$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (!node.isLeaf()) { _context2.next = 4; break; } _context2.next = 3; return node; case 3: return _context2.abrupt('return'); case 4: seen = parentSeen.add(node.value); _iteratorNormalCompletion2 = true; _didIteratorError2 = false; _iteratorError2 = undefined; _context2.prev = 8; _iterator2 = (0, _getIterator3.default)(node.createIterator()); case 10: if (_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done) { _context2.next = 16; break; } _step2$value = (0, _slicedToArray3.default)(_step2.value, 2), _key = _step2$value[0], _value = _step2$value[1]; return _context2.delegateYield(dfsPostOrder(new _node2.default(_key, _value, node, seen.has(_value)), onlyLeaves, seen), 't0', 13); case 13: _iteratorNormalCompletion2 = true; _context2.next = 10; break; case 16: _context2.next = 22; break; case 18: _context2.prev = 18; _context2.t1 = _context2['catch'](8); _didIteratorError2 = true; _iteratorError2 = _context2.t1; case 22: _context2.prev = 22; _context2.prev = 23; if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } case 25: _context2.prev = 25; if (!_didIteratorError2) { _context2.next = 28; break; } throw _iteratorError2; case 28: return _context2.finish(25); case 29: return _context2.finish(22); case 30: if (onlyLeaves) { _context2.next = 33; break; } _context2.next = 33; return node; case 33: case 'end': return _context2.stop(); } } }, _marked[1], this, [[8, 18, 22, 30], [23,, 25, 29]]); } // transpiled generator has uncovered branches // istanbul issue #645 /* istanbul ignore next */ function bfs(rootNode, onlyLeaves, parentSeen) { var queue, i, node, seen, _iteratorNormalCompletion3, _didIteratorError3, _iteratorError3, _iterator3, _step3, _step3$value, _key2, _value2; return _regenerator2.default.wrap(function bfs$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: queue = [{ node: rootNode, seen: parentSeen }]; i = 0; case 2: if (!(i < queue.length)) { _context3.next = 35; break; } node = queue[i].node; if (!node.isLeaf()) { _context3.next = 9; break; } _context3.next = 7; return node; case 7: _context3.next = 32; break; case 9: if (onlyLeaves) { _context3.next = 12; break; } _context3.next = 12; return node; case 12: seen = queue[i].seen.add(node.value); _iteratorNormalCompletion3 = true; _didIteratorError3 = false; _iteratorError3 = undefined; _context3.prev = 16; for (_iterator3 = (0, _getIterator3.default)(node.createIterator()); !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { _step3$value = (0, _slicedToArray3.default)(_step3.value, 2), _key2 = _step3$value[0], _value2 = _step3$value[1]; queue.push({ node: new _node2.default(_key2, _value2, node, seen.has(_value2)), seen: seen }); } _context3.next = 24; break; case 20: _context3.prev = 20; _context3.t0 = _context3['catch'](16); _didIteratorError3 = true; _iteratorError3 = _context3.t0; case 24: _context3.prev = 24; _context3.prev = 25; if (!_iteratorNormalCompletion3 && _iterator3.return) { _iterator3.return(); } case 27: _context3.prev = 27; if (!_didIteratorError3) { _context3.next = 30; break; } throw _iteratorError3; case 30: return _context3.finish(27); case 31: return _context3.finish(24); case 32: i++; _context3.next = 2; break; case 35: case 'end': return _context3.stop(); } } }, _marked[2], this, [[16, 20, 24, 32], [25,, 27, 31]]); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zZWFyY2guanMiXSwibmFtZXMiOlsiZGZzUHJlT3JkZXIiLCJkZnNQb3N0T3JkZXIiLCJiZnMiLCJub2RlIiwib25seUxlYXZlcyIsInBhcmVudFNlZW4iLCJpc0xlYWYiLCJzZWVuIiwiYWRkIiwidmFsdWUiLCJjcmVhdGVJdGVyYXRvciIsImtleSIsImhhcyIsInJvb3ROb2RlIiwicXVldWUiLCJpIiwibGVuZ3RoIiwicHVzaCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRWlCQSxXLEdBQUFBLFc7UUFrQkFDLFksR0FBQUEsWTtRQXFCQUMsRyxHQUFBQSxHOztBQXpDakI7Ozs7OztlQUVpQkYsVyxFQWtCQUMsWSxFQXFCQUMsRzs7QUF2Q1YsU0FBVUYsV0FBVixDQUFzQkcsSUFBdEIsRUFBNEJDLFVBQTVCLEVBQXdDQyxVQUF4QztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUFDREYsS0FBS0csTUFBTCxFQURDO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsaUJBRUdILElBRkg7O0FBQUE7QUFBQTs7QUFBQTtBQUFBLGNBS0FDLFVBTEE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSxpQkFNR0QsSUFOSDs7QUFBQTtBQVFDSSxjQVJELEdBUVFGLFdBQVdHLEdBQVgsQ0FBZUwsS0FBS00sS0FBcEIsQ0FSUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsaURBU29CTixLQUFLTyxjQUFMLEVBVHBCOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUEsc0VBU0tDLEdBVEwsbUJBU1VGLEtBVFY7QUFBQSx3Q0FVSVQsWUFDTCxtQkFBU1csR0FBVCxFQUFjRixLQUFkLEVBQXFCTixJQUFyQixFQUEyQkksS0FBS0ssR0FBTCxDQUFTSCxLQUFULENBQTNCLENBREssRUFFTEwsVUFGSyxFQUdMRyxJQUhLLENBVko7O0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFB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Jy4vbm9kZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiogZGZzUHJlT3JkZXIobm9kZSwgb25seUxlYXZlcywgcGFyZW50U2Vlbikge1xuICBpZiAobm9kZS5pc0xlYWYoKSkge1xuICAgIHlpZWxkIG5vZGU7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghb25seUxlYXZlcykge1xuICAgIHlpZWxkIG5vZGU7XG4gIH1cbiAgY29uc3Qgc2VlbiA9IHBhcmVudFNlZW4uYWRkKG5vZGUudmFsdWUpO1xuICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2Ygbm9kZS5jcmVhdGVJdGVyYXRvcigpKSB7XG4gICAgeWllbGQqIGRmc1ByZU9yZGVyKFxuICAgICAgbmV3IE5vZGUoa2V5LCB2YWx1ZSwgbm9kZSwgc2Vlbi5oYXModmFsdWUpKSxcbiAgICAgIG9ubHlMZWF2ZXMsXG4gICAgICBzZWVuXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGRmc1Bvc3RPcmRlcihub2RlLCBvbmx5TGVhdmVzLCBwYXJlbnRTZWVuKSB7XG4gIGlmIChub2RlLmlzTGVhZigpKSB7XG4gICAgeWllbGQgbm9kZTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgc2VlbiA9IHBhcmVudFNlZW4uYWRkKG5vZGUudmFsdWUpO1xuICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2Ygbm9kZS5jcmVhdGVJdGVyYXRvcigpKSB7XG4gICAgeWllbGQqIGRmc1Bvc3RPcmRlcihcbiAgICAgIG5ldyBOb2RlKGtleSwgdmFsdWUsIG5vZGUsIHNlZW4uaGFzKHZhbHVlKSksXG4gICAgICBvbmx5TGVhdmVzLFxuICAgICAgc2VlblxuICAgICk7XG4gIH1cbiAgaWYgKCFvbmx5TGVhdmVzKSB7XG4gICAgeWllbGQgbm9kZTtcbiAgfVxufVxuXG4vLyB0cmFuc3BpbGVkIGdlbmVyYXRvciBoYXMgdW5jb3ZlcmVkIGJyYW5jaGVzXG4vLyBpc3RhbmJ1bCBpc3N1ZSAjNjQ1XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBiZnMocm9vdE5vZGUsIG9ubHlMZWF2ZXMsIHBhcmVudFNlZW4pIHtcbiAgY29uc3QgcXVldWUgPSBbe25vZGU6IHJvb3ROb2RlLCBzZWVuOiBwYXJlbnRTZWVufV07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBub2RlID0gcXVldWVbaV0ubm9kZTtcbiAgICBpZiAobm9kZS5pc0xlYWYoKSkge1xuICAgICAgeWllbGQgbm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFvbmx5TGVhdmVzKSB7XG4gICAgICAgIHlpZWxkIG5vZGU7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWVuID0gcXVldWVbaV0uc2Vlbi5hZGQobm9kZS52YWx1ZSk7XG4gICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2Ygbm9kZS5jcmVhdGVJdGVyYXRvcigpKSB7XG4gICAgICAgIHF1ZXVlLnB1c2goe1xuICAgICAgICAgIG5vZGU6IG5ldyBOb2RlKGtleSwgdmFsdWUsIG5vZGUsIHNlZW4uaGFzKHZhbHVlKSksXG4gICAgICAgICAgc2VlblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==