UNPKG

@bemedev/decompose

Version:
1 lines 4.46 kB
{"version":3,"file":"decompose.cjs","names":["DEFAULT_DECOMPOSE_OPTIONS","DELIMITER","LEFT_BRACKET","RIGHT_BRACKET","isPrimitive"],"sources":["../src/decompose.ts"],"sourcesContent":["import { DEFAULT_DECOMPOSE_OPTIONS } from './constants';\nimport {\n DELIMITER,\n LEFT_BRACKET,\n RIGHT_BRACKET,\n} from './constants/strings';\nimport { isPrimitive } from './helpers';\nimport type { Decompose, DecomposeOptions } from './types.types';\n\nfunction ddecompose(\n arg: any,\n prev = '',\n options: DecomposeOptions = DEFAULT_DECOMPOSE_OPTIONS,\n first = true,\n) {\n const { object } = {\n ...DEFAULT_DECOMPOSE_OPTIONS,\n ...options,\n };\n const canAddObjectKeys = object === 'both' || object === 'object';\n const canAddKeys = object === 'both' || object === 'key';\n\n const _prev = prev ? prev + DELIMITER : '';\n const output: [string, any][] = [];\n\n const isArray = Array.isArray(arg);\n if (isArray) {\n if (canAddObjectKeys && !first) output.push([`${prev}`, arg]);\n\n arg.forEach((item, index) => {\n const values = ddecompose(\n item,\n `${_prev}${LEFT_BRACKET}${index}${RIGHT_BRACKET}`,\n options,\n false,\n );\n output.push(...values);\n });\n return output;\n }\n\n const isPrimit = isPrimitive(arg);\n if (isPrimit) {\n const isFirst = !prev.includes(DELIMITER);\n if (canAddKeys || isFirst) output.push([`${prev}`, arg]);\n return output;\n }\n\n if (canAddObjectKeys && prev !== '') output.push([`${prev}`, arg]);\n\n const entries1 = Object.entries(arg);\n entries1.forEach(([key, value]) => {\n const values = ddecompose(value, `${_prev}${key}`, options, false);\n output.push(...values);\n });\n\n return output;\n}\n\ntype Decompose_F = <\n T,\n const O extends DecomposeOptions = typeof DEFAULT_DECOMPOSE_OPTIONS,\n>(\n val: T,\n options?: O,\n) => Decompose<T, O>;\ntype _Decompose_F = (val: any, options?: DecomposeOptions) => any;\n\nexport type Decomposer = Decompose_F & {\n strict: Decompose_F;\n low: _Decompose_F;\n};\n\nconst _decompose: _Decompose_F = (val, options) => {\n const entries1 = ddecompose(val, '', options);\n\n const { sep, start } = {\n ...DEFAULT_DECOMPOSE_OPTIONS,\n ...options,\n };\n if (entries1.length == 0) {\n if (Array.isArray(val)) return [];\n return {};\n }\n\n const regexDel = new RegExp(DELIMITER, 'g');\n const regexLeft = new RegExp(LEFT_BRACKET, 'g');\n const regexRight = new RegExp(RIGHT_BRACKET, 'g');\n const entries2 = entries1.map(([__key, value]) => {\n const _key = __key\n .replace(regexDel, sep)\n .replace(regexLeft, `[`)\n .replace(regexRight, `]`);\n const key = start ? `${sep}${_key}` : _key;\n return [key, value];\n });\n\n const output = Object.fromEntries(entries2);\n return output;\n};\n\n/* v8 ignore next 1 */\nexport const decompose: Decomposer = (val, options) =>\n _decompose(val, options);\ndecompose.low = decompose;\ndecompose.strict = decompose;\n"],"mappings":";;;;;AASA,SAAS,WACP,KACA,OAAO,IACP,UAA4BA,0BAAAA,2BAC5B,QAAQ,MACR;CACA,MAAM,EAAE,WAAW;EACjB,GAAGA,0BAAAA;EACH,GAAG;EACJ;CACD,MAAM,mBAAmB,WAAW,UAAU,WAAW;CACzD,MAAM,aAAa,WAAW,UAAU,WAAW;CAEnD,MAAM,QAAQ,OAAO,OAAOC,0BAAAA,YAAY;CACxC,MAAM,SAA0B,EAAE;AAGlC,KADgB,MAAM,QAAQ,IAAI,EACrB;AACX,MAAI,oBAAoB,CAAC,MAAO,QAAO,KAAK,CAAC,GAAG,QAAQ,IAAI,CAAC;AAE7D,MAAI,SAAS,MAAM,UAAU;GAC3B,MAAM,SAAS,WACb,MACA,GAAG,QAAQC,0BAAAA,eAAe,QAAQC,0BAAAA,iBAClC,SACA,MACD;AACD,UAAO,KAAK,GAAG,OAAO;IACtB;AACF,SAAO;;AAIT,KADiBC,gBAAAA,YAAY,IAAI,EACnB;EACZ,MAAM,UAAU,CAAC,KAAK,SAASH,0BAAAA,UAAU;AACzC,MAAI,cAAc,QAAS,QAAO,KAAK,CAAC,GAAG,QAAQ,IAAI,CAAC;AACxD,SAAO;;AAGT,KAAI,oBAAoB,SAAS,GAAI,QAAO,KAAK,CAAC,GAAG,QAAQ,IAAI,CAAC;AAEjD,QAAO,QAAQ,IAAI,CAC3B,SAAS,CAAC,KAAK,WAAW;EACjC,MAAM,SAAS,WAAW,OAAO,GAAG,QAAQ,OAAO,SAAS,MAAM;AAClE,SAAO,KAAK,GAAG,OAAO;GACtB;AAEF,QAAO;;AAiBT,MAAM,cAA4B,KAAK,YAAY;CACjD,MAAM,WAAW,WAAW,KAAK,IAAI,QAAQ;CAE7C,MAAM,EAAE,KAAK,UAAU;EACrB,GAAGD,0BAAAA;EACH,GAAG;EACJ;AACD,KAAI,SAAS,UAAU,GAAG;AACxB,MAAI,MAAM,QAAQ,IAAI,CAAE,QAAO,EAAE;AACjC,SAAO,EAAE;;CAGX,MAAM,WAAW,IAAI,OAAOC,0BAAAA,WAAW,IAAI;CAC3C,MAAM,YAAY,IAAI,OAAOC,0BAAAA,cAAc,IAAI;CAC/C,MAAM,aAAa,IAAI,OAAOC,0BAAAA,eAAe,IAAI;CACjD,MAAM,WAAW,SAAS,KAAK,CAAC,OAAO,WAAW;EAChD,MAAM,OAAO,MACV,QAAQ,UAAU,IAAI,CACtB,QAAQ,WAAW,IAAI,CACvB,QAAQ,YAAY,IAAI;AAE3B,SAAO,CADK,QAAQ,GAAG,MAAM,SAAS,MACzB,MAAM;GACnB;AAGF,QADe,OAAO,YAAY,SAAS;;;AAK7C,MAAa,aAAyB,KAAK,YACzC,WAAW,KAAK,QAAQ;AAC1B,UAAU,MAAM;AAChB,UAAU,SAAS"}