object-path-generator
Version:
A lightweight library to generate object paths
58 lines (57 loc) • 2.19 kB
JavaScript
;
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;