@arch-cadre/intl 0.0.64 → 0.0.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../shared/utils.cjs`),n=require(`../client/index.cjs`),r=require(`../shared/constants.cjs`),i=require(`./module-loader.cjs`);let a=require(`react`);a=e.__toESM(a);let o=require(`node:fs/promises`);o=e.__toESM(o);let s=require(`node:path`);s=e.__toESM(s);let c=require(`@formatjs/intl-localematcher`),l=require(`negotiator`);l=e.__toESM(l);let u=require(`next/headers`);function d(e,t){let n={...e};for(let r of Object.keys(t))t[r]instanceof Object&&r in e&&e[r]instanceof Object?n[r]=d(e[r],t[r]):n[r]=t[r];return n}let f=null;function p(e){f=Array.from(new Set([...f||[],...e]))}async function m(e,t){(f===null||f.length===0)&&p(await i.discoverLocalePaths());let n={},r=s.default.join(process.cwd(),`locales`),a=new Set;if(f)for(let e of f)a.add(e);if(t)for(let e of t)a.add(e);a.add(r);for(let t of Array.from(a)){let r=s.default.join(t,e);try{await o.default.access(r);let e=await o.default.readdir(r);for(let t of e)if(t.endsWith(`json`)){let e=s.default.join(r,t),i=await o.default.readFile(e,`utf-8`),a=JSON.parse(i);n=d(n,a)}}catch{}}return n}function h(e,t){let n=(0,u.headers)();return(0,c.match)(new l.default({headers:Object.fromEntries(n.entries())}).languages(),e,t)}async function g({children:e}){let t=(await(0,u.cookies)()).get(r.COOKIE_NAME)?.value||r.DEFAULT_LOCALE,i=await m(t);return a.default.createElement(n.I18nProvider,{locale:t,messages:i},e)}async function _(){let e=(await(0,u.cookies)()).get(r.COOKIE_NAME)?.value||r.DEFAULT_LOCALE,n=await m(e);return{t:(e,r)=>{let i=t.getNestedMessage(n,String(e));return typeof i==`string`?t.formatMessage(i,r):String(e)},locale:e}}exports.I18nProvider=g,exports.detectLocale=h,exports.discoverLocalePaths=i.discoverLocalePaths,exports.getMessages=m,exports.getModuleLocalePaths=i.getModuleLocalePaths,exports.getTranslation=_,exports.registerLocalePaths=p;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../shared/utils.cjs`),n=require(`../client/index.cjs`),r=require(`../shared/constants.cjs`),i=require(`./module-loader.cjs`);let a=require(`react`);a=e.__toESM(a);let o=require(`node:fs/promises`);o=e.__toESM(o);let s=require(`node:path`);s=e.__toESM(s);let c=require(`@formatjs/intl-localematcher`),l=require(`negotiator`);l=e.__toESM(l);let u=require(`next/headers`);function d(e,t){let n={...e};for(let r of Object.keys(t))t[r]instanceof Object&&r in e&&e[r]instanceof Object?n[r]=d(e[r],t[r]):n[r]=t[r];return n}let f=null,p={};function m(e){f=Array.from(new Set([...f||[],...e]))}function h(e,t){p[e]||(p[e]={}),p[e]=d(p[e],t)}async function g(e,t){(f===null||f.length===0&&Object.keys(p).length===0)&&m(await i.discoverLocalePaths());let n=p[e]||{},r=s.default.join(process.cwd(),`locales`),a=new Set;if(f)for(let e of f)a.add(e);if(t)for(let e of t)a.add(e);a.add(r);for(let t of Array.from(a)){let r=s.default.join(t,e);try{await o.default.access(r);let e=await o.default.readdir(r);for(let t of e)if(t.endsWith(`json`)){let e=s.default.join(r,t),i=await o.default.readFile(e,`utf-8`),a=JSON.parse(i);n=d(n,a)}}catch{}}return n}function _(e,t){let n=(0,u.headers)();return(0,c.match)(new l.default({headers:Object.fromEntries(n.entries())}).languages(),e,t)}async function v({children:e}){let t=(await(0,u.cookies)()).get(r.COOKIE_NAME)?.value||r.DEFAULT_LOCALE,i=await g(t);return a.default.createElement(n.I18nProvider,{locale:t,messages:i},e)}async function y(){let e=(await(0,u.cookies)()).get(r.COOKIE_NAME)?.value||r.DEFAULT_LOCALE,n=await g(e);return{t:(e,r)=>{let i=t.getNestedMessage(n,String(e));return typeof i==`string`?t.formatMessage(i,r):String(e)},locale:e}}exports.I18nProvider=v,exports.detectLocale=_,exports.discoverLocalePaths=i.discoverLocalePaths,exports.getMessages=g,exports.getModuleLocalePaths=i.getModuleLocalePaths,exports.getTranslation=y,exports.registerLocalePaths=m,exports.registerMessages=h;
@@ -8,6 +8,10 @@ import React from "react";
8
8
  * Can be called multiple times, but usually called once in RootLayout.
9
9
  */
10
10
  declare function registerLocalePaths(paths: string[]): void;
11
+ /**
12
+ * Register messages directly (useful for production bundles where fs scan is limited).
13
+ */
14
+ declare function registerMessages(locale: string, messages: any): void;
11
15
  declare function getMessages(locale: string, searchDirectories?: string[]): Promise<AbstractIntlMessages>;
12
16
  declare function detectLocale(supportedLocales: string[], defaultLocale: string): string;
