{"version":3,"file":"index.mjs","sources":["../src/src/load/index.ts"],"sourcesContent":["import { existsSync, readdirSync, readFileSync } from 'fs';\nimport { AbstractIntlMessages } from 'next-intl';\nimport path from 'path';\n\nimport { writeMessages } from '../write';\n\nconst FILE_NAME = 'index.json';\n\nconst doesPathExist = (pathToCheck: string) => existsSync(pathToCheck);\n\nconst isAJSONFilePath = (filePath: string): boolean =>\n  filePath.includes(FILE_NAME) && filePath.includes(path.sep);\n\nconst createNestedObject = (obj: { [key: string]: any }, keys: string[]) => {\n  let current = obj;\n\n  for (const key of keys) {\n    if (!current[key]) {\n      current[key] = {};\n    }\n    current = current[key];\n  }\n\n  return { obj, lastKey: current };\n};\n\nexport const loadI18nTranslations = (\n  dictionariesPath: string,\n  locale: string,\n  enableTypeCheck?: boolean\n) => {\n  const allMessages = loadMessages(dictionariesPath);\n\n  const localeMessages = Object.entries(allMessages).filter(\n    (localeMessage) => localeMessage[0] === locale\n  )[0][1];\n\n  if (enableTypeCheck) {\n    const absolutePath = path.resolve(process.cwd(), dictionariesPath);\n\n    const pathExist = doesPathExist(absolutePath);\n\n    if (pathExist) {\n      writeMessages(absolutePath, allMessages, { muteLogs: true });\n    }\n  }\n\n  return localeMessages as AbstractIntlMessages;\n};\n\nexport const loadMessages = (dictionariesPath: string) => {\n  let messages: { [key: string]: any } = {};\n\n  try {\n    const files = readdirSync(dictionariesPath, { recursive: true });\n\n    for (let filePathIndex = 0; filePathIndex < files.length; filePathIndex++) {\n      const file = files[filePathIndex];\n\n      if (typeof file === 'string' && isAJSONFilePath(file)) {\n        const fileParents = file\n          .split(path.sep)\n          .filter((parent) => parent !== FILE_NAME);\n\n        const pathToFile = path.resolve(process.cwd(), dictionariesPath, file);\n        const fileMessages = JSON.parse(readFileSync(pathToFile, 'utf-8'));\n\n        messages = {\n          ...messages,\n        };\n\n        const { lastKey } = createNestedObject(messages, fileParents);\n\n        Object.assign(lastKey, fileMessages);\n      }\n    }\n  } catch (error) {\n    console.error(\n      'The following error occured in loader in next-intl-split.',\n      error\n    );\n  }\n\n  return messages;\n};\n"],"names":["FILE_NAME","createNestedObject","obj","keys","current","key","lastKey","loadI18nTranslations","dictionariesPath","locale","enableTypeCheck","allMessages","loadMessages","localeMessages","Object","entries","filter","localeMessage","absolutePath","path","resolve","process","cwd","existsSync","writeMessages","muteLogs","messages","files","readdirSync","recursive","filePathIndex","length","file","filePath","includes","sep","fileParents","split","parent","pathToFile","fileMessages","JSON","parse","readFileSync","assign","error","console"],"mappings":"0IAMA,MAAMA,EAAY,aAOZC,EAAqB,CAACC,EAA6BC,KACvD,IAAIC,EAAUF,EAEd,IAAK,MAAMG,KAAOF,EACXC,EAAQC,KACXD,EAAQC,GAAO,IAEjBD,EAAUA,EAAQC,GAGpB,MAAO,CAAEH,MAAKI,QAASF,EAAS,EAGrBG,EAAuB,CAClCC,EACAC,EACAC,KAEA,MAAMC,EAAcC,EAAaJ,GAE3BK,EAAiBC,OAAOC,QAAQJ,GAAaK,QAChDC,GAAkBA,EAAc,KAAOR,IACxC,GAAG,GAEL,GAAIC,EAAiB,CACnB,MAAMQ,EAAeC,EAAKC,QAAQC,QAAQC,MAAOd,GA9BNe,EAgCXL,IAG9BM,EAAcN,EAAcP,EAAa,CAAEc,UAAU,GAExD,CAED,OAAOZ,CAAsC,EAGlCD,EAAgBJ,IAC3B,IAAIkB,EAAmC,CAAA,EAEvC,IACE,MAAMC,EAAQC,EAAYpB,EAAkB,CAAEqB,WAAW,IAEzD,IAAK,IAAIC,EAAgB,EAAGA,EAAgBH,EAAMI,OAAQD,IAAiB,CACzE,MAAME,EAAOL,EAAMG,GAEnB,GAAoB,iBAATE,KAjDQC,EAiD6BD,GAhD3CE,SAASlC,IAAciC,EAASC,SAASf,EAAKgB,MAgDI,CACrD,MAAMC,EAAcJ,EACjBK,MAAMlB,EAAKgB,KACXnB,QAAQsB,GAAWA,IAAWtC,IAE3BuC,EAAapB,EAAKC,QAAQC,QAAQC,MAAOd,EAAkBwB,GAC3DQ,EAAeC,KAAKC,MAAMC,EAAaJ,EAAY,UAEzDb,EAAW,IACNA,GAGL,MAAMpB,QAAEA,GAAYL,EAAmByB,EAAUU,GAEjDtB,OAAO8B,OAAOtC,EAASkC,EACxB,CACF,CACF,CAAC,MAAOK,GACPC,QAAQD,MACN,4DACAA,EAEH,CAvEqB,IAACZ,EAyEvB,OAAOP,CAAQ"}