@bleedingdev/modern-js-plugin-i18n 3.2.0-ultramodern.11 → 3.2.0-ultramodern.110
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/cjs/cli/index.js +32 -5
- package/dist/cjs/runtime/I18nLink.js +21 -22
- package/dist/cjs/runtime/context.js +41 -10
- package/dist/cjs/runtime/hooks.js +17 -10
- package/dist/cjs/runtime/i18n/backend/config.js +9 -5
- package/dist/cjs/runtime/i18n/backend/defaults.js +15 -10
- package/dist/cjs/runtime/i18n/backend/defaults.node.js +16 -11
- package/dist/cjs/runtime/i18n/backend/index.js +9 -5
- package/dist/cjs/runtime/i18n/backend/middleware.common.js +9 -5
- package/dist/cjs/runtime/i18n/backend/middleware.js +9 -5
- package/dist/cjs/runtime/i18n/backend/middleware.node.js +13 -9
- package/dist/cjs/runtime/i18n/backend/sdk-backend.js +9 -5
- package/dist/cjs/runtime/i18n/backend/sdk-event.js +16 -11
- package/dist/cjs/runtime/i18n/detection/config.js +9 -5
- package/dist/cjs/runtime/i18n/detection/index.js +9 -5
- package/dist/cjs/runtime/i18n/detection/middleware.js +9 -5
- package/dist/cjs/runtime/i18n/detection/middleware.node.js +9 -5
- package/dist/cjs/runtime/i18n/index.js +9 -5
- package/dist/cjs/runtime/i18n/instance.js +17 -37
- package/dist/cjs/runtime/i18n/react-i18next.js +53 -0
- package/dist/cjs/runtime/i18n/utils.js +9 -17
- package/dist/cjs/runtime/index.js +27 -15
- package/dist/cjs/runtime/routerAdapter.js +167 -0
- package/dist/cjs/runtime/utils.js +72 -99
- package/dist/cjs/server/index.js +69 -13
- package/dist/cjs/shared/deepMerge.js +12 -8
- package/dist/cjs/shared/detection.js +9 -5
- package/dist/cjs/shared/localisedUrls.js +241 -0
- package/dist/cjs/shared/utils.js +15 -11
- package/dist/esm/cli/index.mjs +23 -0
- package/dist/esm/runtime/I18nLink.mjs +12 -17
- package/dist/esm/runtime/context.mjs +34 -7
- package/dist/esm/runtime/hooks.mjs +9 -6
- package/dist/esm/runtime/i18n/backend/defaults.mjs +1 -1
- package/dist/esm/runtime/i18n/backend/defaults.node.mjs +2 -2
- package/dist/esm/runtime/i18n/backend/middleware.node.mjs +3 -3
- package/dist/esm/runtime/i18n/instance.mjs +1 -19
- package/dist/esm/runtime/i18n/react-i18next.mjs +15 -0
- package/dist/esm/runtime/i18n/utils.mjs +0 -12
- package/dist/esm/runtime/index.mjs +19 -11
- package/dist/esm/runtime/routerAdapter.mjs +129 -0
- package/dist/esm/runtime/utils.mjs +11 -30
- package/dist/esm/server/index.mjs +53 -7
- package/dist/esm/shared/localisedUrls.mjs +191 -0
- package/dist/esm-node/cli/index.mjs +23 -0
- package/dist/esm-node/runtime/I18nLink.mjs +12 -17
- package/dist/esm-node/runtime/context.mjs +34 -7
- package/dist/esm-node/runtime/hooks.mjs +9 -6
- package/dist/esm-node/runtime/i18n/backend/defaults.mjs +1 -1
- package/dist/esm-node/runtime/i18n/backend/defaults.node.mjs +2 -2
- package/dist/esm-node/runtime/i18n/backend/middleware.node.mjs +3 -3
- package/dist/esm-node/runtime/i18n/instance.mjs +1 -19
- package/dist/esm-node/runtime/i18n/react-i18next.mjs +16 -0
- package/dist/esm-node/runtime/i18n/utils.mjs +0 -12
- package/dist/esm-node/runtime/index.mjs +19 -11
- package/dist/esm-node/runtime/routerAdapter.mjs +130 -0
- package/dist/esm-node/runtime/utils.mjs +11 -30
- package/dist/esm-node/server/index.mjs +53 -7
- package/dist/esm-node/shared/localisedUrls.mjs +192 -0
- package/dist/types/cli/index.d.ts +1 -0
- package/dist/types/runtime/I18nLink.d.ts +15 -0
- package/dist/types/runtime/context.d.ts +3 -0
- package/dist/types/runtime/hooks.d.ts +4 -2
- package/dist/types/runtime/i18n/backend/middleware.node.d.ts +1 -1
- package/dist/types/runtime/i18n/instance.d.ts +4 -6
- package/dist/types/runtime/i18n/react-i18next.d.ts +7 -0
- package/dist/types/runtime/index.d.ts +1 -0
- package/dist/types/runtime/routerAdapter.d.ts +26 -0
- package/dist/types/runtime/types.d.ts +1 -1
- package/dist/types/runtime/utils.d.ts +2 -7
- package/dist/types/server/index.d.ts +6 -0
- package/dist/types/shared/localisedUrls.d.ts +13 -0
- package/dist/types/shared/type.d.ts +12 -0
- package/package.json +23 -27
- package/rstest.config.mts +39 -0
- package/src/cli/index.ts +44 -1
- package/src/runtime/I18nLink.tsx +13 -17
- package/src/runtime/context.tsx +45 -7
- package/src/runtime/hooks.ts +13 -4
- package/src/runtime/i18n/backend/defaults.node.ts +2 -2
- package/src/runtime/i18n/backend/defaults.ts +3 -1
- package/src/runtime/i18n/backend/middleware.node.ts +1 -1
- package/src/runtime/i18n/instance.ts +3 -30
- package/src/runtime/i18n/react-i18next.ts +25 -0
- package/src/runtime/i18n/utils.ts +4 -26
- package/src/runtime/index.tsx +23 -10
- package/src/runtime/routerAdapter.tsx +333 -0
- package/src/runtime/types.ts +1 -1
- package/src/runtime/utils.ts +22 -34
- package/src/server/index.ts +117 -10
- package/src/shared/localisedUrls.ts +393 -0
- package/src/shared/type.ts +12 -0
- package/tests/i18nUtils.test.ts +52 -0
- package/tests/localisedUrls.test.ts +312 -0
- package/tests/routerAdapter.test.tsx +452 -0
- package/dist/esm/rslib-runtime.mjs +0 -18
- package/dist/esm-node/rslib-runtime.mjs +0 -19
|
@@ -1,25 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
"@modern-js/runtime/router" (module) {
|
|
4
|
-
module.exports = require("@modern-js/runtime/router");
|
|
5
|
-
}
|
|
6
|
-
};
|
|
7
|
-
var __webpack_module_cache__ = {};
|
|
8
|
-
function __webpack_require__(moduleId) {
|
|
9
|
-
var cachedModule = __webpack_module_cache__[moduleId];
|
|
10
|
-
if (void 0 !== cachedModule) return cachedModule.exports;
|
|
11
|
-
var module = __webpack_module_cache__[moduleId] = {
|
|
12
|
-
exports: {}
|
|
13
|
-
};
|
|
14
|
-
__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
15
|
-
return module.exports;
|
|
16
|
-
}
|
|
2
|
+
var __webpack_require__ = {};
|
|
17
3
|
(()=>{
|
|
18
|
-
__webpack_require__.d = (exports1,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
4
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
5
|
+
var define = (defs, kind)=>{
|
|
6
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
[kind]: defs[key]
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
define(getters, "get");
|
|
12
|
+
define(values, "value");
|
|
23
13
|
};
|
|
24
14
|
})();
|
|
25
15
|
(()=>{
|
|
@@ -36,100 +26,83 @@ function __webpack_require__(moduleId) {
|
|
|
36
26
|
};
|
|
37
27
|
})();
|
|
38
28
|
var __webpack_exports__ = {};
|
|
39
|
-
(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const segmentsToCheck = !entryPath && segments.length > 1 && segments[0] && !languages.includes(segments[0]) ? segments.slice(1) : segments;
|
|
81
|
-
const firstSegment = segmentsToCheck[0];
|
|
82
|
-
if (firstSegment && languages.includes(firstSegment)) return {
|
|
83
|
-
detected: true,
|
|
84
|
-
language: firstSegment
|
|
85
|
-
};
|
|
86
|
-
return {
|
|
87
|
-
detected: false
|
|
88
|
-
};
|
|
29
|
+
__webpack_require__.r(__webpack_exports__);
|
|
30
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
buildLocalizedUrl: ()=>buildLocalizedUrl,
|
|
32
|
+
detectLanguageFromPath: ()=>detectLanguageFromPath,
|
|
33
|
+
getEntryPath: ()=>getEntryPath,
|
|
34
|
+
getLanguageFromPath: ()=>getLanguageFromPath,
|
|
35
|
+
getPathname: ()=>getPathname,
|
|
36
|
+
shouldIgnoreRedirect: ()=>shouldIgnoreRedirect
|
|
37
|
+
});
|
|
38
|
+
const runtime_namespaceObject = require("@modern-js/runtime");
|
|
39
|
+
const context_namespaceObject = require("@modern-js/runtime/context");
|
|
40
|
+
const localisedUrls_js_namespaceObject = require("../shared/localisedUrls.js");
|
|
41
|
+
const getPathname = (context)=>{
|
|
42
|
+
if ((0, runtime_namespaceObject.isBrowser)()) return window.location.pathname;
|
|
43
|
+
return context.ssrContext?.request?.pathname || '/';
|
|
44
|
+
};
|
|
45
|
+
const getEntryPath = ()=>{
|
|
46
|
+
const basename = (0, context_namespaceObject.getGlobalBasename)();
|
|
47
|
+
if (basename) return '/' === basename ? '' : basename;
|
|
48
|
+
return '';
|
|
49
|
+
};
|
|
50
|
+
const getLanguageFromPath = (pathname, languages, fallbackLanguage)=>{
|
|
51
|
+
const segments = pathname.split('/').filter(Boolean);
|
|
52
|
+
const firstSegment = segments[0];
|
|
53
|
+
if (languages.includes(firstSegment)) return firstSegment;
|
|
54
|
+
return fallbackLanguage;
|
|
55
|
+
};
|
|
56
|
+
const buildLocalizedUrl = (pathname, language, languages, localisedUrls)=>{
|
|
57
|
+
const segments = pathname.split('/').filter(Boolean);
|
|
58
|
+
const localisedUrlsConfig = (0, localisedUrls_js_namespaceObject.resolveLocalisedUrlsConfig)(localisedUrls);
|
|
59
|
+
const pathWithoutLanguage = segments.length > 0 && languages.includes(segments[0]) ? `/${segments.slice(1).join('/')}` : pathname;
|
|
60
|
+
const resolvedPath = localisedUrlsConfig.enabled ? (0, localisedUrls_js_namespaceObject.resolveLocalisedPath)(pathWithoutLanguage, language, languages, localisedUrlsConfig.map) : pathWithoutLanguage;
|
|
61
|
+
const resolvedSegments = resolvedPath.split('/').filter(Boolean);
|
|
62
|
+
return `/${[
|
|
63
|
+
language,
|
|
64
|
+
...resolvedSegments
|
|
65
|
+
].join('/')}`;
|
|
66
|
+
};
|
|
67
|
+
const detectLanguageFromPath = (pathname, languages, localePathRedirect)=>{
|
|
68
|
+
if (!localePathRedirect) return {
|
|
69
|
+
detected: false
|
|
89
70
|
};
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
71
|
+
const entryPath = getEntryPath();
|
|
72
|
+
const relativePath = pathname.replace(entryPath, '');
|
|
73
|
+
const segments = relativePath.split('/').filter(Boolean);
|
|
74
|
+
const segmentsToCheck = !entryPath && segments.length > 1 && segments[0] && !languages.includes(segments[0]) ? segments.slice(1) : segments;
|
|
75
|
+
const firstSegment = segmentsToCheck[0];
|
|
76
|
+
if (firstSegment && languages.includes(firstSegment)) return {
|
|
77
|
+
detected: true,
|
|
78
|
+
language: firstSegment
|
|
98
79
|
};
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const { useLocation, useNavigate, useParams } = __webpack_require__("@modern-js/runtime/router");
|
|
102
|
-
return {
|
|
103
|
-
navigate: useNavigate(),
|
|
104
|
-
location: useLocation(),
|
|
105
|
-
params: useParams(),
|
|
106
|
-
hasRouter: true
|
|
107
|
-
};
|
|
108
|
-
} catch (error) {
|
|
109
|
-
return {
|
|
110
|
-
navigate: null,
|
|
111
|
-
location: null,
|
|
112
|
-
params: {},
|
|
113
|
-
hasRouter: false
|
|
114
|
-
};
|
|
115
|
-
}
|
|
80
|
+
return {
|
|
81
|
+
detected: false
|
|
116
82
|
};
|
|
117
|
-
}
|
|
83
|
+
};
|
|
84
|
+
const shouldIgnoreRedirect = (pathname, languages, ignoreRedirectRoutes)=>{
|
|
85
|
+
if (!ignoreRedirectRoutes) return false;
|
|
86
|
+
const segments = pathname.split('/').filter(Boolean);
|
|
87
|
+
let pathWithoutLang = pathname;
|
|
88
|
+
if (segments.length > 0 && languages.includes(segments[0])) pathWithoutLang = `/${segments.slice(1).join('/')}`;
|
|
89
|
+
const normalizedPath = pathWithoutLang.startsWith('/') ? pathWithoutLang : `/${pathWithoutLang}`;
|
|
90
|
+
if ('function' == typeof ignoreRedirectRoutes) return ignoreRedirectRoutes(normalizedPath);
|
|
91
|
+
return ignoreRedirectRoutes.some((pattern)=>normalizedPath === pattern || normalizedPath.startsWith(`${pattern}/`));
|
|
92
|
+
};
|
|
118
93
|
exports.buildLocalizedUrl = __webpack_exports__.buildLocalizedUrl;
|
|
119
94
|
exports.detectLanguageFromPath = __webpack_exports__.detectLanguageFromPath;
|
|
120
95
|
exports.getEntryPath = __webpack_exports__.getEntryPath;
|
|
121
96
|
exports.getLanguageFromPath = __webpack_exports__.getLanguageFromPath;
|
|
122
97
|
exports.getPathname = __webpack_exports__.getPathname;
|
|
123
98
|
exports.shouldIgnoreRedirect = __webpack_exports__.shouldIgnoreRedirect;
|
|
124
|
-
exports.useRouterHooks = __webpack_exports__.useRouterHooks;
|
|
125
99
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
126
100
|
"buildLocalizedUrl",
|
|
127
101
|
"detectLanguageFromPath",
|
|
128
102
|
"getEntryPath",
|
|
129
103
|
"getLanguageFromPath",
|
|
130
104
|
"getPathname",
|
|
131
|
-
"shouldIgnoreRedirect"
|
|
132
|
-
"useRouterHooks"
|
|
105
|
+
"shouldIgnoreRedirect"
|
|
133
106
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
134
107
|
Object.defineProperty(exports, '__esModule', {
|
|
135
108
|
value: true
|
package/dist/cjs/server/index.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __webpack_require__ = {};
|
|
3
3
|
(()=>{
|
|
4
|
-
__webpack_require__.d = (exports1,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
5
|
+
var define = (defs, kind)=>{
|
|
6
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
[kind]: defs[key]
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
define(getters, "get");
|
|
12
|
+
define(values, "value");
|
|
9
13
|
};
|
|
10
14
|
})();
|
|
11
15
|
(()=>{
|
|
@@ -24,13 +28,46 @@ var __webpack_require__ = {};
|
|
|
24
28
|
var __webpack_exports__ = {};
|
|
25
29
|
__webpack_require__.r(__webpack_exports__);
|
|
26
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
collectApiPrefixes: ()=>collectApiPrefixes,
|
|
27
32
|
default: ()=>server,
|
|
28
|
-
i18nServerPlugin: ()=>i18nServerPlugin
|
|
33
|
+
i18nServerPlugin: ()=>i18nServerPlugin,
|
|
34
|
+
matchesApiPrefix: ()=>matchesApiPrefix
|
|
29
35
|
});
|
|
30
36
|
const hono_namespaceObject = require("@modern-js/server-core/hono");
|
|
31
37
|
const config_js_namespaceObject = require("../runtime/i18n/detection/config.js");
|
|
38
|
+
const localisedUrls_js_namespaceObject = require("../shared/localisedUrls.js");
|
|
32
39
|
const utils_js_namespaceObject = require("../shared/utils.js");
|
|
33
40
|
const { languageDetector } = hono_namespaceObject;
|
|
41
|
+
const normalizeApiPrefix = (prefix)=>{
|
|
42
|
+
const trimmedPrefix = prefix.trim();
|
|
43
|
+
if (!trimmedPrefix) return null;
|
|
44
|
+
const prefixedPath = trimmedPrefix.startsWith('/') ? trimmedPrefix : `/${trimmedPrefix}`;
|
|
45
|
+
const withoutWildcard = prefixedPath.replace(/\/\*$/, '');
|
|
46
|
+
const normalizedPrefix = withoutWildcard.length > 1 ? withoutWildcard.replace(/\/+$/, '') : withoutWildcard;
|
|
47
|
+
return '/' === normalizedPrefix ? null : normalizedPrefix;
|
|
48
|
+
};
|
|
49
|
+
const collectApiPrefixes = (routes, bffPrefix)=>{
|
|
50
|
+
const prefixes = new Set();
|
|
51
|
+
for (const route of routes){
|
|
52
|
+
if (!route.isApi || !route.urlPath) continue;
|
|
53
|
+
const normalizedPrefix = normalizeApiPrefix(route.urlPath);
|
|
54
|
+
if (normalizedPrefix) prefixes.add(normalizedPrefix);
|
|
55
|
+
}
|
|
56
|
+
const bffPrefixes = Array.isArray(bffPrefix) ? bffPrefix : bffPrefix ? [
|
|
57
|
+
bffPrefix
|
|
58
|
+
] : [];
|
|
59
|
+
for (const prefix of bffPrefixes){
|
|
60
|
+
const normalizedPrefix = normalizeApiPrefix(prefix);
|
|
61
|
+
if (normalizedPrefix) prefixes.add(normalizedPrefix);
|
|
62
|
+
}
|
|
63
|
+
return [
|
|
64
|
+
...prefixes
|
|
65
|
+
];
|
|
66
|
+
};
|
|
67
|
+
const matchesApiPrefix = (pathname, apiPrefixes)=>{
|
|
68
|
+
const normalizedPathname = pathname.startsWith('/') ? pathname : `/${pathname}`;
|
|
69
|
+
return apiPrefixes.some((prefix)=>normalizedPathname === prefix || normalizedPathname.startsWith(`${prefix}/`));
|
|
70
|
+
};
|
|
34
71
|
const convertToHonoLanguageDetectorOptions = (languages, fallbackLanguage, detectionOptions)=>{
|
|
35
72
|
const mergedDetection = detectionOptions ? (0, config_js_namespaceObject.mergeDetectionOptions)(detectionOptions) : config_js_namespaceObject.DEFAULT_I18NEXT_DETECTION_OPTIONS;
|
|
36
73
|
const order = (mergedDetection.order || []).filter((item)=>![
|
|
@@ -120,15 +157,20 @@ const getLanguageFromPath = (req, urlPath, languages)=>{
|
|
|
120
157
|
if (languages.includes(firstSegment)) return firstSegment;
|
|
121
158
|
return null;
|
|
122
159
|
};
|
|
123
|
-
const buildLocalizedUrl = (req, urlPath, language, languages)=>{
|
|
160
|
+
const buildLocalizedUrl = (req, urlPath, language, languages, localisedUrls)=>{
|
|
124
161
|
const url = new URL(req.url);
|
|
125
162
|
const pathname = url.pathname;
|
|
126
163
|
const basePath = urlPath.replace('/*', '');
|
|
127
164
|
const remainingPath = pathname.startsWith(basePath) ? pathname.slice(basePath.length) : pathname;
|
|
128
165
|
const segments = remainingPath.split('/').filter(Boolean);
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
const
|
|
166
|
+
const localisedUrlsConfig = (0, localisedUrls_js_namespaceObject.resolveLocalisedUrlsConfig)(localisedUrls);
|
|
167
|
+
const pathWithoutLanguage = segments.length > 0 && languages.includes(segments[0]) ? `/${segments.slice(1).join('/')}` : remainingPath;
|
|
168
|
+
const resolvedPath = localisedUrlsConfig.enabled ? (0, localisedUrls_js_namespaceObject.resolveLocalisedPath)(pathWithoutLanguage, language, languages, localisedUrlsConfig.map) : pathWithoutLanguage;
|
|
169
|
+
const resolvedSegments = resolvedPath.split('/').filter(Boolean);
|
|
170
|
+
const newPathname = `/${[
|
|
171
|
+
language,
|
|
172
|
+
...resolvedSegments
|
|
173
|
+
].join('/')}`;
|
|
132
174
|
const suffix = `${url.search}${url.hash}`;
|
|
133
175
|
const localizedUrl = '/' === basePath ? newPathname + suffix : basePath + newPathname + suffix;
|
|
134
176
|
return localizedUrl;
|
|
@@ -138,6 +180,9 @@ const i18nServerPlugin = (options)=>({
|
|
|
138
180
|
setup: (api)=>{
|
|
139
181
|
api.onPrepare(()=>{
|
|
140
182
|
const { middlewares, routes } = api.getServerContext();
|
|
183
|
+
const serverConfig = api.getServerConfig();
|
|
184
|
+
const bffPrefix = serverConfig?.bff ? serverConfig.bff.prefix ?? '/api' : void 0;
|
|
185
|
+
const apiPrefixes = collectApiPrefixes(routes, bffPrefix);
|
|
141
186
|
const entryPaths = new Set();
|
|
142
187
|
routes.forEach((route)=>{
|
|
143
188
|
if (route.entryName && route.urlPath && '/' !== route.urlPath) {
|
|
@@ -149,7 +194,7 @@ const i18nServerPlugin = (options)=>({
|
|
|
149
194
|
const { entryName } = route;
|
|
150
195
|
if (!entryName) return;
|
|
151
196
|
if (!options.localeDetection) return;
|
|
152
|
-
const { localePathRedirect, i18nextDetector = true, languages = [], fallbackLanguage = 'en', detection, ignoreRedirectRoutes } = (0, utils_js_namespaceObject.getLocaleDetectionOptions)(entryName, options.localeDetection);
|
|
197
|
+
const { localePathRedirect, i18nextDetector = true, languages = [], fallbackLanguage = 'en', detection, ignoreRedirectRoutes, localisedUrls } = (0, utils_js_namespaceObject.getLocaleDetectionOptions)(entryName, options.localeDetection);
|
|
153
198
|
const staticRoutePrefixes = options.staticRoutePrefixes;
|
|
154
199
|
const originUrlPath = route.urlPath;
|
|
155
200
|
const urlPath = originUrlPath.endsWith('/') ? `${originUrlPath}*` : `${originUrlPath}/*`;
|
|
@@ -163,6 +208,7 @@ const i18nServerPlugin = (options)=>({
|
|
|
163
208
|
handler: async (c, next)=>{
|
|
164
209
|
const url = new URL(c.req.url);
|
|
165
210
|
const pathname = url.pathname;
|
|
211
|
+
if (matchesApiPrefix(pathname, apiPrefixes)) return await next();
|
|
166
212
|
if (isStaticResourceRequest(pathname, staticRoutePrefixes, languages)) return await next();
|
|
167
213
|
if ('/' === originUrlPath) {
|
|
168
214
|
const pathSegments = pathname.split('/').filter(Boolean);
|
|
@@ -181,6 +227,7 @@ const i18nServerPlugin = (options)=>({
|
|
|
181
227
|
handler: async (c, next)=>{
|
|
182
228
|
const url = new URL(c.req.url);
|
|
183
229
|
const pathname = url.pathname;
|
|
230
|
+
if (matchesApiPrefix(pathname, apiPrefixes)) return await next();
|
|
184
231
|
if (isStaticResourceRequest(pathname, staticRoutePrefixes, languages)) return await next();
|
|
185
232
|
if (shouldIgnoreRedirect(pathname, urlPath, ignoreRedirectRoutes)) return await next();
|
|
186
233
|
if ('/' === originUrlPath) {
|
|
@@ -195,9 +242,14 @@ const i18nServerPlugin = (options)=>({
|
|
|
195
242
|
let detectedLanguage = null;
|
|
196
243
|
if (i18nextDetector) detectedLanguage = c.get('language') || null;
|
|
197
244
|
const targetLanguage = detectedLanguage || fallbackLanguage;
|
|
198
|
-
const localizedUrl = buildLocalizedUrl(c.req, originUrlPath, targetLanguage, languages);
|
|
245
|
+
const localizedUrl = buildLocalizedUrl(c.req, originUrlPath, targetLanguage, languages, localisedUrls);
|
|
199
246
|
return c.redirect(localizedUrl);
|
|
200
247
|
}
|
|
248
|
+
const localisedUrlsConfig = (0, localisedUrls_js_namespaceObject.resolveLocalisedUrlsConfig)(localisedUrls);
|
|
249
|
+
if (localisedUrlsConfig.enabled) {
|
|
250
|
+
const expectedUrl = buildLocalizedUrl(c.req, originUrlPath, language, languages, localisedUrls);
|
|
251
|
+
if (expectedUrl !== `${pathname}${url.search}${url.hash}`) return c.redirect(expectedUrl);
|
|
252
|
+
}
|
|
201
253
|
await next();
|
|
202
254
|
}
|
|
203
255
|
});
|
|
@@ -207,11 +259,15 @@ const i18nServerPlugin = (options)=>({
|
|
|
207
259
|
}
|
|
208
260
|
});
|
|
209
261
|
const server = i18nServerPlugin;
|
|
262
|
+
exports.collectApiPrefixes = __webpack_exports__.collectApiPrefixes;
|
|
210
263
|
exports["default"] = __webpack_exports__["default"];
|
|
211
264
|
exports.i18nServerPlugin = __webpack_exports__.i18nServerPlugin;
|
|
265
|
+
exports.matchesApiPrefix = __webpack_exports__.matchesApiPrefix;
|
|
212
266
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
267
|
+
"collectApiPrefixes",
|
|
213
268
|
"default",
|
|
214
|
-
"i18nServerPlugin"
|
|
269
|
+
"i18nServerPlugin",
|
|
270
|
+
"matchesApiPrefix"
|
|
215
271
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
216
272
|
Object.defineProperty(exports, '__esModule', {
|
|
217
273
|
value: true
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __webpack_require__ = {};
|
|
3
3
|
(()=>{
|
|
4
|
-
__webpack_require__.d = (exports1,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
5
|
+
var define = (defs, kind)=>{
|
|
6
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
[kind]: defs[key]
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
define(getters, "get");
|
|
12
|
+
define(values, "value");
|
|
9
13
|
};
|
|
10
14
|
})();
|
|
11
15
|
(()=>{
|
|
@@ -23,9 +27,6 @@ var __webpack_require__ = {};
|
|
|
23
27
|
})();
|
|
24
28
|
var __webpack_exports__ = {};
|
|
25
29
|
__webpack_require__.r(__webpack_exports__);
|
|
26
|
-
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
-
deepMerge: ()=>deepMerge
|
|
28
|
-
});
|
|
29
30
|
function isPlainObject(value) {
|
|
30
31
|
return null !== value && 'object' == typeof value && !Array.isArray(value) && !(value instanceof Date);
|
|
31
32
|
}
|
|
@@ -45,6 +46,9 @@ function deepMerge(defaultOptions, userOptions) {
|
|
|
45
46
|
}
|
|
46
47
|
return merged;
|
|
47
48
|
}
|
|
49
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
50
|
+
deepMerge: ()=>deepMerge
|
|
51
|
+
});
|
|
48
52
|
exports.deepMerge = __webpack_exports__.deepMerge;
|
|
49
53
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
50
54
|
"deepMerge"
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __webpack_require__ = {};
|
|
3
3
|
(()=>{
|
|
4
|
-
__webpack_require__.d = (exports1,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
5
|
+
var define = (defs, kind)=>{
|
|
6
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
[kind]: defs[key]
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
define(getters, "get");
|
|
12
|
+
define(values, "value");
|
|
9
13
|
};
|
|
10
14
|
})();
|
|
11
15
|
(()=>{
|