UNPKG

deep-iterator

Version:

Deep iteration of any object or iterable collection.

182 lines (168 loc) 10.8 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); var _generators = require('./generators'); var _tag = require('./tag'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Node = function () { function Node(key, value, parentNode, isCircular) { (0, _classCallCheck3.default)(this, Node); this._value = value; this._key = key; this._parent = parentNode.value, this._parentNode = parentNode; this._selectGenerator = parentNode._selectGenerator; this._tag = (0, _tag.getTag)(value); this._generator = this._selectGenerator.getGenerator(this._tag); this._isCircular = isCircular; this._isLeaf = this._generator === _generators.LEAF || this._isCircular; if (!this._isLeaf && this._selectGenerator.skipIteration(this)) { this._isLeaf = true; this._generator = _generators.LEAF; } } (0, _createClass3.default)(Node, [{ key: 'createIterator', value: function createIterator() { if (this._generator === _generators.LEAF) { throw new Error("createIterator called on a non iterable node."); } return this._generator(this.value); } }, { key: 'isCircular', value: function isCircular() { return this._isCircular; } }, { key: 'isLeaf', value: function isLeaf() { return this._isLeaf; } }, { key: 'isNull', value: function isNull() { return this.type === 'Null'; } }, { key: 'isUndefined', value: function isUndefined() { return this.type === 'Undefined'; } }, { key: 'isBoolean', value: function isBoolean() { return this.type === 'Boolean'; } }, { key: 'isNumber', value: function isNumber() { return this.type === 'Number'; } }, { key: 'isString', value: function isString() { return this.type === 'String'; } }, { key: 'isSymbol', value: function isSymbol() { return this.type === 'Symbol'; } }, { key: 'isDate', value: function isDate() { return this.type === 'Date'; } }, { key: 'isRegExp', value: function isRegExp() { return this.type === 'RegExp'; } }, { key: 'isFunction', value: function isFunction() { return this.type === 'Function'; } }, { key: 'isGeneratorFunction', value: function isGeneratorFunction() { return this.type === 'GeneratorFunction'; } }, { key: 'isPromise', value: function isPromise() { return this.type === 'Promise'; } }, { key: 'isArray', value: function isArray() { return this.type === 'Array'; } }, { key: 'isSet', value: function isSet() { return this.type === 'Set'; } }, { key: 'isMap', value: function isMap() { return this.type === 'Map'; } }, { key: 'isUserDefinedIterable', value: function isUserDefinedIterable() { return this.type === 'UserDefinedIterable'; } }, { key: 'isNonIterableObject', value: function isNonIterableObject() { return this.type === 'NonIterableObject'; } }, { key: 'value', get: function get() { return this._value; } }, { key: 'key', get: function get() { return this._key; } }, { key: 'parent', get: function get() { return this._parent; } }, { key: 'parentNode', get: function get() { return this._parentNode; } }, { key: 'path', get: function get() { // evaluated only when needed - could memoize it return [].concat((0, _toConsumableArray3.default)(this.parentNode.path), [this.key]); } }, { key: 'type', get: function get() { // simple memoization /* istanbul ignore next */ if (this._type === undefined) { this._type = (0, _tag.getTypeFromTag)(this._tag); } return this._type; } }]); return Node; }(); exports.default = Node; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ub2RlLmpzIl0sIm5hbWVzIjpbIk5vZGUiLCJrZXkiLCJ2YWx1ZSIsInBhcmVudE5vZGUiLCJpc0NpcmN1bGFyIiwiX3ZhbHVlIiwiX2tleSIsIl9wYXJlbnQiLCJfcGFyZW50Tm9kZSIsIl9zZWxlY3RHZW5lcmF0b3IiLCJfdGFnIiwiX2dlbmVyYXRvciIsImdldEdlbmVyYXRvciIsIl9pc0NpcmN1bGFyIiwiX2lzTGVhZiIsInNraXBJdGVyYXRpb24iLCJFcnJvciIsInR5cGUiLCJwYXRoIiwiX3R5cGUiLCJ1bmRlZmluZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOzs7O0lBR3FCQSxJO0FBQ25CLGdCQUFZQyxHQUFaLEVBQWlCQyxLQUFqQixFQUF3QkMsVUFBeEIsRUFBb0NDLFVBQXBDLEVBQWdEO0FBQUE7O0FBQzlDLFNBQUtDLE1BQUwsR0FBY0gsS0FBZDtBQUNBLFNBQUtJLElBQUwsR0FBWUwsR0FBWjtBQUNBLFNBQUtNLE9BQUwsR0FBZUosV0FBV0QsS0FBMUIsRUFDQSxLQUFLTSxXQUFMLEdBQW1CTCxVQURuQjtBQUVBLFNBQUtNLGdCQUFMLEdBQXdCTixXQUFXTSxnQkFBbkM7QUFDQSxTQUFLQyxJQUFMLEdBQVksaUJBQU9SLEtBQVAsQ0FBWjtBQUNBLFNBQUtTLFVBQUwsR0FBa0IsS0FBS0YsZ0JBQUwsQ0FBc0JHLFlBQXRCLENBQW1DLEtBQUtGLElBQXhDLENBQWxCO0FBQ0EsU0FBS0csV0FBTCxHQUFtQlQsVUFBbkI7QUFDQSxTQUFLVSxPQUFMLEdBQWUsS0FBS0gsVUFBTCx5QkFBNEIsS0FBS0UsV0FBaEQ7QUFDQSxRQUFJLENBQUMsS0FBS0MsT0FBTixJQUFpQixLQUFLTCxnQkFBTCxDQUFzQk0sYUFBdEIsQ0FBb0MsSUFBcEMsQ0FBckIsRUFBZ0U7QUFDOUQsV0FBS0QsT0FBTCxHQUFlLElBQWY7QUFDQSxXQUFLSCxVQUFMO0FBQ0Q7QUFDRjs7OztxQ0FFZ0I7QUFDZixVQUFJLEtBQUtBLFVBQUwscUJBQUosRUFBOEI7QUFDNUIsY0FBTSxJQUFJSyxLQUFKLENBQVUsK0NBQVYsQ0FBTjtBQUNEO0FBQ0QsYUFBTyxLQUFLTCxVQUFMLENBQWdCLEtBQUtULEtBQXJCLENBQVA7QUFDRDs7O2lDQStCWTtBQUNYLGFBQU8sS0FBS1csV0FBWjtBQUNEOzs7NkJBRVE7QUFDUCxhQUFPLEtBQUtDLE9BQVo7QUFDRDs7OzZCQUVRO0FBQ1AsYUFBTyxLQUFLRyxJQUFMLEtBQWMsTUFBckI7QUFDRDs7O2tDQUVhO0FBQ1osYUFBTyxLQUFLQSxJQUFMLEtBQWMsV0FBckI7QUFDRDs7O2dDQUVXO0FBQ1YsYUFBTyxLQUFLQSxJQUFMLEtBQWMsU0FBckI7QUFDRDs7OytCQUVVO0FBQ1QsYUFBTyxLQUFLQSxJQUFMLEtBQWMsUUFBckI7QUFDRDs7OytCQUVVO0FBQ1QsYUFBTyxLQUFLQSxJQUFMLEtBQWMsUUFBckI7QUFDRDs7OytCQUVVO0FBQ1QsYUFBTyxLQUFLQSxJQUFMLEtBQWMsUUFBckI7QUFDRDs7OzZCQUVRO0FBQ1AsYUFBTyxLQUFLQSxJQUFMLEtBQWMsTUFBckI7QUFDRDs7OytCQUVVO0FBQ1QsYUFBTyxLQUFLQSxJQUFMLEtBQWMsUUFBckI7QUFDRDs7O2lDQUVZO0FBQ1gsYUFBTyxLQUFLQSxJQUFMLEtBQWMsVUFBckI7QUFDRDs7OzBDQUVxQjtBQUNwQixhQUFPLEtBQUtBLElBQUwsS0FBYyxtQkFBckI7QUFDRDs7O2dDQUVXO0FBQ1YsYUFBTyxLQUFLQSxJQUFMLEtBQWMsU0FBckI7QUFDRDs7OzhCQUVTO0FBQ1IsYUFBTyxLQUFLQSxJQUFMLEtBQWMsT0FBckI7QUFDRDs7OzRCQUVPO0FBQ04sYUFBTyxLQUFLQSxJQUFMLEtBQWMsS0FBckI7QUFDRDs7OzRCQUVPO0FBQ04sYUFBTyxLQUFLQSxJQUFMLEtBQWMsS0FBckI7QUFDRDs7OzRDQUV1QjtBQUN0QixhQUFPLEtBQUtBLElBQUwsS0FBYyxxQkFBckI7QUFDRDs7OzBDQUVxQjtBQUNwQixhQUFPLEtBQUtBLElBQUwsS0FBYyxtQkFBckI7QUFDRDs7O3dCQW5HVztBQUNWLGFBQU8sS0FBS1osTUFBWjtBQUNEOzs7d0JBRVM7QUFDUixhQUFPLEtBQUtDLElBQVo7QUFDRDs7O3dCQUVZO0FBQ1gsYUFBTyxLQUFLQyxPQUFaO0FBQ0Q7Ozt3QkFFZ0I7QUFDZixhQUFPLEtBQUtDLFdBQVo7QUFDRDs7O3dCQUVVO0FBQUU7QUFDWCx3REFBVyxLQUFLTCxVQUFMLENBQWdCZSxJQUEzQixJQUFpQyxLQUFLakIsR0FBdEM7QUFDRDs7O3dCQUVVO0FBQ1Q7QUFDQTtBQUNBLFVBQUksS0FBS2tCLEtBQUwsS0FBZUMsU0FBbkIsRUFBOEI7QUFDNUIsYUFBS0QsS0FBTCxHQUFhLHlCQUFlLEtBQUtULElBQXBCLENBQWI7QUFDRDtBQUNELGFBQU8sS0FBS1MsS0FBWjtBQUNEOzs7OztrQkFuRGtCbkIsSSIsImZpbGUiOiJub2RlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMRUFGfSBmcm9tICcuL2dlbmVyYXRvcnMnO1xuaW1wb3J0IHtnZXRUYWcsIGdldFR5cGVGcm9tVGFnfSBmcm9tICcuL3RhZyc7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9kZSB7XG4gIGNvbnN0cnVjdG9yKGtleSwgdmFsdWUsIHBhcmVudE5vZGUsIGlzQ2lyY3VsYXIpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuX2tleSA9IGtleTtcbiAgICB0aGlzLl9wYXJlbnQgPSBwYXJlbnROb2RlLnZhbHVlLFxuICAgIHRoaXMuX3BhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICAgIHRoaXMuX3NlbGVjdEdlbmVyYXRvciA9IHBhcmVudE5vZGUuX3NlbGVjdEdlbmVyYXRvcjtcbiAgICB0aGlzLl90YWcgPSBnZXRUYWcodmFsdWUpO1xuICAgIHRoaXMuX2dlbmVyYXRvciA9IHRoaXMuX3NlbGVjdEdlbmVyYXRvci5nZXRHZW5lcmF0b3IodGhpcy5fdGFnKTtcbiAgICB0aGlzLl9pc0NpcmN1bGFyID0gaXNDaXJjdWxhcjtcbiAgICB0aGlzLl9pc0xlYWYgPSB0aGlzLl9nZW5lcmF0b3IgPT09IExFQUYgfHwgdGhpcy5faXNDaXJjdWxhcjtcbiAgICBpZiAoIXRoaXMuX2lzTGVhZiAmJiB0aGlzLl9zZWxlY3RHZW5lcmF0b3Iuc2tpcEl0ZXJhdGlvbih0aGlzKSkge1xuICAgICAgdGhpcy5faXNMZWFmID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2dlbmVyYXRvciA9IExFQUY7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlSXRlcmF0b3IoKSB7XG4gICAgaWYgKHRoaXMuX2dlbmVyYXRvciA9PT0gTEVBRikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY3JlYXRlSXRlcmF0b3IgY2FsbGVkIG9uIGEgbm9uIGl0ZXJhYmxlIG5vZGUuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZ2VuZXJhdG9yKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIGdldCBrZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2tleTtcbiAgfVxuXG4gIGdldCBwYXJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcbiAgfVxuXG4gIGdldCBwYXJlbnROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnROb2RlO1xuICB9XG5cbiAgZ2V0IHBhdGgoKSB7IC8vIGV2YWx1YXRlZCBvbmx5IHdoZW4gbmVlZGVkIC0gY291bGQgbWVtb2l6ZSBpdFxuICAgIHJldHVybiBbLi4udGhpcy5wYXJlbnROb2RlLnBhdGgsIHRoaXMua2V5XTtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIC8vIHNpbXBsZSBtZW1vaXphdGlvblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fdHlwZSA9IGdldFR5cGVGcm9tVGFnKHRoaXMuX3RhZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG5cbiAgaXNDaXJjdWxhcigpIHtcbiAgICByZXR1cm4gdGhpcy5faXNDaXJjdWxhcjtcbiAgfVxuXG4gIGlzTGVhZigpIHtcbiAgICByZXR1cm4gdGhpcy5faXNMZWFmO1xuICB9XG5cbiAgaXNOdWxsKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdOdWxsJztcbiAgfVxuXG4gIGlzVW5kZWZpbmVkKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdVbmRlZmluZWQnO1xuICB9XG5cbiAgaXNCb29sZWFuKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdCb29sZWFuJztcbiAgfVxuXG4gIGlzTnVtYmVyKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdOdW1iZXInO1xuICB9XG5cbiAgaXNTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ1N0cmluZyc7XG4gIH1cblxuICBpc1N5bWJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAnU3ltYm9sJztcbiAgfVxuXG4gIGlzRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAnRGF0ZSc7XG4gIH1cblxuICBpc1JlZ0V4cCgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAnUmVnRXhwJztcbiAgfVxuXG4gIGlzRnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ0Z1bmN0aW9uJztcbiAgfVxuXG4gIGlzR2VuZXJhdG9yRnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ0dlbmVyYXRvckZ1bmN0aW9uJztcbiAgfVxuXG4gIGlzUHJvbWlzZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAnUHJvbWlzZSc7XG4gIH1cblxuICBpc0FycmF5KCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdBcnJheSc7XG4gIH1cblxuICBpc1NldCgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAnU2V0JztcbiAgfVxuXG4gIGlzTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdNYXAnO1xuICB9XG5cbiAgaXNVc2VyRGVmaW5lZEl0ZXJhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdVc2VyRGVmaW5lZEl0ZXJhYmxlJztcbiAgfVxuXG4gIGlzTm9uSXRlcmFibGVPYmplY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ05vbkl0ZXJhYmxlT2JqZWN0JztcbiAgfVxuXG59XG4iXX0=