@bemedev/decompose
Version:
Decompose object and so more
73 lines (69 loc) • 2.57 kB
JavaScript
;
var constants_strings = require('./constants/strings.cjs');
var helpers = require('./helpers.cjs');
function ddecompose(arg, prev = '', options = helpers.DEFAULT_DECOMPOSE_OPTIONS, first = true) {
const { object } = {
...helpers.DEFAULT_DECOMPOSE_OPTIONS,
...options,
};
const canAddObjectKeys = object === 'both' || object === 'object';
const canAddKeys = object === 'both' || object === 'key';
const _prev = prev ? prev + constants_strings.DELIMITER : '';
const output = [];
const isArray = Array.isArray(arg);
if (isArray) {
if (canAddObjectKeys && !first)
output.push([`${prev}`, arg]);
arg.forEach((item, index) => {
const values = ddecompose(item, `${_prev}${constants_strings.LEFT_BRACKET}${index}${constants_strings.RIGHT_BRACKET}`, options, false);
output.push(...values);
});
return output;
}
const isPrimit = helpers.isPrimitive(arg);
if (isPrimit) {
const isFirst = !prev.includes(constants_strings.DELIMITER);
if (canAddKeys || isFirst)
output.push([`${prev}`, arg]);
return output;
}
if (canAddObjectKeys && prev !== '')
output.push([`${prev}`, arg]);
const entries1 = Object.entries(arg);
entries1.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 } = {
...helpers.DEFAULT_DECOMPOSE_OPTIONS,
...options,
};
if (entries1.length == 0) {
if (Array.isArray(val))
return [];
return {};
}
const regexDel = new RegExp(constants_strings.DELIMITER, 'g');
const regexLeft = new RegExp(constants_strings.LEFT_BRACKET, 'g');
const regexRight = new RegExp(constants_strings.RIGHT_BRACKET, 'g');
const entries2 = entries1.map(([__key, value]) => {
const _key = __key
.replace(regexDel, sep)
.replace(regexLeft, `[`)
.replace(regexRight, `]`);
const key = start ? `${sep}${_key}` : _key;
return [key, value];
});
const output = Object.fromEntries(entries2);
return output;
};
/* v8 ignore next 1 */
const decompose = (val, options) => _decompose(val, options);
decompose.low = _decompose;
decompose.strict = _decompose;
exports.decompose = decompose;
//# sourceMappingURL=decompose.cjs.map