@bleedingdev/modern-js-i18n-runtime-extensions 3.9.0-ultramodern.9 → 3.9.3-ultramodern.10
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/index.js +10 -10
- package/dist/cjs/localeRedirectPolicy.js +6 -6
- package/dist/cjs/native.js +438 -0
- package/dist/cjs/paths.js +11 -3
- package/dist/cjs/requestLanguage.js +195 -0
- package/dist/cjs/router-navigation/adapter.js +93 -0
- package/dist/cjs/{localisedUrls/config.js → router-navigation/index.js} +5 -14
- package/dist/cjs/ssrLanguageHandoff.js +94 -0
- package/dist/cjs/urlRewrite.js +64 -0
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/localeRedirectPolicy.mjs +1 -1
- package/dist/esm/native.mjs +378 -0
- package/dist/esm/paths.mjs +7 -2
- package/dist/esm/requestLanguage.mjs +148 -0
- package/dist/esm/router-navigation/adapter.mjs +55 -0
- package/dist/esm/router-navigation/index.mjs +1 -0
- package/dist/esm/ssrLanguageHandoff.mjs +44 -0
- package/dist/esm/urlRewrite.mjs +26 -0
- package/dist/esm-node/index.mjs +1 -1
- package/dist/esm-node/localeRedirectPolicy.mjs +1 -1
- package/dist/esm-node/native.mjs +379 -0
- package/dist/esm-node/paths.mjs +7 -2
- package/dist/esm-node/requestLanguage.mjs +149 -0
- package/dist/esm-node/router-navigation/adapter.mjs +56 -0
- package/dist/esm-node/router-navigation/index.mjs +2 -0
- package/dist/esm-node/ssrLanguageHandoff.mjs +45 -0
- package/dist/esm-node/urlRewrite.mjs +27 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/localeRedirectPolicy.d.ts +1 -1
- package/dist/types/native.d.ts +34 -0
- package/dist/types/paths.d.ts +8 -1
- package/dist/types/requestLanguage.d.ts +60 -0
- package/dist/types/router-navigation/adapter.d.ts +23 -0
- package/dist/types/router-navigation/index.d.ts +1 -0
- package/dist/types/ssrLanguageHandoff.d.ts +60 -0
- package/dist/types/urlRewrite.d.ts +60 -0
- package/package.json +102 -15
- package/src/index.ts +1 -1
- package/src/localeRedirectPolicy.ts +2 -2
- package/src/native.ts +624 -0
- package/src/paths.ts +23 -2
- package/src/requestLanguage.ts +311 -0
- package/src/router-navigation/adapter.tsx +120 -0
- package/src/router-navigation/index.ts +6 -0
- package/src/ssrLanguageHandoff.ts +138 -0
- package/src/urlRewrite.ts +107 -0
- package/dist/cjs/localisedUrls/index.js +0 -98
- package/dist/cjs/localisedUrls/normalise.js +0 -87
- package/dist/cjs/localisedUrls/pathname.js +0 -68
- package/dist/cjs/localisedUrls/patterns.js +0 -214
- package/dist/cjs/localisedUrls/redirect.js +0 -100
- package/dist/cjs/localisedUrls/resolve.js +0 -78
- package/dist/cjs/localisedUrls/routeIdentity.js +0 -118
- package/dist/cjs/localisedUrls/routes.js +0 -210
- package/dist/cjs/localisedUrls/types.js +0 -18
- package/dist/esm/localisedUrls/config.mjs +0 -11
- package/dist/esm/localisedUrls/index.mjs +0 -8
- package/dist/esm/localisedUrls/normalise.mjs +0 -37
- package/dist/esm/localisedUrls/pathname.mjs +0 -24
- package/dist/esm/localisedUrls/patterns.mjs +0 -152
- package/dist/esm/localisedUrls/redirect.mjs +0 -53
- package/dist/esm/localisedUrls/resolve.mjs +0 -37
- package/dist/esm/localisedUrls/routeIdentity.mjs +0 -77
- package/dist/esm/localisedUrls/routes.mjs +0 -169
- package/dist/esm/localisedUrls/types.mjs +0 -0
- package/dist/esm-node/localisedUrls/config.mjs +0 -12
- package/dist/esm-node/localisedUrls/index.mjs +0 -9
- package/dist/esm-node/localisedUrls/normalise.mjs +0 -38
- package/dist/esm-node/localisedUrls/pathname.mjs +0 -25
- package/dist/esm-node/localisedUrls/patterns.mjs +0 -153
- package/dist/esm-node/localisedUrls/redirect.mjs +0 -54
- package/dist/esm-node/localisedUrls/resolve.mjs +0 -38
- package/dist/esm-node/localisedUrls/routeIdentity.mjs +0 -78
- package/dist/esm-node/localisedUrls/routes.mjs +0 -170
- package/dist/esm-node/localisedUrls/types.mjs +0 -1
- package/dist/types/localisedUrls/config.d.ts +0 -9
- package/dist/types/localisedUrls/index.d.ts +0 -10
- package/dist/types/localisedUrls/normalise.d.ts +0 -10
- package/dist/types/localisedUrls/pathname.d.ts +0 -4
- package/dist/types/localisedUrls/patterns.d.ts +0 -11
- package/dist/types/localisedUrls/redirect.d.ts +0 -19
- package/dist/types/localisedUrls/resolve.d.ts +0 -7
- package/dist/types/localisedUrls/routeIdentity.d.ts +0 -24
- package/dist/types/localisedUrls/routes.d.ts +0 -3
- package/dist/types/localisedUrls/types.d.ts +0 -14
- package/rslib.config.mts +0 -4
- package/rstest.config.mts +0 -36
- package/src/localisedUrls/config.ts +0 -18
- package/src/localisedUrls/index.ts +0 -28
- package/src/localisedUrls/normalise.ts +0 -62
- package/src/localisedUrls/pathname.ts +0 -60
- package/src/localisedUrls/patterns.ts +0 -283
- package/src/localisedUrls/redirect.ts +0 -107
- package/src/localisedUrls/resolve.ts +0 -106
- package/src/localisedUrls/routeIdentity.ts +0 -107
- package/src/localisedUrls/routes.ts +0 -432
- package/src/localisedUrls/types.ts +0 -18
- package/tests/languageSyncController.test.ts +0 -136
- package/tests/localeRedirectPolicy.test.ts +0 -173
- package/tests/localisedUrls.test.ts +0 -532
- package/tests/paths.test.ts +0 -24
- package/tests/reactLanguageSync.test.tsx +0 -136
- package/tests/tsconfig.json +0 -11
- package/tsconfig.json +0 -11
package/dist/cjs/index.js
CHANGED
|
@@ -9,8 +9,8 @@ var __webpack_modules__ = {
|
|
|
9
9
|
"./localeRedirectPolicy" (module) {
|
|
10
10
|
module.exports = require("./localeRedirectPolicy.js");
|
|
11
11
|
},
|
|
12
|
-
"
|
|
13
|
-
module.exports = require("
|
|
12
|
+
"@modern-js/runtime-extensions/localised-urls" (module) {
|
|
13
|
+
module.exports = require("@modern-js/runtime-extensions/localised-urls");
|
|
14
14
|
}
|
|
15
15
|
};
|
|
16
16
|
var __webpack_module_cache__ = {};
|
|
@@ -60,21 +60,21 @@ function __webpack_require__(moduleId) {
|
|
|
60
60
|
var __webpack_exports__ = {};
|
|
61
61
|
(()=>{
|
|
62
62
|
__webpack_require__.r(__webpack_exports__);
|
|
63
|
-
var
|
|
63
|
+
var _modern_js_runtime_extensions_localised_urls__rspack_import_0 = __webpack_require__("@modern-js/runtime-extensions/localised-urls");
|
|
64
64
|
var __rspack_reexport = {};
|
|
65
|
-
for(const __rspack_import_key in
|
|
65
|
+
for(const __rspack_import_key in _modern_js_runtime_extensions_localised_urls__rspack_import_0)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_modern_js_runtime_extensions_localised_urls__rspack_import_0[__rspack_import_key];
|
|
66
66
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
67
|
-
var
|
|
67
|
+
var _language_sync_controller__rspack_import_1 = __webpack_require__("./language-sync/controller");
|
|
68
68
|
var __rspack_reexport = {};
|
|
69
|
-
for(const __rspack_import_key in
|
|
69
|
+
for(const __rspack_import_key in _language_sync_controller__rspack_import_1)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_language_sync_controller__rspack_import_1[__rspack_import_key];
|
|
70
70
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
71
|
-
var
|
|
71
|
+
var _language_sync_react__rspack_import_2 = __webpack_require__("./language-sync/react");
|
|
72
72
|
var __rspack_reexport = {};
|
|
73
|
-
for(const __rspack_import_key in
|
|
73
|
+
for(const __rspack_import_key in _language_sync_react__rspack_import_2)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_language_sync_react__rspack_import_2[__rspack_import_key];
|
|
74
74
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
75
|
-
var
|
|
75
|
+
var _localeRedirectPolicy__rspack_import_3 = __webpack_require__("./localeRedirectPolicy");
|
|
76
76
|
var __rspack_reexport = {};
|
|
77
|
-
for(const __rspack_import_key in
|
|
77
|
+
for(const __rspack_import_key in _localeRedirectPolicy__rspack_import_3)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_localeRedirectPolicy__rspack_import_3[__rspack_import_key];
|
|
78
78
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
79
79
|
})();
|
|
80
80
|
for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
@@ -34,7 +34,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
34
34
|
isStaticResourceRequest: ()=>isStaticResourceRequest,
|
|
35
35
|
shouldIgnoreRedirect: ()=>shouldIgnoreRedirect
|
|
36
36
|
});
|
|
37
|
-
const
|
|
37
|
+
const localised_urls_namespaceObject = require("@modern-js/runtime-extensions/localised-urls");
|
|
38
38
|
const stripUrlPathPrefix = (pathname, urlPath)=>{
|
|
39
39
|
const basePath = urlPath.replace('/*', '');
|
|
40
40
|
if (!basePath || '/' === basePath) return pathname;
|
|
@@ -43,13 +43,13 @@ const stripUrlPathPrefix = (pathname, urlPath)=>{
|
|
|
43
43
|
};
|
|
44
44
|
const shouldIgnoreRedirect = (pathname, urlPath, ignoreRedirectRoutes)=>{
|
|
45
45
|
const remainingPath = stripUrlPathPrefix(pathname, urlPath);
|
|
46
|
-
return (0,
|
|
46
|
+
return (0, localised_urls_namespaceObject.shouldSkipLocaleRedirect)(remainingPath, [], ignoreRedirectRoutes);
|
|
47
47
|
};
|
|
48
48
|
const isStaticResourceRequest = (pathname, staticRoutePrefixes, languages = [])=>{
|
|
49
|
-
if ((0,
|
|
50
|
-
const matchesStaticRoutePrefix = (targetPathname)=>staticRoutePrefixes.some((prefix)=>(0,
|
|
49
|
+
if ((0, localised_urls_namespaceObject.isDefaultLocaleRedirectSkipPath)(pathname, languages)) return true;
|
|
50
|
+
const matchesStaticRoutePrefix = (targetPathname)=>staticRoutePrefixes.some((prefix)=>(0, localised_urls_namespaceObject.matchesPathPrefix)(targetPathname, prefix));
|
|
51
51
|
if (matchesStaticRoutePrefix(pathname)) return true;
|
|
52
|
-
const pathWithoutLanguage = (0,
|
|
52
|
+
const pathWithoutLanguage = (0, localised_urls_namespaceObject.stripLanguagePrefix)(pathname, languages);
|
|
53
53
|
return pathWithoutLanguage !== pathname && matchesStaticRoutePrefix(pathWithoutLanguage);
|
|
54
54
|
};
|
|
55
55
|
const getLanguageFromPath = (req, urlPath, languages)=>{
|
|
@@ -66,7 +66,7 @@ const buildLocalizedUrl = (req, urlPath, language, languages, localisedUrls)=>{
|
|
|
66
66
|
const pathname = url.pathname;
|
|
67
67
|
const basePath = urlPath.replace('/*', '');
|
|
68
68
|
const remainingPath = stripUrlPathPrefix(pathname, urlPath);
|
|
69
|
-
const newPathname = (0,
|
|
69
|
+
const newPathname = (0, localised_urls_namespaceObject.localiseTargetPathname)(remainingPath, language, languages, localisedUrls);
|
|
70
70
|
const suffix = `${url.search}${url.hash}`;
|
|
71
71
|
const localizedUrl = '/' === basePath ? newPathname + suffix : basePath + newPathname + suffix;
|
|
72
72
|
return localizedUrl;
|
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.n = (module)=>{
|
|
5
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
6
|
+
__webpack_require__.d(getter, {
|
|
7
|
+
a: getter
|
|
8
|
+
});
|
|
9
|
+
return getter;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
12
|
+
(()=>{
|
|
13
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
14
|
+
var define = (defs, kind)=>{
|
|
15
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
[kind]: defs[key]
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
define(getters, "get");
|
|
21
|
+
define(values, "value");
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
(()=>{
|
|
25
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
26
|
+
})();
|
|
27
|
+
(()=>{
|
|
28
|
+
__webpack_require__.r = (exports1)=>{
|
|
29
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
30
|
+
value: 'Module'
|
|
31
|
+
});
|
|
32
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
33
|
+
value: true
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
})();
|
|
37
|
+
var __webpack_exports__ = {};
|
|
38
|
+
__webpack_require__.r(__webpack_exports__);
|
|
39
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
40
|
+
createNativeI18n: ()=>createNativeI18n,
|
|
41
|
+
createNativeI18nInstance: ()=>createNativeI18nInstance,
|
|
42
|
+
getNativeI18nRewriteSnapshot: ()=>getNativeI18nRewriteSnapshot,
|
|
43
|
+
getNativeI18nSnapshotSeed: ()=>getNativeI18nSnapshotSeed,
|
|
44
|
+
invalidateNativeI18nSnapshot: ()=>invalidateNativeI18nSnapshot
|
|
45
|
+
});
|
|
46
|
+
const external_i18next_namespaceObject = require("i18next");
|
|
47
|
+
var external_i18next_default = /*#__PURE__*/ __webpack_require__.n(external_i18next_namespaceObject);
|
|
48
|
+
const controller_js_namespaceObject = require("./language-sync/controller.js");
|
|
49
|
+
const external_requestLanguage_js_namespaceObject = require("./requestLanguage.js");
|
|
50
|
+
const external_ssrLanguageHandoff_js_namespaceObject = require("./ssrLanguageHandoff.js");
|
|
51
|
+
const external_urlRewrite_js_namespaceObject = require("./urlRewrite.js");
|
|
52
|
+
const nativeSnapshotOrigins = new WeakMap();
|
|
53
|
+
function invalidateNativeI18nSnapshot(instance) {
|
|
54
|
+
if ('object' == typeof instance && null !== instance) nativeSnapshotOrigins.delete(instance);
|
|
55
|
+
}
|
|
56
|
+
const nativeRewriteOrigins = new WeakMap();
|
|
57
|
+
function getNativeI18nRewriteSnapshot(rewrite) {
|
|
58
|
+
return 'object' == typeof rewrite && null !== rewrite ? nativeRewriteOrigins.get(rewrite)?.() : void 0;
|
|
59
|
+
}
|
|
60
|
+
function detachLocalisedUrls(value) {
|
|
61
|
+
if (void 0 === value || 'boolean' == typeof value) return value;
|
|
62
|
+
return Object.fromEntries(Object.entries(value).map(([path, languages])=>[
|
|
63
|
+
path,
|
|
64
|
+
Object.fromEntries(Object.entries(languages))
|
|
65
|
+
]));
|
|
66
|
+
}
|
|
67
|
+
function plainRecord(value) {
|
|
68
|
+
return 'object' == typeof value && null !== value && (Object.getPrototypeOf(value) === Object.prototype || null === Object.getPrototypeOf(value));
|
|
69
|
+
}
|
|
70
|
+
function detachOption(value, ancestors = new Set()) {
|
|
71
|
+
if (null === value || 'object' != typeof value) return value;
|
|
72
|
+
if (ancestors.has(value) || (Array.isArray(value) ? Object.getPrototypeOf(value) !== Array.prototype : !plainRecord(value))) throw new Error('Native i18n snapshot options must be plain acyclic data');
|
|
73
|
+
ancestors.add(value);
|
|
74
|
+
const copy = Array.isArray(value) ? [] : {};
|
|
75
|
+
for (const key of Reflect.ownKeys(value)){
|
|
76
|
+
if (Array.isArray(value) && 'length' === key) continue;
|
|
77
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
78
|
+
if ('string' != typeof key || !descriptor || !('value' in descriptor)) throw new Error('Native i18n snapshot options cannot contain accessors');
|
|
79
|
+
Object.defineProperty(copy, key, {
|
|
80
|
+
value: detachOption(descriptor.value, ancestors),
|
|
81
|
+
enumerable: descriptor.enumerable,
|
|
82
|
+
writable: true,
|
|
83
|
+
configurable: true
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
ancestors.delete(value);
|
|
87
|
+
return copy;
|
|
88
|
+
}
|
|
89
|
+
function detachInitOptions(options) {
|
|
90
|
+
const copy = detachOption(options);
|
|
91
|
+
if (!plainRecord(copy)) throw new Error('Invalid native i18n options');
|
|
92
|
+
return copy;
|
|
93
|
+
}
|
|
94
|
+
function descriptorProof(object, ignore = new Set(), ancestors = new Set()) {
|
|
95
|
+
if (ancestors.has(object)) return ()=>true;
|
|
96
|
+
ancestors.add(object);
|
|
97
|
+
const keys = Reflect.ownKeys(object).filter((key)=>'string' != typeof key || !ignore.has(key));
|
|
98
|
+
const proofs = keys.map((key)=>{
|
|
99
|
+
const descriptor = Object.getOwnPropertyDescriptor(object, key);
|
|
100
|
+
if (!descriptor || !('value' in descriptor)) throw new Error('Native i18n snapshot provenance cannot contain accessors');
|
|
101
|
+
const value = descriptor.value;
|
|
102
|
+
const nested = Array.isArray(value) || plainRecord(value) ? descriptorProof(value, new Set(), ancestors) : ()=>true;
|
|
103
|
+
return ()=>{
|
|
104
|
+
const current = Object.getOwnPropertyDescriptor(object, key);
|
|
105
|
+
return void 0 !== current && 'value' in current && current.value === value && current.enumerable === descriptor.enumerable && current.configurable === descriptor.configurable && current.writable === descriptor.writable && nested();
|
|
106
|
+
};
|
|
107
|
+
});
|
|
108
|
+
ancestors.delete(object);
|
|
109
|
+
return ()=>{
|
|
110
|
+
const currentKeys = Reflect.ownKeys(object).filter((key)=>'string' != typeof key || !ignore.has(key));
|
|
111
|
+
return currentKeys.length === keys.length && currentKeys.every((key, index)=>key === keys[index]) && proofs.every((proof)=>proof());
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function methodProof(object) {
|
|
115
|
+
const prototype = Object.getPrototypeOf(object);
|
|
116
|
+
const methods = new Map();
|
|
117
|
+
for(let current = object; current && current !== Object.prototype; current = Object.getPrototypeOf(current))for (const key of Reflect.ownKeys(current)){
|
|
118
|
+
const descriptor = Object.getOwnPropertyDescriptor(current, key);
|
|
119
|
+
if (descriptor && 'value' in descriptor) {
|
|
120
|
+
if ('function' == typeof descriptor.value && !methods.has(key)) methods.set(key, descriptor.value);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return ()=>{
|
|
124
|
+
if (Object.getPrototypeOf(object) !== prototype) return false;
|
|
125
|
+
for (const [key, method] of methods){
|
|
126
|
+
let current = object;
|
|
127
|
+
while(current){
|
|
128
|
+
const descriptor = Object.getOwnPropertyDescriptor(current, key);
|
|
129
|
+
if (descriptor) {
|
|
130
|
+
if (!('value' in descriptor) || descriptor.value !== method) return false;
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
current = Object.getPrototypeOf(current);
|
|
134
|
+
}
|
|
135
|
+
if (!current) return false;
|
|
136
|
+
}
|
|
137
|
+
return true;
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
function ownValue(object, key) {
|
|
141
|
+
const descriptor = Object.getOwnPropertyDescriptor(object, key);
|
|
142
|
+
if (descriptor && !('value' in descriptor)) throw new Error('Native i18n snapshot provenance cannot contain accessors');
|
|
143
|
+
return descriptor?.value;
|
|
144
|
+
}
|
|
145
|
+
function semanticProof(object, fields) {
|
|
146
|
+
const proofs = fields.map((key)=>{
|
|
147
|
+
const value = ownValue(object, key);
|
|
148
|
+
const nested = Array.isArray(value) || plainRecord(value) ? descriptorProof(value, new Set([
|
|
149
|
+
'resources'
|
|
150
|
+
])) : ()=>true;
|
|
151
|
+
if (value instanceof RegExp) {
|
|
152
|
+
const source = value.source;
|
|
153
|
+
const flags = value.flags;
|
|
154
|
+
return ()=>{
|
|
155
|
+
const current = ownValue(object, key);
|
|
156
|
+
return current instanceof RegExp && current.source === source && current.flags === flags;
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
return ()=>ownValue(object, key) === value && nested();
|
|
160
|
+
});
|
|
161
|
+
return ()=>proofs.every((proof)=>proof());
|
|
162
|
+
}
|
|
163
|
+
function recordNativeSnapshotOrigin(instance, original, seed) {
|
|
164
|
+
try {
|
|
165
|
+
const useDescriptor = Object.getOwnPropertyDescriptor(instance, 'use');
|
|
166
|
+
if (!useDescriptor || !('value' in useDescriptor)) throw new Error('Native plugin registration requires an own method');
|
|
167
|
+
const use = instance.use;
|
|
168
|
+
Object.defineProperty(instance, 'use', {
|
|
169
|
+
...useDescriptor,
|
|
170
|
+
value: function(plugin) {
|
|
171
|
+
invalidateNativeI18nSnapshot(instance);
|
|
172
|
+
return use(plugin);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
const services = instance.services;
|
|
176
|
+
const store = instance.store;
|
|
177
|
+
const options = instance.options;
|
|
178
|
+
const modules = instance.modules;
|
|
179
|
+
const translator = Object.getOwnPropertyDescriptor(instance, 'translator')?.value;
|
|
180
|
+
const formatter = instance.services.formatter;
|
|
181
|
+
const formats = formatter && 'object' == typeof formatter ? Object.getOwnPropertyDescriptor(formatter, 'formats')?.value : void 0;
|
|
182
|
+
const proofs = [
|
|
183
|
+
descriptorProof(instance.options, new Set([
|
|
184
|
+
'resources'
|
|
185
|
+
])),
|
|
186
|
+
descriptorProof(instance.modules),
|
|
187
|
+
descriptorProof(services),
|
|
188
|
+
methodProof(instance),
|
|
189
|
+
methodProof(instance.store),
|
|
190
|
+
...Object.values(instance.services).filter((value)=>'object' == typeof value && null !== value).map((value)=>methodProof(value)),
|
|
191
|
+
...translator && 'object' == typeof translator ? [
|
|
192
|
+
methodProof(translator)
|
|
193
|
+
] : [],
|
|
194
|
+
...formats && 'object' == typeof formats ? [
|
|
195
|
+
descriptorProof(formats)
|
|
196
|
+
] : []
|
|
197
|
+
];
|
|
198
|
+
const serviceFields = {
|
|
199
|
+
languageUtils: [
|
|
200
|
+
'options',
|
|
201
|
+
'supportedLngs'
|
|
202
|
+
],
|
|
203
|
+
pluralResolver: [
|
|
204
|
+
'languageUtils',
|
|
205
|
+
'options'
|
|
206
|
+
],
|
|
207
|
+
interpolator: [
|
|
208
|
+
'options',
|
|
209
|
+
'escape',
|
|
210
|
+
'escapeValue',
|
|
211
|
+
'useRawValueToEscape',
|
|
212
|
+
'prefix',
|
|
213
|
+
'suffix',
|
|
214
|
+
'format',
|
|
215
|
+
'formatSeparator',
|
|
216
|
+
'unescapePrefix',
|
|
217
|
+
'unescapeSuffix',
|
|
218
|
+
'nestingPrefix',
|
|
219
|
+
'nestingSuffix',
|
|
220
|
+
'nestingOptionsSeparator',
|
|
221
|
+
'maxReplaces',
|
|
222
|
+
'alwaysFormat',
|
|
223
|
+
'regexp',
|
|
224
|
+
'regexpUnescape',
|
|
225
|
+
'nestingRegexp'
|
|
226
|
+
],
|
|
227
|
+
formatter: [
|
|
228
|
+
'formatSeparator'
|
|
229
|
+
],
|
|
230
|
+
resourceStore: [
|
|
231
|
+
'options'
|
|
232
|
+
],
|
|
233
|
+
backendConnector: [
|
|
234
|
+
'backend',
|
|
235
|
+
'store',
|
|
236
|
+
'services',
|
|
237
|
+
'options'
|
|
238
|
+
]
|
|
239
|
+
};
|
|
240
|
+
const links = Object.entries(instance.services).map(([key, value])=>{
|
|
241
|
+
if ('object' == typeof value && null !== value) proofs.push(semanticProof(value, serviceFields[key] ?? []));
|
|
242
|
+
return ()=>ownValue(services, key) === value;
|
|
243
|
+
});
|
|
244
|
+
if (translator && 'object' == typeof translator) proofs.push(semanticProof(translator, [
|
|
245
|
+
'options',
|
|
246
|
+
'resourceStore',
|
|
247
|
+
'languageUtils',
|
|
248
|
+
'pluralResolver',
|
|
249
|
+
'interpolator',
|
|
250
|
+
'backendConnector',
|
|
251
|
+
'i18nFormat',
|
|
252
|
+
'utils'
|
|
253
|
+
]));
|
|
254
|
+
nativeSnapshotOrigins.set(instance, {
|
|
255
|
+
instance,
|
|
256
|
+
original: detachInitOptions(original),
|
|
257
|
+
seed: detachInitOptions(seed),
|
|
258
|
+
unchanged: ()=>ownValue(instance, 'services') === services && ownValue(instance, 'store') === store && ownValue(instance, 'options') === options && ownValue(instance, 'modules') === modules && ownValue(services, 'formatter') === formatter && (formatter && 'object' == typeof formatter ? ownValue(formatter, 'formats') === formats : true) && Object.getOwnPropertyDescriptor(instance, 'translator')?.value === translator && (translator && 'object' == typeof translator ? ownValue(translator, 'language') === ownValue(instance, 'language') : true) && links.every((proof)=>proof()) && proofs.every((proof)=>proof())
|
|
259
|
+
});
|
|
260
|
+
} catch {}
|
|
261
|
+
}
|
|
262
|
+
function createNativeI18nInstance(initOptions) {
|
|
263
|
+
const original = detachInitOptions(initOptions);
|
|
264
|
+
const seed = {
|
|
265
|
+
...detachInitOptions(original),
|
|
266
|
+
initAsync: false,
|
|
267
|
+
partialBundledLanguages: false,
|
|
268
|
+
interpolation: {
|
|
269
|
+
escapeValue: false,
|
|
270
|
+
...original.interpolation
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
const instance = external_i18next_default().createInstance();
|
|
274
|
+
instance.init(detachInitOptions(seed));
|
|
275
|
+
if (!instance.isInitialized || instance.isInitializing) throw new Error('Native i18n instances require complete bundled resources');
|
|
276
|
+
recordNativeSnapshotOrigin(instance, original, seed);
|
|
277
|
+
return instance;
|
|
278
|
+
}
|
|
279
|
+
function getNativeI18nSnapshotSeed(instance) {
|
|
280
|
+
const origin = 'object' == typeof instance && null !== instance ? nativeSnapshotOrigins.get(instance) : void 0;
|
|
281
|
+
const services = origin ? ownValue(origin.instance, 'services') : void 0;
|
|
282
|
+
const connector = services && 'object' == typeof services ? ownValue(services, 'backendConnector') : void 0;
|
|
283
|
+
const state = connector && 'object' == typeof connector ? ownValue(connector, 'state') : void 0;
|
|
284
|
+
const pending = plainRecord(state) && Object.values(Object.getOwnPropertyDescriptors(state)).some((descriptor)=>!('value' in descriptor) || 1 === descriptor.value);
|
|
285
|
+
if (!origin || true !== ownValue(origin.instance, 'isInitialized') || true === ownValue(origin.instance, 'isInitializing') || ownValue(origin.instance, 'isLanguageChangingTo') || pending || !origin.unchanged()) throw new Error('This i18n instance requires an explicit Worker profile');
|
|
286
|
+
return detachInitOptions(origin.seed);
|
|
287
|
+
}
|
|
288
|
+
function unwrapResource(module) {
|
|
289
|
+
const resource = 'object' == typeof module && null !== module && 'default' in module ? module.default : module;
|
|
290
|
+
return resource;
|
|
291
|
+
}
|
|
292
|
+
function createNativeI18n(options, loaders) {
|
|
293
|
+
const { initOptions = {}, ...routing } = options;
|
|
294
|
+
const namespaces = [
|
|
295
|
+
...new Set(Object.values(loaders).flatMap(Object.keys))
|
|
296
|
+
].sort();
|
|
297
|
+
const defaultNamespace = 'string' == typeof initOptions.defaultNS ? initOptions.defaultNS : namespaces.includes('translation') ? 'translation' : namespaces[0] ?? 'translation';
|
|
298
|
+
const cookie = routing.detection?.lookupCookie ?? 'i18next';
|
|
299
|
+
const backend = {
|
|
300
|
+
type: 'backend',
|
|
301
|
+
init () {},
|
|
302
|
+
read (language, namespace, callback) {
|
|
303
|
+
const bundles = Object.hasOwn(loaders, language) ? loaders[language] : void 0;
|
|
304
|
+
const load = bundles && Object.hasOwn(bundles, namespace) ? bundles[namespace] : void 0;
|
|
305
|
+
if (!load) return void callback(null, {});
|
|
306
|
+
load().then((module)=>callback(null, unwrapResource(module)), (error)=>callback(error, false));
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
const currentLanguage = ()=>(0, external_requestLanguage_js_namespaceObject.languageFromPathname)(window.location.pathname, routing.languages, routing.basePath);
|
|
310
|
+
return {
|
|
311
|
+
languages: routing.languages,
|
|
312
|
+
...void 0 === routing.localisedUrls ? {} : {
|
|
313
|
+
localisedUrls: routing.localisedUrls
|
|
314
|
+
},
|
|
315
|
+
resolveRequest: (request)=>(0, external_requestLanguage_js_namespaceObject.resolveRequestLanguage)(request, routing),
|
|
316
|
+
redirect: external_requestLanguage_js_namespaceObject.createRequestLanguageRedirect,
|
|
317
|
+
async create (language, resources) {
|
|
318
|
+
const instance = external_i18next_default().createInstance();
|
|
319
|
+
instance.use(backend);
|
|
320
|
+
const seed = {
|
|
321
|
+
...initOptions,
|
|
322
|
+
lng: language,
|
|
323
|
+
fallbackLng: routing.fallbackLanguage,
|
|
324
|
+
supportedLngs: [
|
|
325
|
+
...routing.languages
|
|
326
|
+
],
|
|
327
|
+
ns: namespaces,
|
|
328
|
+
defaultNS: defaultNamespace,
|
|
329
|
+
partialBundledLanguages: true,
|
|
330
|
+
resources: resources ? {
|
|
331
|
+
[language]: resources
|
|
332
|
+
} : {},
|
|
333
|
+
interpolation: {
|
|
334
|
+
escapeValue: false,
|
|
335
|
+
...initOptions.interpolation
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
let original;
|
|
339
|
+
let detachedSeed;
|
|
340
|
+
try {
|
|
341
|
+
original = detachInitOptions(initOptions);
|
|
342
|
+
detachedSeed = detachInitOptions(seed);
|
|
343
|
+
} catch {}
|
|
344
|
+
await instance.init(seed);
|
|
345
|
+
if (original && detachedSeed) recordNativeSnapshotOrigin(instance, original, detachedSeed);
|
|
346
|
+
return instance;
|
|
347
|
+
},
|
|
348
|
+
rewrite: (getLanguage)=>{
|
|
349
|
+
const languages = [
|
|
350
|
+
...routing.languages
|
|
351
|
+
];
|
|
352
|
+
const localisedUrls = detachLocalisedUrls(routing.localisedUrls);
|
|
353
|
+
const rewrite = (0, external_urlRewrite_js_namespaceObject.createI18nUrlRewrite)({
|
|
354
|
+
languages,
|
|
355
|
+
getLanguage,
|
|
356
|
+
localisedUrls
|
|
357
|
+
});
|
|
358
|
+
const unchanged = descriptorProof(rewrite);
|
|
359
|
+
nativeRewriteOrigins.set(rewrite, ()=>{
|
|
360
|
+
if (!unchanged()) throw new Error('Native i18n rewrite was modified');
|
|
361
|
+
const language = getLanguage();
|
|
362
|
+
if (!languages.includes(language)) throw new Error('Native i18n rewrite language is unsupported');
|
|
363
|
+
return {
|
|
364
|
+
language,
|
|
365
|
+
languages: [
|
|
366
|
+
...languages
|
|
367
|
+
],
|
|
368
|
+
...void 0 === localisedUrls ? {} : {
|
|
369
|
+
localisedUrls: detachLocalisedUrls(localisedUrls)
|
|
370
|
+
}
|
|
371
|
+
};
|
|
372
|
+
});
|
|
373
|
+
return rewrite;
|
|
374
|
+
},
|
|
375
|
+
handoff (language, instance) {
|
|
376
|
+
return (0, external_ssrLanguageHandoff_js_namespaceObject.createI18nSsrHandoffInlineData)({
|
|
377
|
+
language,
|
|
378
|
+
...instance ? {
|
|
379
|
+
resources: Object.fromEntries(namespaces.map((namespace)=>[
|
|
380
|
+
namespace,
|
|
381
|
+
instance.getResourceBundle(language, namespace) ?? {}
|
|
382
|
+
]))
|
|
383
|
+
} : {}
|
|
384
|
+
});
|
|
385
|
+
},
|
|
386
|
+
clientHandoff () {
|
|
387
|
+
const handoff = (0, external_ssrLanguageHandoff_js_namespaceObject.readI18nSsrHandoff)();
|
|
388
|
+
if (handoff && routing.languages.includes(handoff.language)) return handoff;
|
|
389
|
+
return {
|
|
390
|
+
language: currentLanguage() ?? routing.fallbackLanguage
|
|
391
|
+
};
|
|
392
|
+
},
|
|
393
|
+
syncWithRouter (router, instance) {
|
|
394
|
+
const sync = (0, controller_js_namespaceObject.createLatestLanguageSyncBinding)();
|
|
395
|
+
sync.updateCallbacks({
|
|
396
|
+
changeLanguage: (target, language)=>target.changeLanguage(language),
|
|
397
|
+
commitLanguage () {},
|
|
398
|
+
readLanguage: (target)=>target.language,
|
|
399
|
+
reportFailure: ()=>window.location.reload()
|
|
400
|
+
});
|
|
401
|
+
sync.activate(instance);
|
|
402
|
+
const unsubscribe = router.subscribe('onBeforeLoad', ({ toLocation })=>{
|
|
403
|
+
const publicHref = toLocation.maskedLocation?.publicHref ?? toLocation.publicHref;
|
|
404
|
+
const pathname = new URL(publicHref, window.location.origin).pathname;
|
|
405
|
+
const language = (0, external_requestLanguage_js_namespaceObject.languageFromPathname)(pathname, routing.languages, routing.basePath);
|
|
406
|
+
if (language) sync.request(language);
|
|
407
|
+
});
|
|
408
|
+
return ()=>{
|
|
409
|
+
unsubscribe();
|
|
410
|
+
sync.deactivate();
|
|
411
|
+
};
|
|
412
|
+
},
|
|
413
|
+
persist (instance) {
|
|
414
|
+
const persist = (language)=>{
|
|
415
|
+
document.documentElement.lang = language;
|
|
416
|
+
document.cookie = `${cookie}=${encodeURIComponent(language)}; path=/; max-age=31536000; samesite=lax`;
|
|
417
|
+
};
|
|
418
|
+
if (instance.language) persist(instance.language);
|
|
419
|
+
instance.on('languageChanged', persist);
|
|
420
|
+
return ()=>instance.off('languageChanged', persist);
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
exports.createNativeI18n = __webpack_exports__.createNativeI18n;
|
|
425
|
+
exports.createNativeI18nInstance = __webpack_exports__.createNativeI18nInstance;
|
|
426
|
+
exports.getNativeI18nRewriteSnapshot = __webpack_exports__.getNativeI18nRewriteSnapshot;
|
|
427
|
+
exports.getNativeI18nSnapshotSeed = __webpack_exports__.getNativeI18nSnapshotSeed;
|
|
428
|
+
exports.invalidateNativeI18nSnapshot = __webpack_exports__.invalidateNativeI18nSnapshot;
|
|
429
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
430
|
+
"createNativeI18n",
|
|
431
|
+
"createNativeI18nInstance",
|
|
432
|
+
"getNativeI18nRewriteSnapshot",
|
|
433
|
+
"getNativeI18nSnapshotSeed",
|
|
434
|
+
"invalidateNativeI18nSnapshot"
|
|
435
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
436
|
+
Object.defineProperty(exports, '__esModule', {
|
|
437
|
+
value: true
|
|
438
|
+
});
|
package/dist/cjs/paths.js
CHANGED
|
@@ -30,25 +30,33 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
31
|
buildLocalizedUrl: ()=>buildLocalizedUrl,
|
|
32
32
|
canonicalPath: ()=>canonicalPath,
|
|
33
|
+
configuredLanguage: ()=>configuredLanguage,
|
|
33
34
|
localizePath: ()=>localizePath
|
|
34
35
|
});
|
|
36
|
+
const localised_urls_namespaceObject = require("@modern-js/runtime-extensions/localised-urls");
|
|
35
37
|
const url_namespaceObject = require("@modern-js/runtime-utils/url");
|
|
36
|
-
const
|
|
38
|
+
const configuredLanguage = (requested, languages)=>{
|
|
39
|
+
const language = languages.find((candidate)=>candidate.toLowerCase() === String(requested).toLowerCase());
|
|
40
|
+
if (void 0 === language) throw new RangeError(`Unsupported language "${requested}"; expected one of: ${languages.join(', ')}`);
|
|
41
|
+
return language;
|
|
42
|
+
};
|
|
37
43
|
const buildLocalizedUrl = (target, language, languages, localisedUrls)=>{
|
|
38
44
|
const { pathname, search, hash } = (0, url_namespaceObject.splitUrlTarget)(target);
|
|
39
|
-
return `${(0,
|
|
45
|
+
return `${(0, localised_urls_namespaceObject.localiseTargetPathname)(pathname, language, languages, localisedUrls)}${search}${hash}`;
|
|
40
46
|
};
|
|
41
47
|
const localizePath = (target, language, config)=>buildLocalizedUrl(target, language, config.languages, config.localisedUrls);
|
|
42
48
|
const canonicalPath = (target, config)=>{
|
|
43
49
|
const { pathname, search, hash } = (0, url_namespaceObject.splitUrlTarget)(target);
|
|
44
|
-
return `${(0,
|
|
50
|
+
return `${(0, localised_urls_namespaceObject.canonicalTargetPathname)(pathname, config.languages, config.localisedUrls)}${search}${hash}`;
|
|
45
51
|
};
|
|
46
52
|
exports.buildLocalizedUrl = __webpack_exports__.buildLocalizedUrl;
|
|
47
53
|
exports.canonicalPath = __webpack_exports__.canonicalPath;
|
|
54
|
+
exports.configuredLanguage = __webpack_exports__.configuredLanguage;
|
|
48
55
|
exports.localizePath = __webpack_exports__.localizePath;
|
|
49
56
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
50
57
|
"buildLocalizedUrl",
|
|
51
58
|
"canonicalPath",
|
|
59
|
+
"configuredLanguage",
|
|
52
60
|
"localizePath"
|
|
53
61
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
54
62
|
Object.defineProperty(exports, '__esModule', {
|