UNPKG

@bemedev/decompose

Version:
71 lines (67 loc) 2.53 kB
'use strict'; var constants_strings = require('./constants/strings.cjs'); var helpers = require('./helpers.cjs'); var types_types = require('./types.types.cjs'); function ddecompose(arg, prev = '', options = types_types.DEFAULT_DECOMPOSE_OPTIONS) { const { object } = { ...types_types.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) output.push([`${prev}`, arg]); arg.forEach((item, index) => { const values = ddecompose(item, `${_prev}${constants_strings.LEFT_BRACKET}${index}${constants_strings.RIGHT_BRACKET}`, options); 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); output.push(...values); }); return output; } const _decompose = (val, options) => { const entries1 = ddecompose(val, '', options); const { sep, start } = { ...types_types.DEFAULT_DECOMPOSE_OPTIONS, ...options, }; if (entries1.length == 0) 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