next-intl 3.15.0-custom-prefixes.0 → 3.15.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/dist/development/middleware/middleware.js +17 -26
- package/dist/development/middleware/syncCookie.js +19 -0
- package/dist/esm/middleware/middleware.js +1 -1
- package/dist/esm/middleware/syncCookie.js +1 -0
- package/dist/production/middleware/middleware.js +1 -1
- package/dist/production/middleware/syncCookie.js +1 -0
- package/dist/types/src/middleware/syncCookie.d.ts +2 -0
- package/package.json +14 -11
|
@@ -8,48 +8,43 @@ var utils$1 = require('../shared/utils.js');
|
|
|
8
8
|
var config = require('./config.js');
|
|
9
9
|
var getAlternateLinksHeaderValue = require('./getAlternateLinksHeaderValue.js');
|
|
10
10
|
var resolveLocale = require('./resolveLocale.js');
|
|
11
|
+
var syncCookie = require('./syncCookie.js');
|
|
11
12
|
var utils = require('./utils.js');
|
|
12
13
|
|
|
13
14
|
function createMiddleware(input) {
|
|
14
15
|
const config$1 = config.receiveConfig(input);
|
|
15
16
|
return function middleware(request) {
|
|
16
|
-
var
|
|
17
|
+
var _config$domains;
|
|
17
18
|
// Resolve potential foreign symbols (e.g. /ja/%E7%B4%84 → /ja/約))
|
|
18
19
|
const externalPathname = decodeURI(request.nextUrl.pathname);
|
|
19
20
|
const {
|
|
20
21
|
domain,
|
|
21
22
|
locale
|
|
22
23
|
} = resolveLocale.default(config$1, request.headers, request.cookies, externalPathname);
|
|
23
|
-
const hasOutdatedCookie = config$1.localeDetection && ((_request$cookies$get = request.cookies.get(constants.COOKIE_LOCALE_NAME)) === null || _request$cookies$get === void 0 ? void 0 : _request$cookies$get.value) !== locale;
|
|
24
24
|
const hasMatchedDefaultLocale = domain ? domain.defaultLocale === locale : locale === config$1.defaultLocale;
|
|
25
25
|
const domainConfigs = ((_config$domains = config$1.domains) === null || _config$domains === void 0 ? void 0 : _config$domains.filter(curDomain => utils.isLocaleSupportedOnDomain(locale, curDomain))) || [];
|
|
26
26
|
const hasUnknownHost = config$1.domains != null && !domain;
|
|
27
|
-
function getResponseInit() {
|
|
28
|
-
const headers = new Headers(request.headers);
|
|
29
|
-
headers.set(constants.HEADER_LOCALE_NAME, locale);
|
|
30
|
-
return {
|
|
31
|
-
request: {
|
|
32
|
-
headers
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
27
|
function rewrite(url) {
|
|
37
28
|
const urlObj = new URL(url, request.url);
|
|
38
29
|
if (request.nextUrl.basePath) {
|
|
39
30
|
urlObj.pathname = utils.applyBasePath(urlObj.pathname, request.nextUrl.basePath);
|
|
40
31
|
}
|
|
41
|
-
|
|
32
|
+
const headers = new Headers(request.headers);
|
|
33
|
+
headers.set(constants.HEADER_LOCALE_NAME, locale);
|
|
34
|
+
return server.NextResponse.rewrite(urlObj, {
|
|
35
|
+
request: {
|
|
36
|
+
headers
|
|
37
|
+
}
|
|
38
|
+
});
|
|
42
39
|
}
|
|
43
40
|
function redirect(url, redirectDomain) {
|
|
44
41
|
const urlObj = new URL(utils.normalizeTrailingSlash(url), request.url);
|
|
45
|
-
if (domainConfigs.length > 0) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
urlObj.pathname = utils.getNormalizedPathname(urlObj.pathname, config$1.locales, config$1.localePrefix);
|
|
52
|
-
}
|
|
42
|
+
if (domainConfigs.length > 0 && !redirectDomain) {
|
|
43
|
+
const bestMatchingDomain = utils.getBestMatchingDomain(domain, locale, domainConfigs);
|
|
44
|
+
if (bestMatchingDomain) {
|
|
45
|
+
redirectDomain = bestMatchingDomain.domain;
|
|
46
|
+
if (bestMatchingDomain.defaultLocale === locale && config$1.localePrefix.mode === 'as-needed') {
|
|
47
|
+
urlObj.pathname = utils.getNormalizedPathname(urlObj.pathname, config$1.locales, config$1.localePrefix);
|
|
53
48
|
}
|
|
54
49
|
}
|
|
55
50
|
}
|
|
@@ -141,12 +136,8 @@ function createMiddleware(input) {
|
|
|
141
136
|
}
|
|
142
137
|
}
|
|
143
138
|
}
|
|
144
|
-
if (
|
|
145
|
-
|
|
146
|
-
path: request.nextUrl.basePath || undefined,
|
|
147
|
-
sameSite: constants.COOKIE_SAME_SITE,
|
|
148
|
-
maxAge: constants.COOKIE_MAX_AGE
|
|
149
|
-
});
|
|
139
|
+
if (config$1.localeDetection) {
|
|
140
|
+
syncCookie.default(request, response, locale);
|
|
150
141
|
}
|
|
151
142
|
if (config$1.localePrefix.mode !== 'never' && config$1.alternateLinks && config$1.locales.length > 1) {
|
|
152
143
|
var _config$pathnames;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var constants = require('../shared/constants.js');
|
|
6
|
+
|
|
7
|
+
function syncCookie(request, response, locale) {
|
|
8
|
+
var _request$cookies$get;
|
|
9
|
+
const hasOutdatedCookie = ((_request$cookies$get = request.cookies.get(constants.COOKIE_LOCALE_NAME)) === null || _request$cookies$get === void 0 ? void 0 : _request$cookies$get.value) !== locale;
|
|
10
|
+
if (hasOutdatedCookie) {
|
|
11
|
+
response.cookies.set(constants.COOKIE_LOCALE_NAME, locale, {
|
|
12
|
+
path: request.nextUrl.basePath || undefined,
|
|
13
|
+
sameSite: constants.COOKIE_SAME_SITE,
|
|
14
|
+
maxAge: constants.COOKIE_MAX_AGE
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
exports.default = syncCookie;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{NextResponse as e}from"next/server";import{
|
|
1
|
+
import{NextResponse as e}from"next/server";import{HEADER_LOCALE_NAME as o}from"../shared/constants.js";import{matchesPathname as l,getLocalePrefix as r}from"../shared/utils.js";import{receiveConfig as t}from"./config.js";import a from"./getAlternateLinksHeaderValue.js";import n from"./resolveLocale.js";import s from"./syncCookie.js";import{isLocaleSupportedOnDomain as i,getNormalizedPathname as c,getPathnameMatch as d,getInternalTemplate as f,formatTemplatePathname as m,formatPathname as h,getBestMatchingDomain as x,applyBasePath as u,normalizeTrailingSlash as p,getLocaleAsPrefix as v}from"./utils.js";function U(U){const P=t(U);return function(t){var U;const g=decodeURI(t.nextUrl.pathname),{domain:L,locale:j}=n(P,t.headers,t.cookies,g),w=L?L.defaultLocale===j:j===P.defaultLocale,k=(null===(U=P.domains)||void 0===U?void 0:U.filter((e=>i(j,e))))||[],b=null!=P.domains&&!L;function y(l){const r=new URL(l,t.url);t.nextUrl.basePath&&(r.pathname=u(r.pathname,t.nextUrl.basePath));const a=new Headers(t.headers);return a.set(o,j),e.rewrite(r,{request:{headers:a}})}function R(o,l){const r=new URL(p(o),t.url);if(k.length>0&&!l){const e=x(L,j,k);e&&(l=e.domain,e.defaultLocale===j&&"as-needed"===P.localePrefix.mode&&(r.pathname=c(r.pathname,P.locales,P.localePrefix)))}var a,n;l&&(r.host=l,t.headers.get("x-forwarded-host")&&(r.protocol=null!==(a=t.headers.get("x-forwarded-proto"))&&void 0!==a?a:t.nextUrl.protocol,r.port=null!==(n=t.headers.get("x-forwarded-port"))&&void 0!==n?n:""));return t.nextUrl.basePath&&(r.pathname=u(r.pathname,t.nextUrl.basePath)),e.redirect(r.toString())}const q=c(g,P.locales,P.localePrefix),H=d(g,P.locales,P.localePrefix),z=null!=H,A="never"===P.localePrefix.mode||w&&"as-needed"===P.localePrefix.mode;let C,D,I=q;if(P.pathnames){let e;if([e,D]=f(P.pathnames,q,j),D){const o=P.pathnames[D],a="string"==typeof o?o:o[j];if(l(a,q))I=m(q,a,D);else{let l;l=e?"string"==typeof o?o:o[e]:D;const n=A?void 0:r(j,P.localePrefix),s=m(q,l,a);C=R(h(s,n,t.nextUrl.search))}}}if(!C)if("/"!==I||z){const e=h(I,v(j),t.nextUrl.search);if(z){const o=h(q,H.prefix,t.nextUrl.search);if("never"===P.localePrefix.mode)C=R(h(q,void 0,t.nextUrl.search));else if(H.exact)if(w&&A)C=R(h(q,void 0,t.nextUrl.search));else if(P.domains){const l=x(L,H.locale,k);C=(null==L?void 0:L.domain)===(null==l?void 0:l.domain)||b?y(e):R(o,null==l?void 0:l.domain)}else C=y(e);else C=R(o)}else C=A?y(e):R(h(q,r(j,P.localePrefix),t.nextUrl.search))}else C=A?y(h(I,v(j),t.nextUrl.search)):R(h(q,r(j,P.localePrefix),t.nextUrl.search));var S;(P.localeDetection&&s(t,C,j),"never"!==P.localePrefix.mode&&P.alternateLinks&&P.locales.length>1)&&C.headers.set("Link",a({config:P,localizedPathnames:null!=D?null===(S=P.pathnames)||void 0===S?void 0:S[D]:void 0,request:t,resolvedLocale:j}));return C}}export{U as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{COOKIE_LOCALE_NAME as e,COOKIE_SAME_SITE as o,COOKIE_MAX_AGE as t}from"../shared/constants.js";function a(a,s,i){var n;(null===(n=a.cookies.get(e))||void 0===n?void 0:n.value)!==i&&s.cookies.set(e,i,{path:a.nextUrl.basePath||void 0,sameSite:o,maxAge:t})}export{a as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("next/server"),a=require("../shared/constants.js"),t=require("../shared/utils.js"),r=require("./config.js"),l=require("./getAlternateLinksHeaderValue.js"),o=require("./resolveLocale.js"),n=require("./utils.js");exports.default=function(
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("next/server"),a=require("../shared/constants.js"),t=require("../shared/utils.js"),r=require("./config.js"),l=require("./getAlternateLinksHeaderValue.js"),o=require("./resolveLocale.js"),n=require("./syncCookie.js"),s=require("./utils.js");exports.default=function(i){const c=r.receiveConfig(i);return function(r){var i;const d=decodeURI(r.nextUrl.pathname),{domain:f,locale:m}=o.default(c,r.headers,r.cookies,d),h=f?f.defaultLocale===m:m===c.defaultLocale,u=(null===(i=c.domains)||void 0===i?void 0:i.filter((e=>s.isLocaleSupportedOnDomain(m,e))))||[],x=null!=c.domains&&!f;function P(t){const l=new URL(t,r.url);r.nextUrl.basePath&&(l.pathname=s.applyBasePath(l.pathname,r.nextUrl.basePath));const o=new Headers(r.headers);return o.set(a.HEADER_LOCALE_NAME,m),e.NextResponse.rewrite(l,{request:{headers:o}})}function p(a,t){const l=new URL(s.normalizeTrailingSlash(a),r.url);if(u.length>0&&!t){const e=s.getBestMatchingDomain(f,m,u);e&&(t=e.domain,e.defaultLocale===m&&"as-needed"===c.localePrefix.mode&&(l.pathname=s.getNormalizedPathname(l.pathname,c.locales,c.localePrefix)))}var o,n;t&&(l.host=t,r.headers.get("x-forwarded-host")&&(l.protocol=null!==(o=r.headers.get("x-forwarded-proto"))&&void 0!==o?o:r.nextUrl.protocol,l.port=null!==(n=r.headers.get("x-forwarded-port"))&&void 0!==n?n:""));return r.nextUrl.basePath&&(l.pathname=s.applyBasePath(l.pathname,r.nextUrl.basePath)),e.NextResponse.redirect(l.toString())}const g=s.getNormalizedPathname(d,c.locales,c.localePrefix),v=s.getPathnameMatch(d,c.locales,c.localePrefix),L=null!=v,U="never"===c.localePrefix.mode||h&&"as-needed"===c.localePrefix.mode;let q,j,w=g;if(c.pathnames){let e;if([e,j]=s.getInternalTemplate(c.pathnames,g,m),j){const a=c.pathnames[j],l="string"==typeof a?a:a[m];if(t.matchesPathname(l,g))w=s.formatTemplatePathname(g,l,j);else{let o;o=e?"string"==typeof a?a:a[e]:j;const n=U?void 0:t.getLocalePrefix(m,c.localePrefix),i=s.formatTemplatePathname(g,o,l);q=p(s.formatPathname(i,n,r.nextUrl.search))}}}if(!q)if("/"!==w||L){const e=s.formatPathname(w,s.getLocaleAsPrefix(m),r.nextUrl.search);if(L){const a=s.formatPathname(g,v.prefix,r.nextUrl.search);if("never"===c.localePrefix.mode)q=p(s.formatPathname(g,void 0,r.nextUrl.search));else if(v.exact)if(h&&U)q=p(s.formatPathname(g,void 0,r.nextUrl.search));else if(c.domains){const t=s.getBestMatchingDomain(f,v.locale,u);q=(null==f?void 0:f.domain)===(null==t?void 0:t.domain)||x?P(e):p(a,null==t?void 0:t.domain)}else q=P(e);else q=p(a)}else q=U?P(e):p(s.formatPathname(g,t.getLocalePrefix(m,c.localePrefix),r.nextUrl.search))}else q=U?P(s.formatPathname(w,s.getLocaleAsPrefix(m),r.nextUrl.search)):p(s.formatPathname(g,t.getLocalePrefix(m,c.localePrefix),r.nextUrl.search));var y;(c.localeDetection&&n.default(r,q,m),"never"!==c.localePrefix.mode&&c.alternateLinks&&c.locales.length>1)&&q.headers.set("Link",l.default({config:c,localizedPathnames:null!=j?null===(y=c.pathnames)||void 0===y?void 0:y[j]:void 0,request:r,resolvedLocale:m}));return q}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../shared/constants.js");exports.default=function(t,s,o){var a;(null===(a=t.cookies.get(e.COOKIE_LOCALE_NAME))||void 0===a?void 0:a.value)!==o&&s.cookies.set(e.COOKIE_LOCALE_NAME,o,{path:t.nextUrl.basePath||void 0,sameSite:e.COOKIE_SAME_SITE,maxAge:e.COOKIE_MAX_AGE})};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "next-intl",
|
|
3
|
-
"version": "3.15.0
|
|
3
|
+
"version": "3.15.0",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"author": "Jan Amann <jan@amann.work>",
|
|
6
6
|
"funding": [
|
|
@@ -16,6 +16,16 @@
|
|
|
16
16
|
"type": "git",
|
|
17
17
|
"url": "https://github.com/amannn/next-intl"
|
|
18
18
|
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "rm -rf dist && rollup -c",
|
|
21
|
+
"test": "TZ=Europe/Berlin vitest",
|
|
22
|
+
"lint": "pnpm run lint:source && pnpm run lint:package",
|
|
23
|
+
"lint:source": "eslint src test && tsc --noEmit",
|
|
24
|
+
"lint:package": "publint && attw --pack",
|
|
25
|
+
"prepublishOnly": "CI=true turbo test && turbo lint && turbo build && cp ../../README.md .",
|
|
26
|
+
"postpublish": "git checkout . && rm ./README.md",
|
|
27
|
+
"size": "size-limit"
|
|
28
|
+
},
|
|
19
29
|
"main": "./dist/index.react-client.js",
|
|
20
30
|
"module": "./dist/esm/index.react-client.js",
|
|
21
31
|
"typings": "./dist/types/src/index.react-client.d.ts",
|
|
@@ -77,7 +87,7 @@
|
|
|
77
87
|
"dependencies": {
|
|
78
88
|
"@formatjs/intl-localematcher": "^0.2.32",
|
|
79
89
|
"negotiator": "^0.6.3",
|
|
80
|
-
"use-intl": "^3.
|
|
90
|
+
"use-intl": "^3.15.0"
|
|
81
91
|
},
|
|
82
92
|
"peerDependencies": {
|
|
83
93
|
"next": "^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0",
|
|
@@ -141,12 +151,5 @@
|
|
|
141
151
|
"limit": "0 KB"
|
|
142
152
|
}
|
|
143
153
|
],
|
|
144
|
-
"
|
|
145
|
-
|
|
146
|
-
"test": "TZ=Europe/Berlin vitest",
|
|
147
|
-
"lint": "pnpm run lint:source && pnpm run lint:package",
|
|
148
|
-
"lint:source": "eslint src test && tsc --noEmit",
|
|
149
|
-
"lint:package": "publint && attw --pack",
|
|
150
|
-
"size": "size-limit"
|
|
151
|
-
}
|
|
152
|
-
}
|
|
154
|
+
"gitHead": "734bc73a2f43501fd97f21aa8e274a35d02b78f0"
|
|
155
|
+
}
|