UNPKG

foop

Version:

interfaces that describe their intentions.

227 lines (202 loc) 12.8 kB
// need some thin wrapper around values to go up and down path // // // const ValueObject = { // node: value, // kind: typeof, // isRoot: false, // isLeaf: false, // isPrimitive: false, // branches: [], // isFirst: false, // isLast: false, // parent: {}, // } // // class It { // constructor(x) { // // this.tree = { // // parent: {}, // // } // // // this.root = x // // // this.previous = x // this.current = x // // this.depth = 0 // this.all = new Set() // // this.path // // this.key // } // // get node() { // return this.current // } // // addBranch() {} // // // for updating // branchHead() {} // // goUp() { // this.depth-- // } // goDown(current) { // this.parent = this.current // this.depth++ // this.current = current // } // // not needed but conceptually // // goNext() {} // // find() {} // path() {} // } // const it = x => new It(x) // return Array.from(parents.values()).indexOf(value) !== -1 // const keys = Array.from(parents.keys()) // console.log('___pk', {keys}) // for (let k = 0; k < keys.length; k++) { // const key = keys[k] // const matches = // depth.includes(key) || (key.includes && key.includes(depth)) // console.log({key, matches, depth}) // // .has(value) // if (matches) { // let has = false // parents.get(key).forEach(haz => { // if (value === haz) has = true // }) // return has // } // } // for (let i = depth; i >= depth; i--) { // if (parents.get(i).has(value)) return true // } // return false // const pps = [] // const ppHas = value => { // for (let i = 0; i < pps.length; i++) { // if (pps[i] === value) { // return true // } // } // } // const ppAdd = value => pps.push(value) // const ppPop = () => pps.pop() // else if (ppHas(node)) { // if (ENV_DEBUG) { // console.log('PPHAS!!!!!!!!!!!', {node, path: this.path}) // } // this.isCircular = true // } // ----- clear/update ---- // if (!isUndefined(this.iteratee)) { // this.iteratee[this.key] = value // } // // dot.set(this.iteratee, this.key, value) // dot.set(this.iteratee, this.path, value) // dot.set(this.iteratee, this.key, value) // console.log({traverser: this}) // @NOTE think about this more, but updating can change structure // if (isTrue(clear)) clearParents() // ----- parents // if (!this.parents.has(depth)) this.parents.set(depth, new Set()) // this.parents.get(depth).add(value) // (isObj(value) ? parents.add(value) : parents.add(value)) // const removeLastParent = () => parents.delete(lastParent) // parents.forEach(parent => (parent.has(value) ? parent.delete(value) : null)) // parents.delete(value) // ---- eq ---- // from underscore.js & ramda // // Assume equality for cyclic structures. The algorithm for detecting cyclic // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. // // Initializing stack of traversed objects. // It's done here since we only need them for objects and arrays comparison. // let length = stackA.length // while (length--) { // // Linear search. Performance is inversely proportional to the number of // // unique nested structures. // if (stackA[length] === a) return stackB[length] === b // } // // // Add the first object to the stack of traversed objects. // stackA.push(a) // stackB.push(b) // BREAKS ANY BUT OBJ // if (!isObjLoose(node)) { // node = _node // return notEqual() // } // else { // _node = node // } // if (isObjNotNull(node)) { // // _node = node // // nodes.push(node) // // node = node[key] // } // else { // // node = nodes.pop() // } // node = node ? node[traverser.key] : node // instance.before(traverser => { // // node = traverser.iteratee // // if (!isObjNotNull(x)) return // // // nodes.push(x) // // x = x[key] // // nodes.push(x) // }) // instance.after(() => { // // x = node // // console.log('x before pop', {x}) // // node = // // nodes.pop() // // x = node // // console.log('x after pop, nodes', {x}) // }) // ----- remove ----- // if (isObj(obj)) deleteFromObjOrArray(obj, this.key) // else deleteFromObjOrArray(this.parent, this.key) // deleteFromObjOrArray(this.parent, this.key) // deleteFromObjOrArray(this.iteratee, this.key) // if (isUndefined(obj)) { // // throw new Error('why?') // } // else if (isArray(obj)) { // /* istanbul ignore next: dev */ // if (ENV_DEBUG) { // console.log('traverse:remove:array', obj, this.key) // } // // obj.splice(this.key, 1) // } // else if (isObjNotNull(obj)) { // /* istanbul ignore next: dev */ // if (ENV_DEBUG) { // console.log('traverse:remove:obj', this.key) // } // // delete obj[this.key] // } // // if (isObjNotNull(this.parent)) { // delete this.parent[this.key] // // /* istanbul ignore next: dev */ // if (ENV_DEBUG) { // console.log('traverse:remove:parent', this.key) // } // } // if (isObjNotNull(this.iteratee)) { // delete this.iteratee[this.key] // // /* istanbul ignore next: dev */ // if (ENV_DEBUG) { // console.log('traverse:remove:iteratee', this.key) // } // } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhdmVyc2UtY29tbWVudHMuanMiLCJzb3VyY2VzIjpbInRyYXZlcnNlLWNvbW1lbnRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIG5lZWQgc29tZSB0aGluIHdyYXBwZXIgYXJvdW5kIHZhbHVlcyB0byBnbyB1cCBhbmQgZG93biBwYXRoXG4vL1xuLy9cbi8vIGNvbnN0IFZhbHVlT2JqZWN0ID0ge1xuLy8gICBub2RlOiB2YWx1ZSxcbi8vICAga2luZDogdHlwZW9mLFxuLy8gICBpc1Jvb3Q6IGZhbHNlLFxuLy8gICBpc0xlYWY6IGZhbHNlLFxuLy8gICBpc1ByaW1pdGl2ZTogZmFsc2UsXG4vLyAgIGJyYW5jaGVzOiBbXSxcbi8vICAgaXNGaXJzdDogZmFsc2UsXG4vLyAgIGlzTGFzdDogZmFsc2UsXG4vLyAgIHBhcmVudDoge30sXG4vLyB9XG4vL1xuLy8gY2xhc3MgSXQge1xuLy8gICBjb25zdHJ1Y3Rvcih4KSB7XG4vLyAgICAgLy8gdGhpcy50cmVlID0ge1xuLy8gICAgIC8vIHBhcmVudDoge30sXG4vLyAgICAgLy8gfVxuLy9cbi8vICAgICAvLyB0aGlzLnJvb3QgPSB4XG4vL1xuLy8gICAgIC8vIHRoaXMucHJldmlvdXMgPSB4XG4vLyAgICAgdGhpcy5jdXJyZW50ID0geFxuLy9cbi8vICAgICB0aGlzLmRlcHRoID0gMFxuLy8gICAgIHRoaXMuYWxsID0gbmV3IFNldCgpXG4vLyAgICAgLy8gdGhpcy5wYXRoXG4vLyAgICAgLy8gdGhpcy5rZXlcbi8vICAgfVxuLy9cbi8vICAgZ2V0IG5vZGUoKSB7XG4vLyAgICAgcmV0dXJuIHRoaXMuY3VycmVudFxuLy8gICB9XG4vL1xuLy8gICBhZGRCcmFuY2goKSB7fVxuLy9cbi8vICAgLy8gZm9yIHVwZGF0aW5nXG4vLyAgIGJyYW5jaEhlYWQoKSB7fVxuLy9cbi8vICAgZ29VcCgpIHtcbi8vICAgICB0aGlzLmRlcHRoLS1cbi8vICAgfVxuLy8gICBnb0Rvd24oY3VycmVudCkge1xuLy8gICAgIHRoaXMucGFyZW50ID0gdGhpcy5jdXJyZW50XG4vLyAgICAgdGhpcy5kZXB0aCsrXG4vLyAgICAgdGhpcy5jdXJyZW50ID0gY3VycmVudFxuLy8gICB9XG4vLyAgIC8vIG5vdCBuZWVkZWQgYnV0IGNvbmNlcHR1YWxseVxuLy8gICAvLyBnb05leHQoKSB7fVxuLy9cbi8vICAgZmluZCgpIHt9XG4vLyAgIHBhdGgoKSB7fVxuLy8gfVxuLy8gY29uc3QgaXQgPSB4ID0+IG5ldyBJdCh4KVxuXG5cbi8vIHJldHVybiBBcnJheS5mcm9tKHBhcmVudHMudmFsdWVzKCkpLmluZGV4T2YodmFsdWUpICE9PSAtMVxuLy8gY29uc3Qga2V5cyA9IEFycmF5LmZyb20ocGFyZW50cy5rZXlzKCkpXG4vLyBjb25zb2xlLmxvZygnX19fcGsnLCB7a2V5c30pXG4vLyBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbi8vICAgY29uc3Qga2V5ID0ga2V5c1trXVxuLy8gICBjb25zdCBtYXRjaGVzID1cbi8vICAgICBkZXB0aC5pbmNsdWRlcyhrZXkpIHx8IChrZXkuaW5jbHVkZXMgJiYga2V5LmluY2x1ZGVzKGRlcHRoKSlcbi8vICAgY29uc29sZS5sb2coe2tleSwgbWF0Y2hlcywgZGVwdGh9KVxuLy8gICAvLyAuaGFzKHZhbHVlKVxuLy8gICBpZiAobWF0Y2hlcykge1xuLy8gICAgIGxldCBoYXMgPSBmYWxzZVxuLy8gICAgIHBhcmVudHMuZ2V0KGtleSkuZm9yRWFjaChoYXogPT4ge1xuLy8gICAgICAgaWYgKHZhbHVlID09PSBoYXopIGhhcyA9IHRydWVcbi8vICAgICB9KVxuLy8gICAgIHJldHVybiBoYXNcbi8vICAgfVxuLy8gfVxuXG4vLyBmb3IgKGxldCBpID0gZGVwdGg7IGkgPj0gZGVwdGg7IGktLSkge1xuLy8gaWYgKHBhcmVudHMuZ2V0KGkpLmhhcyh2YWx1ZSkpIHJldHVybiB0cnVlXG4vLyB9XG5cbi8vIHJldHVybiBmYWxzZVxuXG5cbi8vIGNvbnN0IHBwcyA9IFtdXG4vLyBjb25zdCBwcEhhcyA9IHZhbHVlID0+IHtcbi8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcHMubGVuZ3RoOyBpKyspIHtcbi8vICAgICBpZiAocHBzW2ldID09PSB2YWx1ZSkge1xuLy8gICAgICAgcmV0dXJuIHRydWVcbi8vICAgICB9XG4vLyAgIH1cbi8vIH1cbi8vIGNvbnN0IHBwQWRkID0gdmFsdWUgPT4gcHBzLnB1c2godmFsdWUpXG4vLyBjb25zdCBwcFBvcCA9ICgpID0+IHBwcy5wb3AoKVxuXG4vLyBlbHNlIGlmIChwcEhhcyhub2RlKSkge1xuLy8gICBpZiAoRU5WX0RFQlVHKSB7XG4vLyAgICAgY29uc29sZS5sb2coJ1BQSEFTISEhISEhISEhISEnLCB7bm9kZSwgcGF0aDogdGhpcy5wYXRofSlcbi8vICAgfVxuLy8gICB0aGlzLmlzQ2lyY3VsYXIgPSB0cnVlXG4vLyB9XG5cblxuLy8gLS0tLS0gY2xlYXIvdXBkYXRlIC0tLS1cbi8vIGlmICghaXNVbmRlZmluZWQodGhpcy5pdGVyYXRlZSkpIHtcbi8vICAgdGhpcy5pdGVyYXRlZVt0aGlzLmtleV0gPSB2YWx1ZVxuLy8gfVxuLy8gLy8gZG90LnNldCh0aGlzLml0ZXJhdGVlLCB0aGlzLmtleSwgdmFsdWUpXG5cbi8vIGRvdC5zZXQodGhpcy5pdGVyYXRlZSwgdGhpcy5wYXRoLCB2YWx1ZSlcblxuLy8gZG90LnNldCh0aGlzLml0ZXJhdGVlLCB0aGlzLmtleSwgdmFsdWUpXG4vLyBjb25zb2xlLmxvZyh7dHJhdmVyc2VyOiB0aGlzfSlcblxuLy8gQE5PVEUgdGhpbmsgYWJvdXQgdGhpcyBtb3JlLCBidXQgdXBkYXRpbmcgY2FuIGNoYW5nZSBzdHJ1Y3R1cmVcbi8vIGlmIChpc1RydWUoY2xlYXIpKSBjbGVhclBhcmVudHMoKVxuXG4vLyAtLS0tLSBwYXJlbnRzXG4vLyBpZiAoIXRoaXMucGFyZW50cy5oYXMoZGVwdGgpKSB0aGlzLnBhcmVudHMuc2V0KGRlcHRoLCBuZXcgU2V0KCkpXG4vLyB0aGlzLnBhcmVudHMuZ2V0KGRlcHRoKS5hZGQodmFsdWUpXG5cbi8vIChpc09iaih2YWx1ZSkgPyBwYXJlbnRzLmFkZCh2YWx1ZSkgOiBwYXJlbnRzLmFkZCh2YWx1ZSkpXG4vLyBjb25zdCByZW1vdmVMYXN0UGFyZW50ID0gKCkgPT4gcGFyZW50cy5kZWxldGUobGFzdFBhcmVudClcblxuLy8gcGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiAocGFyZW50Lmhhcyh2YWx1ZSkgPyBwYXJlbnQuZGVsZXRlKHZhbHVlKSA6IG51bGwpKVxuLy8gcGFyZW50cy5kZWxldGUodmFsdWUpXG5cblxuLy8gLS0tLSBlcSAtLS0tXG5cbi8vIGZyb20gdW5kZXJzY29yZS5qcyAmIHJhbWRhXG4vL1xuLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGN5Y2xpY1xuLy8gc3RydWN0dXJlcyBpcyBhZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qgb3BlcmF0aW9uIGBKT2AuXG4vL1xuLy8gSW5pdGlhbGl6aW5nIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuLy8gSXQncyBkb25lIGhlcmUgc2luY2Ugd2Ugb25seSBuZWVkIHRoZW0gZm9yIG9iamVjdHMgYW5kIGFycmF5cyBjb21wYXJpc29uLlxuLy8gbGV0IGxlbmd0aCA9IHN0YWNrQS5sZW5ndGhcbi8vIHdoaWxlIChsZW5ndGgtLSkge1xuLy8gICAvLyBMaW5lYXIgc2VhcmNoLiBQZXJmb3JtYW5jZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2Zcbi8vICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuLy8gICBpZiAoc3RhY2tBW2xlbmd0aF0gPT09IGEpIHJldHVybiBzdGFja0JbbGVuZ3RoXSA9PT0gYlxuLy8gfVxuLy9cbi8vIC8vIEFkZCB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbi8vIHN0YWNrQS5wdXNoKGEpXG4vLyBzdGFja0IucHVzaChiKVxuXG4vLyBCUkVBS1MgQU5ZIEJVVCBPQkpcbi8vIGlmICghaXNPYmpMb29zZShub2RlKSkge1xuLy8gICBub2RlID0gX25vZGVcbi8vICAgcmV0dXJuIG5vdEVxdWFsKClcbi8vIH1cbi8vIGVsc2Uge1xuLy8gICBfbm9kZSA9IG5vZGVcbi8vIH1cblxuLy8gaWYgKGlzT2JqTm90TnVsbChub2RlKSkgIHtcbi8vICAgLy8gX25vZGUgPSBub2RlXG4vLyAgIC8vIG5vZGVzLnB1c2gobm9kZSlcbi8vICAgLy8gbm9kZSA9IG5vZGVba2V5XVxuLy8gfVxuLy8gZWxzZSB7XG4vLyAgIC8vIG5vZGUgPSBub2Rlcy5wb3AoKVxuLy8gfVxuXG4vLyBub2RlID0gbm9kZSA/IG5vZGVbdHJhdmVyc2VyLmtleV0gOiBub2RlXG4vLyBpbnN0YW5jZS5iZWZvcmUodHJhdmVyc2VyID0+IHtcbi8vICAgLy8gbm9kZSA9IHRyYXZlcnNlci5pdGVyYXRlZVxuLy8gICAvLyBpZiAoIWlzT2JqTm90TnVsbCh4KSkgcmV0dXJuXG4vLyAgIC8vIC8vIG5vZGVzLnB1c2goeClcbi8vICAgLy8geCA9IHhba2V5XVxuLy8gICAvLyBub2Rlcy5wdXNoKHgpXG4vLyB9KVxuLy8gaW5zdGFuY2UuYWZ0ZXIoKCkgPT4ge1xuLy8gICAvLyB4ID0gbm9kZVxuLy8gICAvLyBjb25zb2xlLmxvZygneCBiZWZvcmUgcG9wJywge3h9KVxuLy8gICAvLyBub2RlID1cbi8vICAgLy8gbm9kZXMucG9wKClcbi8vICAgLy8geCA9IG5vZGVcbi8vICAgLy8gY29uc29sZS5sb2coJ3ggYWZ0ZXIgcG9wLCBub2RlcycsIHt4fSlcbi8vIH0pXG5cblxuLy8gLS0tLS0gcmVtb3ZlIC0tLS0tXG4vLyBpZiAoaXNPYmoob2JqKSkgZGVsZXRlRnJvbU9iak9yQXJyYXkob2JqLCB0aGlzLmtleSlcbi8vIGVsc2UgZGVsZXRlRnJvbU9iak9yQXJyYXkodGhpcy5wYXJlbnQsIHRoaXMua2V5KVxuLy8gZGVsZXRlRnJvbU9iak9yQXJyYXkodGhpcy5wYXJlbnQsIHRoaXMua2V5KVxuLy8gZGVsZXRlRnJvbU9iak9yQXJyYXkodGhpcy5pdGVyYXRlZSwgdGhpcy5rZXkpXG5cbi8vIGlmIChpc1VuZGVmaW5lZChvYmopKSB7XG4vLyAgIC8vIHRocm93IG5ldyBFcnJvcignd2h5PycpXG4vLyB9XG4vLyBlbHNlIGlmIChpc0FycmF5KG9iaikpIHtcbi8vICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRldiAqL1xuLy8gICBpZiAoRU5WX0RFQlVHKSB7XG4vLyAgICAgY29uc29sZS5sb2coJ3RyYXZlcnNlOnJlbW92ZTphcnJheScsIG9iaiwgdGhpcy5rZXkpXG4vLyAgIH1cbi8vXG4vLyAgIG9iai5zcGxpY2UodGhpcy5rZXksIDEpXG4vLyB9XG4vLyBlbHNlIGlmIChpc09iak5vdE51bGwob2JqKSkge1xuLy8gICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGV2ICovXG4vLyAgIGlmIChFTlZfREVCVUcpIHtcbi8vICAgICBjb25zb2xlLmxvZygndHJhdmVyc2U6cmVtb3ZlOm9iaicsIHRoaXMua2V5KVxuLy8gICB9XG4vL1xuLy8gICBkZWxldGUgb2JqW3RoaXMua2V5XVxuLy8gfVxuLy9cbi8vIGlmIChpc09iak5vdE51bGwodGhpcy5wYXJlbnQpKSB7XG4vLyAgIGRlbGV0ZSB0aGlzLnBhcmVudFt0aGlzLmtleV1cbi8vXG4vLyAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkZXYgKi9cbi8vICAgaWYgKEVOVl9ERUJVRykge1xuLy8gICAgIGNvbnNvbGUubG9nKCd0cmF2ZXJzZTpyZW1vdmU6cGFyZW50JywgdGhpcy5rZXkpXG4vLyAgIH1cbi8vIH1cbi8vIGlmIChpc09iak5vdE51bGwodGhpcy5pdGVyYXRlZSkpIHtcbi8vICAgZGVsZXRlIHRoaXMuaXRlcmF0ZWVbdGhpcy5rZXldXG4vL1xuLy8gICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGV2ICovXG4vLyAgIGlmIChFTlZfREVCVUcpIHtcbi8vICAgICBjb25zb2xlLmxvZygndHJhdmVyc2U6cmVtb3ZlOml0ZXJhdGVlJywgdGhpcy5rZXkpXG4vLyAgIH1cbi8vIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9