{"version":3,"file":"getIntlayer.mjs","names":[],"sources":["../../../src/interpreter/getIntlayer.ts"],"sourcesContent":["import { log } from '@intlayer/config/built';\nimport { colorizeKey, getAppLogger } from '@intlayer/config/logger';\nimport { getDictionaries } from '@intlayer/dictionaries-entry';\nimport type {\n  DeclaredLocales,\n  DictionaryKeys,\n  DictionaryRegistryContent,\n  DictionaryRegistryElement,\n  LocalesValues,\n} from '@intlayer/types/module_augmentation';\nimport type {\n  DeepTransformContent,\n  IInterpreterPluginState,\n  Plugins,\n} from './getContent';\nimport { getDictionary } from './getDictionary';\n\n/**\n * Creates a Recursive Proxy that returns the path of the accessed key\n * stringified. This prevents the app from crashing on undefined access.\n */\nconst createSafeFallback = (path = ''): any => {\n  return new Proxy({} as Record<string | symbol, unknown>, {\n    get: (_target, prop) => {\n      if (\n        prop === 'toJSON' ||\n        prop === Symbol.toPrimitive ||\n        prop === 'toString' ||\n        prop === 'valueOf'\n      ) {\n        return () => path;\n      }\n      if (prop === 'then') {\n        return undefined; // Prevent it from being treated as a Promise\n      }\n      if (prop === Symbol.iterator) {\n        return function* () {\n          yield path;\n        };\n      }\n\n      // Recursively build the path (e.g., \"myDictionary.home.title\")\n      const nextPath = path ? `${path}.${String(prop)}` : String(prop);\n      return createSafeFallback(nextPath);\n    },\n  });\n};\n\nconst dictionaryCache = new Map<string, any>();\nconst warnedMissingDictionaries = new Set<string>();\n\nexport const getIntlayer = <\n  const T extends DictionaryKeys,\n  const L extends LocalesValues = DeclaredLocales,\n>(\n  key: T,\n  locale?: L,\n  plugins?: Plugins[]\n): DeepTransformContent<\n  DictionaryRegistryContent<T>,\n  IInterpreterPluginState,\n  L\n> => {\n  const dictionaries = getDictionaries();\n  const dictionary = dictionaries[key as T] as DictionaryRegistryElement<T>;\n\n  if (!dictionary && process.env.NODE_ENV === 'development') {\n    if (!warnedMissingDictionaries.has(key as string)) {\n      // Log a warning instead of throwing (so developers know it's missing)\n      const logger = getAppLogger({ log });\n      logger(\n        typeof window === 'undefined'\n          ? `Dictionary ${colorizeKey(key)} was not found. Using fallback proxy.`\n          : `Dictionary ${key} was not found. Using fallback proxy.`,\n        {\n          level: 'warn',\n        }\n      );\n      warnedMissingDictionaries.add(key as string);\n    }\n\n    return createSafeFallback(key as string);\n  }\n\n  const cacheKey = `${key}_${locale ?? 'default'}_${plugins ? 'custom_plugins' : 'default_plugins'}`;\n\n  if (dictionaryCache.has(cacheKey)) {\n    return dictionaryCache.get(cacheKey);\n  }\n\n  const result = getDictionary<DictionaryRegistryElement<T>, L>(\n    dictionary,\n    locale,\n    plugins\n  );\n\n  dictionaryCache.set(cacheKey, result);\n\n  return result;\n};\n"],"mappings":";;;;;;;;;;AAqBA,MAAM,sBAAsB,OAAO,OAAY;AAC7C,QAAO,IAAI,MAAM,EAAE,EAAsC,EACvD,MAAM,SAAS,SAAS;AACtB,MACE,SAAS,YACT,SAAS,OAAO,eAChB,SAAS,cACT,SAAS,UAET,cAAa;AAEf,MAAI,SAAS,OACX;AAEF,MAAI,SAAS,OAAO,SAClB,QAAO,aAAa;AAClB,SAAM;;AAMV,SAAO,mBADU,OAAO,GAAG,KAAK,GAAG,OAAO,KAAK,KAAK,OAAO,KAAK,CAC7B;IAEtC,CAAC;;AAGJ,MAAM,kCAAkB,IAAI,KAAkB;AAC9C,MAAM,4CAA4B,IAAI,KAAa;AAEnD,MAAa,eAIX,KACA,QACA,YAKG;CAEH,MAAM,aADe,iBACU,CAAC;AAEhC,KAAI,CAAC,cAAc,MAAwC;AACzD,MAAI,CAAC,0BAA0B,IAAI,IAAc,EAAE;AAGjD,GADe,aAAa,EAAE,KAAK,CAC7B,CACJ,OAAO,WAAW,cACd,cAAc,YAAY,IAAI,CAAC,yCAC/B,cAAc,IAAI,wCACtB,EACE,OAAO,QACR,CACF;AACD,6BAA0B,IAAI,IAAc;;AAG9C,SAAO,mBAAmB,IAAc;;CAG1C,MAAM,WAAW,GAAG,IAAI,GAAG,UAAU,UAAU,GAAG,UAAU,mBAAmB;AAE/E,KAAI,gBAAgB,IAAI,SAAS,CAC/B,QAAO,gBAAgB,IAAI,SAAS;CAGtC,MAAM,SAAS,cACb,YACA,QACA,QACD;AAED,iBAAgB,IAAI,UAAU,OAAO;AAErC,QAAO"}