next-intlayer
Version:
Simplify internationalization i18n in Next.js with context providers, hooks, locale detection, and multilingual content integration.
93 lines • 2.93 kB
JavaScript
import { resolve, relative, join } from "path";
import {
getConfiguration,
ESMxCJSRequire
} from "@intlayer/config";
import { IntlayerPlugin } from "@intlayer/webpack";
import { readFileSync } from "fs";
const getNextVersion = () => {
try {
const nextConfigPath = ESMxCJSRequire.resolve("next/package.json");
const nextPkg = JSON.parse(readFileSync(nextConfigPath, "utf-8"));
return parseInt(nextPkg.version.split(".")[0], 10);
} catch (e) {
return void 0;
}
};
const nextMajorVersion = getNextVersion();
const isTurbopackEnabled = process.env.npm_lifecycle_script?.includes("--turbo");
const withIntlayer = (nextConfig = {}) => {
if (typeof nextConfig !== "object") {
nextConfig = {};
}
const intlayerConfig = getConfiguration();
const { mainDir, configDir, baseDir } = intlayerConfig.content;
const dictionariesPath = join(mainDir, "dictionaries.mjs");
const relativeDictionariesPath = relative(baseDir, dictionariesPath);
const configurationPath = join(configDir, "configuration.json");
const relativeConfigurationPath = relative(baseDir, configurationPath);
const turboConfig = isTurbopackEnabled ? {
turbo: {
...nextConfig.experimental?.turbo ?? {},
resolveAlias: {
...nextConfig.experimental?.turbo?.resolveAlias ?? {},
"@intlayer/dictionaries-entry": relativeDictionariesPath,
"@intlayer/config/built": relativeConfigurationPath
},
rules: {
"*.node": {
as: "*.node",
loaders: ["node-loader"]
}
}
}
} : {};
const newConfig = {
// Only add `serverExternalPackages` if Next.js is v15+
...!nextMajorVersion || nextMajorVersion >= 15 ? {
serverExternalPackages: [
...nextConfig.serverExternalPackages ?? [],
"esbuild",
"module",
"fs",
"chokidar",
"fsevents"
]
} : {},
experimental: {
...nextConfig.experimental ?? {},
...turboConfig
},
webpack: (config, options) => {
if (typeof nextConfig.webpack === "function") {
config = nextConfig.webpack(config, options);
}
config.resolve.alias = {
...config.resolve.alias ?? {},
"@intlayer/dictionaries-entry": resolve(relativeDictionariesPath),
"@intlayer/config/built": resolve(relativeConfigurationPath)
};
config.externals.push({
esbuild: "esbuild",
module: "module",
fs: "fs",
chokidar: "chokidar",
fsevents: "fsevents"
});
config.module.rules.push({
test: /\.node$/,
loader: "node-loader"
});
const { isServer, nextRuntime } = options;
if (isServer && nextRuntime === "nodejs") {
config.plugins.push(new IntlayerPlugin());
}
return config;
}
};
return { ...nextConfig, ...newConfig };
};
export {
withIntlayer
};
//# sourceMappingURL=withIntlayer.mjs.map