deep-iterator
Version:
Deep iteration of any object or iterable collection.
104 lines (82 loc) • 5.18 kB
JavaScript
;
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=