fumadocs-core 16.0.1 → 16.0.3
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/i18n/middleware.d.ts +2 -2
- package/dist/i18n/middleware.js +20 -26
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NextProxy } from 'next/dist/server/web/types';
|
|
2
2
|
import { I18nConfig } from './index.js';
|
|
3
3
|
|
|
4
4
|
interface MiddlewareOptions extends I18nConfig {
|
|
@@ -7,6 +7,6 @@ interface MiddlewareOptions extends I18nConfig {
|
|
|
7
7
|
*/
|
|
8
8
|
format?: (locale: string, path: string) => string;
|
|
9
9
|
}
|
|
10
|
-
declare function createI18nMiddleware({ languages, defaultLanguage, format, hideLocale, }: MiddlewareOptions):
|
|
10
|
+
declare function createI18nMiddleware({ languages, defaultLanguage, format, hideLocale, }: MiddlewareOptions): NextProxy;
|
|
11
11
|
|
|
12
12
|
export { createI18nMiddleware };
|
package/dist/i18n/middleware.js
CHANGED
|
@@ -20,50 +20,44 @@ function createI18nMiddleware({
|
|
|
20
20
|
format = defaultFormat,
|
|
21
21
|
hideLocale = "never"
|
|
22
22
|
}) {
|
|
23
|
-
function
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
request.url
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
return new URL(
|
|
31
|
-
format(locale, pathname.startsWith("/") ? pathname.slice(1) : pathname),
|
|
32
|
-
request.url
|
|
33
|
-
);
|
|
23
|
+
function getLocaleUrl(request, locale) {
|
|
24
|
+
const next = new URL(request.url);
|
|
25
|
+
next.pathname = format(locale, forceSlashPrefix(request.nextUrl.pathname));
|
|
26
|
+
return next;
|
|
34
27
|
}
|
|
35
28
|
return (request) => {
|
|
36
|
-
const
|
|
29
|
+
const url = request.nextUrl;
|
|
37
30
|
const pathLocale = languages.find(
|
|
38
|
-
(locale) =>
|
|
31
|
+
(locale) => url.pathname.startsWith(`/${locale}/`) || url.pathname === `/${locale}`
|
|
39
32
|
);
|
|
40
33
|
if (!pathLocale) {
|
|
41
34
|
if (hideLocale === "default-locale") {
|
|
42
|
-
return NextResponse.rewrite(
|
|
43
|
-
getUrl(request, inputPath, defaultLanguage)
|
|
44
|
-
);
|
|
35
|
+
return NextResponse.rewrite(getLocaleUrl(request, defaultLanguage));
|
|
45
36
|
}
|
|
46
37
|
const preferred = getLocale(request, languages, defaultLanguage);
|
|
47
38
|
if (hideLocale === "always") {
|
|
48
39
|
const locale = request.cookies.get(COOKIE)?.value ?? preferred;
|
|
49
|
-
return NextResponse.rewrite(
|
|
40
|
+
return NextResponse.rewrite(getLocaleUrl(request, locale));
|
|
50
41
|
}
|
|
51
|
-
return NextResponse.redirect(
|
|
42
|
+
return NextResponse.redirect(getLocaleUrl(request, preferred));
|
|
52
43
|
}
|
|
53
|
-
if (hideLocale === "always") {
|
|
54
|
-
const
|
|
55
|
-
|
|
44
|
+
if (hideLocale === "always" || hideLocale === "default-locale" && pathLocale === defaultLanguage) {
|
|
45
|
+
const res = NextResponse.redirect(
|
|
46
|
+
new URL(
|
|
47
|
+
forceSlashPrefix(url.pathname.slice(`/${pathLocale}`.length)),
|
|
48
|
+
request.url
|
|
49
|
+
)
|
|
50
|
+
);
|
|
56
51
|
res.cookies.set(COOKIE, pathLocale);
|
|
57
52
|
return res;
|
|
58
53
|
}
|
|
59
|
-
if (hideLocale === "default-locale" && pathLocale === defaultLanguage) {
|
|
60
|
-
return NextResponse.redirect(
|
|
61
|
-
getUrl(request, inputPath.slice(`/${pathLocale}`.length))
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
54
|
return NextResponse.next();
|
|
65
55
|
};
|
|
66
56
|
}
|
|
57
|
+
function forceSlashPrefix(v) {
|
|
58
|
+
if (v.startsWith("/")) return v;
|
|
59
|
+
return "/" + v;
|
|
60
|
+
}
|
|
67
61
|
export {
|
|
68
62
|
createI18nMiddleware
|
|
69
63
|
};
|