13
17
  /**
@@ -23,5 +27,5 @@ declare function getTranslation(): Promise<{
23
27
  locale: string;
24
28
  }>;
25
29
  //#endregion
26
- export { I18nProvider, detectLocale, discoverLocalePaths, getMessages, getModuleLocalePaths, getTranslation, registerLocalePaths };
30
+ export { I18nProvider, detectLocale, discoverLocalePaths, getMessages, getModuleLocalePaths, getTranslation, registerLocalePaths, registerMessages };
27
31
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/server/index.ts"],"mappings":";;;;;;;;AAuCA;iBAAgB,mBAAA,CAAoB,KAAA;AAAA,iBAId,WAAA,CACpB,MAAA,UACA,iBAAA,cAA4B,OAAA,CAAA,oBAAA;AAAA,iBA8Cd,YAAA,CACd,gBAAA,YACA,aAAA;;AAlDF;;iBA+DsB,YAAA,CAAA;EACpB;AAAA;EAEA,QAAA,EAAU,KAAA,CAAM,SAAA;AAAA,IACjB,OAAA,CAAA,KAAA,CAAA,wBAAA,CAAA,KAAA,CAAA,mBAAA,CAAA,gBAAA,GAAA,gBAAA;AAAA,iBAWqB,cAAA,CAAA,GAAc,OAAA;WAQlB,eAAA,EAAe,MAAA,GAAW,MAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/server/index.ts"],"mappings":";;;;;;;;AAwCA;iBAAgB,mBAAA,CAAoB,KAAA;;;;iBAOpB,gBAAA,CAAiB,MAAA,UAAgB,QAAA;AAAA,iBAU3B,WAAA,CACpB,MAAA,UACA,iBAAA,cAA4B,OAAA,CAAA,oBAAA;AAAA,iBA+Cd,YAAA,CACd,gBAAA,YACA,aAAA;;;AAnDF;iBAgEsB,YAAA,CAAA;EACpB;AAAA;EAEA,QAAA,EAAU,KAAA,CAAM,SAAA;AAAA,IACjB,OAAA,CAAA,KAAA,CAAA,wBAAA,CAAA,KAAA,CAAA,mBAAA,CAAA,gBAAA,GAAA,gBAAA;AAAA,iBAWqB,cAAA,CAAA,GAAc,OAAA;WAQlB,eAAA,EAAe,MAAA,GAAW,MAAA"}
@@ -8,6 +8,10 @@ import React from "react";
8
8
  * Can be called multiple times, but usually called once in RootLayout.
9
9
  */
10
10
  declare function registerLocalePaths(paths: string[]): void;
11
+ /**
12
+ * Register messages directly (useful for production bundles where fs scan is limited).
13
+ */
14
+ declare function registerMessages(locale: string, messages: any): void;
11
15
  declare function getMessages(locale: string, searchDirectories?: string[]): Promise<AbstractIntlMessages>;
12
16
  declare function detectLocale(supportedLocales: string[], defaultLocale: string): string;
