@arch-cadre/intl 0.0.65 → 0.0.68
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.
- package/dist/server/index.cjs +1 -1
- package/dist/server/index.d.cts +5 -1
- package/dist/server/index.d.cts.map +1 -1
- package/dist/server/index.d.mts +5 -1
- package/dist/server/index.d.mts.map +1 -1
- package/dist/server/index.mjs +1 -1
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/module-loader.cjs +1 -1
- package/dist/server/module-loader.mjs +1 -1
- package/dist/server/module-loader.mjs.map +1 -1
- package/package.json +1 -1
package/dist/server/index.cjs
CHANGED
|
@@ -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
|
|
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;
|
package/dist/server/index.d.cts
CHANGED
|
@@ -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":";;;;;;;;
|
|
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"}
|
package/dist/server/index.d.mts
CHANGED
|
@@ -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":";;;;;;;;
|
|
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"}
|
package/dist/server/index.mjs
CHANGED
|
@@ -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
|
|
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,
|
|
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`,`
|
|
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`,`
|
|
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
|
|
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"}
|