{"version":3,"file":"recompose.cjs","names":[],"sources":["../src/recompose.ts"],"sourcesContent":["import { merge } from 'ts-deepmerge';\nimport { SEPARATOR } from './constants/strings';\nimport type { Recompose, Ru } from './types.types';\n\nexport function recomposeObjectUrl<T>(shape: string, value: T) {\n  const obj: Ru = {};\n  if (shape.length <= 0) return obj;\n\n  const keys = shape.split(SEPARATOR);\n  if (keys.length === 1) {\n    const key = keys.shift();\n    obj[key!] = value;\n  } else {\n    const key = keys.shift();\n    obj[key!] = recomposeObjectUrl(keys.join(SEPARATOR), value);\n  }\n\n  return obj;\n}\n\n/**\n *  Recompose a flatten object \n *  @example\n * \n *  { 'data.age': 10, 'human.login': 'login' }\n *  will become\n *  {\n      data: {\n        age: 10,\n      },\n      human: {\n        login: 'login',\n      },\n    }\n *  @remark   \n *  The generated typescript type takes too much ressources\n\n *  @todo\n    Add type to the return\n */\ntype Recompose_F = <const T extends Ru>(shape: T) => Recompose<T>;\ntype _Recompose_F = (shape: any) => any;\ntype _Recompose2_F = <T extends Ru>(shape: T) => Recompose<T>;\n\nexport type Recomposer = _Recompose2_F & {\n  strict: Recompose_F;\n  low: _Recompose_F;\n};\n\nconst _recompose: _Recompose_F = shape => {\n  const entries = Object.entries(shape);\n  if (entries.length === 0) return {};\n  const arr: any[] = [];\n  entries.forEach(([key, value]) => {\n    arr.push(recomposeObjectUrl(key, value));\n  });\n  return _recompose2(merge(...arr));\n};\n\nconst _recompose2: _Recompose_F = shape => {\n  const mustReturn =\n    Array.isArray(shape) || typeof shape !== 'object' || shape === null;\n  if (mustReturn) return shape;\n\n  const entries = Object.entries(shape).sort(([a], [b]) =>\n    a.localeCompare(b),\n  );\n\n  const isEmpty = entries.length === 0;\n  if (isEmpty) return {};\n\n  const isArray = entries.every(\n    ([key]) => key.startsWith('[') && key.endsWith(']'),\n  );\n  if (isArray) {\n    const arr: any[] = [];\n    entries.forEach(([key, value]) => {\n      const index = parseInt(key.slice(1, -1), 10);\n      arr[index] = _recompose2(value);\n    });\n    return arr;\n  }\n\n  return entries.reduce((acc, [key, value]) => {\n    acc[key] = _recompose2(value);\n    return acc;\n  }, {} as any);\n};\n\nexport const recompose: Recomposer = shape => _recompose(shape);\nrecompose.low = _recompose;\nrecompose.strict = _recompose;\n"],"mappings":";;;;AAIA,SAAgB,mBAAsB,OAAe,OAAU;CAC7D,MAAM,MAAU,EAAE;AAClB,KAAI,MAAM,UAAU,EAAG,QAAO;CAE9B,MAAM,OAAO,MAAM,MAAA,IAAgB;AACnC,KAAI,KAAK,WAAW,GAAG;EACrB,MAAM,MAAM,KAAK,OAAO;AACxB,MAAI,OAAQ;QACP;EACL,MAAM,MAAM,KAAK,OAAO;AACxB,MAAI,OAAQ,mBAAmB,KAAK,KAAA,IAAe,EAAE,MAAM;;AAG7D,QAAO;;AAgCT,MAAM,cAA2B,UAAS;CACxC,MAAM,UAAU,OAAO,QAAQ,MAAM;AACrC,KAAI,QAAQ,WAAW,EAAG,QAAO,EAAE;CACnC,MAAM,MAAa,EAAE;AACrB,SAAQ,SAAS,CAAC,KAAK,WAAW;AAChC,MAAI,KAAK,mBAAmB,KAAK,MAAM,CAAC;GACxC;AACF,QAAO,aAAA,GAAA,aAAA,OAAkB,GAAG,IAAI,CAAC;;AAGnC,MAAM,eAA4B,UAAS;AAGzC,KADE,MAAM,QAAQ,MAAM,IAAI,OAAO,UAAU,YAAY,UAAU,KACjD,QAAO;CAEvB,MAAM,UAAU,OAAO,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAChD,EAAE,cAAc,EAAE,CACnB;AAGD,KADgB,QAAQ,WAAW,EACtB,QAAO,EAAE;AAKtB,KAHgB,QAAQ,OACrB,CAAC,SAAS,IAAI,WAAW,IAAI,IAAI,IAAI,SAAS,IAAI,CACpD,EACY;EACX,MAAM,MAAa,EAAE;AACrB,UAAQ,SAAS,CAAC,KAAK,WAAW;GAChC,MAAM,QAAQ,SAAS,IAAI,MAAM,GAAG,GAAG,EAAE,GAAG;AAC5C,OAAI,SAAS,YAAY,MAAM;IAC/B;AACF,SAAO;;AAGT,QAAO,QAAQ,QAAQ,KAAK,CAAC,KAAK,WAAW;AAC3C,MAAI,OAAO,YAAY,MAAM;AAC7B,SAAO;IACN,EAAE,CAAQ;;AAGf,MAAa,aAAwB,UAAS,WAAW,MAAM;AAC/D,UAAU,MAAM;AAChB,UAAU,SAAS"}