@bemedev/decompose
Version:
Decompose object and so more
61 lines (60 loc) • 2.45 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const require_constants_strings = require("./constants/strings.cjs");
const require_constants_objects = require("./constants/objects.cjs");
const require_helpers = require("./helpers.cjs");
//#region src/decompose.ts
function ddecompose(arg, prev = "", options = require_constants_objects.DEFAULT_DECOMPOSE_OPTIONS, first = true) {
const { object } = {
...require_constants_objects.DEFAULT_DECOMPOSE_OPTIONS,
...options
};
const canAddObjectKeys = object === "both" || object === "object";
const canAddKeys = object === "both" || object === "key";
const _prev = prev ? prev + require_constants_strings.DELIMITER : "";
const output = [];
if (Array.isArray(arg)) {
if (canAddObjectKeys && !first) output.push([`${prev}`, arg]);
arg.forEach((item, index) => {
const values = ddecompose(item, `${_prev}${require_constants_strings.LEFT_BRACKET}${index}${require_constants_strings.RIGHT_BRACKET}`, options, false);
output.push(...values);
});
return output;
}
if (require_helpers.isPrimitive(arg)) {
const isFirst = !prev.includes(require_constants_strings.DELIMITER);
if (canAddKeys || isFirst) output.push([`${prev}`, arg]);
return output;
}
if (canAddObjectKeys && prev !== "") output.push([`${prev}`, arg]);
Object.entries(arg).forEach(([key, value]) => {
const values = ddecompose(value, `${_prev}${key}`, options, false);
output.push(...values);
});
return output;
}
const _decompose = (val, options) => {
const entries1 = ddecompose(val, "", options);
const { sep, start } = {
...require_constants_objects.DEFAULT_DECOMPOSE_OPTIONS,
...options
};
if (entries1.length == 0) {
if (Array.isArray(val)) return [];
return {};
}
const regexDel = new RegExp(require_constants_strings.DELIMITER, "g");
const regexLeft = new RegExp(require_constants_strings.LEFT_BRACKET, "g");
const regexRight = new RegExp(require_constants_strings.RIGHT_BRACKET, "g");
const entries2 = entries1.map(([__key, value]) => {
const _key = __key.replace(regexDel, sep).replace(regexLeft, `[`).replace(regexRight, `]`);
return [start ? `${sep}${_key}` : _key, value];
});
return Object.fromEntries(entries2);
};
/* v8 ignore next 1 */
const decompose = (val, options) => _decompose(val, options);
decompose.low = decompose;
decompose.strict = decompose;
//#endregion
exports.decompose = decompose;
//# sourceMappingURL=decompose.cjs.map