@inlang/paraglide-js 2.15.1 → 2.15.2
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 +19 -14
- package/dist/compiler/create-readme.d.ts.map +1 -1
- package/dist/compiler/create-readme.js +25 -10
- package/dist/compiler/create-readme.js.map +1 -1
- package/dist/compiler/runtime/extract-locale-from-request-async.d.ts +3 -1
- package/dist/compiler/runtime/extract-locale-from-request-async.d.ts.map +1 -1
- package/dist/compiler/runtime/extract-locale-from-request-async.js +16 -3
- package/dist/compiler/runtime/extract-locale-from-request-async.js.map +1 -1
- package/dist/compiler/runtime/extract-locale-from-request-async.test.js +81 -0
- package/dist/compiler/runtime/extract-locale-from-request-async.test.js.map +1 -1
- package/dist/compiler/runtime/extract-locale-from-request.d.ts +8 -2
- package/dist/compiler/runtime/extract-locale-from-request.d.ts.map +1 -1
- package/dist/compiler/runtime/extract-locale-from-request.js +23 -4
- package/dist/compiler/runtime/extract-locale-from-request.js.map +1 -1
- package/dist/compiler/runtime/extract-locale-from-request.test.js +58 -0
- package/dist/compiler/runtime/extract-locale-from-request.test.js.map +1 -1
- package/dist/compiler/runtime/should-redirect.d.ts +22 -2
- package/dist/compiler/runtime/should-redirect.d.ts.map +1 -1
- package/dist/compiler/runtime/should-redirect.js +30 -5
- package/dist/compiler/runtime/should-redirect.js.map +1 -1
- package/dist/compiler/runtime/should-redirect.test.js +99 -0
- package/dist/compiler/runtime/should-redirect.test.js.map +1 -1
- package/dist/compiler/server/middleware.d.ts +7 -3
- package/dist/compiler/server/middleware.d.ts.map +1 -1
- package/dist/compiler/server/middleware.js +53 -15
- package/dist/compiler/server/middleware.js.map +1 -1
- package/dist/compiler/server/middleware.test.js +120 -0
- package/dist/compiler/server/middleware.test.js.map +1 -1
- package/dist/services/env-variables/index.js +1 -1
- package/package.json +1 -1
|
@@ -7,7 +7,7 @@ import { getStrategyForUrl, isExcludedByRouteStrategy } from "./variables.js";
|
|
|
7
7
|
/**
|
|
8
8
|
* @typedef {object} ShouldRedirectServerInput
|
|
9
9
|
* @property {Request} request
|
|
10
|
-
* @property {string | URL} [
|
|
10
|
+
* @property {string | URL} [effectiveRequestUrl] - Effective request URL to use for route matching, locale detection with the URL strategy, and redirect targets.
|
|
11
11
|
* @property {Locale} [locale]
|
|
12
12
|
*
|
|
13
13
|
* @typedef {object} ShouldRedirectClientInput
|
|
@@ -55,6 +55,23 @@ import { getStrategyForUrl, isExcludedByRouteStrategy } from "./variables.js";
|
|
|
55
55
|
* return render(request, decision.locale);
|
|
56
56
|
* }
|
|
57
57
|
*
|
|
58
|
+
* @example
|
|
59
|
+
* // Server side usage behind a proxy where request.url is not public-facing
|
|
60
|
+
* export async function handle(request) {
|
|
61
|
+
* const effectiveRequestUrl = new URL(request.url);
|
|
62
|
+
* effectiveRequestUrl.protocol = "https:";
|
|
63
|
+
* effectiveRequestUrl.host = "example.com";
|
|
64
|
+
*
|
|
65
|
+
* const decision = await shouldRedirect({
|
|
66
|
+
* request,
|
|
67
|
+
* effectiveRequestUrl,
|
|
68
|
+
* });
|
|
69
|
+
*
|
|
70
|
+
* if (decision.shouldRedirect) {
|
|
71
|
+
* return Response.redirect(decision.redirectUrl, 307);
|
|
72
|
+
* }
|
|
73
|
+
* }
|
|
74
|
+
*
|
|
58
75
|
* @param {ShouldRedirectInput} [input]
|
|
59
76
|
* @returns {Promise<ShouldRedirectResult>}
|
|
60
77
|
*/
|
|
@@ -86,9 +103,11 @@ async function resolveLocale(input, currentUrl) {
|
|
|
86
103
|
return locale;
|
|
87
104
|
}
|
|
88
105
|
if (input.request) {
|
|
89
|
-
return extractLocaleFromRequestAsync(input.request
|
|
106
|
+
return extractLocaleFromRequestAsync(input.request, {
|
|
107
|
+
effectiveRequestUrl: currentUrl,
|
|
108
|
+
});
|
|
90
109
|
}
|
|
91
|
-
if (typeof input.url !== "undefined") {
|
|
110
|
+
if ("url" in input && typeof input.url !== "undefined") {
|
|
92
111
|
return getLocaleForUrl(currentUrl.href);
|
|
93
112
|
}
|
|
94
113
|
return getLocale();
|
|
@@ -100,13 +119,19 @@ async function resolveLocale(input, currentUrl) {
|
|
|
100
119
|
* @returns {URL}
|
|
101
120
|
*/
|
|
102
121
|
function resolveUrl(input) {
|
|
122
|
+
if ("effectiveRequestUrl" in input && input.effectiveRequestUrl instanceof URL) {
|
|
123
|
+
return new URL(input.effectiveRequestUrl.href);
|
|
124
|
+
}
|
|
125
|
+
if ("effectiveRequestUrl" in input && typeof input.effectiveRequestUrl === "string") {
|
|
126
|
+
return new URL(input.effectiveRequestUrl, input.request ? input.request.url : getUrlOrigin());
|
|
127
|
+
}
|
|
103
128
|
if (input.request) {
|
|
104
129
|
return new URL(input.request.url);
|
|
105
130
|
}
|
|
106
|
-
if (input.url instanceof URL) {
|
|
131
|
+
if ("url" in input && input.url instanceof URL) {
|
|
107
132
|
return new URL(input.url.href);
|
|
108
133
|
}
|
|
109
|
-
if (typeof input.url === "string") {
|
|
134
|
+
if ("url" in input && typeof input.url === "string") {
|
|
110
135
|
return new URL(input.url, getUrlOrigin());
|
|
111
136
|
}
|
|
112
137
|
if (typeof window !== "undefined" && window?.location?.href) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"should-redirect.js","sourceRoot":"","sources":["../../../src/compiler/runtime/should-redirect.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,6BAA6B,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAE9E;;;;;;;;;;;;;;;;;GAiBG;AAEH
|
|
1
|
+
{"version":3,"file":"should-redirect.js","sourceRoot":"","sources":["../../../src/compiler/runtime/should-redirect.js"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,105 @@ test("shouldRedirect redirects to the strategy-preferred locale on the server",
|
|
|
31
31
|
expect(decision.redirectUrl?.href).toBe("https://example.com/fr/dashboard");
|
|
32
32
|
expect(decision.locale).toBe("fr");
|
|
33
33
|
});
|
|
34
|
+
test("shouldRedirect uses the provided public url when the transport request url differs", async () => {
|
|
35
|
+
const runtime = await createParaglide({
|
|
36
|
+
blob: await newProject({
|
|
37
|
+
settings: {
|
|
38
|
+
baseLocale: "en",
|
|
39
|
+
locales: ["en", "fr"],
|
|
40
|
+
},
|
|
41
|
+
}),
|
|
42
|
+
strategy: ["cookie", "url"],
|
|
43
|
+
cookieName: "PARAGLIDE_LOCALE",
|
|
44
|
+
urlPatterns: [
|
|
45
|
+
{
|
|
46
|
+
pattern: "https://example.com/:path(.*)?",
|
|
47
|
+
localized: [
|
|
48
|
+
["en", "https://example.com/en/:path(.*)?"],
|
|
49
|
+
["fr", "https://example.com/fr/:path(.*)?"],
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
});
|
|
54
|
+
const request = new Request("http://internal.example.com/en/dashboard", {
|
|
55
|
+
headers: {
|
|
56
|
+
cookie: "PARAGLIDE_LOCALE=fr",
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
const decision = await runtime.shouldRedirect({
|
|
60
|
+
request,
|
|
61
|
+
effectiveRequestUrl: "https://example.com/en/dashboard",
|
|
62
|
+
});
|
|
63
|
+
expect(decision.shouldRedirect).toBe(true);
|
|
64
|
+
expect(decision.redirectUrl?.href).toBe("https://example.com/fr/dashboard");
|
|
65
|
+
expect(decision.locale).toBe("fr");
|
|
66
|
+
});
|
|
67
|
+
test("shouldRedirect resolves relative effectiveRequestUrl strings against request.url", async () => {
|
|
68
|
+
const runtime = await createParaglide({
|
|
69
|
+
blob: await newProject({
|
|
70
|
+
settings: {
|
|
71
|
+
baseLocale: "en",
|
|
72
|
+
locales: ["en", "fr"],
|
|
73
|
+
},
|
|
74
|
+
}),
|
|
75
|
+
strategy: ["cookie", "url"],
|
|
76
|
+
cookieName: "PARAGLIDE_LOCALE",
|
|
77
|
+
urlPatterns: [
|
|
78
|
+
{
|
|
79
|
+
pattern: "https://example.com/:path(.*)?",
|
|
80
|
+
localized: [
|
|
81
|
+
["en", "https://example.com/en/:path(.*)?"],
|
|
82
|
+
["fr", "https://example.com/fr/:path(.*)?"],
|
|
83
|
+
],
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
});
|
|
87
|
+
const request = new Request("https://example.com/en/dashboard", {
|
|
88
|
+
headers: {
|
|
89
|
+
cookie: "PARAGLIDE_LOCALE=fr",
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
const decision = await runtime.shouldRedirect({
|
|
93
|
+
request,
|
|
94
|
+
effectiveRequestUrl: "/en/dashboard",
|
|
95
|
+
});
|
|
96
|
+
expect(decision.shouldRedirect).toBe(true);
|
|
97
|
+
expect(decision.redirectUrl?.href).toBe("https://example.com/fr/dashboard");
|
|
98
|
+
expect(decision.locale).toBe("fr");
|
|
99
|
+
});
|
|
100
|
+
test("shouldRedirect keeps request precedence over url on the server", async () => {
|
|
101
|
+
const runtime = await createParaglide({
|
|
102
|
+
blob: await newProject({
|
|
103
|
+
settings: {
|
|
104
|
+
baseLocale: "en",
|
|
105
|
+
locales: ["en", "fr"],
|
|
106
|
+
},
|
|
107
|
+
}),
|
|
108
|
+
strategy: ["cookie", "url"],
|
|
109
|
+
cookieName: "PARAGLIDE_LOCALE",
|
|
110
|
+
urlPatterns: [
|
|
111
|
+
{
|
|
112
|
+
pattern: "https://example.com/:path(.*)?",
|
|
113
|
+
localized: [
|
|
114
|
+
["en", "https://example.com/en/:path(.*)?"],
|
|
115
|
+
["fr", "https://example.com/fr/:path(.*)?"],
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
});
|
|
120
|
+
const request = new Request("https://example.com/en/dashboard", {
|
|
121
|
+
headers: {
|
|
122
|
+
cookie: "PARAGLIDE_LOCALE=fr",
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
const decision = await runtime.shouldRedirect({
|
|
126
|
+
request,
|
|
127
|
+
url: "/dashboard",
|
|
128
|
+
});
|
|
129
|
+
expect(decision.shouldRedirect).toBe(true);
|
|
130
|
+
expect(decision.redirectUrl?.href).toBe("https://example.com/fr/dashboard");
|
|
131
|
+
expect(decision.locale).toBe("fr");
|
|
132
|
+
});
|
|
34
133
|
test("shouldRedirect does nothing when the URL already matches", async () => {
|
|
35
134
|
const runtime = await createParaglide({
|
|
36
135
|
blob: await newProject({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"should-redirect.test.js","sourceRoot":"","sources":["../../../src/compiler/runtime/should-redirect.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"should-redirect.test.js","sourceRoot":"","sources":["../../../src/compiler/runtime/should-redirect.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,10 @@
|
|
|
29
29
|
* If your framework handles URL localization itself (e.g., TanStack Router's `rewrite` option), use the original
|
|
30
30
|
* request instead to avoid redirect loops.
|
|
31
31
|
* - `locale`: The determined locale for this request.
|
|
32
|
-
* @param {{
|
|
32
|
+
* @param {{
|
|
33
|
+
* effectiveRequestUrl?: string | URL | ((request: Request) => string | URL),
|
|
34
|
+
* onRedirect?: (response: Response) => void
|
|
35
|
+
* }} [options] - Options to control middleware behavior. `effectiveRequestUrl` sets the effective request URL used for route matching, URL-based locale detection, redirects, and `getUrlOrigin()`.
|
|
33
36
|
* @returns {Promise<Response>}
|
|
34
37
|
*
|
|
35
38
|
* @example
|
|
@@ -89,7 +92,8 @@
|
|
|
89
92
|
export function paraglideMiddleware<T>(request: Request, resolve: (args: {
|
|
90
93
|
request: Request;
|
|
91
94
|
locale: import("./runtime.js").Locale;
|
|
92
|
-
}) => T | Promise<T>,
|
|
93
|
-
|
|
95
|
+
}) => T | Promise<T>, options?: {
|
|
96
|
+
effectiveRequestUrl?: string | URL | ((request: Request) => string | URL);
|
|
97
|
+
onRedirect?: (response: Response) => void;
|
|
94
98
|
}): Promise<Response>;
|
|
95
99
|
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/compiler/server/middleware.js"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/compiler/server/middleware.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FG;AACH,oCApEa,CAAC,WAEH,OAAO,WACP,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,cAAc,EAAE,MAAM,CAAA;CAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,YAKrF;IACN,mBAAmB,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;IAC1E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAA;CAC1C,GACS,OAAO,CAAC,QAAQ,CAAC,CAuK7B"}
|
|
@@ -30,7 +30,10 @@ import * as runtime from "./runtime.js";
|
|
|
30
30
|
* If your framework handles URL localization itself (e.g., TanStack Router's `rewrite` option), use the original
|
|
31
31
|
* request instead to avoid redirect loops.
|
|
32
32
|
* - `locale`: The determined locale for this request.
|
|
33
|
-
* @param {{
|
|
33
|
+
* @param {{
|
|
34
|
+
* effectiveRequestUrl?: string | URL | ((request: Request) => string | URL),
|
|
35
|
+
* onRedirect?: (response: Response) => void
|
|
36
|
+
* }} [options] - Options to control middleware behavior. `effectiveRequestUrl` sets the effective request URL used for route matching, URL-based locale detection, redirects, and `getUrlOrigin()`.
|
|
34
37
|
* @returns {Promise<Response>}
|
|
35
38
|
*
|
|
36
39
|
* @example
|
|
@@ -87,20 +90,20 @@ import * as runtime from "./runtime.js";
|
|
|
87
90
|
* }
|
|
88
91
|
* ```
|
|
89
92
|
*/
|
|
90
|
-
export async function paraglideMiddleware(request, resolve,
|
|
93
|
+
export async function paraglideMiddleware(request, resolve, options) {
|
|
91
94
|
// %async-local-storage
|
|
92
|
-
|
|
95
|
+
const url = resolveMiddlewareUrl(request, options?.effectiveRequestUrl);
|
|
96
|
+
const origin = url.origin;
|
|
97
|
+
if (runtime.isExcludedByRouteStrategy(url.href)) {
|
|
93
98
|
const locale = runtime.baseLocale;
|
|
94
|
-
const
|
|
95
|
-
const newRequest = cloneRequestWithFallback(request);
|
|
99
|
+
const newRequest = cloneRequestWithFallback(request, url);
|
|
96
100
|
/** @type {Set<string>} */
|
|
97
101
|
const messageCalls = new Set();
|
|
98
102
|
return /** @type {Response} */ (await runtime.serverAsyncLocalStorage?.run({ locale, origin, messageCalls }, () => resolve({ locale, request: newRequest })));
|
|
99
103
|
}
|
|
100
|
-
const strategy = runtime.getStrategyForUrl(
|
|
101
|
-
const decision = await runtime.shouldRedirect({ request });
|
|
104
|
+
const strategy = runtime.getStrategyForUrl(url.href);
|
|
105
|
+
const decision = await runtime.shouldRedirect({ request, effectiveRequestUrl: url });
|
|
102
106
|
const locale = decision.locale;
|
|
103
|
-
const origin = new URL(request.url).origin;
|
|
104
107
|
// if the client makes a request to a URL that doesn't match
|
|
105
108
|
// the localizedUrl, redirect the client to the localized URL
|
|
106
109
|
if (request.headers.get("Sec-Fetch-Dest") === "document" &&
|
|
@@ -119,7 +122,7 @@ export async function paraglideMiddleware(request, resolve, callbacks) {
|
|
|
119
122
|
...headers,
|
|
120
123
|
},
|
|
121
124
|
});
|
|
122
|
-
|
|
125
|
+
options?.onRedirect?.(response);
|
|
123
126
|
return response;
|
|
124
127
|
}
|
|
125
128
|
// If the strategy includes "url", we need to de-localize the URL
|
|
@@ -130,10 +133,10 @@ export async function paraglideMiddleware(request, resolve, callbacks) {
|
|
|
130
133
|
// the server can't render the correct page.
|
|
131
134
|
let newRequest;
|
|
132
135
|
if (strategy.includes("url")) {
|
|
133
|
-
newRequest =
|
|
136
|
+
newRequest = cloneRequestWithFallback(request, runtime.deLocalizeUrl(url));
|
|
134
137
|
}
|
|
135
138
|
else {
|
|
136
|
-
newRequest = cloneRequestWithFallback(request);
|
|
139
|
+
newRequest = cloneRequestWithFallback(request, url);
|
|
137
140
|
}
|
|
138
141
|
// the message functions that have been called in this request
|
|
139
142
|
/** @type {Set<string>} */
|
|
@@ -152,7 +155,9 @@ export async function paraglideMiddleware(request, resolve, callbacks) {
|
|
|
152
155
|
messages.push(`${id}: ${compiledBundles[id]?.[locale]}`);
|
|
153
156
|
}
|
|
154
157
|
// Prevent translated content from terminating the inline script tag.
|
|
155
|
-
const escapedMessages = messages
|
|
158
|
+
const escapedMessages = messages
|
|
159
|
+
.join(",")
|
|
160
|
+
.replace(/<\/(script)/gi, "<\\/$1");
|
|
156
161
|
const script = `<script>globalThis.__paraglide = globalThis.__paraglide ?? {}; globalThis.__paraglide.ssr = { ${escapedMessages} }</script>`;
|
|
157
162
|
// Insert the script before the closing head tag
|
|
158
163
|
const newBody = body.replace("</head>", `${script}</head>`);
|
|
@@ -168,6 +173,20 @@ export async function paraglideMiddleware(request, resolve, callbacks) {
|
|
|
168
173
|
}
|
|
169
174
|
return response;
|
|
170
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* @param {Request} request
|
|
178
|
+
* @param {string | URL | ((request: Request) => string | URL) | undefined} effectiveRequestUrl
|
|
179
|
+
* @returns {URL}
|
|
180
|
+
*/
|
|
181
|
+
function resolveMiddlewareUrl(request, effectiveRequestUrl) {
|
|
182
|
+
if (typeof effectiveRequestUrl === "function") {
|
|
183
|
+
return new URL(effectiveRequestUrl(request), request.url);
|
|
184
|
+
}
|
|
185
|
+
if (typeof effectiveRequestUrl === "string" || effectiveRequestUrl instanceof URL) {
|
|
186
|
+
return new URL(effectiveRequestUrl, request.url);
|
|
187
|
+
}
|
|
188
|
+
return new URL(request.url);
|
|
189
|
+
}
|
|
171
190
|
/**
|
|
172
191
|
* Some metaframeworks (NextJS) require a new Request object.
|
|
173
192
|
* https://github.com/opral/inlang-paraglide-js/issues/411
|
|
@@ -176,17 +195,36 @@ export async function paraglideMiddleware(request, resolve, callbacks) {
|
|
|
176
195
|
* implementations that cannot be cloned with `new Request(request)`.
|
|
177
196
|
* https://github.com/opral/paraglide-js/issues/573
|
|
178
197
|
*
|
|
198
|
+
* Effective request URL overrides behind proxies:
|
|
199
|
+
* https://github.com/opral/paraglide-js/issues/652
|
|
200
|
+
*
|
|
179
201
|
* @param {Request} request
|
|
202
|
+
* @param {string | URL} [url]
|
|
180
203
|
* @returns {Request}
|
|
181
204
|
*/
|
|
182
|
-
function cloneRequestWithFallback(request) {
|
|
205
|
+
function cloneRequestWithFallback(request, url = request.url) {
|
|
206
|
+
const targetUrl = typeof url === "string" ? url : url.href;
|
|
207
|
+
if (targetUrl === request.url) {
|
|
208
|
+
try {
|
|
209
|
+
// Clone first so building a new Request does not consume the original body stream.
|
|
210
|
+
return new Request(request.clone());
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
try {
|
|
214
|
+
return new Request(request);
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return request;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
183
221
|
try {
|
|
184
222
|
// Clone first so building a new Request does not consume the original body stream.
|
|
185
|
-
return new Request(request.clone());
|
|
223
|
+
return new Request(targetUrl, request.clone());
|
|
186
224
|
}
|
|
187
225
|
catch {
|
|
188
226
|
try {
|
|
189
|
-
return new Request(request);
|
|
227
|
+
return new Request(targetUrl, request);
|
|
190
228
|
}
|
|
191
229
|
catch {
|
|
192
230
|
return request;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/compiler/server/middleware.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAExC
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/compiler/server/middleware.js"],"names":[],"mappings":"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"}
|
|
@@ -297,6 +297,72 @@ test("call onRedirect callback when redirecting to new url", async () => {
|
|
|
297
297
|
expect(response.status).toBe(307); // Redirect status code
|
|
298
298
|
expect(response.headers.get("Location")).toBe("https://example.com/fr/some-path");
|
|
299
299
|
});
|
|
300
|
+
test("uses the provided public url for redirects behind a proxy", async () => {
|
|
301
|
+
const runtime = await createParaglide({
|
|
302
|
+
blob: await newProject({
|
|
303
|
+
settings: {
|
|
304
|
+
baseLocale: "en",
|
|
305
|
+
locales: ["en", "fr"],
|
|
306
|
+
},
|
|
307
|
+
}),
|
|
308
|
+
strategy: ["cookie", "url"],
|
|
309
|
+
cookieName: "PARAGLIDE_LOCALE",
|
|
310
|
+
urlPatterns: [
|
|
311
|
+
{
|
|
312
|
+
pattern: "https://example.com/:path(.*)?",
|
|
313
|
+
localized: [
|
|
314
|
+
["en", "https://example.com/en/:path(.*)?"],
|
|
315
|
+
["fr", "https://example.com/fr/:path(.*)?"],
|
|
316
|
+
],
|
|
317
|
+
},
|
|
318
|
+
],
|
|
319
|
+
});
|
|
320
|
+
const request = new Request("http://internal.example.com/en/some-path", {
|
|
321
|
+
headers: {
|
|
322
|
+
cookie: `PARAGLIDE_LOCALE=fr`,
|
|
323
|
+
"Sec-Fetch-Dest": "document",
|
|
324
|
+
},
|
|
325
|
+
});
|
|
326
|
+
const response = await runtime.paraglideMiddleware(request, () => {
|
|
327
|
+
throw new Error("Should not reach here");
|
|
328
|
+
}, {
|
|
329
|
+
effectiveRequestUrl: "https://example.com/en/some-path",
|
|
330
|
+
});
|
|
331
|
+
expect(response.status).toBe(307);
|
|
332
|
+
expect(response.headers.get("Location")).toBe("https://example.com/fr/some-path");
|
|
333
|
+
});
|
|
334
|
+
test("uses the provided public url for callback request and origin", async () => {
|
|
335
|
+
const runtime = await createParaglide({
|
|
336
|
+
blob: await newProject({
|
|
337
|
+
settings: {
|
|
338
|
+
baseLocale: "en",
|
|
339
|
+
locales: ["en", "fr"],
|
|
340
|
+
},
|
|
341
|
+
}),
|
|
342
|
+
strategy: ["url", "baseLocale"],
|
|
343
|
+
urlPatterns: [
|
|
344
|
+
{
|
|
345
|
+
pattern: "https://example.com/:path(.*)?",
|
|
346
|
+
localized: [
|
|
347
|
+
["en", "https://example.com/en/:path(.*)?"],
|
|
348
|
+
["fr", "https://example.com/fr/:path(.*)?"],
|
|
349
|
+
],
|
|
350
|
+
},
|
|
351
|
+
],
|
|
352
|
+
});
|
|
353
|
+
const request = new Request("http://internal.example.com/fr/some-path", {
|
|
354
|
+
headers: {
|
|
355
|
+
"Sec-Fetch-Dest": "document",
|
|
356
|
+
},
|
|
357
|
+
});
|
|
358
|
+
const response = await runtime.paraglideMiddleware(request, ({ request }) => {
|
|
359
|
+
expect(runtime.getUrlOrigin()).toBe("https://example.com");
|
|
360
|
+
return new Response(request.url);
|
|
361
|
+
}, {
|
|
362
|
+
effectiveRequestUrl: "https://example.com/fr/some-path",
|
|
363
|
+
});
|
|
364
|
+
expect(await response.text()).toBe("https://example.com/some-path");
|
|
365
|
+
});
|
|
300
366
|
test("sets Vary: Accept-Language header when preferredLanguage strategy is used and redirect occurs", async () => {
|
|
301
367
|
const runtime = await createParaglide({
|
|
302
368
|
blob: await newProject({
|
|
@@ -883,6 +949,60 @@ test("falls back to original request when cloning fails (e.g., TanStack Start cu
|
|
|
883
949
|
expect(middlewareResolveWasCalled).toBe(true);
|
|
884
950
|
expect(await response.text()).toBe("Success");
|
|
885
951
|
});
|
|
952
|
+
// https://github.com/opral/paraglide-js/issues/652
|
|
953
|
+
test("falls back to original request when cloning a rewritten request fails", async () => {
|
|
954
|
+
const runtime = await createParaglide({
|
|
955
|
+
blob: await newProject({
|
|
956
|
+
settings: {
|
|
957
|
+
baseLocale: "en",
|
|
958
|
+
locales: ["en", "de"],
|
|
959
|
+
},
|
|
960
|
+
}),
|
|
961
|
+
strategy: ["globalVariable", "baseLocale"],
|
|
962
|
+
});
|
|
963
|
+
const customRequest = {
|
|
964
|
+
url: "http://internal.example.com/page",
|
|
965
|
+
headers: new Headers({ "Sec-Fetch-Dest": "document" }),
|
|
966
|
+
method: "GET",
|
|
967
|
+
};
|
|
968
|
+
const NativeRequest = globalThis.Request;
|
|
969
|
+
Object.defineProperty(globalThis, "Request", {
|
|
970
|
+
value: class extends NativeRequest {
|
|
971
|
+
constructor(input, init) {
|
|
972
|
+
if ((typeof input === "string" &&
|
|
973
|
+
input === "https://example.com/page") ||
|
|
974
|
+
(input instanceof URL && input.href === "https://example.com/page")) {
|
|
975
|
+
throw new TypeError("Simulated rewritten request clone failure");
|
|
976
|
+
}
|
|
977
|
+
super(input, init);
|
|
978
|
+
}
|
|
979
|
+
},
|
|
980
|
+
configurable: true,
|
|
981
|
+
writable: true,
|
|
982
|
+
});
|
|
983
|
+
try {
|
|
984
|
+
let middlewareResolveWasCalled = false;
|
|
985
|
+
const response = await runtime.paraglideMiddleware(customRequest, (args) => {
|
|
986
|
+
middlewareResolveWasCalled = true;
|
|
987
|
+
expect(args.locale).toBe("en");
|
|
988
|
+
expect(runtime.getUrlOrigin()).toBe("https://example.com");
|
|
989
|
+
expect(args.request).toBe(customRequest);
|
|
990
|
+
expect(args.request.url).toBe("http://internal.example.com/page");
|
|
991
|
+
return new Response("Success");
|
|
992
|
+
}, {
|
|
993
|
+
effectiveRequestUrl: "https://example.com/page",
|
|
994
|
+
});
|
|
995
|
+
expect(middlewareResolveWasCalled).toBe(true);
|
|
996
|
+
expect(await response.text()).toBe("Success");
|
|
997
|
+
}
|
|
998
|
+
finally {
|
|
999
|
+
Object.defineProperty(globalThis, "Request", {
|
|
1000
|
+
value: NativeRequest,
|
|
1001
|
+
configurable: true,
|
|
1002
|
+
writable: true,
|
|
1003
|
+
});
|
|
1004
|
+
}
|
|
1005
|
+
});
|
|
886
1006
|
test("middleware works with multiple async custom strategies", async () => {
|
|
887
1007
|
const runtime = await createParaglide({
|
|
888
1008
|
blob: await newProject({
|