{"version":3,"sources":["../../../../../src/transpiler/declaration_file_to_dictionary/i18next_dictionary/convertContentDeclarationInto18nDictionaries.ts"],"sourcesContent":["import { getConfiguration, type Locales } from '@intlayer/config';\nimport {\n  NodeType,\n  type TranslationContent,\n  type EnumerationContent,\n  type TypedNode,\n  type ContentNode,\n} from '@intlayer/core';\nimport { convertPluralsValues } from './convertPluralsValues';\n\ntype Dictionary = Record<string, unknown>;\nexport type I18nextDictionariesOutput = Partial<Record<Locales, Dictionary>>;\n\nconst isReactNode = (node: Record<string, unknown>): boolean =>\n  typeof node?.key !== 'undefined' &&\n  typeof node?.props !== 'undefined' &&\n  typeof node?.type !== 'undefined';\n\n// Build dictionary for a specific locale\nconst buildDictionary = (content: ContentNode, locale: Locales): unknown => {\n  if (\n    // Translation node\n    content &&\n    (content as TypedNode).nodeType === NodeType.Translation\n  ) {\n    const contentState = (content as TranslationContent)[NodeType.Translation];\n    const result = contentState[locale as keyof typeof contentState];\n\n    return buildDictionary(result as ContentNode, locale);\n  } else if (\n    // Translation node\n    content &&\n    (content as TypedNode).nodeType === NodeType.Enumeration\n  ) {\n    const plurals: Record<string, unknown> = {};\n\n    Object.keys(\n      (content as EnumerationContent<unknown>)[NodeType.Enumeration]\n    ).forEach((quantity) => {\n      const letterNumber = convertPluralsValues(quantity);\n\n      const value = (content as EnumerationContent<unknown>)[\n        quantity as keyof EnumerationContent<unknown>\n      ];\n\n      plurals[`${letterNumber}_${letterNumber}`] = buildDictionary(\n        value as ContentNode,\n        locale\n      );\n    });\n\n    return plurals;\n  } else if (\n    // React element node\n    isReactNode(content as Record<string, unknown>)\n  ) {\n    return JSON.stringify(content);\n  } else if (\n    // Nested object\n    typeof content === 'object' &&\n    Array.isArray(content)\n  ) {\n    const result: unknown[] = [];\n\n    Object.keys(content).forEach((dictionaryValue) => {\n      result.push(\n        buildDictionary(\n          content[dictionaryValue as keyof typeof content] as ContentNode,\n          locale\n        )\n      );\n    });\n\n    return result;\n  } else if (\n    // Nested object\n    typeof content === 'object'\n  ) {\n    const result: Record<string, unknown> = {};\n\n    Object.keys(content as Record<string, unknown>).forEach(\n      (dictionaryValue) => {\n        result[dictionaryValue] = buildDictionary(\n          content?.[\n            dictionaryValue as keyof typeof content\n          ] as unknown as ContentNode,\n          locale\n        );\n      }\n    );\n\n    return result;\n  }\n\n  return content;\n};\n\nexport const createI18nextDictionaries = (\n  content: ContentNode,\n  configuration = getConfiguration()\n): I18nextDictionariesOutput => {\n  const { locales } = configuration.internationalization;\n\n  // Map dictionaries for each locale\n  const result: I18nextDictionariesOutput = locales.reduce(\n    (acc, locale) => ({\n      ...acc,\n      [locale]: buildDictionary(content, locale),\n    }),\n    {}\n  );\n\n  return result;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA+C;AAC/C,kBAMO;AACP,kCAAqC;AAKrC,MAAM,cAAc,CAAC,SACnB,OAAO,MAAM,QAAQ,eACrB,OAAO,MAAM,UAAU,eACvB,OAAO,MAAM,SAAS;AAGxB,MAAM,kBAAkB,CAAC,SAAsB,WAA6B;AAC1E;AAAA;AAAA,IAEE,WACC,QAAsB,aAAa,qBAAS;AAAA,IAC7C;AACA,UAAM,eAAgB,QAA+B,qBAAS,WAAW;AACzE,UAAM,SAAS,aAAa,MAAmC;AAE/D,WAAO,gBAAgB,QAAuB,MAAM;AAAA,EACtD;AAAA;AAAA,IAEE,WACC,QAAsB,aAAa,qBAAS;AAAA,IAC7C;AACA,UAAM,UAAmC,CAAC;AAE1C,WAAO;AAAA,MACJ,QAAwC,qBAAS,WAAW;AAAA,IAC/D,EAAE,QAAQ,CAAC,aAAa;AACtB,YAAM,mBAAe,kDAAqB,QAAQ;AAElD,YAAM,QAAS,QACb,QACF;AAEA,cAAQ,GAAG,YAAY,IAAI,YAAY,EAAE,IAAI;AAAA,QAC3C;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA,IAEE,YAAY,OAAkC;AAAA,IAC9C;AACA,WAAO,KAAK,UAAU,OAAO;AAAA,EAC/B;AAAA;AAAA,IAEE,OAAO,YAAY,YACnB,MAAM,QAAQ,OAAO;AAAA,IACrB;AACA,UAAM,SAAoB,CAAC;AAE3B,WAAO,KAAK,OAAO,EAAE,QAAQ,CAAC,oBAAoB;AAChD,aAAO;AAAA,QACL;AAAA,UACE,QAAQ,eAAuC;AAAA,UAC/C;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA,IAEE,OAAO,YAAY;AAAA,IACnB;AACA,UAAM,SAAkC,CAAC;AAEzC,WAAO,KAAK,OAAkC,EAAE;AAAA,MAC9C,CAAC,oBAAoB;AACnB,eAAO,eAAe,IAAI;AAAA,UACxB,UACE,eACF;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,MAAM,4BAA4B,CACvC,SACA,oBAAgB,gCAAiB,MACH;AAC9B,QAAM,EAAE,QAAQ,IAAI,cAAc;AAGlC,QAAM,SAAoC,QAAQ;AAAA,IAChD,CAAC,KAAK,YAAY;AAAA,MAChB,GAAG;AAAA,MACH,CAAC,MAAM,GAAG,gBAAgB,SAAS,MAAM;AAAA,IAC3C;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}