UNPKG

deep-iterator

Version:

Deep iteration of any object or iterable collection.

104 lines (82 loc) 5.18 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); exports.default = makeSeen; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var NoCheckSeen = function () { function NoCheckSeen() { (0, _classCallCheck3.default)(this, NoCheckSeen); } (0, _createClass3.default)(NoCheckSeen, [{ key: 'add', value: function add() { return this; } }, { key: 'has', value: function has() { return false; } }]); return NoCheckSeen; }(); // TODO : use an immutable collection var LeafSeen = function () { function LeafSeen(arr) { (0, _classCallCheck3.default)(this, LeafSeen); this._arr = arr; } (0, _createClass3.default)(LeafSeen, [{ key: 'add', value: function add(value) { return new LeafSeen([].concat((0, _toConsumableArray3.default)(this._arr), [value])); } }, { key: 'has', value: function has(value) { return this._arr.includes(value); } }]); return LeafSeen; }(); // TODO : use an immutable collection var ThrowSeen = function () { function ThrowSeen(arr) { (0, _classCallCheck3.default)(this, ThrowSeen); this._arr = arr; } (0, _createClass3.default)(ThrowSeen, [{ key: 'add', value: function add(value) { return new ThrowSeen([].concat((0, _toConsumableArray3.default)(this._arr), [value])); } }, { key: 'has', value: function has(value) { if (this._arr.includes(value)) { throw new Error('Circular reference : ' + value); } return false; } }]); return ThrowSeen; }(); function makeSeen(circularReference) { switch (circularReference) { case 'leaf': return new LeafSeen([]); case 'throw': return new ThrowSeen([]); case 'noCheck': return new NoCheckSeen(); } throw new Error('Incorrect value ' + circularReference + ' for circularReference option.'); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zZWVuLmpzIl0sIm5hbWVzIjpbIm1ha2VTZWVuIiwiTm9DaGVja1NlZW4iLCJMZWFmU2VlbiIsImFyciIsIl9hcnIiLCJ2YWx1ZSIsImluY2x1ZGVzIiwiVGhyb3dTZWVuIiwiRXJyb3IiLCJjaXJjdWxhclJlZmVyZW5jZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tCQXNDd0JBLFE7Ozs7SUF0Q2xCQyxXOzs7Ozs7OzBCQUNFO0FBQUMsYUFBTyxJQUFQO0FBQVk7OzswQkFDYjtBQUFDLGFBQU8sS0FBUDtBQUFhOzs7OztBQUd0Qjs7O0lBQ01DLFE7QUFDSixvQkFBWUMsR0FBWixFQUFpQjtBQUFBOztBQUNmLFNBQUtDLElBQUwsR0FBWUQsR0FBWjtBQUNEOzs7O3dCQUVHRSxLLEVBQU87QUFDVCxhQUFPLElBQUlILFFBQUosNENBQWlCLEtBQUtFLElBQXRCLElBQTRCQyxLQUE1QixHQUFQO0FBQ0Q7Ozt3QkFFR0EsSyxFQUFPO0FBQ1QsYUFBTyxLQUFLRCxJQUFMLENBQVVFLFFBQVYsQ0FBbUJELEtBQW5CLENBQVA7QUFDRDs7Ozs7QUFHSDs7O0lBQ01FLFM7QUFDSixxQkFBWUosR0FBWixFQUFpQjtBQUFBOztBQUNmLFNBQUtDLElBQUwsR0FBWUQsR0FBWjtBQUNEOzs7O3dCQUVHRSxLLEVBQU87QUFDVCxhQUFPLElBQUlFLFNBQUosNENBQWtCLEtBQUtILElBQXZCLElBQTZCQyxLQUE3QixHQUFQO0FBQ0Q7Ozt3QkFFR0EsSyxFQUFPO0FBQ1QsVUFBSSxLQUFLRCxJQUFMLENBQVVFLFFBQVYsQ0FBbUJELEtBQW5CLENBQUosRUFBK0I7QUFDN0IsY0FBTSxJQUFJRyxLQUFKLDJCQUFrQ0gsS0FBbEMsQ0FBTjtBQUNEO0FBQ0QsYUFBTyxLQUFQO0FBQ0Q7Ozs7O0FBR1ksU0FBU0wsUUFBVCxDQUFrQlMsaUJBQWxCLEVBQXFDO0FBQ2xELFVBQVFBLGlCQUFSO0FBQ0UsU0FBSyxNQUFMO0FBQWEsYUFBTyxJQUFJUCxRQUFKLENBQWEsRUFBYixDQUFQO0FBQ2IsU0FBSyxPQUFMO0FBQWMsYUFBTyxJQUFJSyxTQUFKLENBQWMsRUFBZCxDQUFQO0FBQ2QsU0FBSyxTQUFMO0FBQWdCLGFBQU8sSUFBSU4sV0FBSixFQUFQO0FBSGxCO0FBS0EsUUFBTSxJQUFJTyxLQUFKLHNCQUE2QkMsaUJBQTdCLG9DQUFOO0FBQ0QiLCJmaWxlIjoic2Vlbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImNsYXNzIE5vQ2hlY2tTZWVuIHtcbiAgYWRkKCkge3JldHVybiB0aGlzfVxuICBoYXMoKSB7cmV0dXJuIGZhbHNlfVxufVxuXG4vLyBUT0RPIDogdXNlIGFuIGltbXV0YWJsZSBjb2xsZWN0aW9uXG5jbGFzcyBMZWFmU2VlbiB7XG4gIGNvbnN0cnVjdG9yKGFycikge1xuICAgIHRoaXMuX2FyciA9IGFycjtcbiAgfVxuXG4gIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiBuZXcgTGVhZlNlZW4oWy4uLnRoaXMuX2FyciwgdmFsdWVdKTtcbiAgfVxuXG4gIGhhcyh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9hcnIuaW5jbHVkZXModmFsdWUpO1xuICB9XG59XG5cbi8vIFRPRE8gOiB1c2UgYW4gaW1tdXRhYmxlIGNvbGxlY3Rpb25cbmNsYXNzIFRocm93U2VlbiB7XG4gIGNvbnN0cnVjdG9yKGFycikge1xuICAgIHRoaXMuX2FyciA9IGFycjtcbiAgfVxuXG4gIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiBuZXcgVGhyb3dTZWVuKFsuLi50aGlzLl9hcnIsIHZhbHVlXSk7XG4gIH1cblxuICBoYXModmFsdWUpIHtcbiAgICBpZiAodGhpcy5fYXJyLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaXJjdWxhciByZWZlcmVuY2UgOiAke3ZhbHVlfWApO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZVNlZW4oY2lyY3VsYXJSZWZlcmVuY2UpIHtcbiAgc3dpdGNoIChjaXJjdWxhclJlZmVyZW5jZSkge1xuICAgIGNhc2UgJ2xlYWYnOiByZXR1cm4gbmV3IExlYWZTZWVuKFtdKTtcbiAgICBjYXNlICd0aHJvdyc6IHJldHVybiBuZXcgVGhyb3dTZWVuKFtdKTtcbiAgICBjYXNlICdub0NoZWNrJzogcmV0dXJuIG5ldyBOb0NoZWNrU2VlbigpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW5jb3JyZWN0IHZhbHVlICR7Y2lyY3VsYXJSZWZlcmVuY2V9IGZvciBjaXJjdWxhclJlZmVyZW5jZSBvcHRpb24uYCk7XG59XG4iXX0=