intor 1.0.39 → 2.0.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/config/index.cjs +44 -79
- package/dist/config/index.d.cts +69 -36
- package/dist/config/index.d.ts +69 -36
- package/dist/config/index.js +42 -80
- package/dist/index.cjs +482 -540
- package/dist/index.d.cts +163 -139
- package/dist/index.d.ts +163 -139
- package/dist/index.js +475 -537
- package/dist/next/index.cjs +399 -359
- package/dist/next/index.d.cts +82 -113
- package/dist/next/index.d.ts +82 -113
- package/dist/next/index.js +396 -351
- package/dist/next/middleware/index.cjs +79 -93
- package/dist/next/middleware/index.d.cts +59 -28
- package/dist/next/middleware/index.d.ts +59 -28
- package/dist/next/middleware/index.js +79 -93
- package/dist/next/server/index.cjs +886 -0
- package/dist/next/server/index.d.cts +149 -0
- package/dist/next/server/index.d.ts +149 -0
- package/dist/next/server/index.js +875 -0
- package/package.json +9 -12
- package/exports/next/provider/intor-provider.tsx +0 -25
- package/exports/next/provider/translate-handlers-provider.tsx +0 -19
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { NextResponse } from 'next/server';
|
|
2
2
|
import { headers } from 'next/headers';
|
|
3
3
|
|
|
4
|
-
// src/adapters/next
|
|
4
|
+
// src/adapters/next/middleware/utils/create-response.ts
|
|
5
5
|
|
|
6
|
-
// src/adapters/next
|
|
6
|
+
// src/adapters/next/middleware/utils/set-locale-cookie-edge.ts
|
|
7
7
|
function setLocaleCookieEdge({
|
|
8
8
|
request,
|
|
9
9
|
response,
|
|
@@ -12,13 +12,9 @@ function setLocaleCookieEdge({
|
|
|
12
12
|
override = false
|
|
13
13
|
// Default to not override existed cookie
|
|
14
14
|
}) {
|
|
15
|
-
if (cookie.disabled || !cookie.autoSetCookie)
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
15
|
+
if (cookie.disabled || !cookie.autoSetCookie) return;
|
|
18
16
|
const isCookieExists = request.cookies.has(cookie.name);
|
|
19
|
-
if (isCookieExists && !override)
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
17
|
+
if (isCookieExists && !override) return;
|
|
22
18
|
response.cookies.set(cookie.name, locale, {
|
|
23
19
|
maxAge: cookie.maxAge,
|
|
24
20
|
path: cookie.path,
|
|
@@ -29,49 +25,98 @@ function setLocaleCookieEdge({
|
|
|
29
25
|
});
|
|
30
26
|
}
|
|
31
27
|
|
|
32
|
-
// src/adapters/next
|
|
33
|
-
var
|
|
28
|
+
// src/adapters/next/shared/constants/pathname-header-name.ts
|
|
29
|
+
var PATHNAME_HEADER_NAME = "x-intor-pathname";
|
|
34
30
|
|
|
35
|
-
// src/adapters/next
|
|
31
|
+
// src/adapters/next/middleware/utils/set-pathname-header.ts
|
|
36
32
|
var setPathnameHeader = ({
|
|
37
33
|
request,
|
|
38
34
|
response,
|
|
39
|
-
key =
|
|
35
|
+
key = PATHNAME_HEADER_NAME
|
|
40
36
|
}) => {
|
|
41
37
|
const pathname = request.nextUrl.pathname;
|
|
42
38
|
response.headers.set(key, pathname);
|
|
43
39
|
return response;
|
|
44
40
|
};
|
|
45
41
|
|
|
46
|
-
// src/
|
|
42
|
+
// src/shared/constants/prefix-placeholder.ts
|
|
43
|
+
var PREFIX_PLACEHOLDER = "{locale}";
|
|
44
|
+
|
|
45
|
+
// src/adapters/next/shared/utils/locale-prefix-pathname.ts
|
|
47
46
|
var localePrefixPathname = ({
|
|
48
47
|
config,
|
|
49
48
|
pathname: standardizedPathname,
|
|
50
49
|
locale
|
|
51
50
|
}) => {
|
|
52
|
-
const { routing
|
|
51
|
+
const { routing } = config;
|
|
53
52
|
const { prefix } = routing;
|
|
54
53
|
if (prefix !== "none" && !locale) {
|
|
55
54
|
throw new Error('No locale when using prefix "all", "except-default"');
|
|
56
55
|
}
|
|
57
56
|
if (prefix === "all") {
|
|
58
|
-
return standardizedPathname.replace(
|
|
57
|
+
return standardizedPathname.replace(PREFIX_PLACEHOLDER, locale);
|
|
59
58
|
}
|
|
60
59
|
if (prefix === "except-default") {
|
|
61
60
|
if (locale === config.defaultLocale) {
|
|
62
|
-
return standardizedPathname.replace(`/${
|
|
61
|
+
return standardizedPathname.replace(`/${PREFIX_PLACEHOLDER}`, "");
|
|
63
62
|
} else {
|
|
64
|
-
return standardizedPathname.replace(
|
|
63
|
+
return standardizedPathname.replace(PREFIX_PLACEHOLDER, locale);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return standardizedPathname.replace(`/${PREFIX_PLACEHOLDER}`, "");
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
// src/shared/utils/locale/normalize-locale.ts
|
|
70
|
+
var normalizeLocale = (locale = "", supportedLocales = []) => {
|
|
71
|
+
if (!locale || supportedLocales.length === 0) return;
|
|
72
|
+
const toCanonical = (input) => {
|
|
73
|
+
try {
|
|
74
|
+
return Intl.getCanonicalLocales(input)[0]?.toLowerCase();
|
|
75
|
+
} catch {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const canonicalLocale = toCanonical(locale);
|
|
80
|
+
if (!canonicalLocale) return;
|
|
81
|
+
const supportedCanonicalMap = /* @__PURE__ */ new Map();
|
|
82
|
+
for (const l of supportedLocales) {
|
|
83
|
+
const normalized = toCanonical(l);
|
|
84
|
+
if (normalized) {
|
|
85
|
+
supportedCanonicalMap.set(normalized, l);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (supportedCanonicalMap.has(canonicalLocale)) {
|
|
89
|
+
return supportedCanonicalMap.get(canonicalLocale);
|
|
90
|
+
}
|
|
91
|
+
const baseLang = canonicalLocale.split("-")[0];
|
|
92
|
+
for (const [key, original] of supportedCanonicalMap) {
|
|
93
|
+
const supportedBase = key.split("-")[0];
|
|
94
|
+
if (supportedBase === baseLang) {
|
|
95
|
+
return original;
|
|
65
96
|
}
|
|
66
97
|
}
|
|
67
|
-
return
|
|
98
|
+
return;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
// src/shared/utils/locale/resolve-preferred-locale.ts
|
|
102
|
+
var resolvePreferredLocale = (acceptLanguageHeader, supportedLocales) => {
|
|
103
|
+
if (!acceptLanguageHeader || !supportedLocales || supportedLocales.length === 0) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const supportedLocalesSet = new Set(supportedLocales);
|
|
107
|
+
const preferred = acceptLanguageHeader.split(",").map((part) => {
|
|
108
|
+
const [lang, qValue] = part.split(";");
|
|
109
|
+
const q = qValue ? parseFloat(qValue.split("=")[1]) : 1;
|
|
110
|
+
if (isNaN(q)) {
|
|
111
|
+
return { lang: lang.trim(), q: 0 };
|
|
112
|
+
}
|
|
113
|
+
return { lang: lang.trim(), q };
|
|
114
|
+
}).sort((a, b) => b.q - a.q).find(({ lang }) => supportedLocalesSet.has(lang))?.lang;
|
|
115
|
+
return preferred;
|
|
68
116
|
};
|
|
69
117
|
|
|
70
118
|
// src/shared/utils/pathname/normalize-pathname.ts
|
|
71
119
|
var normalizePathname = (rawPathname, options = {}) => {
|
|
72
|
-
if (typeof rawPathname !== "string") {
|
|
73
|
-
throw new TypeError("Expected rawPathname to be a string");
|
|
74
|
-
}
|
|
75
120
|
const length = rawPathname.length;
|
|
76
121
|
let start = 0;
|
|
77
122
|
let end = length - 1;
|
|
@@ -142,18 +187,18 @@ var standardizePathname = ({
|
|
|
142
187
|
config,
|
|
143
188
|
pathname
|
|
144
189
|
}) => {
|
|
145
|
-
const { routing
|
|
190
|
+
const { routing } = config;
|
|
146
191
|
const { basePath } = routing;
|
|
147
192
|
const parts = [
|
|
148
193
|
normalizePathname(basePath),
|
|
149
|
-
|
|
194
|
+
PREFIX_PLACEHOLDER,
|
|
150
195
|
normalizePathname(pathname)
|
|
151
196
|
];
|
|
152
197
|
const standardizedPathname = parts.join("/").replace(/\/{2,}/g, "/");
|
|
153
198
|
return normalizePathname(standardizedPathname);
|
|
154
199
|
};
|
|
155
200
|
|
|
156
|
-
// src/adapters/next
|
|
201
|
+
// src/adapters/next/shared/utils/localize-pathname.ts
|
|
157
202
|
var localizePathname = ({
|
|
158
203
|
config,
|
|
159
204
|
pathname: rawPathname,
|
|
@@ -179,7 +224,7 @@ var localizePathname = ({
|
|
|
179
224
|
};
|
|
180
225
|
};
|
|
181
226
|
|
|
182
|
-
// src/adapters/next
|
|
227
|
+
// src/adapters/next/middleware/utils/create-response.ts
|
|
183
228
|
var createResponse = ({
|
|
184
229
|
request,
|
|
185
230
|
config,
|
|
@@ -197,18 +242,10 @@ var createResponse = ({
|
|
|
197
242
|
});
|
|
198
243
|
url.pathname = localePrefixedPathname;
|
|
199
244
|
let response;
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
}
|
|
205
|
-
case "redirect": {
|
|
206
|
-
response = NextResponse.redirect(url);
|
|
207
|
-
break;
|
|
208
|
-
}
|
|
209
|
-
default: {
|
|
210
|
-
throw new Error(`Unsupported responseType: ${responseType}`);
|
|
211
|
-
}
|
|
245
|
+
if (responseType === "redirect") {
|
|
246
|
+
response = NextResponse.redirect(url);
|
|
247
|
+
} else {
|
|
248
|
+
response = NextResponse.next();
|
|
212
249
|
}
|
|
213
250
|
if (locale) {
|
|
214
251
|
setLocaleCookieEdge({
|
|
@@ -222,57 +259,6 @@ var createResponse = ({
|
|
|
222
259
|
const finalResponse = setPathnameHeader({ request, response });
|
|
223
260
|
return finalResponse;
|
|
224
261
|
};
|
|
225
|
-
|
|
226
|
-
// src/shared/utils/locale/normalize-locale.ts
|
|
227
|
-
var normalizeLocale = (locale = "", supportedLocales = []) => {
|
|
228
|
-
if (!locale || supportedLocales.length === 0) return void 0;
|
|
229
|
-
const toCanonical = (input) => {
|
|
230
|
-
try {
|
|
231
|
-
return Intl.getCanonicalLocales(input)[0]?.toLowerCase();
|
|
232
|
-
} catch {
|
|
233
|
-
return void 0;
|
|
234
|
-
}
|
|
235
|
-
};
|
|
236
|
-
const canonicalLocale = toCanonical(locale);
|
|
237
|
-
if (!canonicalLocale) return void 0;
|
|
238
|
-
const supportedCanonicalMap = /* @__PURE__ */ new Map();
|
|
239
|
-
for (const l of supportedLocales) {
|
|
240
|
-
const normalized = toCanonical(l);
|
|
241
|
-
if (normalized) {
|
|
242
|
-
supportedCanonicalMap.set(normalized, l);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
if (supportedCanonicalMap.has(canonicalLocale)) {
|
|
246
|
-
return supportedCanonicalMap.get(canonicalLocale);
|
|
247
|
-
}
|
|
248
|
-
const baseLang = canonicalLocale.split("-")[0];
|
|
249
|
-
for (const [key, original] of supportedCanonicalMap) {
|
|
250
|
-
const supportedBase = key.split("-")[0];
|
|
251
|
-
if (supportedBase === baseLang) {
|
|
252
|
-
return original;
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
return void 0;
|
|
256
|
-
};
|
|
257
|
-
|
|
258
|
-
// src/shared/utils/locale/resolve-preferred-locale.ts
|
|
259
|
-
var resolvePreferredLocale = (acceptLanguageHeader, supportedLocales) => {
|
|
260
|
-
if (!acceptLanguageHeader || !supportedLocales || supportedLocales.length === 0) {
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
const supportedLocalesSet = new Set(supportedLocales);
|
|
264
|
-
const preferred = acceptLanguageHeader.split(",").map((part) => {
|
|
265
|
-
const [lang, qValue] = part.split(";");
|
|
266
|
-
const q = qValue ? parseFloat(qValue.split("=")[1]) : 1;
|
|
267
|
-
if (isNaN(q)) {
|
|
268
|
-
return { lang: lang.trim(), q: 0 };
|
|
269
|
-
}
|
|
270
|
-
return { lang: lang.trim(), q };
|
|
271
|
-
}).sort((a, b) => b.q - a.q).find(({ lang }) => supportedLocalesSet.has(lang))?.lang;
|
|
272
|
-
return preferred;
|
|
273
|
-
};
|
|
274
|
-
|
|
275
|
-
// src/adapters/next-client/routing/utils/determine-initial-locale.ts
|
|
276
262
|
var determineInitialLocale = async (config) => {
|
|
277
263
|
const { defaultLocale, supportedLocales, routing } = config;
|
|
278
264
|
let initialLocale = defaultLocale;
|
|
@@ -287,7 +273,7 @@ var determineInitialLocale = async (config) => {
|
|
|
287
273
|
return initialLocale;
|
|
288
274
|
};
|
|
289
275
|
|
|
290
|
-
// src/adapters/next
|
|
276
|
+
// src/adapters/next/middleware/handle-prefix/handle-prefix-all.ts
|
|
291
277
|
var handlePrefixAll = async ({
|
|
292
278
|
request,
|
|
293
279
|
config
|
|
@@ -328,7 +314,7 @@ var handlePrefixAll = async ({
|
|
|
328
314
|
});
|
|
329
315
|
};
|
|
330
316
|
|
|
331
|
-
// src/adapters/next
|
|
317
|
+
// src/adapters/next/middleware/handle-prefix/handle-prefix-except-default.ts
|
|
332
318
|
var handlePrefixExceptDefault = async ({
|
|
333
319
|
request,
|
|
334
320
|
config
|
|
@@ -381,7 +367,7 @@ var handlePrefixExceptDefault = async ({
|
|
|
381
367
|
});
|
|
382
368
|
};
|
|
383
369
|
|
|
384
|
-
// src/adapters/next
|
|
370
|
+
// src/adapters/next/middleware/handle-prefix/handle-prefix-none.ts
|
|
385
371
|
var handlePrefixNone = async ({
|
|
386
372
|
request,
|
|
387
373
|
config
|
|
@@ -393,7 +379,7 @@ var handlePrefixNone = async ({
|
|
|
393
379
|
return createResponse({ request, config, locale });
|
|
394
380
|
};
|
|
395
381
|
|
|
396
|
-
// src/adapters/next
|
|
382
|
+
// src/adapters/next/middleware/intor-middleware.ts
|
|
397
383
|
async function intorMiddleware({
|
|
398
384
|
request,
|
|
399
385
|
config
|
|
@@ -408,4 +394,4 @@ async function intorMiddleware({
|
|
|
408
394
|
return await handlePrefixAll({ request, config });
|
|
409
395
|
}
|
|
410
396
|
|
|
411
|
-
export {
|
|
397
|
+
export { PATHNAME_HEADER_NAME, intorMiddleware };
|