@intlayer/chokidar 8.4.10 → 8.5.0

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.
@@ -53,6 +53,11 @@ const config = {
53
53
  provider: 'openai',
54
54
  model: 'gpt-5-mini',
55
55
  apiKey: process.env.OPENAI_API_KEY,
56
+ /**
57
+ * Additional context for the translations
58
+ *
59
+ * Can be use in addition of the dictionary `description` field
60
+ */
56
61
  applicationContext: [''].join('\n'),
57
62
  },
58
63
  compiler: {
@@ -85,7 +90,10 @@ const config = {
85
90
 
86
91
  /**
87
92
  * Indicates if the components should be saved after being transformed.
88
- * That way, the compiler can be run only once to transform the app, and then it can be removed.
93
+ *
94
+ * - If `true`, the compiler will rewrite the component file in the disk. So the transformation will be permanent, and the compiler will skip the transformation for the next process. That way, the compiler can transform the app, and then it can be removed.
95
+ *
96
+ * - If `false`, the compiler will inject the `useIntlayer()` function call into the code in the build output only, and keep the base codebase intact. The transformation will be done only in memory.
89
97
  */
90
98
  saveComponents: false,
91
99
  },
@@ -53,6 +53,11 @@ const config = {
53
53
  provider: 'openai',
54
54
  model: 'gpt-5-mini',
55
55
  apiKey: process.env.OPENAI_API_KEY,
56
+ /**
57
+ * Additional context for the translations
58
+ *
59
+ * Can be use in addition of the dictionary `description` field
60
+ */
56
61
  applicationContext: [''].join('\n'),
57
62
  },
58
63
  compiler: {
@@ -85,7 +90,10 @@ const config = {
85
90
 
86
91
  /**
87
92
  * Indicates if the components should be saved after being transformed.
88
- * That way, the compiler can be run only once to transform the app, and then it can be removed.
93
+ *
94
+ * - If `true`, the compiler will rewrite the component file in the disk. So the transformation will be permanent, and the compiler will skip the transformation for the next process. That way, the compiler can transform the app, and then it can be removed.
95
+ *
96
+ * - If `false`, the compiler will inject the `useIntlayer()` function call into the code in the build output only, and keep the base codebase intact. The transformation will be done only in memory.
89
97
  */
90
98
  saveComponents: false,
91
99
  },
@@ -52,6 +52,11 @@ const config: IntlayerConfig = {
52
52
  provider: 'openai',
53
53
  model: 'gpt-5-mini',
54
54
  apiKey: process.env.OPENAI_API_KEY,
55
+ /**
56
+ * Additional context for the translations
57
+ *
58
+ * Can be use in addition of the dictionary `description` field
59
+ */
55
60
  applicationContext: [''].join('\n'),
56
61
  },
57
62
  compiler: {
@@ -84,7 +89,10 @@ const config: IntlayerConfig = {
84
89
 
85
90
  /**
86
91
  * Indicates if the components should be saved after being transformed.
87
- * That way, the compiler can be run only once to transform the app, and then it can be removed.
92
+ *
93
+ * - If `true`, the compiler will rewrite the component file in the disk. So the transformation will be permanent, and the compiler will skip the transformation for the next process. That way, the compiler can transform the app, and then it can be removed.
94
+ *
95
+ * - If `false`, the compiler will inject the `useIntlayer()` function call into the code in the build output only, and keep the base codebase intact. The transformation will be done only in memory.
88
96
  */
89
97
  saveComponents: false,
90
98
  },
@@ -46,7 +46,7 @@ const getIntlayerBundle = async (configuration) => {
46
46
  const rootRequire = (0, _intlayer_config_utils.getProjectRequire)(configuration.system.baseDir);
47
47
  const configPackageRequire = _intlayer_config_utils.configESMxCJSRequire;
48
48
  const localRequire = _intlayer_config_utils.isESModule ? (0, node_module.createRequire)(require("url").pathToFileURL(__filename).href) : require;
49
- const configurationPath = (0, node_path.join)(configuration.system.configDir, `configuration.json`);
49
+ const configurationPath = (0, node_path.join)(configuration.system.configDir, `configuration.cjs`);
50
50
  const replaceModules = {
51
51
  defu: configPackageRequire.resolve("defu"),
52
52
  esbuild: configPackageRequire.resolve("esbuild"),
@@ -1 +1 @@
1
- {"version":3,"file":"getIntlayerBundle.cjs","names":["configESMxCJSRequire","isESModule","builtinModules"],"sources":["../../../src/loadDictionaries/getIntlayerBundle.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises';\nimport { builtinModules, createRequire } from 'node:module';\nimport { join } from 'node:path';\nimport { bundleFile, type ESBuildPlugin } from '@intlayer/config/file';\nimport {\n configESMxCJSRequire,\n getProjectRequire,\n isESModule,\n} from '@intlayer/config/utils';\nimport type { IntlayerConfig } from '@intlayer/types/config';\n\n/**\n * Rewrites selected bare specifiers (and any of their subpaths) to absolute file paths,\n * using the provided localeRequire (either createRequire(import.meta.url) or require).\n *\n * Example:\n * rewritePathsPlugin([\"@intlayer/config\", \"@intlayer/core\"], localeRequire)\n * …will also rewrite \"@intlayer/core/file\" etc.\n */\nconst rewritePathsPlugin = (\n replaceModules: Record<string, string>,\n excludeModules?: string[]\n): ESBuildPlugin => {\n return {\n name: 'rewrite-paths',\n setup(build) {\n build.onResolve({ filter: /.*/ }, (args) => {\n const exact = replaceModules[args.path];\n\n if (excludeModules?.includes(args.path)) {\n return null;\n }\n\n if (exact) {\n return {\n path: exact,\n namespace: 'intlayer-replace-modules',\n external: true, // ← prevents onLoad requirement\n };\n }\n\n // Optional: support subpaths like \"@intlayer/core/xyz\"\n for (const key of Object.keys(replaceModules)) {\n if (args.path === key || args.path.startsWith(`${key}/`)) {\n const sub = args.path.slice(key.length); // '' or '/...'\n return {\n path: replaceModules[key] + sub,\n namespace: 'intlayer-replace-modules',\n external: true, // ← prevents onLoad requirement\n };\n }\n }\n });\n },\n };\n};\n\n/**\n * Get the intlayer bundle to embed @intlayer/core and be able to mock @intlayer/config/built to mock the configuration file.\n */\nexport const getIntlayerBundle = async (configuration: IntlayerConfig) => {\n const rootRequire = getProjectRequire(configuration.system.baseDir);\n const configPackageRequire = configESMxCJSRequire;\n const localRequire = isESModule ? createRequire(import.meta.url) : require;\n\n const configurationPath = join(\n configuration.system.configDir,\n `configuration.json`\n );\n\n const replaceModules = {\n defu: configPackageRequire.resolve('defu'),\n esbuild: configPackageRequire.resolve('esbuild'),\n '@intlayer/config/built': configurationPath,\n '@intlayer/config/utils': localRequire.resolve('@intlayer/config/utils'),\n '@intlayer/config/client': localRequire.resolve('@intlayer/config/client'),\n '@intlayer/config/logger': localRequire.resolve('@intlayer/config/logger'),\n '@intlayer/core/file': localRequire.resolve('@intlayer/core/file'),\n };\n\n const filePath = rootRequire.resolve('intlayer');\n const code = await readFile(filePath, 'utf-8');\n\n const output = await bundleFile(code, filePath, {\n external: [\n ...builtinModules,\n ...builtinModules.map((mod) => `node:${mod}`),\n ],\n minify: true,\n plugins: [rewritePathsPlugin(replaceModules)],\n });\n\n return output ?? '';\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,MAAM,sBACJ,gBACA,mBACkB;AAClB,QAAO;EACL,MAAM;EACN,MAAM,OAAO;AACX,SAAM,UAAU,EAAE,QAAQ,MAAM,GAAG,SAAS;IAC1C,MAAM,QAAQ,eAAe,KAAK;AAElC,QAAI,gBAAgB,SAAS,KAAK,KAAK,CACrC,QAAO;AAGT,QAAI,MACF,QAAO;KACL,MAAM;KACN,WAAW;KACX,UAAU;KACX;AAIH,SAAK,MAAM,OAAO,OAAO,KAAK,eAAe,CAC3C,KAAI,KAAK,SAAS,OAAO,KAAK,KAAK,WAAW,GAAG,IAAI,GAAG,EAAE;KACxD,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,OAAO;AACvC,YAAO;MACL,MAAM,eAAe,OAAO;MAC5B,WAAW;MACX,UAAU;MACX;;KAGL;;EAEL;;;;;AAMH,MAAa,oBAAoB,OAAO,kBAAkC;CACxE,MAAM,4DAAgC,cAAc,OAAO,QAAQ;CACnE,MAAM,uBAAuBA;CAC7B,MAAM,eAAeC,iHAA2C,GAAG;CAEnE,MAAM,wCACJ,cAAc,OAAO,WACrB,qBACD;CAED,MAAM,iBAAiB;EACrB,MAAM,qBAAqB,QAAQ,OAAO;EAC1C,SAAS,qBAAqB,QAAQ,UAAU;EAChD,0BAA0B;EAC1B,0BAA0B,aAAa,QAAQ,yBAAyB;EACxE,2BAA2B,aAAa,QAAQ,0BAA0B;EAC1E,2BAA2B,aAAa,QAAQ,0BAA0B;EAC1E,uBAAuB,aAAa,QAAQ,sBAAsB;EACnE;CAED,MAAM,WAAW,YAAY,QAAQ,WAAW;AAYhD,QATe,4CAFF,qCAAe,UAAU,QAAQ,EAER,UAAU;EAC9C,UAAU,CACR,GAAGC,4BACH,GAAGA,2BAAe,KAAK,QAAQ,QAAQ,MAAM,CAC9C;EACD,QAAQ;EACR,SAAS,CAAC,mBAAmB,eAAe,CAAC;EAC9C,CAAC,IAEe"}
1
+ {"version":3,"file":"getIntlayerBundle.cjs","names":["configESMxCJSRequire","isESModule","builtinModules"],"sources":["../../../src/loadDictionaries/getIntlayerBundle.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises';\nimport { builtinModules, createRequire } from 'node:module';\nimport { join } from 'node:path';\nimport { bundleFile, type ESBuildPlugin } from '@intlayer/config/file';\nimport {\n configESMxCJSRequire,\n getProjectRequire,\n isESModule,\n} from '@intlayer/config/utils';\nimport type { IntlayerConfig } from '@intlayer/types/config';\n\n/**\n * Rewrites selected bare specifiers (and any of their subpaths) to absolute file paths,\n * using the provided localeRequire (either createRequire(import.meta.url) or require).\n *\n * Example:\n * rewritePathsPlugin([\"@intlayer/config\", \"@intlayer/core\"], localeRequire)\n * …will also rewrite \"@intlayer/core/file\" etc.\n */\nconst rewritePathsPlugin = (\n replaceModules: Record<string, string>,\n excludeModules?: string[]\n): ESBuildPlugin => {\n return {\n name: 'rewrite-paths',\n setup(build) {\n build.onResolve({ filter: /.*/ }, (args) => {\n const exact = replaceModules[args.path];\n\n if (excludeModules?.includes(args.path)) {\n return null;\n }\n\n if (exact) {\n return {\n path: exact,\n namespace: 'intlayer-replace-modules',\n external: true, // ← prevents onLoad requirement\n };\n }\n\n // Optional: support subpaths like \"@intlayer/core/xyz\"\n for (const key of Object.keys(replaceModules)) {\n if (args.path === key || args.path.startsWith(`${key}/`)) {\n const sub = args.path.slice(key.length); // '' or '/...'\n return {\n path: replaceModules[key] + sub,\n namespace: 'intlayer-replace-modules',\n external: true, // ← prevents onLoad requirement\n };\n }\n }\n });\n },\n };\n};\n\n/**\n * Get the intlayer bundle to embed @intlayer/core and be able to mock @intlayer/config/built to mock the configuration file.\n */\nexport const getIntlayerBundle = async (configuration: IntlayerConfig) => {\n const rootRequire = getProjectRequire(configuration.system.baseDir);\n const configPackageRequire = configESMxCJSRequire;\n const localRequire = isESModule ? createRequire(import.meta.url) : require;\n\n const configurationPath = join(\n configuration.system.configDir,\n `configuration.cjs`\n );\n\n const replaceModules = {\n defu: configPackageRequire.resolve('defu'),\n esbuild: configPackageRequire.resolve('esbuild'),\n '@intlayer/config/built': configurationPath,\n '@intlayer/config/utils': localRequire.resolve('@intlayer/config/utils'),\n '@intlayer/config/client': localRequire.resolve('@intlayer/config/client'),\n '@intlayer/config/logger': localRequire.resolve('@intlayer/config/logger'),\n '@intlayer/core/file': localRequire.resolve('@intlayer/core/file'),\n };\n\n const filePath = rootRequire.resolve('intlayer');\n const code = await readFile(filePath, 'utf-8');\n\n const output = await bundleFile(code, filePath, {\n external: [\n ...builtinModules,\n ...builtinModules.map((mod) => `node:${mod}`),\n ],\n minify: true,\n plugins: [rewritePathsPlugin(replaceModules)],\n });\n\n return output ?? '';\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,MAAM,sBACJ,gBACA,mBACkB;AAClB,QAAO;EACL,MAAM;EACN,MAAM,OAAO;AACX,SAAM,UAAU,EAAE,QAAQ,MAAM,GAAG,SAAS;IAC1C,MAAM,QAAQ,eAAe,KAAK;AAElC,QAAI,gBAAgB,SAAS,KAAK,KAAK,CACrC,QAAO;AAGT,QAAI,MACF,QAAO;KACL,MAAM;KACN,WAAW;KACX,UAAU;KACX;AAIH,SAAK,MAAM,OAAO,OAAO,KAAK,eAAe,CAC3C,KAAI,KAAK,SAAS,OAAO,KAAK,KAAK,WAAW,GAAG,IAAI,GAAG,EAAE;KACxD,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,OAAO;AACvC,YAAO;MACL,MAAM,eAAe,OAAO;MAC5B,WAAW;MACX,UAAU;MACX;;KAGL;;EAEL;;;;;AAMH,MAAa,oBAAoB,OAAO,kBAAkC;CACxE,MAAM,4DAAgC,cAAc,OAAO,QAAQ;CACnE,MAAM,uBAAuBA;CAC7B,MAAM,eAAeC,iHAA2C,GAAG;CAEnE,MAAM,wCACJ,cAAc,OAAO,WACrB,oBACD;CAED,MAAM,iBAAiB;EACrB,MAAM,qBAAqB,QAAQ,OAAO;EAC1C,SAAS,qBAAqB,QAAQ,UAAU;EAChD,0BAA0B;EAC1B,0BAA0B,aAAa,QAAQ,yBAAyB;EACxE,2BAA2B,aAAa,QAAQ,0BAA0B;EAC1E,2BAA2B,aAAa,QAAQ,0BAA0B;EAC1E,uBAAuB,aAAa,QAAQ,sBAAsB;EACnE;CAED,MAAM,WAAW,YAAY,QAAQ,WAAW;AAYhD,QATe,4CAFF,qCAAe,UAAU,QAAQ,EAER,UAAU;EAC9C,UAAU,CACR,GAAGC,4BACH,GAAGA,2BAAe,KAAK,QAAQ,QAAQ,MAAM,CAC9C;EACD,QAAQ;EACR,SAAS,CAAC,mBAAmB,eAAe,CAAC;EAC9C,CAAC,IAEe"}
@@ -0,0 +1,31 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
3
+ let _intlayer_config_node = require("@intlayer/config/node");
4
+
5
+ //#region src/writeConfiguration/generateConfigurationContent.ts
6
+ const generateConfigurationContent = (configuration, format) => {
7
+ const { internationalization, routing, editor, log, metadata } = (0, _intlayer_config_node.buildBrowserConfiguration)(configuration);
8
+ let content = "";
9
+ content += `const internationalization = ${JSON.stringify(internationalization, null, 2)};\n`;
10
+ content += `const routing = ${JSON.stringify(routing, null, 2)};\n`;
11
+ content += `const editor = ${JSON.stringify(editor, null, 2)};\n`;
12
+ content += `const log = ${JSON.stringify(log, null, 2)};\n`;
13
+ content += `const metadata = ${JSON.stringify(metadata, null, 2)};\n`;
14
+ content += `const configuration = { internationalization, routing, editor, log, metadata };\n`;
15
+ if (format === "esm") {
16
+ content += `\nexport { internationalization, routing, editor, log, metadata, configuration };\n`;
17
+ content += `export default configuration;\n`;
18
+ } else {
19
+ content += `\nmodule.exports.internationalization = internationalization;\n`;
20
+ content += `module.exports.routing = routing;\n`;
21
+ content += `module.exports.editor = editor;\n`;
22
+ content += `module.exports.log = log;\n`;
23
+ content += `module.exports.metadata = metadata;\n`;
24
+ content += `module.exports = configuration;\n`;
25
+ }
26
+ return content;
27
+ };
28
+
29
+ //#endregion
30
+ exports.generateConfigurationContent = generateConfigurationContent;
31
+ //# sourceMappingURL=generateConfigurationContent.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateConfigurationContent.cjs","names":[],"sources":["../../../src/writeConfiguration/generateConfigurationContent.ts"],"sourcesContent":["import { buildBrowserConfiguration } from '@intlayer/config/node';\nimport type { IntlayerConfig } from '@intlayer/types/config';\n\nexport const generateConfigurationContent = (\n configuration: IntlayerConfig,\n format: 'cjs' | 'esm'\n): string => {\n const { internationalization, routing, editor, log, metadata } =\n buildBrowserConfiguration(configuration);\n\n let content = '';\n\n content += `const internationalization = ${JSON.stringify(internationalization, null, 2)};\\n`;\n content += `const routing = ${JSON.stringify(routing, null, 2)};\\n`;\n content += `const editor = ${JSON.stringify(editor, null, 2)};\\n`;\n content += `const log = ${JSON.stringify(log, null, 2)};\\n`;\n content += `const metadata = ${JSON.stringify(metadata, null, 2)};\\n`;\n content += `const configuration = { internationalization, routing, editor, log, metadata };\\n`;\n\n if (format === 'esm') {\n content += `\\nexport { internationalization, routing, editor, log, metadata, configuration };\\n`;\n content += `export default configuration;\\n`;\n } else {\n content += `\\nmodule.exports.internationalization = internationalization;\\n`;\n content += `module.exports.routing = routing;\\n`;\n content += `module.exports.editor = editor;\\n`;\n content += `module.exports.log = log;\\n`;\n content += `module.exports.metadata = metadata;\\n`;\n content += `module.exports = configuration;\\n`;\n }\n\n return content;\n};\n"],"mappings":";;;;;AAGA,MAAa,gCACX,eACA,WACW;CACX,MAAM,EAAE,sBAAsB,SAAS,QAAQ,KAAK,kEACxB,cAAc;CAE1C,IAAI,UAAU;AAEd,YAAW,gCAAgC,KAAK,UAAU,sBAAsB,MAAM,EAAE,CAAC;AACzF,YAAW,mBAAmB,KAAK,UAAU,SAAS,MAAM,EAAE,CAAC;AAC/D,YAAW,kBAAkB,KAAK,UAAU,QAAQ,MAAM,EAAE,CAAC;AAC7D,YAAW,eAAe,KAAK,UAAU,KAAK,MAAM,EAAE,CAAC;AACvD,YAAW,oBAAoB,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC;AACjE,YAAW;AAEX,KAAI,WAAW,OAAO;AACpB,aAAW;AACX,aAAW;QACN;AACL,aAAW;AACX,aAAW;AACX,aAAW;AACX,aAAW;AACX,aAAW;AACX,aAAW;;AAGb,QAAO"}
@@ -1,40 +1,22 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
3
- const require_writeJsonIfChanged = require('../writeJsonIfChanged.cjs');
3
+ const require_writeFileIfChanged = require('../writeFileIfChanged.cjs');
4
+ const require_writeConfiguration_generateConfigurationContent = require('./generateConfigurationContent.cjs');
4
5
  let node_fs_promises = require("node:fs/promises");
5
6
  let node_path = require("node:path");
6
- let node_util = require("node:util");
7
7
 
8
8
  //#region src/writeConfiguration/index.ts
9
- const getCachedConfiguration = async (configuration) => {
10
- const configurationContent = await (0, node_fs_promises.readFile)((0, node_path.join)(configuration.system.configDir, "configuration.json"), "utf8");
11
- return JSON.parse(configurationContent);
12
- };
13
9
  const isCachedConfigurationUpToDate = async (configuration) => {
14
10
  try {
15
- const cleanedConfiguration = cleanConfiguration(configuration);
16
- return (0, node_util.isDeepStrictEqual)(await getCachedConfiguration(configuration), cleanedConfiguration);
11
+ return await (0, node_fs_promises.readFile)((0, node_path.join)(configuration.system.configDir, "configuration.mjs"), "utf8") === require_writeConfiguration_generateConfigurationContent.generateConfigurationContent(configuration, "esm");
17
12
  } catch {
18
13
  return null;
19
14
  }
20
15
  };
21
- const cleanConfiguration = (configuration) => {
22
- return JSON.parse(JSON.stringify({
23
- internationalization: {
24
- locales: configuration.internationalization.locales,
25
- defaultLocale: configuration.internationalization.defaultLocale
26
- },
27
- editor: configuration.editor,
28
- log: configuration.log,
29
- routing: configuration.routing,
30
- metadata: configuration.metadata
31
- }));
32
- };
33
16
  const writeConfiguration = async (configuration) => {
34
- const { system } = configuration;
35
- const { configDir } = system;
17
+ const { configDir } = configuration.system;
36
18
  await (0, node_fs_promises.mkdir)(configDir, { recursive: true });
37
- await require_writeJsonIfChanged.writeJsonIfChanged((0, node_path.join)(configDir, "configuration.json"), cleanConfiguration(configuration));
19
+ await Promise.all([require_writeFileIfChanged.writeFileIfChanged((0, node_path.join)(configDir, "configuration.mjs"), require_writeConfiguration_generateConfigurationContent.generateConfigurationContent(configuration, "esm")), require_writeFileIfChanged.writeFileIfChanged((0, node_path.join)(configDir, "configuration.cjs"), require_writeConfiguration_generateConfigurationContent.generateConfigurationContent(configuration, "cjs"))]);
38
20
  };
39
21
 
40
22
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["writeJsonIfChanged"],"sources":["../../../src/writeConfiguration/index.ts"],"sourcesContent":["import { mkdir, readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { isDeepStrictEqual } from 'node:util';\nimport type {\n CustomIntlayerConfig,\n IntlayerConfig,\n} from '@intlayer/types/config';\nimport { writeJsonIfChanged } from '../writeJsonIfChanged';\n\nconst getCachedConfiguration = async (configuration: IntlayerConfig) => {\n const configFilePath = join(\n configuration.system.configDir,\n 'configuration.json'\n );\n\n const configurationContent = await readFile(configFilePath, 'utf8');\n return JSON.parse(configurationContent);\n};\n\nexport const isCachedConfigurationUpToDate = async (\n configuration: IntlayerConfig\n): Promise<boolean | null> => {\n try {\n const cleanedConfiguration = cleanConfiguration(configuration);\n const cachedConfiguration = await getCachedConfiguration(configuration);\n\n const isSimilar = isDeepStrictEqual(\n cachedConfiguration,\n cleanedConfiguration\n );\n\n return isSimilar;\n } catch {\n return null; // Can crash if await readFile(configFilePath, 'utf8'); and config is not defined\n }\n};\n\nconst cleanConfiguration = (configuration: IntlayerConfig): IntlayerConfig => {\n const parsedConfiguration = JSON.parse(\n JSON.stringify({\n internationalization: {\n locales: configuration.internationalization.locales,\n defaultLocale: configuration.internationalization.defaultLocale,\n },\n editor: configuration.editor,\n log: configuration.log,\n routing: configuration.routing,\n metadata: configuration.metadata,\n } as CustomIntlayerConfig)\n );\n\n return parsedConfiguration;\n};\n\nexport const writeConfiguration = async (configuration: IntlayerConfig) => {\n const { system } = configuration;\n const { configDir } = system;\n\n // Ensure target directory exists\n // configDir is expected to be the directory where configuration.json will live\n await mkdir(configDir, { recursive: true });\n\n const configFilePath = join(configDir, 'configuration.json');\n\n const cleanedConfiguration = cleanConfiguration(configuration);\n\n await writeJsonIfChanged(configFilePath, cleanedConfiguration);\n};\n"],"mappings":";;;;;;;;AASA,MAAM,yBAAyB,OAAO,kBAAkC;CAMtE,MAAM,uBAAuB,yDAJ3B,cAAc,OAAO,WACrB,qBACD,EAE2D,OAAO;AACnE,QAAO,KAAK,MAAM,qBAAqB;;AAGzC,MAAa,gCAAgC,OAC3C,kBAC4B;AAC5B,KAAI;EACF,MAAM,uBAAuB,mBAAmB,cAAc;AAQ9D,0CAP4B,MAAM,uBAAuB,cAAc,EAIrE,qBACD;SAGK;AACN,SAAO;;;AAIX,MAAM,sBAAsB,kBAAkD;AAc5E,QAb4B,KAAK,MAC/B,KAAK,UAAU;EACb,sBAAsB;GACpB,SAAS,cAAc,qBAAqB;GAC5C,eAAe,cAAc,qBAAqB;GACnD;EACD,QAAQ,cAAc;EACtB,KAAK,cAAc;EACnB,SAAS,cAAc;EACvB,UAAU,cAAc;EACzB,CAAyB,CAC3B;;AAKH,MAAa,qBAAqB,OAAO,kBAAkC;CACzE,MAAM,EAAE,WAAW;CACnB,MAAM,EAAE,cAAc;AAItB,mCAAY,WAAW,EAAE,WAAW,MAAM,CAAC;AAM3C,OAAMA,kEAJsB,WAAW,qBAAqB,EAE/B,mBAAmB,cAAc,CAEA"}
1
+ {"version":3,"file":"index.cjs","names":["generateConfigurationContent","writeFileIfChanged"],"sources":["../../../src/writeConfiguration/index.ts"],"sourcesContent":["import { mkdir, readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport { writeFileIfChanged } from '../writeFileIfChanged';\nimport { generateConfigurationContent } from './generateConfigurationContent';\n\nexport const isCachedConfigurationUpToDate = async (\n configuration: IntlayerConfig\n): Promise<boolean | null> => {\n try {\n const mjsPath = join(configuration.system.configDir, 'configuration.mjs');\n const existingContent = await readFile(mjsPath, 'utf8');\n const expectedContent = generateConfigurationContent(configuration, 'esm');\n return existingContent === expectedContent;\n } catch {\n return null; // Can crash if file doesn't exist yet or config is not defined\n }\n};\n\nexport const writeConfiguration = async (configuration: IntlayerConfig) => {\n const { configDir } = configuration.system;\n\n await mkdir(configDir, { recursive: true });\n\n await Promise.all([\n writeFileIfChanged(\n join(configDir, 'configuration.mjs'),\n generateConfigurationContent(configuration, 'esm')\n ),\n writeFileIfChanged(\n join(configDir, 'configuration.cjs'),\n generateConfigurationContent(configuration, 'cjs')\n ),\n ]);\n};\n"],"mappings":";;;;;;;;AAMA,MAAa,gCAAgC,OAC3C,kBAC4B;AAC5B,KAAI;AAIF,SAFwB,yDADH,cAAc,OAAO,WAAW,oBAAoB,EACzB,OAAO,KAC/BA,qFAA6B,eAAe,MAAM;SAEpE;AACN,SAAO;;;AAIX,MAAa,qBAAqB,OAAO,kBAAkC;CACzE,MAAM,EAAE,cAAc,cAAc;AAEpC,mCAAY,WAAW,EAAE,WAAW,MAAM,CAAC;AAE3C,OAAM,QAAQ,IAAI,CAChBC,kEACO,WAAW,oBAAoB,EACpCD,qFAA6B,eAAe,MAAM,CACnD,EACDC,kEACO,WAAW,oBAAoB,EACpCD,qFAA6B,eAAe,MAAM,CACnD,CACF,CAAC"}
@@ -45,7 +45,7 @@ const getIntlayerBundle = async (configuration) => {
45
45
  const rootRequire = getProjectRequire(configuration.system.baseDir);
46
46
  const configPackageRequire = configESMxCJSRequire;
47
47
  const localRequire = isESModule ? createRequire(import.meta.url) : __require;
48
- const configurationPath = join(configuration.system.configDir, `configuration.json`);
48
+ const configurationPath = join(configuration.system.configDir, `configuration.cjs`);
49
49
  const replaceModules = {
50
50
  defu: configPackageRequire.resolve("defu"),
51
51
  esbuild: configPackageRequire.resolve("esbuild"),
@@ -1 +1 @@
1
- {"version":3,"file":"getIntlayerBundle.mjs","names":[],"sources":["../../../src/loadDictionaries/getIntlayerBundle.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises';\nimport { builtinModules, createRequire } from 'node:module';\nimport { join } from 'node:path';\nimport { bundleFile, type ESBuildPlugin } from '@intlayer/config/file';\nimport {\n configESMxCJSRequire,\n getProjectRequire,\n isESModule,\n} from '@intlayer/config/utils';\nimport type { IntlayerConfig } from '@intlayer/types/config';\n\n/**\n * Rewrites selected bare specifiers (and any of their subpaths) to absolute file paths,\n * using the provided localeRequire (either createRequire(import.meta.url) or require).\n *\n * Example:\n * rewritePathsPlugin([\"@intlayer/config\", \"@intlayer/core\"], localeRequire)\n * …will also rewrite \"@intlayer/core/file\" etc.\n */\nconst rewritePathsPlugin = (\n replaceModules: Record<string, string>,\n excludeModules?: string[]\n): ESBuildPlugin => {\n return {\n name: 'rewrite-paths',\n setup(build) {\n build.onResolve({ filter: /.*/ }, (args) => {\n const exact = replaceModules[args.path];\n\n if (excludeModules?.includes(args.path)) {\n return null;\n }\n\n if (exact) {\n return {\n path: exact,\n namespace: 'intlayer-replace-modules',\n external: true, // ← prevents onLoad requirement\n };\n }\n\n // Optional: support subpaths like \"@intlayer/core/xyz\"\n for (const key of Object.keys(replaceModules)) {\n if (args.path === key || args.path.startsWith(`${key}/`)) {\n const sub = args.path.slice(key.length); // '' or '/...'\n return {\n path: replaceModules[key] + sub,\n namespace: 'intlayer-replace-modules',\n external: true, // ← prevents onLoad requirement\n };\n }\n }\n });\n },\n };\n};\n\n/**\n * Get the intlayer bundle to embed @intlayer/core and be able to mock @intlayer/config/built to mock the configuration file.\n */\nexport const getIntlayerBundle = async (configuration: IntlayerConfig) => {\n const rootRequire = getProjectRequire(configuration.system.baseDir);\n const configPackageRequire = configESMxCJSRequire;\n const localRequire = isESModule ? createRequire(import.meta.url) : require;\n\n const configurationPath = join(\n configuration.system.configDir,\n `configuration.json`\n );\n\n const replaceModules = {\n defu: configPackageRequire.resolve('defu'),\n esbuild: configPackageRequire.resolve('esbuild'),\n '@intlayer/config/built': configurationPath,\n '@intlayer/config/utils': localRequire.resolve('@intlayer/config/utils'),\n '@intlayer/config/client': localRequire.resolve('@intlayer/config/client'),\n '@intlayer/config/logger': localRequire.resolve('@intlayer/config/logger'),\n '@intlayer/core/file': localRequire.resolve('@intlayer/core/file'),\n };\n\n const filePath = rootRequire.resolve('intlayer');\n const code = await readFile(filePath, 'utf-8');\n\n const output = await bundleFile(code, filePath, {\n external: [\n ...builtinModules,\n ...builtinModules.map((mod) => `node:${mod}`),\n ],\n minify: true,\n plugins: [rewritePathsPlugin(replaceModules)],\n });\n\n return output ?? '';\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAmBA,MAAM,sBACJ,gBACA,mBACkB;AAClB,QAAO;EACL,MAAM;EACN,MAAM,OAAO;AACX,SAAM,UAAU,EAAE,QAAQ,MAAM,GAAG,SAAS;IAC1C,MAAM,QAAQ,eAAe,KAAK;AAElC,QAAI,gBAAgB,SAAS,KAAK,KAAK,CACrC,QAAO;AAGT,QAAI,MACF,QAAO;KACL,MAAM;KACN,WAAW;KACX,UAAU;KACX;AAIH,SAAK,MAAM,OAAO,OAAO,KAAK,eAAe,CAC3C,KAAI,KAAK,SAAS,OAAO,KAAK,KAAK,WAAW,GAAG,IAAI,GAAG,EAAE;KACxD,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,OAAO;AACvC,YAAO;MACL,MAAM,eAAe,OAAO;MAC5B,WAAW;MACX,UAAU;MACX;;KAGL;;EAEL;;;;;AAMH,MAAa,oBAAoB,OAAO,kBAAkC;CACxE,MAAM,cAAc,kBAAkB,cAAc,OAAO,QAAQ;CACnE,MAAM,uBAAuB;CAC7B,MAAM,eAAe,aAAa,cAAc,OAAO,KAAK,IAAI;CAEhE,MAAM,oBAAoB,KACxB,cAAc,OAAO,WACrB,qBACD;CAED,MAAM,iBAAiB;EACrB,MAAM,qBAAqB,QAAQ,OAAO;EAC1C,SAAS,qBAAqB,QAAQ,UAAU;EAChD,0BAA0B;EAC1B,0BAA0B,aAAa,QAAQ,yBAAyB;EACxE,2BAA2B,aAAa,QAAQ,0BAA0B;EAC1E,2BAA2B,aAAa,QAAQ,0BAA0B;EAC1E,uBAAuB,aAAa,QAAQ,sBAAsB;EACnE;CAED,MAAM,WAAW,YAAY,QAAQ,WAAW;AAYhD,QATe,MAAM,WAFR,MAAM,SAAS,UAAU,QAAQ,EAER,UAAU;EAC9C,UAAU,CACR,GAAG,gBACH,GAAG,eAAe,KAAK,QAAQ,QAAQ,MAAM,CAC9C;EACD,QAAQ;EACR,SAAS,CAAC,mBAAmB,eAAe,CAAC;EAC9C,CAAC,IAEe"}
1
+ {"version":3,"file":"getIntlayerBundle.mjs","names":[],"sources":["../../../src/loadDictionaries/getIntlayerBundle.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises';\nimport { builtinModules, createRequire } from 'node:module';\nimport { join } from 'node:path';\nimport { bundleFile, type ESBuildPlugin } from '@intlayer/config/file';\nimport {\n configESMxCJSRequire,\n getProjectRequire,\n isESModule,\n} from '@intlayer/config/utils';\nimport type { IntlayerConfig } from '@intlayer/types/config';\n\n/**\n * Rewrites selected bare specifiers (and any of their subpaths) to absolute file paths,\n * using the provided localeRequire (either createRequire(import.meta.url) or require).\n *\n * Example:\n * rewritePathsPlugin([\"@intlayer/config\", \"@intlayer/core\"], localeRequire)\n * …will also rewrite \"@intlayer/core/file\" etc.\n */\nconst rewritePathsPlugin = (\n replaceModules: Record<string, string>,\n excludeModules?: string[]\n): ESBuildPlugin => {\n return {\n name: 'rewrite-paths',\n setup(build) {\n build.onResolve({ filter: /.*/ }, (args) => {\n const exact = replaceModules[args.path];\n\n if (excludeModules?.includes(args.path)) {\n return null;\n }\n\n if (exact) {\n return {\n path: exact,\n namespace: 'intlayer-replace-modules',\n external: true, // ← prevents onLoad requirement\n };\n }\n\n // Optional: support subpaths like \"@intlayer/core/xyz\"\n for (const key of Object.keys(replaceModules)) {\n if (args.path === key || args.path.startsWith(`${key}/`)) {\n const sub = args.path.slice(key.length); // '' or '/...'\n return {\n path: replaceModules[key] + sub,\n namespace: 'intlayer-replace-modules',\n external: true, // ← prevents onLoad requirement\n };\n }\n }\n });\n },\n };\n};\n\n/**\n * Get the intlayer bundle to embed @intlayer/core and be able to mock @intlayer/config/built to mock the configuration file.\n */\nexport const getIntlayerBundle = async (configuration: IntlayerConfig) => {\n const rootRequire = getProjectRequire(configuration.system.baseDir);\n const configPackageRequire = configESMxCJSRequire;\n const localRequire = isESModule ? createRequire(import.meta.url) : require;\n\n const configurationPath = join(\n configuration.system.configDir,\n `configuration.cjs`\n );\n\n const replaceModules = {\n defu: configPackageRequire.resolve('defu'),\n esbuild: configPackageRequire.resolve('esbuild'),\n '@intlayer/config/built': configurationPath,\n '@intlayer/config/utils': localRequire.resolve('@intlayer/config/utils'),\n '@intlayer/config/client': localRequire.resolve('@intlayer/config/client'),\n '@intlayer/config/logger': localRequire.resolve('@intlayer/config/logger'),\n '@intlayer/core/file': localRequire.resolve('@intlayer/core/file'),\n };\n\n const filePath = rootRequire.resolve('intlayer');\n const code = await readFile(filePath, 'utf-8');\n\n const output = await bundleFile(code, filePath, {\n external: [\n ...builtinModules,\n ...builtinModules.map((mod) => `node:${mod}`),\n ],\n minify: true,\n plugins: [rewritePathsPlugin(replaceModules)],\n });\n\n return output ?? '';\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAmBA,MAAM,sBACJ,gBACA,mBACkB;AAClB,QAAO;EACL,MAAM;EACN,MAAM,OAAO;AACX,SAAM,UAAU,EAAE,QAAQ,MAAM,GAAG,SAAS;IAC1C,MAAM,QAAQ,eAAe,KAAK;AAElC,QAAI,gBAAgB,SAAS,KAAK,KAAK,CACrC,QAAO;AAGT,QAAI,MACF,QAAO;KACL,MAAM;KACN,WAAW;KACX,UAAU;KACX;AAIH,SAAK,MAAM,OAAO,OAAO,KAAK,eAAe,CAC3C,KAAI,KAAK,SAAS,OAAO,KAAK,KAAK,WAAW,GAAG,IAAI,GAAG,EAAE;KACxD,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,OAAO;AACvC,YAAO;MACL,MAAM,eAAe,OAAO;MAC5B,WAAW;MACX,UAAU;MACX;;KAGL;;EAEL;;;;;AAMH,MAAa,oBAAoB,OAAO,kBAAkC;CACxE,MAAM,cAAc,kBAAkB,cAAc,OAAO,QAAQ;CACnE,MAAM,uBAAuB;CAC7B,MAAM,eAAe,aAAa,cAAc,OAAO,KAAK,IAAI;CAEhE,MAAM,oBAAoB,KACxB,cAAc,OAAO,WACrB,oBACD;CAED,MAAM,iBAAiB;EACrB,MAAM,qBAAqB,QAAQ,OAAO;EAC1C,SAAS,qBAAqB,QAAQ,UAAU;EAChD,0BAA0B;EAC1B,0BAA0B,aAAa,QAAQ,yBAAyB;EACxE,2BAA2B,aAAa,QAAQ,0BAA0B;EAC1E,2BAA2B,aAAa,QAAQ,0BAA0B;EAC1E,uBAAuB,aAAa,QAAQ,sBAAsB;EACnE;CAED,MAAM,WAAW,YAAY,QAAQ,WAAW;AAYhD,QATe,MAAM,WAFR,MAAM,SAAS,UAAU,QAAQ,EAER,UAAU;EAC9C,UAAU,CACR,GAAG,gBACH,GAAG,eAAe,KAAK,QAAQ,QAAQ,MAAM,CAC9C;EACD,QAAQ;EACR,SAAS,CAAC,mBAAmB,eAAe,CAAC;EAC9C,CAAC,IAEe"}
@@ -0,0 +1,29 @@
1
+ import { buildBrowserConfiguration } from "@intlayer/config/node";
2
+
3
+ //#region src/writeConfiguration/generateConfigurationContent.ts
4
+ const generateConfigurationContent = (configuration, format) => {
5
+ const { internationalization, routing, editor, log, metadata } = buildBrowserConfiguration(configuration);
6
+ let content = "";
7
+ content += `const internationalization = ${JSON.stringify(internationalization, null, 2)};\n`;
8
+ content += `const routing = ${JSON.stringify(routing, null, 2)};\n`;
9
+ content += `const editor = ${JSON.stringify(editor, null, 2)};\n`;
10
+ content += `const log = ${JSON.stringify(log, null, 2)};\n`;
11
+ content += `const metadata = ${JSON.stringify(metadata, null, 2)};\n`;
12
+ content += `const configuration = { internationalization, routing, editor, log, metadata };\n`;
13
+ if (format === "esm") {
14
+ content += `\nexport { internationalization, routing, editor, log, metadata, configuration };\n`;
15
+ content += `export default configuration;\n`;
16
+ } else {
17
+ content += `\nmodule.exports.internationalization = internationalization;\n`;
18
+ content += `module.exports.routing = routing;\n`;
19
+ content += `module.exports.editor = editor;\n`;
20
+ content += `module.exports.log = log;\n`;
21
+ content += `module.exports.metadata = metadata;\n`;
22
+ content += `module.exports = configuration;\n`;
23
+ }
24
+ return content;
25
+ };
26
+
27
+ //#endregion
28
+ export { generateConfigurationContent };
29
+ //# sourceMappingURL=generateConfigurationContent.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateConfigurationContent.mjs","names":[],"sources":["../../../src/writeConfiguration/generateConfigurationContent.ts"],"sourcesContent":["import { buildBrowserConfiguration } from '@intlayer/config/node';\nimport type { IntlayerConfig } from '@intlayer/types/config';\n\nexport const generateConfigurationContent = (\n configuration: IntlayerConfig,\n format: 'cjs' | 'esm'\n): string => {\n const { internationalization, routing, editor, log, metadata } =\n buildBrowserConfiguration(configuration);\n\n let content = '';\n\n content += `const internationalization = ${JSON.stringify(internationalization, null, 2)};\\n`;\n content += `const routing = ${JSON.stringify(routing, null, 2)};\\n`;\n content += `const editor = ${JSON.stringify(editor, null, 2)};\\n`;\n content += `const log = ${JSON.stringify(log, null, 2)};\\n`;\n content += `const metadata = ${JSON.stringify(metadata, null, 2)};\\n`;\n content += `const configuration = { internationalization, routing, editor, log, metadata };\\n`;\n\n if (format === 'esm') {\n content += `\\nexport { internationalization, routing, editor, log, metadata, configuration };\\n`;\n content += `export default configuration;\\n`;\n } else {\n content += `\\nmodule.exports.internationalization = internationalization;\\n`;\n content += `module.exports.routing = routing;\\n`;\n content += `module.exports.editor = editor;\\n`;\n content += `module.exports.log = log;\\n`;\n content += `module.exports.metadata = metadata;\\n`;\n content += `module.exports = configuration;\\n`;\n }\n\n return content;\n};\n"],"mappings":";;;AAGA,MAAa,gCACX,eACA,WACW;CACX,MAAM,EAAE,sBAAsB,SAAS,QAAQ,KAAK,aAClD,0BAA0B,cAAc;CAE1C,IAAI,UAAU;AAEd,YAAW,gCAAgC,KAAK,UAAU,sBAAsB,MAAM,EAAE,CAAC;AACzF,YAAW,mBAAmB,KAAK,UAAU,SAAS,MAAM,EAAE,CAAC;AAC/D,YAAW,kBAAkB,KAAK,UAAU,QAAQ,MAAM,EAAE,CAAC;AAC7D,YAAW,eAAe,KAAK,UAAU,KAAK,MAAM,EAAE,CAAC;AACvD,YAAW,oBAAoB,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC;AACjE,YAAW;AAEX,KAAI,WAAW,OAAO;AACpB,aAAW;AACX,aAAW;QACN;AACL,aAAW;AACX,aAAW;AACX,aAAW;AACX,aAAW;AACX,aAAW;AACX,aAAW;;AAGb,QAAO"}
@@ -1,38 +1,20 @@
1
- import { writeJsonIfChanged } from "../writeJsonIfChanged.mjs";
1
+ import { writeFileIfChanged } from "../writeFileIfChanged.mjs";
2
+ import { generateConfigurationContent } from "./generateConfigurationContent.mjs";
2
3
  import { mkdir, readFile } from "node:fs/promises";
3
4
  import { join } from "node:path";
4
- import { isDeepStrictEqual } from "node:util";
5
5
 
6
6
  //#region src/writeConfiguration/index.ts
7
- const getCachedConfiguration = async (configuration) => {
8
- const configurationContent = await readFile(join(configuration.system.configDir, "configuration.json"), "utf8");
9
- return JSON.parse(configurationContent);
10
- };
11
7
  const isCachedConfigurationUpToDate = async (configuration) => {
12
8
  try {
13
- const cleanedConfiguration = cleanConfiguration(configuration);
14
- return isDeepStrictEqual(await getCachedConfiguration(configuration), cleanedConfiguration);
9
+ return await readFile(join(configuration.system.configDir, "configuration.mjs"), "utf8") === generateConfigurationContent(configuration, "esm");
15
10
  } catch {
16
11
  return null;
17
12
  }
18
13
  };
19
- const cleanConfiguration = (configuration) => {
20
- return JSON.parse(JSON.stringify({
21
- internationalization: {
22
- locales: configuration.internationalization.locales,
23
- defaultLocale: configuration.internationalization.defaultLocale
24
- },
25
- editor: configuration.editor,
26
- log: configuration.log,
27
- routing: configuration.routing,
28
- metadata: configuration.metadata
29
- }));
30
- };
31
14
  const writeConfiguration = async (configuration) => {
32
- const { system } = configuration;
33
- const { configDir } = system;
15
+ const { configDir } = configuration.system;
34
16
  await mkdir(configDir, { recursive: true });
35
- await writeJsonIfChanged(join(configDir, "configuration.json"), cleanConfiguration(configuration));
17
+ await Promise.all([writeFileIfChanged(join(configDir, "configuration.mjs"), generateConfigurationContent(configuration, "esm")), writeFileIfChanged(join(configDir, "configuration.cjs"), generateConfigurationContent(configuration, "cjs"))]);
36
18
  };
37
19
 
38
20
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/writeConfiguration/index.ts"],"sourcesContent":["import { mkdir, readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { isDeepStrictEqual } from 'node:util';\nimport type {\n CustomIntlayerConfig,\n IntlayerConfig,\n} from '@intlayer/types/config';\nimport { writeJsonIfChanged } from '../writeJsonIfChanged';\n\nconst getCachedConfiguration = async (configuration: IntlayerConfig) => {\n const configFilePath = join(\n configuration.system.configDir,\n 'configuration.json'\n );\n\n const configurationContent = await readFile(configFilePath, 'utf8');\n return JSON.parse(configurationContent);\n};\n\nexport const isCachedConfigurationUpToDate = async (\n configuration: IntlayerConfig\n): Promise<boolean | null> => {\n try {\n const cleanedConfiguration = cleanConfiguration(configuration);\n const cachedConfiguration = await getCachedConfiguration(configuration);\n\n const isSimilar = isDeepStrictEqual(\n cachedConfiguration,\n cleanedConfiguration\n );\n\n return isSimilar;\n } catch {\n return null; // Can crash if await readFile(configFilePath, 'utf8'); and config is not defined\n }\n};\n\nconst cleanConfiguration = (configuration: IntlayerConfig): IntlayerConfig => {\n const parsedConfiguration = JSON.parse(\n JSON.stringify({\n internationalization: {\n locales: configuration.internationalization.locales,\n defaultLocale: configuration.internationalization.defaultLocale,\n },\n editor: configuration.editor,\n log: configuration.log,\n routing: configuration.routing,\n metadata: configuration.metadata,\n } as CustomIntlayerConfig)\n );\n\n return parsedConfiguration;\n};\n\nexport const writeConfiguration = async (configuration: IntlayerConfig) => {\n const { system } = configuration;\n const { configDir } = system;\n\n // Ensure target directory exists\n // configDir is expected to be the directory where configuration.json will live\n await mkdir(configDir, { recursive: true });\n\n const configFilePath = join(configDir, 'configuration.json');\n\n const cleanedConfiguration = cleanConfiguration(configuration);\n\n await writeJsonIfChanged(configFilePath, cleanedConfiguration);\n};\n"],"mappings":";;;;;;AASA,MAAM,yBAAyB,OAAO,kBAAkC;CAMtE,MAAM,uBAAuB,MAAM,SALZ,KACrB,cAAc,OAAO,WACrB,qBACD,EAE2D,OAAO;AACnE,QAAO,KAAK,MAAM,qBAAqB;;AAGzC,MAAa,gCAAgC,OAC3C,kBAC4B;AAC5B,KAAI;EACF,MAAM,uBAAuB,mBAAmB,cAAc;AAQ9D,SALkB,kBAFU,MAAM,uBAAuB,cAAc,EAIrE,qBACD;SAGK;AACN,SAAO;;;AAIX,MAAM,sBAAsB,kBAAkD;AAc5E,QAb4B,KAAK,MAC/B,KAAK,UAAU;EACb,sBAAsB;GACpB,SAAS,cAAc,qBAAqB;GAC5C,eAAe,cAAc,qBAAqB;GACnD;EACD,QAAQ,cAAc;EACtB,KAAK,cAAc;EACnB,SAAS,cAAc;EACvB,UAAU,cAAc;EACzB,CAAyB,CAC3B;;AAKH,MAAa,qBAAqB,OAAO,kBAAkC;CACzE,MAAM,EAAE,WAAW;CACnB,MAAM,EAAE,cAAc;AAItB,OAAM,MAAM,WAAW,EAAE,WAAW,MAAM,CAAC;AAM3C,OAAM,mBAJiB,KAAK,WAAW,qBAAqB,EAE/B,mBAAmB,cAAc,CAEA"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/writeConfiguration/index.ts"],"sourcesContent":["import { mkdir, readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport { writeFileIfChanged } from '../writeFileIfChanged';\nimport { generateConfigurationContent } from './generateConfigurationContent';\n\nexport const isCachedConfigurationUpToDate = async (\n configuration: IntlayerConfig\n): Promise<boolean | null> => {\n try {\n const mjsPath = join(configuration.system.configDir, 'configuration.mjs');\n const existingContent = await readFile(mjsPath, 'utf8');\n const expectedContent = generateConfigurationContent(configuration, 'esm');\n return existingContent === expectedContent;\n } catch {\n return null; // Can crash if file doesn't exist yet or config is not defined\n }\n};\n\nexport const writeConfiguration = async (configuration: IntlayerConfig) => {\n const { configDir } = configuration.system;\n\n await mkdir(configDir, { recursive: true });\n\n await Promise.all([\n writeFileIfChanged(\n join(configDir, 'configuration.mjs'),\n generateConfigurationContent(configuration, 'esm')\n ),\n writeFileIfChanged(\n join(configDir, 'configuration.cjs'),\n generateConfigurationContent(configuration, 'cjs')\n ),\n ]);\n};\n"],"mappings":";;;;;;AAMA,MAAa,gCAAgC,OAC3C,kBAC4B;AAC5B,KAAI;AAIF,SAFwB,MAAM,SADd,KAAK,cAAc,OAAO,WAAW,oBAAoB,EACzB,OAAO,KAC/B,6BAA6B,eAAe,MAAM;SAEpE;AACN,SAAO;;;AAIX,MAAa,qBAAqB,OAAO,kBAAkC;CACzE,MAAM,EAAE,cAAc,cAAc;AAEpC,OAAM,MAAM,WAAW,EAAE,WAAW,MAAM,CAAC;AAE3C,OAAM,QAAQ,IAAI,CAChB,mBACE,KAAK,WAAW,oBAAoB,EACpC,6BAA6B,eAAe,MAAM,CACnD,EACD,mBACE,KAAK,WAAW,oBAAoB,EACpC,6BAA6B,eAAe,MAAM,CACnD,CACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { IntlayerConfig } from "@intlayer/types/config";
2
+
3
+ //#region src/writeConfiguration/generateConfigurationContent.d.ts
4
+ declare const generateConfigurationContent: (configuration: IntlayerConfig, format: "cjs" | "esm") => string;
5
+ //#endregion
6
+ export { generateConfigurationContent };
7
+ //# sourceMappingURL=generateConfigurationContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateConfigurationContent.d.ts","names":[],"sources":["../../../src/writeConfiguration/generateConfigurationContent.ts"],"mappings":";;;cAGa,4BAAA,GACX,aAAA,EAAe,cAAA,EACf,MAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/writeConfiguration/index.ts"],"mappings":";;;cAmBa,6BAAA,GACX,aAAA,EAAe,cAAA,KACd,OAAA;AAAA,cAiCU,kBAAA,GAA4B,aAAA,EAAe,cAAA,KAAc,OAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/writeConfiguration/index.ts"],"mappings":";;;cAMa,6BAAA,GACX,aAAA,EAAe,cAAA,KACd,OAAA;AAAA,cAWU,kBAAA,GAA4B,aAAA,EAAe,cAAA,KAAc,OAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intlayer/chokidar",
3
- "version": "8.4.10",
3
+ "version": "8.5.0",
4
4
  "private": false,
5
5
  "description": "Uses chokidar to scan and build Intlayer declaration files into dictionaries based on Intlayer configuration.",
6
6
  "keywords": [
@@ -110,13 +110,13 @@
110
110
  },
111
111
  "dependencies": {
112
112
  "@babel/parser": "7.29.0",
113
- "@intlayer/api": "8.4.10",
114
- "@intlayer/config": "8.4.10",
115
- "@intlayer/core": "8.4.10",
116
- "@intlayer/dictionaries-entry": "8.4.10",
117
- "@intlayer/remote-dictionaries-entry": "8.4.10",
118
- "@intlayer/types": "8.4.10",
119
- "@intlayer/unmerged-dictionaries-entry": "8.4.10",
113
+ "@intlayer/api": "8.5.0",
114
+ "@intlayer/config": "8.5.0",
115
+ "@intlayer/core": "8.5.0",
116
+ "@intlayer/dictionaries-entry": "8.5.0",
117
+ "@intlayer/remote-dictionaries-entry": "8.5.0",
118
+ "@intlayer/types": "8.5.0",
119
+ "@intlayer/unmerged-dictionaries-entry": "8.5.0",
120
120
  "chokidar": "3.6.0",
121
121
  "defu": "6.1.4",
122
122
  "fast-glob": "3.3.3",