next-intl
Version:
Internationalization (i18n) for Next.js
2 lines (1 loc) • 4.32 kB
JavaScript
import e from"fs";import{createRequire as t}from"module";import s from"path";import{getFormatExtension as r}from"../extractor/format/index.js";import o from"../extractor/source/SourceFileFilter.js";import{isDevelopmentOrNextBuild as n}from"./config.js";import{isNextJs16OrHigher as a,hasStableTurboConfig as i}from"./nextFlags.js";import{throwError as l}from"./utils.js";const u=t(import.meta.url);function c(e){return[`${e}.ts`,`${e}.tsx`,`${e}.js`,`${e}.jsx`]}function m(t,r){function o(t){return e.existsSync(function(e){const t=[];return r&&t.push(r),t.push(e),s.resolve(...t)}(t))}if(t)return n&&!o(t)&&l(`Could not find i18n config at ${t}, please provide a valid path.`),t;for(const e of[...c("./i18n/request"),...c("./src/i18n/request")])if(o(e))return e;return n&&l("Could not locate request configuration module.\n\nThis path is supported by default: ./(src/)i18n/request.{js,jsx,ts,tsx}\n\nAlternatively, you can specify a custom location in your Next.js config:\n\nconst withNextIntl = createNextIntlPlugin(\n './path/to/i18n/request.tsx'\n);"),o("./src")?"./src/i18n/request.ts":"./i18n/request.ts"}function p(e,t){const n=null!=process.env.TURBOPACK,c=n||a(),p={};function x(){const t=e.experimental;return t.srcPath&&e.experimental?.messages||l("`srcPath` and `messages` are required when using `extractor`."),{loader:"next-intl/extractor/extractionLoader",options:{srcPath:t.srcPath,sourceLocale:t.extract.sourceLocale,messages:e.experimental.messages}}}function f(){return{loader:"next-intl/extractor/catalogLoader",options:{messages:e.experimental.messages}}}function g(){return t?.turbopack?.rules||t?.experimental?.turbo?.rules||{}}function d(e,t,s){e[t]?Array.isArray(e[t])?e[t].push(s):e[t]=[e[t],s]:e[t]=s}if(e.experimental?.messages){const t=e.experimental.messages;t.format||l("`format` is required when using `messages`."),t.path||l("`path` is required when using `messages`.")}if(c){e.requestConfig&&s.isAbsolute(e.requestConfig)&&l("Turbopack support for next-intl currently does not support absolute paths, please provide a relative one (e.g. './src/i18n/config.ts').\n\nFound: "+e.requestConfig);const n={"next-intl/config":m(e.requestConfig)};if(e.experimental?.messages?.precompile){let e=s.relative(process.cwd(),u.resolve("use-intl/format-message/format-only"));e.startsWith(".")||(e=`./${e}`),n["use-intl/format-message"]=e.replace(/\\/g,"/")}let c;if(e.experimental?.extract){a()||l("Message extraction requires Next.js 16 or higher."),c??=g();const t=(Array.isArray(e.experimental.srcPath)?e.experimental.srcPath:[e.experimental.srcPath]).map((e=>e.endsWith("/")?e.slice(0,-1):e));d(c,`*.{${o.EXTENSIONS.join(",")}}`,{loaders:[x()],condition:{path:`{${t.join(",")}}/**/*`,content:/(useExtracted|getExtracted)/}})}if(e.experimental?.messages){a()||l("Message catalog loading requires Next.js 16 or higher."),c??=g();d(c,`*${r(e.experimental.messages.format)}`,{loaders:[f()],condition:{path:`${e.experimental.messages.path}/**/*`},as:"*.js"})}i()&&!t?.experimental?.turbo?p.turbopack={...t?.turbopack,...c&&{rules:c},resolveAlias:{...t?.turbopack?.resolveAlias,...n}}:p.experimental={...t?.experimental,turbo:{...t?.experimental?.turbo,...c&&{rules:c},resolveAlias:{...t?.experimental?.turbo?.resolveAlias,...n}}}}return n||(p.webpack=function(n,a){if(n.resolve||(n.resolve={}),n.resolve.alias||(n.resolve.alias={}),n.resolve.alias["next-intl/config"]=s.resolve(n.context,m(e.requestConfig,n.context)),e.experimental?.messages?.precompile&&(n.resolve.alias["use-intl/format-message"]=u.resolve("use-intl/format-message/format-only")),e.experimental?.extract){n.module||(n.module={}),n.module.rules||(n.module.rules=[]);const t=e.experimental.srcPath;n.module.rules.push({test:new RegExp(`\\.(${o.EXTENSIONS.join("|")})$`),include:Array.isArray(t)?t.map((e=>s.resolve(n.context,e))):s.resolve(n.context,t||""),use:[x()]})}if(e.experimental?.messages){n.module||(n.module={}),n.module.rules||(n.module.rules=[]);const t=r(e.experimental.messages.format);n.module.rules.push({test:new RegExp(`${t.replace(/\./g,"\\.")}$`),include:s.resolve(n.context,e.experimental.messages.path),use:[f()],type:"javascript/auto"})}return"function"==typeof t?.webpack?t.webpack(n,a):n}),t?.trailingSlash&&(p.env={...t.env,_next_intl_trailing_slash:"true"}),Object.assign({},t,p)}export{p as default};