next-intlayer 5.5.10 → 5.6.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.
- package/README.md +2 -2
- package/dist/cjs/server/compareVersion.cjs.map +1 -1
- package/dist/cjs/server/withIntlayer.cjs +10 -4
- package/dist/cjs/server/withIntlayer.cjs.map +1 -1
- package/dist/esm/server/compareVersion.mjs.map +1 -1
- package/dist/esm/server/withIntlayer.mjs +11 -5
- package/dist/esm/server/withIntlayer.mjs.map +1 -1
- package/dist/types/server/compareVersion.d.ts +1 -1
- package/dist/types/server/withIntlayer.d.ts +1 -1
- package/dist/types/server/withIntlayer.d.ts.map +1 -1
- package/package.json +18 -16
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
<a href="https://www.facebook.com/intlayer" target="blank"><img align="center"
|
|
34
34
|
src="https://img.shields.io/badge/facebook-4267B2.svg?style=for-the-badge&logo=facebook&logoColor=white"
|
|
35
35
|
alt="Intlayer Facebook" height="30"/></a>
|
|
36
|
-
<a href="https://www.instagram.com/
|
|
36
|
+
<a href="https://www.instagram.com/intlayer/" target="blank"><img align="center"
|
|
37
37
|
src="https://img.shields.io/badge/instagram-%23E4405F.svg?style=for-the-badge&logo=Instagram&logoColor=white"
|
|
38
38
|
alt="Intlayer Instagram" height="30"/></a>
|
|
39
39
|
<a href="https://x.com/Intlayer183096" target="blank"><img align="center"
|
|
@@ -104,7 +104,7 @@ By default, Intlayer scans for files with the extension `.content.{json,ts,tsx,j
|
|
|
104
104
|
|
|
105
105
|
### Declare your content
|
|
106
106
|
|
|
107
|
-
`next-intlayer` is made to work with the [`intlayer` package](https://github.com/aymericzip/intlayer/blob/main/docs/en/packages/intlayer/index.md).`intlayer` is a package that allows you to declare your content anywhere in your code. It converts multilingual content declarations into structured dictionaries that integrate seamlessly into your application.
|
|
107
|
+
`next-intlayer` is made to work with the [`intlayer` package](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/intlayer/index.md).`intlayer` is a package that allows you to declare your content anywhere in your code. It converts multilingual content declarations into structured dictionaries that integrate seamlessly into your application.
|
|
108
108
|
|
|
109
109
|
Here’s an example of content declaration:
|
|
110
110
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/server/compareVersion.ts"],"sourcesContent":["/**\n * Compare two semver-like version strings (e.g. \"15.10.4\" vs \"15.3.
|
|
1
|
+
{"version":3,"sources":["../../../src/server/compareVersion.ts"],"sourcesContent":["/**\n * Compare two semver-like version strings (e.g. \"15.10.4\" vs \"15.3.5\").\n *\n * @param version1 - first version string\n * @param version2 - second version string\n * @param comparison - type of comparison: 'gt', 'lt', 'eq', 'gte', 'lte'\n * @returns boolean indicating if version1 meets the specified comparison condition vs version2\n */\nexport const compareVersions = (\n version1: string,\n comparison: '>' | '<' | '=' | '≥' | '≤',\n version2: string\n): boolean => {\n const v1Parts = version1.split('.').map(Number);\n const v2Parts = version2.split('.').map(Number);\n const maxLen = Math.max(v1Parts.length, v2Parts.length);\n\n // Compute a basic -1, 0, or 1 comparison\n let result = 0;\n for (let i = 0; i < maxLen; i++) {\n const part1 = v1Parts[i] || 0;\n const part2 = v2Parts[i] || 0;\n if (part1 > part2) {\n result = 1;\n break;\n } else if (part1 < part2) {\n result = -1;\n break;\n }\n }\n\n switch (comparison) {\n case '>':\n return result === 1;\n case '<':\n return result === -1;\n case '=':\n return result === 0;\n case '≥':\n return result === 0 || result === 1;\n case '≤':\n return result === 0 || result === -1;\n }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQO,MAAM,kBAAkB,CAC7B,UACA,YACA,aACY;AACZ,QAAM,UAAU,SAAS,MAAM,GAAG,EAAE,IAAI,MAAM;AAC9C,QAAM,UAAU,SAAS,MAAM,GAAG,EAAE,IAAI,MAAM;AAC9C,QAAM,SAAS,KAAK,IAAI,QAAQ,QAAQ,QAAQ,MAAM;AAGtD,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,UAAM,QAAQ,QAAQ,CAAC,KAAK;AAC5B,UAAM,QAAQ,QAAQ,CAAC,KAAK;AAC5B,QAAI,QAAQ,OAAO;AACjB,eAAS;AACT;AAAA,IACF,WAAW,QAAQ,OAAO;AACxB,eAAS;AACT;AAAA,IACF;AAAA,EACF;AAEA,UAAQ,YAAY;AAAA,IAClB,KAAK;AACH,aAAO,WAAW;AAAA,IACpB,KAAK;AACH,aAAO,WAAW;AAAA,IACpB,KAAK;AACH,aAAO,WAAW;AAAA,IACpB,KAAK;AACH,aAAO,WAAW,KAAK,WAAW;AAAA,IACpC,KAAK;AACH,aAAO,WAAW,KAAK,WAAW;AAAA,EACtC;AACF;","names":[]}
|
|
@@ -39,7 +39,6 @@ var import_fast_glob = __toESM(require("fast-glob"));
|
|
|
39
39
|
var import_path = require("path");
|
|
40
40
|
var import_compareVersion = require('./compareVersion.cjs');
|
|
41
41
|
var import_getNextVertion = require('./getNextVertion.cjs');
|
|
42
|
-
(0, import_chokidar.cleanOutputDir)();
|
|
43
42
|
const isTurbopackEnabled = process.env.npm_lifecycle_script?.includes("--turbo");
|
|
44
43
|
const nextVersion = (0, import_getNextVertion.getNextVersion)();
|
|
45
44
|
const isGteNext13 = (0, import_compareVersion.compareVersions)(nextVersion, "\u2265", "13.0.0");
|
|
@@ -61,7 +60,10 @@ const getPruneConfig = (intlayerConfig) => {
|
|
|
61
60
|
const isSwcPluginAvailable = getIsSwcPluginAvailable();
|
|
62
61
|
if (!isSwcPluginAvailable) return {};
|
|
63
62
|
const logger = (0, import_config.getAppLogger)(intlayerConfig);
|
|
64
|
-
|
|
63
|
+
const isBuildTime = process.env.npm_lifecycle_event === "build" || process.argv.some((arg) => arg === "build");
|
|
64
|
+
if (isBuildTime) {
|
|
65
|
+
logger("Intlayer prune plugin is enabled");
|
|
66
|
+
}
|
|
65
67
|
const dictionariesEntryPath = (0, import_path.join)(mainDir, "dictionaries.mjs");
|
|
66
68
|
const dynamicDictionariesEntryPath = (0, import_path.join)(
|
|
67
69
|
mainDir,
|
|
@@ -94,11 +96,15 @@ const getPruneConfig = (intlayerConfig) => {
|
|
|
94
96
|
}
|
|
95
97
|
};
|
|
96
98
|
};
|
|
97
|
-
const withIntlayer = (nextConfig = {}) => {
|
|
99
|
+
const withIntlayer = async (nextConfig = {}) => {
|
|
98
100
|
if (typeof nextConfig !== "object") {
|
|
99
101
|
nextConfig = {};
|
|
100
102
|
}
|
|
101
103
|
const intlayerConfig = (0, import_config.getConfiguration)();
|
|
104
|
+
const isBuildCommand = process.env.npm_lifecycle_event === "build" || process.argv.some((arg) => arg === "build");
|
|
105
|
+
if (isBuildCommand) {
|
|
106
|
+
await (0, import_chokidar.prepareIntlayer)(intlayerConfig);
|
|
107
|
+
}
|
|
102
108
|
const { mainDir, configDir, baseDir } = intlayerConfig.content;
|
|
103
109
|
const dictionariesPath = (0, import_path.join)(mainDir, "dictionaries.mjs");
|
|
104
110
|
const relativeDictionariesPath = (0, import_path.relative)(baseDir, dictionariesPath);
|
|
@@ -176,7 +182,7 @@ const withIntlayer = (nextConfig = {}) => {
|
|
|
176
182
|
loader: "node-loader"
|
|
177
183
|
});
|
|
178
184
|
const { isServer, nextRuntime } = options;
|
|
179
|
-
if (isServer && nextRuntime === "nodejs") {
|
|
185
|
+
if (!isBuildCommand && isServer && nextRuntime === "nodejs") {
|
|
180
186
|
config.plugins.push(new import_webpack.IntlayerPlugin());
|
|
181
187
|
}
|
|
182
188
|
return config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/server/withIntlayer.ts"],"sourcesContent":["import { cleanOutputDir } from '@intlayer/chokidar';\nimport {\n ESMxCJSRequire,\n getAppLogger,\n getConfiguration,\n IntlayerConfig,\n} from '@intlayer/config';\nimport { IntlayerPlugin } from '@intlayer/webpack';\nimport merge from 'deepmerge';\nimport fg from 'fast-glob';\nimport type { NextConfig } from 'next';\nimport type { NextJsWebpackConfig } from 'next/dist/server/config-shared';\nimport { join, relative, resolve } from 'path';\nimport { compareVersions } from './compareVersion';\nimport { getNextVersion } from './getNextVertion';\n\ncleanOutputDir();\n\n// Extract from the start script if --turbo or --turbopack flag is used\nconst isTurbopackEnabled =\n process.env.npm_lifecycle_script?.includes('--turbo');\nconst nextVersion = getNextVersion();\nconst isGteNext13 = compareVersions(nextVersion, '≥', '13.0.0');\nconst isGteNext15 = compareVersions(nextVersion, '≥', '15.0.0');\nconst isTurbopackStable = compareVersions(nextVersion, '≥', '15.3.0');\n\n// Check if SWC plugin is available\nconst getIsSwcPluginAvailable = () => {\n try {\n ESMxCJSRequire.resolve('@intlayer/swc');\n return true;\n } catch (e) {\n return false;\n }\n};\n\nconst getPruneConfig = (\n intlayerConfig: IntlayerConfig\n): Partial<NextConfig> => {\n const { optimize, traversePattern, activateDynamicImport } =\n intlayerConfig.build;\n const { dictionariesDir, dynamicDictionariesDir, mainDir, baseDir } =\n intlayerConfig.content;\n\n if (!optimize) return {};\n\n if (!isGteNext13) return {};\n\n const isSwcPluginAvailable = getIsSwcPluginAvailable();\n\n if (!isSwcPluginAvailable) return {};\n\n const logger = getAppLogger(intlayerConfig);\n\n logger('Intlayer prune plugin is enabled');\n\n const dictionariesEntryPath = join(mainDir, 'dictionaries.mjs');\n\n const dynamicDictionariesEntryPath = join(\n mainDir,\n 'dynamic_dictionaries.mjs'\n );\n\n const filesListPattern = fg\n .sync(traversePattern, {\n cwd: baseDir,\n })\n .map((file) => join(baseDir, file));\n\n const filesList = [\n ...filesListPattern,\n dictionariesEntryPath, // should add dictionariesEntryPath to replace it by a empty object if import made dynamic\n ];\n\n return {\n experimental: {\n swcPlugins: [\n [\n ESMxCJSRequire.resolve('@intlayer/swc'),\n {\n dictionariesDir,\n dictionariesEntryPath,\n dynamicDictionariesDir,\n dynamicDictionariesEntryPath,\n activateDynamicImport,\n filesList,\n replaceDictionaryEntry: false,\n } as any,\n ],\n ],\n },\n };\n};\n\ntype WebpackParams = Parameters<NextJsWebpackConfig>;\n\n/**\n * A Next.js plugin that adds the intlayer configuration to the webpack configuration\n * and sets the environment variablesi\n *\n * Usage:\n *\n * ```ts\n * // next.config.js\n * export default withIntlayer(nextConfig)\n * ```\n */\nexport const withIntlayer = <T extends Partial<NextConfig>>(\n nextConfig: T = {} as T\n): NextConfig & T => {\n if (typeof nextConfig !== 'object') {\n nextConfig = {} as T;\n }\n\n const intlayerConfig = getConfiguration();\n\n // Format all configuration values as environment variables\n const { mainDir, configDir, baseDir } = intlayerConfig.content;\n\n const dictionariesPath = join(mainDir, 'dictionaries.mjs');\n const relativeDictionariesPath = relative(baseDir, dictionariesPath);\n\n const unmergedDictionariesPath = join(mainDir, 'unmerged_dictionaries.mjs');\n const relativeUnmergedDictionariesPath = relative(\n baseDir,\n unmergedDictionariesPath\n );\n\n const configurationPath = join(configDir, 'configuration.json');\n const relativeConfigurationPath = relative(baseDir, configurationPath);\n\n // Only provide turbo-specific config if user explicitly sets it\n const turboConfig = {\n resolveAlias: {\n // \"prefix by './' to consider the path as relative to the project root. This is necessary for turbo to work correctly.\"\n '@intlayer/dictionaries-entry': `./${relativeDictionariesPath}`,\n '@intlayer/unmerged-dictionaries-entry': `./${relativeUnmergedDictionariesPath}`,\n '@intlayer/config/built': `./${relativeConfigurationPath}`,\n },\n rules: {\n '*.node': {\n as: '*.node',\n loaders: ['node-loader'],\n },\n },\n };\n\n const serverExternalPackages = [\n 'esbuild',\n 'module',\n 'fs',\n 'chokidar',\n 'fsevents',\n ];\n\n const newConfig: Partial<NextConfig> = {\n // Only add `serverExternalPackages` if Next.js is v15+\n ...(isGteNext15\n ? {\n // only for Next ≥15\n serverExternalPackages,\n }\n : {\n // only for Next ≥13 and <15.3\n ...(isGteNext13 && {\n serverComponentsExternalPackages: serverExternalPackages,\n }),\n }),\n\n ...(isTurbopackEnabled && {\n ...(isGteNext15 && isTurbopackStable\n ? {\n // only for Next ≥15.3\n turbopack: turboConfig,\n }\n : {\n experimental: {\n // only for Next ≥13 and <15.3\n turbo: turboConfig,\n },\n }),\n }),\n\n webpack: (config: WebpackParams['0'], options: WebpackParams[1]) => {\n // If the user has defined their own webpack config, call it\n if (typeof nextConfig.webpack === 'function') {\n config = nextConfig.webpack(config, options);\n }\n\n // Alias the dictionary entry for all builds\n config.resolve.alias = {\n ...config.resolve.alias,\n '@intlayer/dictionaries-entry': resolve(relativeDictionariesPath),\n '@intlayer/unmerged-dictionaries-entry': resolve(\n relativeUnmergedDictionariesPath\n ),\n '@intlayer/config/built': resolve(relativeConfigurationPath),\n };\n\n // Mark these modules as externals\n config.externals.push({\n esbuild: 'esbuild',\n module: 'module',\n fs: 'fs',\n chokidar: 'chokidar',\n fsevents: 'fsevents',\n });\n\n // Use `node-loader` for any `.node` files\n config.module.rules.push({\n test: /\\.node$/,\n loader: 'node-loader',\n });\n\n // Only add Intlayer plugin on server side (node runtime)\n const { isServer, nextRuntime } = options;\n\n if (isServer && nextRuntime === 'nodejs') {\n config.plugins.push(new IntlayerPlugin());\n }\n\n return config;\n },\n };\n\n const pruneConfig: Partial<NextConfig> = getPruneConfig(intlayerConfig);\n\n const intlayerNextConfig: Partial<NextConfig> = merge(pruneConfig, newConfig);\n\n // Merge the new config with the user's config\n return merge(nextConfig, intlayerNextConfig) as NextConfig & T;\n};\n"],"mappings":"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","names":["fg","merge"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/server/withIntlayer.ts"],"sourcesContent":["import { prepareIntlayer } from '@intlayer/chokidar';\nimport {\n ESMxCJSRequire,\n getAppLogger,\n getConfiguration,\n IntlayerConfig,\n} from '@intlayer/config';\nimport { IntlayerPlugin } from '@intlayer/webpack';\nimport merge from 'deepmerge';\nimport fg from 'fast-glob';\nimport type { NextConfig } from 'next';\nimport type { NextJsWebpackConfig } from 'next/dist/server/config-shared';\nimport { join, relative, resolve } from 'path';\nimport { compareVersions } from './compareVersion';\nimport { getNextVersion } from './getNextVertion';\n\n// Extract from the start script if --turbo or --turbopack flag is used\nconst isTurbopackEnabled =\n process.env.npm_lifecycle_script?.includes('--turbo');\nconst nextVersion = getNextVersion();\nconst isGteNext13 = compareVersions(nextVersion, '≥', '13.0.0');\nconst isGteNext15 = compareVersions(nextVersion, '≥', '15.0.0');\nconst isTurbopackStable = compareVersions(nextVersion, '≥', '15.3.0');\n\n// Check if SWC plugin is available\nconst getIsSwcPluginAvailable = () => {\n try {\n ESMxCJSRequire.resolve('@intlayer/swc');\n return true;\n } catch (e) {\n return false;\n }\n};\n\nconst getPruneConfig = (\n intlayerConfig: IntlayerConfig\n): Partial<NextConfig> => {\n const { optimize, traversePattern, activateDynamicImport } =\n intlayerConfig.build;\n const { dictionariesDir, dynamicDictionariesDir, mainDir, baseDir } =\n intlayerConfig.content;\n\n if (!optimize) return {};\n\n if (!isGteNext13) return {};\n\n const isSwcPluginAvailable = getIsSwcPluginAvailable();\n\n if (!isSwcPluginAvailable) return {};\n\n const logger = getAppLogger(intlayerConfig);\n\n // Display this message only during the build phase (e.g., `next build`).\n const isBuildTime =\n process.env.npm_lifecycle_event === 'build' ||\n process.argv.some((arg) => arg === 'build');\n\n if (isBuildTime) {\n logger('Intlayer prune plugin is enabled');\n }\n\n const dictionariesEntryPath = join(mainDir, 'dictionaries.mjs');\n\n const dynamicDictionariesEntryPath = join(\n mainDir,\n 'dynamic_dictionaries.mjs'\n );\n\n const filesListPattern = fg\n .sync(traversePattern, {\n cwd: baseDir,\n })\n .map((file) => join(baseDir, file));\n\n const filesList = [\n ...filesListPattern,\n dictionariesEntryPath, // should add dictionariesEntryPath to replace it by a empty object if import made dynamic\n ];\n\n return {\n experimental: {\n swcPlugins: [\n [\n ESMxCJSRequire.resolve('@intlayer/swc'),\n {\n dictionariesDir,\n dictionariesEntryPath,\n dynamicDictionariesDir,\n dynamicDictionariesEntryPath,\n activateDynamicImport,\n filesList,\n replaceDictionaryEntry: false,\n } as any,\n ],\n ],\n },\n };\n};\n\ntype WebpackParams = Parameters<NextJsWebpackConfig>;\n\n/**\n * A Next.js plugin that adds the intlayer configuration to the webpack configuration\n * and sets the environment variablesi\n *\n * Usage:\n *\n * ```ts\n * // next.config.js\n * export default withIntlayer(nextConfig)\n * ```\n */\nexport const withIntlayer = async <T extends Partial<NextConfig>>(\n nextConfig: T = {} as T\n): Promise<NextConfig & T> => {\n if (typeof nextConfig !== 'object') {\n nextConfig = {} as T;\n }\n\n const intlayerConfig = getConfiguration();\n\n // Skip preparation when running next start (production mode)\n const isBuildCommand =\n process.env.npm_lifecycle_event === 'build' ||\n process.argv.some((arg) => arg === 'build');\n\n if (isBuildCommand) {\n await prepareIntlayer(intlayerConfig);\n }\n\n // Format all configuration values as environment variables\n const { mainDir, configDir, baseDir } = intlayerConfig.content;\n\n const dictionariesPath = join(mainDir, 'dictionaries.mjs');\n const relativeDictionariesPath = relative(baseDir, dictionariesPath);\n\n const unmergedDictionariesPath = join(mainDir, 'unmerged_dictionaries.mjs');\n const relativeUnmergedDictionariesPath = relative(\n baseDir,\n unmergedDictionariesPath\n );\n\n const configurationPath = join(configDir, 'configuration.json');\n const relativeConfigurationPath = relative(baseDir, configurationPath);\n\n // Only provide turbo-specific config if user explicitly sets it\n const turboConfig = {\n resolveAlias: {\n // \"prefix by './' to consider the path as relative to the project root. This is necessary for turbo to work correctly.\"\n '@intlayer/dictionaries-entry': `./${relativeDictionariesPath}`,\n '@intlayer/unmerged-dictionaries-entry': `./${relativeUnmergedDictionariesPath}`,\n '@intlayer/config/built': `./${relativeConfigurationPath}`,\n },\n rules: {\n '*.node': {\n as: '*.node',\n loaders: ['node-loader'],\n },\n },\n };\n\n const serverExternalPackages = [\n 'esbuild',\n 'module',\n 'fs',\n 'chokidar',\n 'fsevents',\n ];\n\n const newConfig: Partial<NextConfig> = {\n // Only add `serverExternalPackages` if Next.js is v15+\n ...(isGteNext15\n ? {\n // only for Next ≥15\n serverExternalPackages,\n }\n : {\n // only for Next ≥13 and <15.3\n ...(isGteNext13 && {\n serverComponentsExternalPackages: serverExternalPackages,\n }),\n }),\n\n ...(isTurbopackEnabled && {\n ...(isGteNext15 && isTurbopackStable\n ? {\n // only for Next ≥15.3\n turbopack: turboConfig,\n }\n : {\n experimental: {\n // only for Next ≥13 and <15.3\n turbo: turboConfig,\n },\n }),\n }),\n\n webpack: (config: WebpackParams['0'], options: WebpackParams[1]) => {\n // If the user has defined their own webpack config, call it\n if (typeof nextConfig.webpack === 'function') {\n config = nextConfig.webpack(config, options);\n }\n\n // Alias the dictionary entry for all builds\n config.resolve.alias = {\n ...config.resolve.alias,\n '@intlayer/dictionaries-entry': resolve(relativeDictionariesPath),\n '@intlayer/unmerged-dictionaries-entry': resolve(\n relativeUnmergedDictionariesPath\n ),\n '@intlayer/config/built': resolve(relativeConfigurationPath),\n };\n\n // Mark these modules as externals\n config.externals.push({\n esbuild: 'esbuild',\n module: 'module',\n fs: 'fs',\n chokidar: 'chokidar',\n fsevents: 'fsevents',\n });\n\n // Use `node-loader` for any `.node` files\n config.module.rules.push({\n test: /\\.node$/,\n loader: 'node-loader',\n });\n\n // Only add Intlayer plugin on server side (node runtime)\n const { isServer, nextRuntime } = options;\n\n if (!isBuildCommand && isServer && nextRuntime === 'nodejs') {\n config.plugins.push(new IntlayerPlugin());\n }\n\n return config;\n },\n };\n\n const pruneConfig: Partial<NextConfig> = getPruneConfig(intlayerConfig);\n\n const intlayerNextConfig: Partial<NextConfig> = merge(pruneConfig, newConfig);\n\n // Merge the new config with the user's config\n return merge(nextConfig, intlayerNextConfig) as NextConfig & T;\n};\n"],"mappings":"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","names":["fg","merge"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/server/compareVersion.ts"],"sourcesContent":["/**\n * Compare two semver-like version strings (e.g. \"15.10.4\" vs \"15.3.
|
|
1
|
+
{"version":3,"sources":["../../../src/server/compareVersion.ts"],"sourcesContent":["/**\n * Compare two semver-like version strings (e.g. \"15.10.4\" vs \"15.3.5\").\n *\n * @param version1 - first version string\n * @param version2 - second version string\n * @param comparison - type of comparison: 'gt', 'lt', 'eq', 'gte', 'lte'\n * @returns boolean indicating if version1 meets the specified comparison condition vs version2\n */\nexport const compareVersions = (\n version1: string,\n comparison: '>' | '<' | '=' | '≥' | '≤',\n version2: string\n): boolean => {\n const v1Parts = version1.split('.').map(Number);\n const v2Parts = version2.split('.').map(Number);\n const maxLen = Math.max(v1Parts.length, v2Parts.length);\n\n // Compute a basic -1, 0, or 1 comparison\n let result = 0;\n for (let i = 0; i < maxLen; i++) {\n const part1 = v1Parts[i] || 0;\n const part2 = v2Parts[i] || 0;\n if (part1 > part2) {\n result = 1;\n break;\n } else if (part1 < part2) {\n result = -1;\n break;\n }\n }\n\n switch (comparison) {\n case '>':\n return result === 1;\n case '<':\n return result === -1;\n case '=':\n return result === 0;\n case '≥':\n return result === 0 || result === 1;\n case '≤':\n return result === 0 || result === -1;\n }\n};\n"],"mappings":"AAQO,MAAM,kBAAkB,CAC7B,UACA,YACA,aACY;AACZ,QAAM,UAAU,SAAS,MAAM,GAAG,EAAE,IAAI,MAAM;AAC9C,QAAM,UAAU,SAAS,MAAM,GAAG,EAAE,IAAI,MAAM;AAC9C,QAAM,SAAS,KAAK,IAAI,QAAQ,QAAQ,QAAQ,MAAM;AAGtD,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,UAAM,QAAQ,QAAQ,CAAC,KAAK;AAC5B,UAAM,QAAQ,QAAQ,CAAC,KAAK;AAC5B,QAAI,QAAQ,OAAO;AACjB,eAAS;AACT;AAAA,IACF,WAAW,QAAQ,OAAO;AACxB,eAAS;AACT;AAAA,IACF;AAAA,EACF;AAEA,UAAQ,YAAY;AAAA,IAClB,KAAK;AACH,aAAO,WAAW;AAAA,IACpB,KAAK;AACH,aAAO,WAAW;AAAA,IACpB,KAAK;AACH,aAAO,WAAW;AAAA,IACpB,KAAK;AACH,aAAO,WAAW,KAAK,WAAW;AAAA,IACpC,KAAK;AACH,aAAO,WAAW,KAAK,WAAW;AAAA,EACtC;AACF;","names":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { prepareIntlayer } from "@intlayer/chokidar";
|
|
2
2
|
import {
|
|
3
3
|
ESMxCJSRequire,
|
|
4
4
|
getAppLogger,
|
|
@@ -10,7 +10,6 @@ import fg from "fast-glob";
|
|
|
10
10
|
import { join, relative, resolve } from "path";
|
|
11
11
|
import { compareVersions } from "./compareVersion.mjs";
|
|
12
12
|
import { getNextVersion } from "./getNextVertion.mjs";
|
|
13
|
-
cleanOutputDir();
|
|
14
13
|
const isTurbopackEnabled = process.env.npm_lifecycle_script?.includes("--turbo");
|
|
15
14
|
const nextVersion = getNextVersion();
|
|
16
15
|
const isGteNext13 = compareVersions(nextVersion, "\u2265", "13.0.0");
|
|
@@ -32,7 +31,10 @@ const getPruneConfig = (intlayerConfig) => {
|
|
|
32
31
|
const isSwcPluginAvailable = getIsSwcPluginAvailable();
|
|
33
32
|
if (!isSwcPluginAvailable) return {};
|
|
34
33
|
const logger = getAppLogger(intlayerConfig);
|
|
35
|
-
|
|
34
|
+
const isBuildTime = process.env.npm_lifecycle_event === "build" || process.argv.some((arg) => arg === "build");
|
|
35
|
+
if (isBuildTime) {
|
|
36
|
+
logger("Intlayer prune plugin is enabled");
|
|
37
|
+
}
|
|
36
38
|
const dictionariesEntryPath = join(mainDir, "dictionaries.mjs");
|
|
37
39
|
const dynamicDictionariesEntryPath = join(
|
|
38
40
|
mainDir,
|
|
@@ -65,11 +67,15 @@ const getPruneConfig = (intlayerConfig) => {
|
|
|
65
67
|
}
|
|
66
68
|
};
|
|
67
69
|
};
|
|
68
|
-
const withIntlayer = (nextConfig = {}) => {
|
|
70
|
+
const withIntlayer = async (nextConfig = {}) => {
|
|
69
71
|
if (typeof nextConfig !== "object") {
|
|
70
72
|
nextConfig = {};
|
|
71
73
|
}
|
|
72
74
|
const intlayerConfig = getConfiguration();
|
|
75
|
+
const isBuildCommand = process.env.npm_lifecycle_event === "build" || process.argv.some((arg) => arg === "build");
|
|
76
|
+
if (isBuildCommand) {
|
|
77
|
+
await prepareIntlayer(intlayerConfig);
|
|
78
|
+
}
|
|
73
79
|
const { mainDir, configDir, baseDir } = intlayerConfig.content;
|
|
74
80
|
const dictionariesPath = join(mainDir, "dictionaries.mjs");
|
|
75
81
|
const relativeDictionariesPath = relative(baseDir, dictionariesPath);
|
|
@@ -147,7 +153,7 @@ const withIntlayer = (nextConfig = {}) => {
|
|
|
147
153
|
loader: "node-loader"
|
|
148
154
|
});
|
|
149
155
|
const { isServer, nextRuntime } = options;
|
|
150
|
-
if (isServer && nextRuntime === "nodejs") {
|
|
156
|
+
if (!isBuildCommand && isServer && nextRuntime === "nodejs") {
|
|
151
157
|
config.plugins.push(new IntlayerPlugin());
|
|
152
158
|
}
|
|
153
159
|
return config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/server/withIntlayer.ts"],"sourcesContent":["import { cleanOutputDir } from '@intlayer/chokidar';\nimport {\n ESMxCJSRequire,\n getAppLogger,\n getConfiguration,\n IntlayerConfig,\n} from '@intlayer/config';\nimport { IntlayerPlugin } from '@intlayer/webpack';\nimport merge from 'deepmerge';\nimport fg from 'fast-glob';\nimport type { NextConfig } from 'next';\nimport type { NextJsWebpackConfig } from 'next/dist/server/config-shared';\nimport { join, relative, resolve } from 'path';\nimport { compareVersions } from './compareVersion';\nimport { getNextVersion } from './getNextVertion';\n\ncleanOutputDir();\n\n// Extract from the start script if --turbo or --turbopack flag is used\nconst isTurbopackEnabled =\n process.env.npm_lifecycle_script?.includes('--turbo');\nconst nextVersion = getNextVersion();\nconst isGteNext13 = compareVersions(nextVersion, '≥', '13.0.0');\nconst isGteNext15 = compareVersions(nextVersion, '≥', '15.0.0');\nconst isTurbopackStable = compareVersions(nextVersion, '≥', '15.3.0');\n\n// Check if SWC plugin is available\nconst getIsSwcPluginAvailable = () => {\n try {\n ESMxCJSRequire.resolve('@intlayer/swc');\n return true;\n } catch (e) {\n return false;\n }\n};\n\nconst getPruneConfig = (\n intlayerConfig: IntlayerConfig\n): Partial<NextConfig> => {\n const { optimize, traversePattern, activateDynamicImport } =\n intlayerConfig.build;\n const { dictionariesDir, dynamicDictionariesDir, mainDir, baseDir } =\n intlayerConfig.content;\n\n if (!optimize) return {};\n\n if (!isGteNext13) return {};\n\n const isSwcPluginAvailable = getIsSwcPluginAvailable();\n\n if (!isSwcPluginAvailable) return {};\n\n const logger = getAppLogger(intlayerConfig);\n\n logger('Intlayer prune plugin is enabled');\n\n const dictionariesEntryPath = join(mainDir, 'dictionaries.mjs');\n\n const dynamicDictionariesEntryPath = join(\n mainDir,\n 'dynamic_dictionaries.mjs'\n );\n\n const filesListPattern = fg\n .sync(traversePattern, {\n cwd: baseDir,\n })\n .map((file) => join(baseDir, file));\n\n const filesList = [\n ...filesListPattern,\n dictionariesEntryPath, // should add dictionariesEntryPath to replace it by a empty object if import made dynamic\n ];\n\n return {\n experimental: {\n swcPlugins: [\n [\n ESMxCJSRequire.resolve('@intlayer/swc'),\n {\n dictionariesDir,\n dictionariesEntryPath,\n dynamicDictionariesDir,\n dynamicDictionariesEntryPath,\n activateDynamicImport,\n filesList,\n replaceDictionaryEntry: false,\n } as any,\n ],\n ],\n },\n };\n};\n\ntype WebpackParams = Parameters<NextJsWebpackConfig>;\n\n/**\n * A Next.js plugin that adds the intlayer configuration to the webpack configuration\n * and sets the environment variablesi\n *\n * Usage:\n *\n * ```ts\n * // next.config.js\n * export default withIntlayer(nextConfig)\n * ```\n */\nexport const withIntlayer = <T extends Partial<NextConfig>>(\n nextConfig: T = {} as T\n): NextConfig & T => {\n if (typeof nextConfig !== 'object') {\n nextConfig = {} as T;\n }\n\n const intlayerConfig = getConfiguration();\n\n // Format all configuration values as environment variables\n const { mainDir, configDir, baseDir } = intlayerConfig.content;\n\n const dictionariesPath = join(mainDir, 'dictionaries.mjs');\n const relativeDictionariesPath = relative(baseDir, dictionariesPath);\n\n const unmergedDictionariesPath = join(mainDir, 'unmerged_dictionaries.mjs');\n const relativeUnmergedDictionariesPath = relative(\n baseDir,\n unmergedDictionariesPath\n );\n\n const configurationPath = join(configDir, 'configuration.json');\n const relativeConfigurationPath = relative(baseDir, configurationPath);\n\n // Only provide turbo-specific config if user explicitly sets it\n const turboConfig = {\n resolveAlias: {\n // \"prefix by './' to consider the path as relative to the project root. This is necessary for turbo to work correctly.\"\n '@intlayer/dictionaries-entry': `./${relativeDictionariesPath}`,\n '@intlayer/unmerged-dictionaries-entry': `./${relativeUnmergedDictionariesPath}`,\n '@intlayer/config/built': `./${relativeConfigurationPath}`,\n },\n rules: {\n '*.node': {\n as: '*.node',\n loaders: ['node-loader'],\n },\n },\n };\n\n const serverExternalPackages = [\n 'esbuild',\n 'module',\n 'fs',\n 'chokidar',\n 'fsevents',\n ];\n\n const newConfig: Partial<NextConfig> = {\n // Only add `serverExternalPackages` if Next.js is v15+\n ...(isGteNext15\n ? {\n // only for Next ≥15\n serverExternalPackages,\n }\n : {\n // only for Next ≥13 and <15.3\n ...(isGteNext13 && {\n serverComponentsExternalPackages: serverExternalPackages,\n }),\n }),\n\n ...(isTurbopackEnabled && {\n ...(isGteNext15 && isTurbopackStable\n ? {\n // only for Next ≥15.3\n turbopack: turboConfig,\n }\n : {\n experimental: {\n // only for Next ≥13 and <15.3\n turbo: turboConfig,\n },\n }),\n }),\n\n webpack: (config: WebpackParams['0'], options: WebpackParams[1]) => {\n // If the user has defined their own webpack config, call it\n if (typeof nextConfig.webpack === 'function') {\n config = nextConfig.webpack(config, options);\n }\n\n // Alias the dictionary entry for all builds\n config.resolve.alias = {\n ...config.resolve.alias,\n '@intlayer/dictionaries-entry': resolve(relativeDictionariesPath),\n '@intlayer/unmerged-dictionaries-entry': resolve(\n relativeUnmergedDictionariesPath\n ),\n '@intlayer/config/built': resolve(relativeConfigurationPath),\n };\n\n // Mark these modules as externals\n config.externals.push({\n esbuild: 'esbuild',\n module: 'module',\n fs: 'fs',\n chokidar: 'chokidar',\n fsevents: 'fsevents',\n });\n\n // Use `node-loader` for any `.node` files\n config.module.rules.push({\n test: /\\.node$/,\n loader: 'node-loader',\n });\n\n // Only add Intlayer plugin on server side (node runtime)\n const { isServer, nextRuntime } = options;\n\n if (isServer && nextRuntime === 'nodejs') {\n config.plugins.push(new IntlayerPlugin());\n }\n\n return config;\n },\n };\n\n const pruneConfig: Partial<NextConfig> = getPruneConfig(intlayerConfig);\n\n const intlayerNextConfig: Partial<NextConfig> = merge(pruneConfig, newConfig);\n\n // Merge the new config with the user's config\n return merge(nextConfig, intlayerNextConfig) as NextConfig & T;\n};\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/server/withIntlayer.ts"],"sourcesContent":["import { prepareIntlayer } from '@intlayer/chokidar';\nimport {\n ESMxCJSRequire,\n getAppLogger,\n getConfiguration,\n IntlayerConfig,\n} from '@intlayer/config';\nimport { IntlayerPlugin } from '@intlayer/webpack';\nimport merge from 'deepmerge';\nimport fg from 'fast-glob';\nimport type { NextConfig } from 'next';\nimport type { NextJsWebpackConfig } from 'next/dist/server/config-shared';\nimport { join, relative, resolve } from 'path';\nimport { compareVersions } from './compareVersion';\nimport { getNextVersion } from './getNextVertion';\n\n// Extract from the start script if --turbo or --turbopack flag is used\nconst isTurbopackEnabled =\n process.env.npm_lifecycle_script?.includes('--turbo');\nconst nextVersion = getNextVersion();\nconst isGteNext13 = compareVersions(nextVersion, '≥', '13.0.0');\nconst isGteNext15 = compareVersions(nextVersion, '≥', '15.0.0');\nconst isTurbopackStable = compareVersions(nextVersion, '≥', '15.3.0');\n\n// Check if SWC plugin is available\nconst getIsSwcPluginAvailable = () => {\n try {\n ESMxCJSRequire.resolve('@intlayer/swc');\n return true;\n } catch (e) {\n return false;\n }\n};\n\nconst getPruneConfig = (\n intlayerConfig: IntlayerConfig\n): Partial<NextConfig> => {\n const { optimize, traversePattern, activateDynamicImport } =\n intlayerConfig.build;\n const { dictionariesDir, dynamicDictionariesDir, mainDir, baseDir } =\n intlayerConfig.content;\n\n if (!optimize) return {};\n\n if (!isGteNext13) return {};\n\n const isSwcPluginAvailable = getIsSwcPluginAvailable();\n\n if (!isSwcPluginAvailable) return {};\n\n const logger = getAppLogger(intlayerConfig);\n\n // Display this message only during the build phase (e.g., `next build`).\n const isBuildTime =\n process.env.npm_lifecycle_event === 'build' ||\n process.argv.some((arg) => arg === 'build');\n\n if (isBuildTime) {\n logger('Intlayer prune plugin is enabled');\n }\n\n const dictionariesEntryPath = join(mainDir, 'dictionaries.mjs');\n\n const dynamicDictionariesEntryPath = join(\n mainDir,\n 'dynamic_dictionaries.mjs'\n );\n\n const filesListPattern = fg\n .sync(traversePattern, {\n cwd: baseDir,\n })\n .map((file) => join(baseDir, file));\n\n const filesList = [\n ...filesListPattern,\n dictionariesEntryPath, // should add dictionariesEntryPath to replace it by a empty object if import made dynamic\n ];\n\n return {\n experimental: {\n swcPlugins: [\n [\n ESMxCJSRequire.resolve('@intlayer/swc'),\n {\n dictionariesDir,\n dictionariesEntryPath,\n dynamicDictionariesDir,\n dynamicDictionariesEntryPath,\n activateDynamicImport,\n filesList,\n replaceDictionaryEntry: false,\n } as any,\n ],\n ],\n },\n };\n};\n\ntype WebpackParams = Parameters<NextJsWebpackConfig>;\n\n/**\n * A Next.js plugin that adds the intlayer configuration to the webpack configuration\n * and sets the environment variablesi\n *\n * Usage:\n *\n * ```ts\n * // next.config.js\n * export default withIntlayer(nextConfig)\n * ```\n */\nexport const withIntlayer = async <T extends Partial<NextConfig>>(\n nextConfig: T = {} as T\n): Promise<NextConfig & T> => {\n if (typeof nextConfig !== 'object') {\n nextConfig = {} as T;\n }\n\n const intlayerConfig = getConfiguration();\n\n // Skip preparation when running next start (production mode)\n const isBuildCommand =\n process.env.npm_lifecycle_event === 'build' ||\n process.argv.some((arg) => arg === 'build');\n\n if (isBuildCommand) {\n await prepareIntlayer(intlayerConfig);\n }\n\n // Format all configuration values as environment variables\n const { mainDir, configDir, baseDir } = intlayerConfig.content;\n\n const dictionariesPath = join(mainDir, 'dictionaries.mjs');\n const relativeDictionariesPath = relative(baseDir, dictionariesPath);\n\n const unmergedDictionariesPath = join(mainDir, 'unmerged_dictionaries.mjs');\n const relativeUnmergedDictionariesPath = relative(\n baseDir,\n unmergedDictionariesPath\n );\n\n const configurationPath = join(configDir, 'configuration.json');\n const relativeConfigurationPath = relative(baseDir, configurationPath);\n\n // Only provide turbo-specific config if user explicitly sets it\n const turboConfig = {\n resolveAlias: {\n // \"prefix by './' to consider the path as relative to the project root. This is necessary for turbo to work correctly.\"\n '@intlayer/dictionaries-entry': `./${relativeDictionariesPath}`,\n '@intlayer/unmerged-dictionaries-entry': `./${relativeUnmergedDictionariesPath}`,\n '@intlayer/config/built': `./${relativeConfigurationPath}`,\n },\n rules: {\n '*.node': {\n as: '*.node',\n loaders: ['node-loader'],\n },\n },\n };\n\n const serverExternalPackages = [\n 'esbuild',\n 'module',\n 'fs',\n 'chokidar',\n 'fsevents',\n ];\n\n const newConfig: Partial<NextConfig> = {\n // Only add `serverExternalPackages` if Next.js is v15+\n ...(isGteNext15\n ? {\n // only for Next ≥15\n serverExternalPackages,\n }\n : {\n // only for Next ≥13 and <15.3\n ...(isGteNext13 && {\n serverComponentsExternalPackages: serverExternalPackages,\n }),\n }),\n\n ...(isTurbopackEnabled && {\n ...(isGteNext15 && isTurbopackStable\n ? {\n // only for Next ≥15.3\n turbopack: turboConfig,\n }\n : {\n experimental: {\n // only for Next ≥13 and <15.3\n turbo: turboConfig,\n },\n }),\n }),\n\n webpack: (config: WebpackParams['0'], options: WebpackParams[1]) => {\n // If the user has defined their own webpack config, call it\n if (typeof nextConfig.webpack === 'function') {\n config = nextConfig.webpack(config, options);\n }\n\n // Alias the dictionary entry for all builds\n config.resolve.alias = {\n ...config.resolve.alias,\n '@intlayer/dictionaries-entry': resolve(relativeDictionariesPath),\n '@intlayer/unmerged-dictionaries-entry': resolve(\n relativeUnmergedDictionariesPath\n ),\n '@intlayer/config/built': resolve(relativeConfigurationPath),\n };\n\n // Mark these modules as externals\n config.externals.push({\n esbuild: 'esbuild',\n module: 'module',\n fs: 'fs',\n chokidar: 'chokidar',\n fsevents: 'fsevents',\n });\n\n // Use `node-loader` for any `.node` files\n config.module.rules.push({\n test: /\\.node$/,\n loader: 'node-loader',\n });\n\n // Only add Intlayer plugin on server side (node runtime)\n const { isServer, nextRuntime } = options;\n\n if (!isBuildCommand && isServer && nextRuntime === 'nodejs') {\n config.plugins.push(new IntlayerPlugin());\n }\n\n return config;\n },\n };\n\n const pruneConfig: Partial<NextConfig> = getPruneConfig(intlayerConfig);\n\n const intlayerNextConfig: Partial<NextConfig> = merge(pruneConfig, newConfig);\n\n // Merge the new config with the user's config\n return merge(nextConfig, intlayerNextConfig) as NextConfig & T;\n};\n"],"mappings":"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","names":[]}
|
|
@@ -10,5 +10,5 @@ import type { NextConfig } from 'next';
|
|
|
10
10
|
* export default withIntlayer(nextConfig)
|
|
11
11
|
* ```
|
|
12
12
|
*/
|
|
13
|
-
export declare const withIntlayer: <T extends Partial<NextConfig>>(nextConfig?: T) => NextConfig & T
|
|
13
|
+
export declare const withIntlayer: <T extends Partial<NextConfig>>(nextConfig?: T) => Promise<NextConfig & T>;
|
|
14
14
|
//# sourceMappingURL=withIntlayer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withIntlayer.d.ts","sourceRoot":"","sources":["../../../src/server/withIntlayer.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"withIntlayer.d.ts","sourceRoot":"","sources":["../../../src/server/withIntlayer.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AA2FvC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,GAAU,CAAC,SAAS,OAAO,CAAC,UAAU,CAAC,EAC9D,aAAY,CAAW,KACtB,OAAO,CAAC,UAAU,GAAG,CAAC,CAmIxB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "next-intlayer",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.6.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Simplify internationalization i18n in Next.js with context providers, hooks, locale detection, and multilingual content integration.",
|
|
6
6
|
"keywords": [
|
|
@@ -69,12 +69,12 @@
|
|
|
69
69
|
"dependencies": {
|
|
70
70
|
"deepmerge": "^4.3.1",
|
|
71
71
|
"node-loader": "^2.1.0",
|
|
72
|
-
"@intlayer/chokidar": "5.
|
|
73
|
-
"@intlayer/config": "5.
|
|
74
|
-
"@intlayer/
|
|
75
|
-
"@intlayer/
|
|
76
|
-
"@intlayer/webpack": "5.
|
|
77
|
-
"react-intlayer": "5.
|
|
72
|
+
"@intlayer/chokidar": "5.6.0",
|
|
73
|
+
"@intlayer/config": "5.6.0",
|
|
74
|
+
"@intlayer/dictionaries-entry": "5.6.0",
|
|
75
|
+
"@intlayer/core": "5.6.0",
|
|
76
|
+
"@intlayer/webpack": "5.6.0",
|
|
77
|
+
"react-intlayer": "5.6.0"
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|
|
80
80
|
"@types/node": "^22.15.30",
|
|
@@ -88,22 +88,23 @@
|
|
|
88
88
|
"tsc-alias": "^1.8.16",
|
|
89
89
|
"tsup": "^8.5.0",
|
|
90
90
|
"typescript": "^5.8.3",
|
|
91
|
+
"vitest": "^3.2.2",
|
|
91
92
|
"@utils/eslint-config": "1.0.4",
|
|
93
|
+
"@utils/ts-config": "1.0.4",
|
|
92
94
|
"@utils/ts-config-types": "1.0.4",
|
|
93
95
|
"@utils/tsup-config": "1.0.4",
|
|
94
|
-
"
|
|
95
|
-
"intlayer": "5.5.10"
|
|
96
|
+
"intlayer": "5.6.0"
|
|
96
97
|
},
|
|
97
98
|
"peerDependencies": {
|
|
98
99
|
"next": ">=14.0.0",
|
|
99
100
|
"react": ">=16.0.0",
|
|
100
101
|
"react-dom": ">=16.0.0",
|
|
101
|
-
"@intlayer/config": "5.
|
|
102
|
-
"@intlayer/
|
|
103
|
-
"intlayer": "5.
|
|
104
|
-
"
|
|
105
|
-
"@intlayer/
|
|
106
|
-
"react-intlayer": "5.
|
|
102
|
+
"@intlayer/config": "5.6.0",
|
|
103
|
+
"@intlayer/core": "5.6.0",
|
|
104
|
+
"@intlayer/webpack": "5.6.0",
|
|
105
|
+
"intlayer": "5.6.0",
|
|
106
|
+
"@intlayer/dictionaries-entry": "5.6.0",
|
|
107
|
+
"react-intlayer": "5.6.0"
|
|
107
108
|
},
|
|
108
109
|
"engines": {
|
|
109
110
|
"node": ">=14.18"
|
|
@@ -122,7 +123,8 @@
|
|
|
122
123
|
"prettier": "prettier . --check",
|
|
123
124
|
"prettier:fix": "prettier . --write",
|
|
124
125
|
"reset": "pnpm clean & pnpm build",
|
|
125
|
-
"test": "",
|
|
126
|
+
"test": "vitest run",
|
|
127
|
+
"test:watch": "vitest",
|
|
126
128
|
"typecheck": "tsup --project ./tsconfig.json --noEmit"
|
|
127
129
|
}
|
|
128
130
|
}
|