UNPKG

chain-able

Version:

interfaces that describe their intentions.

52 lines (43 loc) 5.01 kB
var isTrue = require('../is/true') var includes = require('../conditional/includes') var traverse = require('../traverse') var cache = require('../cache') /* prettier-ignore */ /** * @since 4.0.0 * @NOTE had `onlyLongest` & `asString` but can just .join(',') to match * @desc gathers dot.prop from any value, with a prefixed/base key * @param {Primitive} key * @param {Traversable} value * @param {boolean | undefined} longest * @return {Array<string>} paths */ module.exports = function(key, value, longest) { if (cache.has(value)) { return cache.get(value) } var paths = [] // gather all paths in the object // filter to ensure only the longest paths are kept // // .map the paths to `dot-prop`, // `matcher` takes in an array so it will work for all traverse(value).forEach(function(x) { var currentPath = this.path // ignore if (!currentPath || !currentPath.length) { return } // dot-prop the array of paths // if we have a key, prefix it paths.push( (key ? key + '.' : '') + (currentPath.join ? currentPath.join('.') : currentPath) ) }) if (isTrue(longest)) { // concat a string of all paths so we can unique each branch // @example `canada.arr.0` vs `canada.arr` paths = paths.filter(function (path) { return !paths.some(function (otherPath) { return otherPath !== path && includes(otherPath, path); } ); }) } cache.set(value, paths) return paths } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VzIjpbInBhdGhzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGlzVHJ1ZSA9IHJlcXVpcmUoJy4uL2lzL3RydWUnKVxuY29uc3QgaW5jbHVkZXMgPSByZXF1aXJlKCcuLi9jb25kaXRpb25hbC9pbmNsdWRlcycpXG5jb25zdCB0cmF2ZXJzZSA9IHJlcXVpcmUoJy4uL3RyYXZlcnNlJylcbmNvbnN0IGNhY2hlID0gcmVxdWlyZSgnLi4vY2FjaGUnKVxuXG4vKiBwcmV0dGllci1pZ25vcmUgKi9cbi8qKlxuICogQHNpbmNlIDQuMC4wXG4gKiBATk9URSBoYWQgYG9ubHlMb25nZXN0YCAmIGBhc1N0cmluZ2AgYnV0IGNhbiBqdXN0IC5qb2luKCcsJykgdG8gbWF0Y2hcbiAqIEBkZXNjIGdhdGhlcnMgZG90LnByb3AgZnJvbSBhbnkgdmFsdWUsIHdpdGggYSBwcmVmaXhlZC9iYXNlIGtleVxuICogQHBhcmFtICB7UHJpbWl0aXZlfSAga2V5XG4gKiBAcGFyYW0gIHtUcmF2ZXJzYWJsZX0gIHZhbHVlXG4gKiBAcGFyYW0gIHtib29sZWFuIHwgdW5kZWZpbmVkfSBsb25nZXN0XG4gKiBAcmV0dXJuIHtBcnJheTxzdHJpbmc+fSBwYXRoc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSwgdmFsdWUsIGxvbmdlc3QpIHtcbiAgaWYgKGNhY2hlLmhhcyh2YWx1ZSkpIHJldHVybiBjYWNoZS5nZXQodmFsdWUpXG5cbiAgbGV0IHBhdGhzID0gW11cblxuICAvLyBnYXRoZXIgYWxsIHBhdGhzIGluIHRoZSBvYmplY3RcbiAgLy8gZmlsdGVyIHRvIGVuc3VyZSBvbmx5IHRoZSBsb25nZXN0IHBhdGhzIGFyZSBrZXB0XG4gIC8vXG4gIC8vIC5tYXAgdGhlIHBhdGhzIHRvIGBkb3QtcHJvcGAsXG4gIC8vIGBtYXRjaGVyYCB0YWtlcyBpbiBhbiBhcnJheSBzbyBpdCB3aWxsIHdvcmsgZm9yIGFsbFxuICB0cmF2ZXJzZSh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbih4KSB7XG4gICAgY29uc3QgY3VycmVudFBhdGggPSB0aGlzLnBhdGhcblxuICAgIC8vIGlnbm9yZVxuICAgIGlmICghY3VycmVudFBhdGggfHwgIWN1cnJlbnRQYXRoLmxlbmd0aCkgcmV0dXJuXG5cbiAgICAvLyBkb3QtcHJvcCB0aGUgYXJyYXkgb2YgcGF0aHNcbiAgICAvLyBpZiB3ZSBoYXZlIGEga2V5LCBwcmVmaXggaXRcbiAgICBwYXRocy5wdXNoKFxuICAgICAgKGtleSA/IGtleSArICcuJyA6ICcnKSArXG4gICAgICAoY3VycmVudFBhdGguam9pbiA/IGN1cnJlbnRQYXRoLmpvaW4oJy4nKSA6IGN1cnJlbnRQYXRoKVxuICAgIClcbiAgfSlcblxuICBpZiAoaXNUcnVlKGxvbmdlc3QpKSB7XG4gICAgLy8gY29uY2F0IGEgc3RyaW5nIG9mIGFsbCBwYXRocyBzbyB3ZSBjYW4gdW5pcXVlIGVhY2ggYnJhbmNoXG4gICAgLy8gQGV4YW1wbGUgYGNhbmFkYS5hcnIuMGAgdnMgYGNhbmFkYS5hcnJgXG4gICAgcGF0aHMgPSBwYXRocy5maWx0ZXIocGF0aCA9PiAhcGF0aHMuc29tZShvdGhlclBhdGggPT5cbiAgICAgIG90aGVyUGF0aCAhPT0gcGF0aCAmJiBpbmNsdWRlcyhvdGhlclBhdGgsIHBhdGgpXG4gICAgKSlcbiAgfVxuXG4gIGNhY2hlLnNldCh2YWx1ZSwgcGF0aHMpXG5cbiAgcmV0dXJuIHBhdGhzXG59XG4iXSwibmFtZXMiOlsiY29uc3QiLCJsZXQiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7QUFDcENBLEdBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLHlCQUF5QixDQUFDO0FBQ25EQSxHQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDdkNBLEdBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWWpDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtFQUM3QyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBQSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUE7O0VBRTdDQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUU7Ozs7Ozs7RUFPZCxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0lBQ2xDRCxHQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJOzs7SUFHN0IsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBQSxNQUFNLEVBQUE7Ozs7SUFJL0MsS0FBSyxDQUFDLElBQUk7TUFDUixDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztNQUN0QixDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUM7S0FDekQ7R0FDRixDQUFDOztFQUVGLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFOzs7SUFHbkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBQSxJQUFJLENBQUEsQ0FBQyxBQUFHLFNBQUEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQUEsU0FBUyxDQUFBLENBQUMsQUFDakQsU0FBQSxTQUFTLEtBQUssSUFBSSxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUE7S0FDaEQsR0FBQSxDQUFDO0dBQ0g7O0VBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDOztFQUV2QixPQUFPLEtBQUs7Q0FDYjsifQ==