UNPKG

object-path-generator

Version:
58 lines (57 loc) 2.19 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.pathgen = void 0; var getNewPath = function (currPath, newProp) { return [currPath, newProp].filter(Boolean).join('.'); }; var pathgenInner = function (name, path, customFn, cache) { if (path === void 0) { path = name !== null && name !== void 0 ? name : ''; } if (cache === void 0) { cache = {}; } return new Proxy(function () { var options = []; for (var _i = 0; _i < arguments.length; _i++) { options[_i] = arguments[_i]; } if (customFn) { return customFn.apply(void 0, __spreadArray([path], options, false)); } var finalPath = path; if (options.length > 0) { var finalOptions = options.flatMap(function (option) { if (Array.isArray(option)) { return option; } else if (typeof option === 'object') { return Object.entries(option).map(function (_a) { var key = _a[0], value = _a[1]; return "".concat(key, "-").concat(value); }); } else { return [option]; } }); finalPath = __spreadArray([finalPath], finalOptions, true).join(' '); } return finalPath; }, { get: function (_target, prop) { if (!cache[prop]) { var newPath = getNewPath(path, prop); cache[prop] = pathgenInner(prop, newPath, customFn); } return cache[prop]; }, }); }; var pathgen = function (root, customFn) { return pathgenInner(root, root, customFn, customFn); }; exports.pathgen = pathgen;