13
17
  /**
@@ -23,5 +27,5 @@ declare function getTranslation(): Promise<{
23
27
  locale: string;
24
28
  }>;
25
29
  //#endregion
26
- export { I18nProvider, detectLocale, discoverLocalePaths, getMessages, getModuleLocalePaths, getTranslation, registerLocalePaths };
30
+ export { I18nProvider, detectLocale, discoverLocalePaths, getMessages, getModuleLocalePaths, getTranslation, registerLocalePaths, registerMessages };
27
31
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/server/index.ts"],"mappings":";;;;;;;;AAuCA;iBAAgB,mBAAA,CAAoB,KAAA;AAAA,iBAId,WAAA,CACpB,MAAA,UACA,iBAAA,cAA4B,OAAA,CAAA,oBAAA;AAAA,iBA8Cd,YAAA,CACd,gBAAA,YACA,aAAA;;AAlDF;;iBA+DsB,YAAA,CAAA;EACpB;AAAA;EAEA,QAAA,EAAU,KAAA,CAAM,SAAA;AAAA,IACjB,OAAA,CAAA,KAAA,CAAA,wBAAA,CAAA,KAAA,CAAA,mBAAA,CAAA,gBAAA,GAAA,gBAAA;AAAA,iBAWqB,cAAA,CAAA,GAAc,OAAA;WAQlB,eAAA,EAAe,MAAA,GAAW,MAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/server/index.ts"],"mappings":";;;;;;;;AAwCA;iBAAgB,mBAAA,CAAoB,KAAA;;;;iBAOpB,gBAAA,CAAiB,MAAA,UAAgB,QAAA;AAAA,iBAU3B,WAAA,CACpB,MAAA,UACA,iBAAA,cAA4B,OAAA,CAAA,oBAAA;AAAA,iBA+Cd,YAAA,CACd,gBAAA,YACA,aAAA;;;AAnDF;iBAgEsB,YAAA,CAAA;EACpB;AAAA;EAEA,QAAA,EAAU,KAAA,CAAM,SAAA;AAAA,IACjB,OAAA,CAAA,KAAA,CAAA,wBAAA,CAAA,KAAA,CAAA,mBAAA,CAAA,gBAAA,GAAA,gBAAA;AAAA,iBAWqB,cAAA,CAAA,GAAc,OAAA;WAQlB,eAAA,EAAe,MAAA,GAAW,MAAA"}
@@ -1,2 +1,2 @@
1
- import{formatMessage as e,getNestedMessage as t}from"../shared/utils.mjs";import{I18nProvider as n}from"../client/index.mjs";import{COOKIE_NAME as r,DEFAULT_LOCALE as i}from"../shared/constants.mjs";import{discoverLocalePaths as a,getModuleLocalePaths as o}from"./module-loader.mjs";import s from"react";import c from"node:fs/promises";import l from"node:path";import{match as u}from"@formatjs/intl-localematcher";import d from"negotiator";import{cookies as f,headers as p}from"next/headers";function m(e,t){let n={...e};for(let r of Object.keys(t))t[r]instanceof Object&&r in e&&e[r]instanceof Object?n[r]=m(e[r],t[r]):n[r]=t[r];return n}let h=null;function g(e){h=Array.from(new Set([...h||[],...e]))}async function _(e,t){(h===null||h.length===0)&&g(await a());let n={},r=l.join(process.cwd(),`locales`),i=new Set;if(h)for(let e of h)i.add(e);if(t)for(let e of t)i.add(e);i.add(r);for(let t of Array.from(i)){let r=l.join(t,e);try{await c.access(r);let e=await c.readdir(r);for(let t of e)if(t.endsWith(`json`)){let e=l.join(r,t),i=await c.readFile(e,`utf-8`),a=JSON.parse(i);n=m(n,a)}}catch{}}return n}function v(e,t){let n=p();return u(new d({headers:Object.fromEntries(n.entries())}).languages(),e,t)}async function y({children:e}){let t=(await f()).get(r)?.value||i,a=await _(t);return s.createElement(n,{locale:t,messages:a},e)}async function b(){let n=(await f()).get(r)?.value||i,a=await _(n);return{t:(n,r)=>{let i=t(a,String(n));return typeof i==`string`?e(i,r):String(n)},locale:n}}export{y as I18nProvider,v as detectLocale,a as discoverLocalePaths,_ as getMessages,o as getModuleLocalePaths,b as getTranslation,g as registerLocalePaths};
1
+ import{formatMessage as e,getNestedMessage as t}from"../shared/utils.mjs";import{I18nProvider as n}from"../client/index.mjs";import{COOKIE_NAME as r,DEFAULT_LOCALE as i}from"../shared/constants.mjs";import{discoverLocalePaths as a,getModuleLocalePaths as o}from"./module-loader.mjs";import s from"react";import c from"node:fs/promises";import l from"node:path";import{match as u}from"@formatjs/intl-localematcher";import d from"negotiator";import{cookies as f,headers as p}from"next/headers";function m(e,t){let n={...e};for(let r of Object.keys(t))t[r]instanceof Object&&r in e&&e[r]instanceof Object?n[r]=m(e[r],t[r]):n[r]=t[r];return n}let h=null,g={};function _(e){h=Array.from(new Set([...h||[],...e]))}function v(e,t){g[e]||(g[e]={}),g[e]=m(g[e],t)}async function y(e,t){(h===null||h.length===0&&Object.keys(g).length===0)&&_(await a());let n=g[e]||{},r=l.join(process.cwd(),`locales`),i=new Set;if(h)for(let e of h)i.add(e);if(t)for(let e of t)i.add(e);i.add(r);for(let t of Array.from(i)){let r=l.join(t,e);try{await c.access(r);let e=await c.readdir(r);for(let t of e)if(t.endsWith(`json`)){let e=l.join(r,t),i=await c.readFile(e,`utf-8`),a=JSON.parse(i);n=m(n,a)}}catch{}}return n}function b(e,t){let n=p();return u(new d({headers:Object.fromEntries(n.entries())}).languages(),e,t)}async function x({children:e}){let t=(await f()).get(r)?.value||i,a=await y(t);return s.createElement(n,{locale:t,messages:a},e)}async function S(){let n=(await f()).get(r)?.value||i,a=await y(n);return{t:(n,r)=>{let i=t(a,String(n));return typeof i==`string`?e(i,r):String(n)},locale:n}}export{x as I18nProvider,b as detectLocale,a as discoverLocalePaths,y as getMessages,o as getModuleLocalePaths,S as getTranslation,_ as registerLocalePaths,v as registerMessages};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["ClientProvider"],"sources":["../../src/server/index.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { match } from \"@formatjs/intl-localematcher\";\nimport Negotiator from \"negotiator\";\nimport { cookies, headers } from \"next/headers\";\nimport React from \"react\";\nimport { I18nProvider as ClientProvider } from \"../client/index\";\nimport { COOKIE_NAME, DEFAULT_LOCALE } from \"../shared/constants\";\nimport { formatMessage, getNestedMessage } from \"../shared/utils\";\nimport type {\n AbstractIntlMessages,\n NestedKeyOf,\n TranslationKeys,\n} from \"../types\";\nimport { discoverLocalePaths } from \"./module-loader\";\n\nfunction deepMerge(target: any, source: any) {\n const result = { ...target };\n for (const key of Object.keys(source)) {\n if (\n source[key] instanceof Object &&\n key in target &&\n target[key] instanceof Object\n ) {\n result[key] = deepMerge(target[key], source[key]);\n } else {\n result[key] = source[key];\n }\n }\n return result;\n}\n\n// Internal state for locale paths\nlet registeredPaths: string[] | null = null;\n\n/**\n * Register additional directories to search for locales.\n * Can be called multiple times, but usually called once in RootLayout.\n */\nexport function registerLocalePaths(paths: string[]) {\n registeredPaths = Array.from(new Set([...(registeredPaths || []), ...paths]));\n}\n\nexport async function getMessages(\n locale: string,\n searchDirectories?: string[],\n) {\n // Auto-discovery if no paths registered\n if (registeredPaths === null || registeredPaths.length === 0) {\n const discovered = await discoverLocalePaths();\n registerLocalePaths(discovered);\n }\n\n let messages: AbstractIntlMessages = {};\n\n const defaultDir = path.join(process.cwd(), \"locales\");\n\n // Use provided paths, or registered paths, or just default\n const directoriesToScan = new Set<string>();\n\n if (registeredPaths) {\n for (const p of registeredPaths) directoriesToScan.add(p);\n }\n if (searchDirectories) {\n for (const p of searchDirectories) directoriesToScan.add(p);\n }\n directoriesToScan.add(defaultDir);\n\n for (const dir of Array.from(directoriesToScan)) {\n const localeDir = path.join(dir, locale);\n try {\n await fs.access(localeDir);\n const files = await fs.readdir(localeDir);\n\n for (const file of files) {\n if (file.endsWith(\"json\")) {\n const filePath = path.join(localeDir, file);\n const fileContent = await fs.readFile(filePath, \"utf-8\");\n const jsonContent = JSON.parse(fileContent);\n\n messages = deepMerge(messages, jsonContent);\n }\n }\n } catch (_e) {\n // Ignore missing directories\n }\n }\n\n return messages;\n}\n\nexport function detectLocale(\n supportedLocales: string[],\n defaultLocale: string,\n) {\n const headerList = headers();\n const languages = new Negotiator({\n headers: Object.fromEntries((headerList as any).entries()),\n }).languages();\n\n return match(languages, supportedLocales, defaultLocale);\n}\n\n/**\n * Smart Server Component that handles locale detection and message loading automatically.\n */\nexport async function I18nProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const cookieStore = await cookies();\n const locale = cookieStore.get(COOKIE_NAME)?.value || DEFAULT_LOCALE;\n const messages = await getMessages(locale);\n\n // @ts-expect-error\n return React.createElement(ClientProvider, { locale, messages }, children);\n}\n\nexport * from \"./module-loader\";\n\nexport async function getTranslation() {\n const cookieStore = await cookies();\n const locale = cookieStore.get(COOKIE_NAME)?.value || DEFAULT_LOCALE;\n\n // If paths haven't been registered yet, we might be in a race condition.\n // In a real production app, we might want to have a deterministic way to load these.\n const messages = await getMessages(locale);\n\n const t = (key: TranslationKeys, values?: Record<string, any>) => {\n const message = getNestedMessage(messages, String(key));\n\n if (typeof message !== \"string\") {\n return String(key);\n }\n\n return formatMessage(message, values);\n };\n\n return { t, locale };\n}\n"],"mappings":"4eAgBA,SAAS,EAAU,EAAa,EAAa,CAC3C,IAAM,EAAS,CAAE,GAAG,EAAQ,CAC5B,IAAK,IAAM,KAAO,OAAO,KAAK,EAAO,CAEjC,EAAO,aAAgB,QACvB,KAAO,GACP,EAAO,aAAgB,OAEvB,EAAO,GAAO,EAAU,EAAO,GAAM,EAAO,GAAK,CAEjD,EAAO,GAAO,EAAO,GAGzB,OAAO,EAIT,IAAI,EAAmC,KAMvC,SAAgB,EAAoB,EAAiB,CACnD,EAAkB,MAAM,KAAK,IAAI,IAAI,CAAC,GAAI,GAAmB,EAAE,CAAG,GAAG,EAAM,CAAC,CAAC,CAG/E,eAAsB,EACpB,EACA,EACA,EAEI,IAAoB,MAAQ,EAAgB,SAAW,IAEzD,EADmB,MAAM,GAAqB,CACf,CAGjC,IAAI,EAAiC,EAAE,CAEjC,EAAa,EAAK,KAAK,QAAQ,KAAK,CAAE,UAAU,CAGhD,EAAoB,IAAI,IAE9B,GAAI,EACF,IAAK,IAAM,KAAK,EAAiB,EAAkB,IAAI,EAAE,CAE3D,GAAI,EACF,IAAK,IAAM,KAAK,EAAmB,EAAkB,IAAI,EAAE,CAE7D,EAAkB,IAAI,EAAW,CAEjC,IAAK,IAAM,KAAO,MAAM,KAAK,EAAkB,CAAE,CAC/C,IAAM,EAAY,EAAK,KAAK,EAAK,EAAO,CACxC,GAAI,CACF,MAAM,EAAG,OAAO,EAAU,CAC1B,IAAM,EAAQ,MAAM,EAAG,QAAQ,EAAU,CAEzC,IAAK,IAAM,KAAQ,EACjB,GAAI,EAAK,SAAS,OAAO,CAAE,CACzB,IAAM,EAAW,EAAK,KAAK,EAAW,EAAK,CACrC,EAAc,MAAM,EAAG,SAAS,EAAU,QAAQ,CAClD,EAAc,KAAK,MAAM,EAAY,CAE3C,EAAW,EAAU,EAAU,EAAY,OAGpC,GAKf,OAAO,EAGT,SAAgB,EACd,EACA,EACA,CACA,IAAM,EAAa,GAAS,CAK5B,OAAO,EAJW,IAAI,EAAW,CAC/B,QAAS,OAAO,YAAa,EAAmB,SAAS,CAAC,CAC3D,CAAC,CAAC,WAAW,CAEU,EAAkB,EAAc,CAM1D,eAAsB,EAAa,CACjC,YAGC,CAED,IAAM,GADc,MAAM,GAAS,EACR,IAAI,EAAY,EAAE,OAAS,EAChD,EAAW,MAAM,EAAY,EAAO,CAG1C,OAAO,EAAM,cAAcA,EAAgB,CAAE,SAAQ,WAAU,CAAE,EAAS,CAK5E,eAAsB,GAAiB,CAErC,IAAM,GADc,MAAM,GAAS,EACR,IAAI,EAAY,EAAE,OAAS,EAIhD,EAAW,MAAM,EAAY,EAAO,CAY1C,MAAO,CAAE,GAVE,EAAsB,IAAiC,CAChE,IAAM,EAAU,EAAiB,EAAU,OAAO,EAAI,CAAC,CAMvD,OAJI,OAAO,GAAY,SAIhB,EAAc,EAAS,EAAO,CAH5B,OAAO,EAAI,EAMV,SAAQ"}
1
+ {"version":3,"file":"index.mjs","names":["ClientProvider"],"sources":["../../src/server/index.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { match } from \"@formatjs/intl-localematcher\";\nimport Negotiator from \"negotiator\";\nimport { cookies, headers } from \"next/headers\";\nimport React from \"react\";\nimport { I18nProvider as ClientProvider } from \"../client/index\";\nimport { COOKIE_NAME, DEFAULT_LOCALE } from \"../shared/constants\";\nimport { formatMessage, getNestedMessage } from \"../shared/utils\";\nimport type {\n AbstractIntlMessages,\n NestedKeyOf,\n TranslationKeys,\n} from \"../types\";\nimport { discoverLocalePaths } from \"./module-loader\";\n\nfunction deepMerge(target: any, source: any) {\n const result = { ...target };\n for (const key of Object.keys(source)) {\n if (\n source[key] instanceof Object &&\n key in target &&\n target[key] instanceof Object\n ) {\n result[key] = deepMerge(target[key], source[key]);\n } else {\n result[key] = source[key];\n }\n }\n return result;\n}\n\n// Internal state for locale paths and direct messages\nlet registeredPaths: string[] | null = null;\nlet registeredMessages: Record<string, AbstractIntlMessages> = {};\n\n/**\n * Register additional directories to search for locales.\n * Can be called multiple times, but usually called once in RootLayout.\n */\nexport function registerLocalePaths(paths: string[]) {\n registeredPaths = Array.from(new Set([...(registeredPaths || []), ...paths]));\n}\n\n/**\n * Register messages directly (useful for production bundles where fs scan is limited).\n */\nexport function registerMessages(locale: string, messages: any) {\n if (!registeredMessages[locale]) {\n registeredMessages[locale] = {};\n }\n registeredMessages[locale] = deepMerge(\n registeredMessages[locale],\n messages,\n );\n}\n\nexport async function getMessages(\n locale: string,\n searchDirectories?: string[],\n) {\n // Auto-discovery if no paths registered (only on first call)\n if (registeredPaths === null || (registeredPaths.length === 0 && Object.keys(registeredMessages).length === 0)) {\n const discovered = await discoverLocalePaths();\n registerLocalePaths(discovered);\n }\n\n // Start with explicitly registered messages\n let messages: AbstractIntlMessages = registeredMessages[locale] || {};\n\n const defaultDir = path.join(process.cwd(), \"locales\");\n\n // Use provided paths, or registered paths, or just default\n const directoriesToScan = new Set<string>();\n\n if (registeredPaths) {\n for (const p of registeredPaths) directoriesToScan.add(p);\n }\n if (searchDirectories) {\n for (const p of searchDirectories) directoriesToScan.add(p);\n }\n directoriesToScan.add(defaultDir);\n\n for (const dir of Array.from(directoriesToScan)) {\n const localeDir = path.join(dir, locale);\n try {\n await fs.access(localeDir);\n const files = await fs.readdir(localeDir);\n\n for (const file of files) {\n if (file.endsWith(\"json\")) {\n const filePath = path.join(localeDir, file);\n const fileContent = await fs.readFile(filePath, \"utf-8\");\n const jsonContent = JSON.parse(fileContent);\n\n messages = deepMerge(messages, jsonContent);\n }\n }\n } catch (_e) {\n // Ignore missing directories\n }\n }\n\n return messages;\n}\n\nexport function detectLocale(\n supportedLocales: string[],\n defaultLocale: string,\n) {\n const headerList = headers();\n const languages = new Negotiator({\n headers: Object.fromEntries((headerList as any).entries()),\n }).languages();\n\n return match(languages, supportedLocales, defaultLocale);\n}\n\n/**\n * Smart Server Component that handles locale detection and message loading automatically.\n */\nexport async function I18nProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const cookieStore = await cookies();\n const locale = cookieStore.get(COOKIE_NAME)?.value || DEFAULT_LOCALE;\n const messages = await getMessages(locale);\n\n // @ts-expect-error\n return React.createElement(ClientProvider, { locale, messages }, children);\n}\n\nexport * from \"./module-loader\";\n\nexport async function getTranslation() {\n const cookieStore = await cookies();\n const locale = cookieStore.get(COOKIE_NAME)?.value || DEFAULT_LOCALE;\n\n // If paths haven't been registered yet, we might be in a race condition.\n // In a real production app, we might want to have a deterministic way to load these.\n const messages = await getMessages(locale);\n\n const t = (key: TranslationKeys, values?: Record<string, any>) => {\n const message = getNestedMessage(messages, String(key));\n\n if (typeof message !== \"string\") {\n return String(key);\n }\n\n return formatMessage(message, values);\n };\n\n return { t, locale };\n}\n"],"mappings":"4eAgBA,SAAS,EAAU,EAAa,EAAa,CAC3C,IAAM,EAAS,CAAE,GAAG,EAAQ,CAC5B,IAAK,IAAM,KAAO,OAAO,KAAK,EAAO,CAEjC,EAAO,aAAgB,QACvB,KAAO,GACP,EAAO,aAAgB,OAEvB,EAAO,GAAO,EAAU,EAAO,GAAM,EAAO,GAAK,CAEjD,EAAO,GAAO,EAAO,GAGzB,OAAO,EAIT,IAAI,EAAmC,KACnC,EAA2D,EAAE,CAMjE,SAAgB,EAAoB,EAAiB,CACnD,EAAkB,MAAM,KAAK,IAAI,IAAI,CAAC,GAAI,GAAmB,EAAE,CAAG,GAAG,EAAM,CAAC,CAAC,CAM/E,SAAgB,EAAiB,EAAgB,EAAe,CACzD,EAAmB,KACtB,EAAmB,GAAU,EAAE,EAEjC,EAAmB,GAAU,EAC3B,EAAmB,GACnB,EACD,CAGH,eAAsB,EACpB,EACA,EACA,EAEI,IAAoB,MAAS,EAAgB,SAAW,GAAK,OAAO,KAAK,EAAmB,CAAC,SAAW,IAE1G,EADmB,MAAM,GAAqB,CACf,CAIjC,IAAI,EAAiC,EAAmB,IAAW,EAAE,CAE/D,EAAa,EAAK,KAAK,QAAQ,KAAK,CAAE,UAAU,CAGhD,EAAoB,IAAI,IAE9B,GAAI,EACF,IAAK,IAAM,KAAK,EAAiB,EAAkB,IAAI,EAAE,CAE3D,GAAI,EACF,IAAK,IAAM,KAAK,EAAmB,EAAkB,IAAI,EAAE,CAE7D,EAAkB,IAAI,EAAW,CAEjC,IAAK,IAAM,KAAO,MAAM,KAAK,EAAkB,CAAE,CAC/C,IAAM,EAAY,EAAK,KAAK,EAAK,EAAO,CACxC,GAAI,CACF,MAAM,EAAG,OAAO,EAAU,CAC1B,IAAM,EAAQ,MAAM,EAAG,QAAQ,EAAU,CAEzC,IAAK,IAAM,KAAQ,EACjB,GAAI,EAAK,SAAS,OAAO,CAAE,CACzB,IAAM,EAAW,EAAK,KAAK,EAAW,EAAK,CACrC,EAAc,MAAM,EAAG,SAAS,EAAU,QAAQ,CAClD,EAAc,KAAK,MAAM,EAAY,CAE3C,EAAW,EAAU,EAAU,EAAY,OAGpC,GAKf,OAAO,EAGT,SAAgB,EACd,EACA,EACA,CACA,IAAM,EAAa,GAAS,CAK5B,OAAO,EAJW,IAAI,EAAW,CAC/B,QAAS,OAAO,YAAa,EAAmB,SAAS,CAAC,CAC3D,CAAC,CAAC,WAAW,CAEU,EAAkB,EAAc,CAM1D,eAAsB,EAAa,CACjC,YAGC,CAED,IAAM,GADc,MAAM,GAAS,EACR,IAAI,EAAY,EAAE,OAAS,EAChD,EAAW,MAAM,EAAY,EAAO,CAG1C,OAAO,EAAM,cAAcA,EAAgB,CAAE,SAAQ,WAAU,CAAE,EAAS,CAK5E,eAAsB,GAAiB,CAErC,IAAM,GADc,MAAM,GAAS,EACR,IAAI,EAAY,EAAE,OAAS,EAIhD,EAAW,MAAM,EAAY,EAAO,CAY1C,MAAO,CAAE,GAVE,EAAsB,IAAiC,CAChE,IAAM,EAAU,EAAiB,EAAU,OAAO,EAAI,CAAC,CAMvD,OAJI,OAAO,GAAY,SAIhB,EAAc,EAAS,EAAO,CAH5B,OAAO,EAAI,EAMV,SAAQ"}
@@ -1 +1 @@
1
- const e=require(`../_virtual/_rolldown/runtime.cjs`);let t=require(`node:fs/promises`);t=e.__toESM(t);let n=require(`node:path`);n=e.__toESM(n),require(`server-only`);async function r(){let e=[],r=process.cwd(),i=await(async e=>{let r=[`pnpm-workspace.yaml`,`packageon`],i=e;for(console.log(`[intl]: Searching for monorepo root starting from: ${e}`);i!==n.default.parse(i).root;){for(let e of r)try{if(await t.default.access(n.default.join(i,e)),e===`pnpm-workspace.yaml`)return i}catch{}i=n.default.dirname(i)}return null})(r);if(i){let r=n.default.join(i,`packages`);try{let i=await t.default.readdir(r,{withFileTypes:!0});for(let a of i)if(a.isDirectory()){let i=n.default.join(r,a.name,`locales`);try{await t.default.access(i),e.push(i)}catch{console.error(`[intl]: No locales found in package: ${a.name}`)}}}catch{console.error(`[intl]: Failed to read packages directory at: ${r}`)}}let a=n.default.join(r,`node_modules`,`@arch-cadre`);try{let r=await t.default.readdir(a,{withFileTypes:!0});for(let i of r){let r=n.default.join(a,i.name,`locales`);try{await t.default.access(r),e.push(r)}catch{console.error(`[intl]: No locales found in @arch-cadre package: ${i.name}`)}}}catch{console.error(`[intl]: Failed to read @arch-cadre packages in node_modules at: ${a}`)}let o=n.default.join(r,`modules`);try{let r=await t.default.readdir(o,{withFileTypes:!0});for(let i of r)if(i.isDirectory()){let r=n.default.join(o,i.name,`locales`);try{await t.default.access(r),e.push(r)}catch{console.error(`[intl]: No locales found in local module: ${i.name}`)}}}catch{console.error(`[intl]: Failed to read local modules directory at: ${o}`)}return Array.from(new Set(e))}async function i(e=[],t=`modules`){return r()}exports.discoverLocalePaths=r,exports.getModuleLocalePaths=i;
1
+ const e=require(`../_virtual/_rolldown/runtime.cjs`);let t=require(`node:fs/promises`);t=e.__toESM(t);let n=require(`node:path`);n=e.__toESM(n),require(`server-only`);async function r(){let e=[],r=process.cwd(),i=await(async e=>{let r=[`pnpm-workspace.yaml`,`package.json`],i=e;for(;i!==n.default.parse(i).root;){for(let e of r)try{let r=n.default.join(i,e);if(await t.default.access(r),e===`pnpm-workspace.yaml`)return i}catch{}i=n.default.dirname(i)}return null})(r),a=async r=>{let i=n.default.join(r,`node_modules`,`@arch-cadre`);try{await t.default.access(i);let r=await t.default.readdir(i,{withFileTypes:!0});for(let a of r){let r=n.default.join(i,a.name,`locales`);try{await t.default.access(r),e.push(r),console.log(`[intl]: Discovered locales in node_modules: ${r}`)}catch{}}}catch{}};if(i){let r=n.default.join(i,`packages`);try{let i=await t.default.readdir(r,{withFileTypes:!0});for(let a of i)if(a.isDirectory()){let i=n.default.join(r,a.name,`locales`);try{await t.default.access(i),e.push(i),console.log(`[intl]: Discovered locales in monorepo package: ${i}`)}catch{}}}catch{}await a(i)}let o=r;for(;o!==n.default.parse(o).root;)await a(o),o=n.default.dirname(o);let s=n.default.join(r,`modules`);try{let r=await t.default.readdir(s,{withFileTypes:!0});for(let i of r)if(i.isDirectory()){let r=n.default.join(s,i.name,`locales`);try{await t.default.access(r),e.push(r),console.log(`[intl]: Discovered locales in local module: ${r}`)}catch{}}}catch{}return Array.from(new Set(e))}async function i(e=[],t=`modules`){return r()}exports.discoverLocalePaths=r,exports.getModuleLocalePaths=i;
@@ -1,2 +1,2 @@
1
- import e from"node:fs/promises";import t from"node:path";import"server-only";async function n(){let n=[],r=process.cwd(),i=await(async n=>{let r=[`pnpm-workspace.yaml`,`packageon`],i=n;for(console.log(`[intl]: Searching for monorepo root starting from: ${n}`);i!==t.parse(i).root;){for(let n of r)try{if(await e.access(t.join(i,n)),n===`pnpm-workspace.yaml`)return i}catch{}i=t.dirname(i)}return null})(r);if(i){let r=t.join(i,`packages`);try{let i=await e.readdir(r,{withFileTypes:!0});for(let a of i)if(a.isDirectory()){let i=t.join(r,a.name,`locales`);try{await e.access(i),n.push(i)}catch{console.error(`[intl]: No locales found in package: ${a.name}`)}}}catch{console.error(`[intl]: Failed to read packages directory at: ${r}`)}}let a=t.join(r,`node_modules`,`@arch-cadre`);try{let r=await e.readdir(a,{withFileTypes:!0});for(let i of r){let r=t.join(a,i.name,`locales`);try{await e.access(r),n.push(r)}catch{console.error(`[intl]: No locales found in @arch-cadre package: ${i.name}`)}}}catch{console.error(`[intl]: Failed to read @arch-cadre packages in node_modules at: ${a}`)}let o=t.join(r,`modules`);try{let r=await e.readdir(o,{withFileTypes:!0});for(let i of r)if(i.isDirectory()){let r=t.join(o,i.name,`locales`);try{await e.access(r),n.push(r)}catch{console.error(`[intl]: No locales found in local module: ${i.name}`)}}}catch{console.error(`[intl]: Failed to read local modules directory at: ${o}`)}return Array.from(new Set(n))}async function r(e=[],t=`modules`){return n()}export{n as discoverLocalePaths,r as getModuleLocalePaths};
1
+ import e from"node:fs/promises";import t from"node:path";import"server-only";async function n(){let n=[],r=process.cwd(),i=await(async n=>{let r=[`pnpm-workspace.yaml`,`package.json`],i=n;for(;i!==t.parse(i).root;){for(let n of r)try{let r=t.join(i,n);if(await e.access(r),n===`pnpm-workspace.yaml`)return i}catch{}i=t.dirname(i)}return null})(r),a=async r=>{let i=t.join(r,`node_modules`,`@arch-cadre`);try{await e.access(i);let r=await e.readdir(i,{withFileTypes:!0});for(let a of r){let r=t.join(i,a.name,`locales`);try{await e.access(r),n.push(r),console.log(`[intl]: Discovered locales in node_modules: ${r}`)}catch{}}}catch{}};if(i){let r=t.join(i,`packages`);try{let i=await e.readdir(r,{withFileTypes:!0});for(let a of i)if(a.isDirectory()){let i=t.join(r,a.name,`locales`);try{await e.access(i),n.push(i),console.log(`[intl]: Discovered locales in monorepo package: ${i}`)}catch{}}}catch{}await a(i)}let o=r;for(;o!==t.parse(o).root;)await a(o),o=t.dirname(o);let s=t.join(r,`modules`);try{let r=await e.readdir(s,{withFileTypes:!0});for(let i of r)if(i.isDirectory()){let r=t.join(s,i.name,`locales`);try{await e.access(r),n.push(r),console.log(`[intl]: Discovered locales in local module: ${r}`)}catch{}}}catch{}return Array.from(new Set(n))}async function r(e=[],t=`modules`){return n()}export{n as discoverLocalePaths,r as getModuleLocalePaths};
2
2
  //# sourceMappingURL=module-loader.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"module-loader.mjs","names":[],"sources":["../../src/server/module-loader.ts"],"sourcesContent":["import \"server-only\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport async function discoverLocalePaths(): Promise<string[]> {\n const paths: string[] = [];\n const root = process.cwd();\n\n // Helper to find monorepo root (looking for pnpm-workspace.yaml or turboon)\n const findMonorepoRoot = async (current: string): Promise<string | null> => {\n const indicators = [\"pnpm-workspace.yaml\", \"packageon\"];\n let dir = current;\n\n console.log(\n `[intl]: Searching for monorepo root starting from: ${current}`,\n );\n\n while (dir !== path.parse(dir).root) {\n for (const indicator of indicators) {\n try {\n await fs.access(path.join(dir, indicator));\n // If we find pnpm-workspace.yaml, this is definitely it\n if (indicator === \"pnpm-workspace.yaml\") return dir;\n } catch { }\n }\n dir = path.dirname(dir);\n }\n return null;\n };\n\n const monorepoRoot = await findMonorepoRoot(root);\n\n // 1. Monorepo 'packages' scan\n if (monorepoRoot) {\n const packagesDir = path.join(monorepoRoot, \"packages\");\n try {\n const entries = await fs.readdir(packagesDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const localePath = path.join(packagesDir, entry.name, \"locales\");\n try {\n await fs.access(localePath);\n\n paths.push(localePath);\n } catch {\n console.error(`[intl]: No locales found in package: ${entry.name}`);\n }\n }\n }\n } catch (_e) {\n console.error(`[intl]: Failed to read packages directory at: ${packagesDir}`);\n }\n }\n\n // 2. node_modules/@arch-cadre scan (relative to app root)\n const nodeModulesKryo = path.join(root, \"node_modules\", \"@arch-cadre\");\n try {\n const entries = await fs.readdir(nodeModulesKryo, { withFileTypes: true });\n for (const entry of entries) {\n const localePath = path.join(nodeModulesKryo, entry.name, \"locales\");\n try {\n await fs.access(localePath);\n paths.push(localePath);\n } catch {\n console.error(`[intl]: No locales found in @arch-cadre package: ${entry.name}`);\n }\n }\n } catch (_e) {\n console.error(`[intl]: Failed to read @arch-cadre packages in node_modules at: ${nodeModulesKryo}`);\n }\n\n // 3. Local 'modules' scan (relative to app root)\n const localModulesDir = path.join(root, \"modules\");\n try {\n const entries = await fs.readdir(localModulesDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const localePath = path.join(localModulesDir, entry.name, \"locales\");\n try {\n await fs.access(localePath);\n paths.push(localePath);\n } catch {\n console.error(`[intl]: No locales found in local module: ${entry.name}`);\n }\n }\n }\n } catch (_e) {\n console.error(`[intl]: Failed to read local modules directory at: ${localModulesDir}`);\n }\n\n return Array.from(new Set(paths));\n}\n\n/**\n * Legacy support or manual overrides\n */\nexport async function getModuleLocalePaths(\n packageModules: string[] = [],\n localModulesDir: string = \"modules\",\n): Promise<string[]> {\n // ... rest of the existing function if we want to keep it,\n // but we'll probably favor discoverLocalePaths\n return discoverLocalePaths();\n}\n"],"mappings":"6EAIA,eAAsB,GAAyC,CAC7D,IAAM,EAAkB,EAAE,CACpB,EAAO,QAAQ,KAAK,CAwBpB,EAAe,MArBI,KAAO,IAA4C,CAC1E,IAAM,EAAa,CAAC,sBAAuB,YAAY,CACnD,EAAM,EAMV,IAJA,QAAQ,IACN,sDAAsD,IACvD,CAEM,IAAQ,EAAK,MAAM,EAAI,CAAC,MAAM,CACnC,IAAK,IAAM,KAAa,EACtB,GAAI,CAGF,GAFA,MAAM,EAAG,OAAO,EAAK,KAAK,EAAK,EAAU,CAAC,CAEtC,IAAc,sBAAuB,OAAO,OAC1C,EAEV,EAAM,EAAK,QAAQ,EAAI,CAEzB,OAAO,OAGmC,EAAK,CAGjD,GAAI,EAAc,CAChB,IAAM,EAAc,EAAK,KAAK,EAAc,WAAW,CACvD,GAAI,CACF,IAAM,EAAU,MAAM,EAAG,QAAQ,EAAa,CAAE,cAAe,GAAM,CAAC,CACtE,IAAK,IAAM,KAAS,EAClB,GAAI,EAAM,aAAa,CAAE,CACvB,IAAM,EAAa,EAAK,KAAK,EAAa,EAAM,KAAM,UAAU,CAChE,GAAI,CACF,MAAM,EAAG,OAAO,EAAW,CAE3B,EAAM,KAAK,EAAW,MAChB,CACN,QAAQ,MAAM,wCAAwC,EAAM,OAAO,QAI9D,CACX,QAAQ,MAAM,iDAAiD,IAAc,EAKjF,IAAM,EAAkB,EAAK,KAAK,EAAM,eAAgB,cAAc,CACtE,GAAI,CACF,IAAM,EAAU,MAAM,EAAG,QAAQ,EAAiB,CAAE,cAAe,GAAM,CAAC,CAC1E,IAAK,IAAM,KAAS,EAAS,CAC3B,IAAM,EAAa,EAAK,KAAK,EAAiB,EAAM,KAAM,UAAU,CACpE,GAAI,CACF,MAAM,EAAG,OAAO,EAAW,CAC3B,EAAM,KAAK,EAAW,MAChB,CACN,QAAQ,MAAM,oDAAoD,EAAM,OAAO,QAGxE,CACX,QAAQ,MAAM,mEAAmE,IAAkB,CAIrG,IAAM,EAAkB,EAAK,KAAK,EAAM,UAAU,CAClD,GAAI,CACF,IAAM,EAAU,MAAM,EAAG,QAAQ,EAAiB,CAAE,cAAe,GAAM,CAAC,CAC1E,IAAK,IAAM,KAAS,EAClB,GAAI,EAAM,aAAa,CAAE,CACvB,IAAM,EAAa,EAAK,KAAK,EAAiB,EAAM,KAAM,UAAU,CACpE,GAAI,CACF,MAAM,EAAG,OAAO,EAAW,CAC3B,EAAM,KAAK,EAAW,MAChB,CACN,QAAQ,MAAM,6CAA6C,EAAM,OAAO,QAInE,CACX,QAAQ,MAAM,sDAAsD,IAAkB,CAGxF,OAAO,MAAM,KAAK,IAAI,IAAI,EAAM,CAAC,CAMnC,eAAsB,EACpB,EAA2B,EAAE,CAC7B,EAA0B,UACP,CAGnB,OAAO,GAAqB"}
1
+ {"version":3,"file":"module-loader.mjs","names":[],"sources":["../../src/server/module-loader.ts"],"sourcesContent":["import \"server-only\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport async function discoverLocalePaths(): Promise<string[]> {\n const paths: string[] = [];\n const root = process.cwd();\n\n // Helper to find monorepo root (looking for pnpm-workspace.yaml or package.json)\n const findMonorepoRoot = async (current: string): Promise<string | null> => {\n const indicators = [\"pnpm-workspace.yaml\", \"package.json\"];\n let dir = current;\n\n while (dir !== path.parse(dir).root) {\n for (const indicator of indicators) {\n try {\n const p = path.join(dir, indicator);\n await fs.access(p);\n // If we find pnpm-workspace.yaml, this is definitely it\n if (indicator === \"pnpm-workspace.yaml\") return dir;\n } catch { }\n }\n dir = path.dirname(dir);\n }\n return null;\n };\n\n const monorepoRoot = await findMonorepoRoot(root);\n\n // Helper to scan node_modules/@arch-cadre in a given directory\n const scanKryoNodeModules = async (baseDir: string) => {\n const nodeModulesKryo = path.join(baseDir, \"node_modules\", \"@arch-cadre\");\n try {\n await fs.access(nodeModulesKryo);\n const entries = await fs.readdir(nodeModulesKryo, { withFileTypes: true });\n for (const entry of entries) {\n const localePath = path.join(nodeModulesKryo, entry.name, \"locales\");\n try {\n await fs.access(localePath);\n paths.push(localePath);\n console.log(`[intl]: Discovered locales in node_modules: ${localePath}`);\n } catch { }\n }\n } catch { }\n };\n\n // 1. Monorepo 'packages' scan\n if (monorepoRoot) {\n const packagesDir = path.join(monorepoRoot, \"packages\");\n try {\n const entries = await fs.readdir(packagesDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const localePath = path.join(packagesDir, entry.name, \"locales\");\n try {\n await fs.access(localePath);\n paths.push(localePath);\n console.log(`[intl]: Discovered locales in monorepo package: ${localePath}`);\n } catch { }\n }\n }\n } catch { }\n\n // Also scan node_modules at monorepo root\n await scanKryoNodeModules(monorepoRoot);\n }\n\n // 2. Scan node_modules at current and parent directories (crucial for production)\n let currentDir = root;\n while (currentDir !== path.parse(currentDir).root) {\n await scanKryoNodeModules(currentDir);\n currentDir = path.dirname(currentDir);\n }\n\n // 3. Local 'modules' scan (relative to app root)\n const localModulesDir = path.join(root, \"modules\");\n try {\n const entries = await fs.readdir(localModulesDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const localePath = path.join(localModulesDir, entry.name, \"locales\");\n try {\n await fs.access(localePath);\n paths.push(localePath);\n console.log(`[intl]: Discovered locales in local module: ${localePath}`);\n } catch { }\n }\n }\n } catch { }\n\n return Array.from(new Set(paths));\n}\n\n/**\n * Legacy support or manual overrides\n */\nexport async function getModuleLocalePaths(\n packageModules: string[] = [],\n localModulesDir: string = \"modules\",\n): Promise<string[]> {\n // ... rest of the existing function if we want to keep it,\n // but we'll probably favor discoverLocalePaths\n return discoverLocalePaths();\n}\n"],"mappings":"6EAIA,eAAsB,GAAyC,CAC7D,IAAM,EAAkB,EAAE,CACpB,EAAO,QAAQ,KAAK,CAqBpB,EAAe,MAlBI,KAAO,IAA4C,CAC1E,IAAM,EAAa,CAAC,sBAAuB,eAAe,CACtD,EAAM,EAEV,KAAO,IAAQ,EAAK,MAAM,EAAI,CAAC,MAAM,CACnC,IAAK,IAAM,KAAa,EACtB,GAAI,CACF,IAAM,EAAI,EAAK,KAAK,EAAK,EAAU,CAGnC,GAFA,MAAM,EAAG,OAAO,EAAE,CAEd,IAAc,sBAAuB,OAAO,OAC1C,EAEV,EAAM,EAAK,QAAQ,EAAI,CAEzB,OAAO,OAGmC,EAAK,CAG3C,EAAsB,KAAO,IAAoB,CACrD,IAAM,EAAkB,EAAK,KAAK,EAAS,eAAgB,cAAc,CACzE,GAAI,CACF,MAAM,EAAG,OAAO,EAAgB,CAChC,IAAM,EAAU,MAAM,EAAG,QAAQ,EAAiB,CAAE,cAAe,GAAM,CAAC,CAC1E,IAAK,IAAM,KAAS,EAAS,CAC3B,IAAM,EAAa,EAAK,KAAK,EAAiB,EAAM,KAAM,UAAU,CACpE,GAAI,CACF,MAAM,EAAG,OAAO,EAAW,CAC3B,EAAM,KAAK,EAAW,CACtB,QAAQ,IAAI,+CAA+C,IAAa,MAClE,SAEJ,IAIV,GAAI,EAAc,CAChB,IAAM,EAAc,EAAK,KAAK,EAAc,WAAW,CACvD,GAAI,CACF,IAAM,EAAU,MAAM,EAAG,QAAQ,EAAa,CAAE,cAAe,GAAM,CAAC,CACtE,IAAK,IAAM,KAAS,EAClB,GAAI,EAAM,aAAa,CAAE,CACvB,IAAM,EAAa,EAAK,KAAK,EAAa,EAAM,KAAM,UAAU,CAChE,GAAI,CACF,MAAM,EAAG,OAAO,EAAW,CAC3B,EAAM,KAAK,EAAW,CACtB,QAAQ,IAAI,mDAAmD,IAAa,MACtE,SAGN,EAGR,MAAM,EAAoB,EAAa,CAIzC,IAAI,EAAa,EACjB,KAAO,IAAe,EAAK,MAAM,EAAW,CAAC,MAC3C,MAAM,EAAoB,EAAW,CACrC,EAAa,EAAK,QAAQ,EAAW,CAIvC,IAAM,EAAkB,EAAK,KAAK,EAAM,UAAU,CAClD,GAAI,CACF,IAAM,EAAU,MAAM,EAAG,QAAQ,EAAiB,CAAE,cAAe,GAAM,CAAC,CAC1E,IAAK,IAAM,KAAS,EAClB,GAAI,EAAM,aAAa,CAAE,CACvB,IAAM,EAAa,EAAK,KAAK,EAAiB,EAAM,KAAM,UAAU,CACpE,GAAI,CACF,MAAM,EAAG,OAAO,EAAW,CAC3B,EAAM,KAAK,EAAW,CACtB,QAAQ,IAAI,+CAA+C,IAAa,MAClE,SAGN,EAER,OAAO,MAAM,KAAK,IAAI,IAAI,EAAM,CAAC,CAMnC,eAAsB,EACpB,EAA2B,EAAE,CAC7B,EAA0B,UACP,CAGnB,OAAO,GAAqB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arch-cadre/intl",
3
- "version": "0.0.64",
3
+ "version": "0.0.67",
4
4
  "type": "module",
5
5
  "description": "Core Intl for Kryo framework",
6
6
  "types": "./dist/index.d.cts",