next-intl
Version:
Internationalization (i18n) for Next.js
2 lines (1 loc) • 3.85 kB
JavaScript
import e from"fs";import{createRequire as t}from"module";import r from"path";import{getFormatExtension as s}from"../extractor/format/index.js";import{normalizeMessagesCatalogPaths as o}from"../extractor/normalizeExtractorConfig.js";import n from"../extractor/source/SourceFileFilter.js";import{isDevelopmentOrNextBuild as i}from"./config.js";import{isNextJs16OrHigher as a,hasStableTurboConfig as l}from"./nextFlags.js";import{throwError as u}from"./utils.js";const c=t(import.meta.url);function m(e){return[`${e}.ts`,`${e}.tsx`,`${e}.js`,`${e}.jsx`]}function p(t,s){function o(t){return e.existsSync(function(e){const t=[];return s&&t.push(s),t.push(e),r.resolve(...t)}(t))}if(t)return i&&!o(t)&&u(`Could not find i18n config at ${t}, please provide a valid path.`),t;for(const e of[...m("./i18n/request"),...m("./src/i18n/request")])if(o(e))return e;return i&&u("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 f(e,t,i){const m=null!=process.env.TURBOPACK,f=m||a(),x={};let g=[];function d(e){return{loader:"next-intl/extractor/extractionLoader",options:e}}function v(){const t=e.experimental.messages;return{loader:"next-intl/extractor/catalogLoader",options:{messages:{format:t.format,...void 0!==t.precompile&&{precompile:t.precompile}}}}}function h(){return t?.turbopack?.rules||t?.experimental?.turbo?.rules||{}}function j(e,t,r){e[t]?Array.isArray(e[t])?e[t].push(r):e[t]=[e[t],r]:e[t]=r}if(e.experimental?.messages&&(g=o(e.experimental.messages.path)),f){e.requestConfig&&r.isAbsolute(e.requestConfig)&&u("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 o={"next-intl/config":p(e.requestConfig)};if(e.experimental?.messages?.precompile){let e=r.relative(process.cwd(),c.resolve("use-intl/format-message/format-only"));e.startsWith(".")||(e=`./${e}`),o["use-intl/format-message"]=e.replace(/\\/g,"/")}let m;if(e.experimental?.extract&&(a()||u("Message extraction requires Next.js 16 or higher."),m??=h(),j(m,`*.{${n.EXTENSIONS.join(",")}}`,{loaders:[d(i)],condition:{content:/(useExtracted|getExtracted)/}})),e.experimental?.messages){a()||u("Message catalog loading requires Next.js 16 or higher."),m??=h();j(m,`*${s(e.experimental.messages.format)}`,{loaders:[v()],condition:{path:`{${g.join(",")}}/**/*`},as:"*.js"})}l()&&!t?.experimental?.turbo?x.turbopack={...t?.turbopack,...m&&{rules:m},resolveAlias:{...t?.turbopack?.resolveAlias,...o}}:x.experimental={...t?.experimental,turbo:{...t?.experimental?.turbo,...m&&{rules:m},resolveAlias:{...t?.experimental?.turbo?.resolveAlias,...o}}}}return m||(x.webpack=function(o,a){if(o.resolve||(o.resolve={}),o.resolve.alias||(o.resolve.alias={}),o.resolve.alias["next-intl/config"]=r.resolve(o.context,p(e.requestConfig,o.context)),e.experimental?.messages?.precompile&&(o.resolve.alias["use-intl/format-message"]=c.resolve("use-intl/format-message/format-only")),e.experimental?.extract&&(o.module||(o.module={}),o.module.rules||(o.module.rules=[]),o.module.rules.push({test:new RegExp(`\\.(${n.EXTENSIONS.join("|")})$`),use:[d(i)]})),e.experimental?.messages){o.module||(o.module={}),o.module.rules||(o.module.rules=[]);const t=s(e.experimental.messages.format);o.module.rules.push({test:new RegExp(`${t.replace(/\./g,"\\.")}$`),include:g.map((e=>r.resolve(o.context,e))),use:[v()],type:"javascript/auto"})}return"function"==typeof t?.webpack?t.webpack(o,a):o}),t?.trailingSlash&&(x.env={...t.env,_next_intl_trailing_slash:"true"}),Object.assign({},t,x)}export{f as default};