@bleedingdev/modern-js-runtime 3.5.0-ultramodern.5 → 3.5.0-ultramodern.75
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/boundary-debugger/index.js +13 -3
- package/dist/cjs/cli/registry.js +18 -0
- package/dist/cjs/cli/ssr/index.js +3 -2
- package/dist/cjs/cli/ssr/loadable-bundler-plugin.js +8 -4
- package/dist/cjs/core/browser/hydrate.js +16 -2
- package/dist/cjs/core/browser/index.js +15 -3
- package/dist/cjs/core/context/index.js +3 -0
- package/dist/cjs/core/context/public.js +49 -0
- package/dist/cjs/core/context/runtime.js +6 -8
- package/dist/cjs/core/react/wrapper.js +57 -0
- package/dist/cjs/core/server/federatedCss.js +7 -3
- package/dist/cjs/core/server/requestHandler.js +15 -45
- package/dist/cjs/core/server/requestResponse.js +83 -0
- package/dist/cjs/core/server/routerCleanup.js +16 -6
- package/dist/cjs/core/server/scriptOrder.js +13 -10
- package/dist/cjs/core/server/stream/afterTemplate.js +9 -5
- package/dist/cjs/core/server/stream/template.js +3 -3
- package/dist/cjs/core/server/string/loadable.js +3 -11
- package/dist/cjs/index.js +7 -6
- package/dist/cjs/module-federation/consume-surface.js +199 -0
- package/dist/cjs/module-federation/distributed-ssr.js +134 -0
- package/dist/cjs/module-federation/index.js +258 -120
- package/dist/cjs/module-federation/last-known-good.js +124 -0
- package/dist/cjs/module-federation/manifest-recovery-runtime-plugin.js +140 -0
- package/dist/cjs/module-federation/surface-resolution-types.js +61 -0
- package/dist/cjs/router/cli/code/nestedRoutes.js +3 -0
- package/dist/cjs/router/cli/code/templates.js +3 -2
- package/dist/cjs/router/cli/constants.js +1 -0
- package/dist/cjs/router/cli/nestedRoutesSpec.js +3 -1
- package/dist/cjs/router/runtime/hooks.js +7 -6
- package/dist/cjs/router/runtime/internal.js +30 -16
- package/dist/cjs/router/runtime/plugin.js +6 -7
- package/dist/cjs/router/runtime/provider.js +58 -12
- package/dist/esm/boundary-debugger/index.mjs +13 -3
- package/dist/esm/cli/code.mjs +12 -12
- package/dist/esm/cli/registry.mjs +0 -0
- package/dist/esm/cli/ssr/index.mjs +3 -2
- package/dist/esm/cli/ssr/loadable-bundler-plugin.mjs +8 -4
- package/dist/esm/core/browser/hydrate.mjs +15 -4
- package/dist/esm/core/browser/index.mjs +11 -5
- package/dist/esm/core/context/index.mjs +1 -1
- package/dist/esm/core/context/public.mjs +5 -0
- package/dist/esm/core/context/runtime.mjs +4 -6
- package/dist/esm/core/react/wrapper.mjs +58 -1
- package/dist/esm/core/server/federatedCss.mjs +7 -3
- package/dist/esm/core/server/requestHandler.mjs +15 -45
- package/dist/esm/core/server/requestResponse.mjs +39 -0
- package/dist/esm/core/server/routerCleanup.mjs +11 -4
- package/dist/esm/core/server/scriptOrder.mjs +11 -8
- package/dist/esm/core/server/stream/afterTemplate.mjs +10 -6
- package/dist/esm/core/server/stream/template.mjs +3 -3
- package/dist/esm/core/server/string/loadable.mjs +3 -8
- package/dist/esm/exports/loadable.mjs +3 -3
- package/dist/esm/index.mjs +2 -1
- package/dist/esm/module-federation/consume-surface.mjs +158 -0
- package/dist/esm/module-federation/distributed-ssr.mjs +81 -0
- package/dist/esm/module-federation/index.mjs +6 -0
- package/dist/esm/module-federation/last-known-good.mjs +80 -0
- package/dist/esm/module-federation/manifest-recovery-runtime-plugin.mjs +100 -0
- package/dist/esm/module-federation/surface-resolution-types.mjs +8 -0
- package/dist/esm/router/cli/code/index.mjs +5 -5
- package/dist/esm/router/cli/code/nestedRoutes.mjs +3 -0
- package/dist/esm/router/cli/code/templates.mjs +3 -2
- package/dist/esm/router/cli/constants.mjs +1 -0
- package/dist/esm/router/cli/handler.mjs +3 -3
- package/dist/esm/router/cli/nestedRoutesSpec.mjs +3 -1
- package/dist/esm/router/runtime/hooks.mjs +7 -6
- package/dist/esm/router/runtime/internal.mjs +26 -18
- package/dist/esm/router/runtime/plugin.mjs +6 -7
- package/dist/esm/router/runtime/provider.mjs +56 -13
- package/dist/esm-node/boundary-debugger/index.mjs +13 -3
- package/dist/esm-node/cli/code.mjs +12 -12
- package/dist/esm-node/cli/registry.mjs +1 -0
- package/dist/esm-node/cli/ssr/index.mjs +3 -2
- package/dist/esm-node/cli/ssr/loadable-bundler-plugin.mjs +8 -4
- package/dist/esm-node/core/browser/hydrate.mjs +15 -4
- package/dist/esm-node/core/browser/index.mjs +11 -5
- package/dist/esm-node/core/context/index.mjs +1 -1
- package/dist/esm-node/core/context/public.mjs +6 -0
- package/dist/esm-node/core/context/runtime.mjs +4 -6
- package/dist/esm-node/core/react/wrapper.mjs +58 -1
- package/dist/esm-node/core/server/federatedCss.mjs +7 -3
- package/dist/esm-node/core/server/requestHandler.mjs +15 -45
- package/dist/esm-node/core/server/requestResponse.mjs +40 -0
- package/dist/esm-node/core/server/routerCleanup.mjs +11 -4
- package/dist/esm-node/core/server/scriptOrder.mjs +11 -8
- package/dist/esm-node/core/server/stream/afterTemplate.mjs +10 -6
- package/dist/esm-node/core/server/stream/template.mjs +3 -3
- package/dist/esm-node/core/server/string/loadable.mjs +3 -8
- package/dist/esm-node/exports/loadable.mjs +3 -3
- package/dist/esm-node/index.mjs +2 -1
- package/dist/esm-node/module-federation/consume-surface.mjs +159 -0
- package/dist/esm-node/module-federation/distributed-ssr.mjs +82 -0
- package/dist/esm-node/module-federation/index.mjs +6 -0
- package/dist/esm-node/module-federation/last-known-good.mjs +81 -0
- package/dist/esm-node/module-federation/manifest-recovery-runtime-plugin.mjs +101 -0
- package/dist/esm-node/module-federation/surface-resolution-types.mjs +9 -0
- package/dist/esm-node/router/cli/code/index.mjs +5 -5
- package/dist/esm-node/router/cli/code/nestedRoutes.mjs +3 -0
- package/dist/esm-node/router/cli/code/templates.mjs +3 -2
- package/dist/esm-node/router/cli/constants.mjs +1 -0
- package/dist/esm-node/router/cli/handler.mjs +3 -3
- package/dist/esm-node/router/cli/nestedRoutesSpec.mjs +3 -1
- package/dist/esm-node/router/runtime/hooks.mjs +7 -6
- package/dist/esm-node/router/runtime/internal.mjs +26 -18
- package/dist/esm-node/router/runtime/plugin.mjs +6 -7
- package/dist/esm-node/router/runtime/provider.mjs +56 -13
- package/dist/types/boundary-debugger/index.d.ts +1 -1
- package/dist/types/cli/registry.d.ts +2 -0
- package/dist/types/common.d.ts +8 -1
- package/dist/types/core/browser/hydrate.d.ts +2 -1
- package/dist/types/core/browser/index.d.ts +4 -0
- package/dist/types/core/context/index.d.ts +26 -10
- package/dist/types/core/context/monitors/default.d.ts +10 -2
- package/dist/types/core/context/monitors/index.d.ts +1 -1
- package/dist/types/core/context/monitors/index.server.d.ts +2 -2
- package/dist/types/core/context/public.d.ts +27 -0
- package/dist/types/core/context/runtime.d.ts +12 -22
- package/dist/types/core/react/index.d.ts +1 -1
- package/dist/types/core/server/requestResponse.d.ts +15 -0
- package/dist/types/core/server/routerCleanup.d.ts +2 -1
- package/dist/types/core/server/scriptOrder.d.ts +1 -1
- package/dist/types/core/server/stream/shared.d.ts +2 -2
- package/dist/types/core/server/string/loadable.d.ts +0 -2
- package/dist/types/exports/head.d.ts +1 -1
- package/dist/types/index.d.ts +5 -5
- package/dist/types/internal.d.ts +0 -1
- package/dist/types/module-federation/consume-surface.d.ts +104 -0
- package/dist/types/module-federation/distributed-ssr.d.ts +61 -0
- package/dist/types/module-federation/index.d.ts +6 -0
- package/dist/types/module-federation/last-known-good.d.ts +72 -0
- package/dist/types/module-federation/manifest-recovery-runtime-plugin.d.ts +25 -0
- package/dist/types/module-federation/surface-resolution-types.d.ts +23 -0
- package/dist/types/router/cli/constants.d.ts +1 -0
- package/dist/types/router/runtime/hooks.d.ts +10 -6
- package/dist/types/router/runtime/internal.d.ts +13 -3
- package/dist/types/router/runtime/plugin.d.ts +1 -1
- package/dist/types/router/runtime/plugin.node.d.ts +1 -1
- package/dist/types/router/runtime/provider.d.ts +28 -11
- package/dist/types/router/runtime/types.d.ts +27 -5
- package/package.json +46 -27
- package/dist/cjs/exports/tanstack-router.js +0 -83
- package/dist/esm/exports/tanstack-router.mjs +0 -30
- package/dist/esm-node/exports/tanstack-router.mjs +0 -31
- package/dist/types/exports/tanstack-router.d.ts +0 -88
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
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");
|
|
13
|
+
};
|
|
14
|
+
})();
|
|
15
|
+
(()=>{
|
|
16
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
17
|
+
})();
|
|
18
|
+
(()=>{
|
|
19
|
+
__webpack_require__.r = (exports1)=>{
|
|
20
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
21
|
+
value: 'Module'
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
24
|
+
value: true
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
})();
|
|
28
|
+
var __webpack_exports__ = {};
|
|
29
|
+
__webpack_require__.r(__webpack_exports__);
|
|
30
|
+
const DEFAULT_ATTEMPTS = 3;
|
|
31
|
+
const DEFAULT_RETRY_DELAY_MS = 100;
|
|
32
|
+
const DEFAULT_TIMEOUT_MS = 1000;
|
|
33
|
+
const MAX_ATTEMPTS = 5;
|
|
34
|
+
const MAX_RETRY_DELAY_MS = 1000;
|
|
35
|
+
const MAX_TIMEOUT_MS = 5000;
|
|
36
|
+
const RETRYABLE_HTTP_STATUSES = new Set([
|
|
37
|
+
408,
|
|
38
|
+
425,
|
|
39
|
+
429,
|
|
40
|
+
500,
|
|
41
|
+
502,
|
|
42
|
+
503,
|
|
43
|
+
504
|
|
44
|
+
]);
|
|
45
|
+
const NON_RETRYABLE_ERROR_PATTERNS = [
|
|
46
|
+
/RUNTIME-013/i,
|
|
47
|
+
/invalid manifest/i,
|
|
48
|
+
/manifest (?:schema|contract|version|identity)/i,
|
|
49
|
+
/(?:incompatible|mismatch).*(?:manifest|remote)/i
|
|
50
|
+
];
|
|
51
|
+
const clampInteger = (value, fallback, minimum, maximum)=>{
|
|
52
|
+
if (void 0 === value || !Number.isFinite(value)) return fallback;
|
|
53
|
+
return Math.min(maximum, Math.max(minimum, Math.floor(value)));
|
|
54
|
+
};
|
|
55
|
+
const getErrorMessage = (error)=>{
|
|
56
|
+
if (error instanceof Error) return error.message;
|
|
57
|
+
return 'string' == typeof error ? error : '';
|
|
58
|
+
};
|
|
59
|
+
const getErrorStatus = (error)=>{
|
|
60
|
+
if ('object' == typeof error && null !== error && 'status' in error && 'number' == typeof error.status) return error.status;
|
|
61
|
+
};
|
|
62
|
+
const isRetryableError = (error)=>{
|
|
63
|
+
if (error instanceof SyntaxError) return false;
|
|
64
|
+
const message = getErrorMessage(error);
|
|
65
|
+
if (NON_RETRYABLE_ERROR_PATTERNS.some((pattern)=>pattern.test(message))) return false;
|
|
66
|
+
const status = getErrorStatus(error);
|
|
67
|
+
if (void 0 !== status) return RETRYABLE_HTTP_STATUSES.has(status);
|
|
68
|
+
if (error instanceof Error && [
|
|
69
|
+
'AbortError',
|
|
70
|
+
'TimeoutError'
|
|
71
|
+
].includes(error.name)) return true;
|
|
72
|
+
return error instanceof TypeError || /(?:fetch failed|network|ECONNREFUSED|ECONNRESET|ETIMEDOUT|EAI_AGAIN)/i.test(message);
|
|
73
|
+
};
|
|
74
|
+
const isHttpManifestUrl = (id)=>{
|
|
75
|
+
if (!id) return false;
|
|
76
|
+
try {
|
|
77
|
+
const url = new URL(id);
|
|
78
|
+
return ('http:' === url.protocol || 'https:' === url.protocol) && url.pathname.endsWith('.json');
|
|
79
|
+
} catch {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
const defaultWait = (milliseconds)=>new Promise((resolve)=>{
|
|
84
|
+
setTimeout(resolve, milliseconds);
|
|
85
|
+
});
|
|
86
|
+
const fetchWithTimeout = async (fetchImpl, url, timeoutMs)=>{
|
|
87
|
+
const controller = new AbortController();
|
|
88
|
+
const timeout = setTimeout(()=>controller.abort(), timeoutMs);
|
|
89
|
+
try {
|
|
90
|
+
return await fetchImpl(url, {
|
|
91
|
+
signal: controller.signal
|
|
92
|
+
});
|
|
93
|
+
} finally{
|
|
94
|
+
clearTimeout(timeout);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
const createModuleFederationManifestRecoveryPlugin = (options = {})=>{
|
|
98
|
+
const attempts = clampInteger(options.attempts, DEFAULT_ATTEMPTS, 1, MAX_ATTEMPTS);
|
|
99
|
+
const retryDelayMs = clampInteger(options.retryDelayMs, DEFAULT_RETRY_DELAY_MS, 0, MAX_RETRY_DELAY_MS);
|
|
100
|
+
const timeoutMs = clampInteger(options.timeoutMs, DEFAULT_TIMEOUT_MS, 1, MAX_TIMEOUT_MS);
|
|
101
|
+
const fetchImpl = options.fetchImpl ?? globalThis.fetch;
|
|
102
|
+
const waitImpl = options.waitImpl ?? defaultWait;
|
|
103
|
+
return {
|
|
104
|
+
name: 'modern-js-manifest-recovery-plugin',
|
|
105
|
+
async errorLoadRemote (args) {
|
|
106
|
+
if ('afterResolve' !== args.lifecycle || !isHttpManifestUrl(args.id) || !isRetryableError(args.error) || 'function' != typeof fetchImpl) return;
|
|
107
|
+
for(let attempt = 0; attempt < attempts; attempt++){
|
|
108
|
+
if (attempt > 0 && retryDelayMs > 0) await waitImpl(retryDelayMs);
|
|
109
|
+
try {
|
|
110
|
+
const response = await fetchWithTimeout(fetchImpl, args.id, timeoutMs);
|
|
111
|
+
if (!response.ok) {
|
|
112
|
+
if (!RETRYABLE_HTTP_STATUSES.has(response.status) || attempt === attempts - 1) return;
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
return await response.json();
|
|
117
|
+
} catch {
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
} catch (error) {
|
|
121
|
+
if (!isRetryableError(error) || attempt === attempts - 1) break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
const __rspack_default_export = createModuleFederationManifestRecoveryPlugin;
|
|
128
|
+
__webpack_require__.d(__webpack_exports__, {}, {
|
|
129
|
+
createModuleFederationManifestRecoveryPlugin: createModuleFederationManifestRecoveryPlugin,
|
|
130
|
+
default: __rspack_default_export
|
|
131
|
+
});
|
|
132
|
+
exports.createModuleFederationManifestRecoveryPlugin = __webpack_exports__.createModuleFederationManifestRecoveryPlugin;
|
|
133
|
+
exports["default"] = __webpack_exports__["default"];
|
|
134
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
135
|
+
"createModuleFederationManifestRecoveryPlugin",
|
|
136
|
+
"default"
|
|
137
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
138
|
+
Object.defineProperty(exports, '__esModule', {
|
|
139
|
+
value: true
|
|
140
|
+
});
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
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");
|
|
13
|
+
};
|
|
14
|
+
})();
|
|
15
|
+
(()=>{
|
|
16
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
17
|
+
})();
|
|
18
|
+
(()=>{
|
|
19
|
+
__webpack_require__.r = (exports1)=>{
|
|
20
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
21
|
+
value: 'Module'
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
24
|
+
value: true
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
})();
|
|
28
|
+
var __webpack_exports__ = {};
|
|
29
|
+
__webpack_require__.r(__webpack_exports__);
|
|
30
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
createDiscoveryError: ()=>universal_namespaceObject.createDiscoveryError,
|
|
32
|
+
deliveryUnitResolutionKey: ()=>deliveryUnitResolutionKey,
|
|
33
|
+
formatSurfaceRef: ()=>universal_namespaceObject.formatSurfaceRef,
|
|
34
|
+
parseSurfaceRef: ()=>universal_namespaceObject.parseSurfaceRef,
|
|
35
|
+
surfaceResolutionKey: ()=>surfaceResolutionKey,
|
|
36
|
+
validateSurfaceRef: ()=>universal_namespaceObject.validateSurfaceRef
|
|
37
|
+
});
|
|
38
|
+
const universal_namespaceObject = require("@modern-js/utils/universal");
|
|
39
|
+
function surfaceResolutionKey(ref, env) {
|
|
40
|
+
return `${env}::${(0, universal_namespaceObject.formatSurfaceRef)(ref)}`;
|
|
41
|
+
}
|
|
42
|
+
function deliveryUnitResolutionKey(unitId, env) {
|
|
43
|
+
return `${env}::${unitId}`;
|
|
44
|
+
}
|
|
45
|
+
exports.createDiscoveryError = __webpack_exports__.createDiscoveryError;
|
|
46
|
+
exports.deliveryUnitResolutionKey = __webpack_exports__.deliveryUnitResolutionKey;
|
|
47
|
+
exports.formatSurfaceRef = __webpack_exports__.formatSurfaceRef;
|
|
48
|
+
exports.parseSurfaceRef = __webpack_exports__.parseSurfaceRef;
|
|
49
|
+
exports.surfaceResolutionKey = __webpack_exports__.surfaceResolutionKey;
|
|
50
|
+
exports.validateSurfaceRef = __webpack_exports__.validateSurfaceRef;
|
|
51
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
52
|
+
"createDiscoveryError",
|
|
53
|
+
"deliveryUnitResolutionKey",
|
|
54
|
+
"formatSurfaceRef",
|
|
55
|
+
"parseSurfaceRef",
|
|
56
|
+
"surfaceResolutionKey",
|
|
57
|
+
"validateSurfaceRef"
|
|
58
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
59
|
+
Object.defineProperty(exports, '__esModule', {
|
|
60
|
+
value: true
|
|
61
|
+
});
|
|
@@ -116,6 +116,7 @@ const walk = async (options)=>{
|
|
|
116
116
|
let pageLoaderFile = '';
|
|
117
117
|
let pageRoute = null;
|
|
118
118
|
let pageConfigFile = '';
|
|
119
|
+
let pageSearchFile = '';
|
|
119
120
|
let pageClientData = '';
|
|
120
121
|
let pageData = '';
|
|
121
122
|
let pageAction = '';
|
|
@@ -162,12 +163,14 @@ const walk = async (options)=>{
|
|
|
162
163
|
if (await (0, external_utils_js_namespaceObject.hasAction)(itemPath)) pageAction = itemPathWithAlias;
|
|
163
164
|
}
|
|
164
165
|
if (itemWithoutExt === external_constants_js_namespaceObject.NESTED_ROUTE.PAGE_CONFIG_FILE) pageConfigFile = itemPathWithAlias;
|
|
166
|
+
if (itemWithoutExt === external_constants_js_namespaceObject.NESTED_ROUTE.PAGE_SEARCH_FILE) pageSearchFile = itemPathWithAlias;
|
|
165
167
|
if (itemWithoutExt === external_constants_js_namespaceObject.NESTED_ROUTE.PAGE_FILE) {
|
|
166
168
|
pageRoute = createIndexRoute({
|
|
167
169
|
_component: itemPathWithAlias
|
|
168
170
|
}, rootDir, itemPath, entryName, isMainEntry);
|
|
169
171
|
if (pageLoaderFile) pageRoute.loader = pageLoaderFile;
|
|
170
172
|
if (pageConfigFile) pageRoute.config = pageConfigFile;
|
|
173
|
+
if (pageSearchFile) pageRoute.validateSearch = pageSearchFile;
|
|
171
174
|
if (pageData) pageRoute.data = pageData;
|
|
172
175
|
if (pageClientData) pageRoute.clientData = pageClientData;
|
|
173
176
|
if (pageAction) pageRoute.action = pageAction;
|
|
@@ -227,7 +227,8 @@ const fileSystemRoutes = async ({ metaName, routes, ssrMode, nestedRoutesEntry,
|
|
|
227
227
|
component = `component_${components.length - 1}`;
|
|
228
228
|
}
|
|
229
229
|
const isClientComponent = 'nested' === route.type && Boolean(route._component) && Boolean(srcDirectory) && Boolean(internalSrcAlias) && await hasUseClientDirective(route._component, srcDirectory, internalSrcAlias);
|
|
230
|
-
const
|
|
230
|
+
const shouldHydrateRscRoute = isRscClientBundle && !isClientComponent && !route.loader && !route.data;
|
|
231
|
+
const shouldIncludeClientBundle = !isRscClientBundle || isClientComponent || shouldHydrateRscRoute;
|
|
231
232
|
const finalRoute = {
|
|
232
233
|
...route,
|
|
233
234
|
loading,
|
|
@@ -330,7 +331,7 @@ const fileSystemRoutes = async ({ metaName, routes, ssrMode, nestedRoutesEntry,
|
|
|
330
331
|
${importLazyCode}
|
|
331
332
|
${!isRscClientBundle ? importComponentsCode : ''}
|
|
332
333
|
${importRuntimeRouterCode}
|
|
333
|
-
${
|
|
334
|
+
${rootLayoutCode}
|
|
334
335
|
${importLoadingCode}
|
|
335
336
|
${importErrorComponentsCode}
|
|
336
337
|
${importLoadersCode}
|
|
@@ -43,6 +43,7 @@ const external_node_path_namespaceObject = require("node:path");
|
|
|
43
43
|
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
44
44
|
const promises_namespaceObject = require("node:timers/promises");
|
|
45
45
|
const utils_namespaceObject = require("@modern-js/utils");
|
|
46
|
+
const lodash_namespaceObject = require("@modern-js/utils/lodash");
|
|
46
47
|
const lockPollIntervalMs = 25;
|
|
47
48
|
const staleLockAgeMs = 120000;
|
|
48
49
|
const pendingUpdates = new Map();
|
|
@@ -85,6 +86,7 @@ async function writeJSONAtomically(filePath, value) {
|
|
|
85
86
|
}
|
|
86
87
|
async function updateNestedRoutesSpec(specPath, nextRoutes) {
|
|
87
88
|
const resolvedSpecPath = external_node_path_default().resolve(specPath);
|
|
89
|
+
const nextRoutesSnapshot = (0, lodash_namespaceObject.cloneDeep)(nextRoutes);
|
|
88
90
|
const previousUpdate = pendingUpdates.get(resolvedSpecPath) ?? Promise.resolve();
|
|
89
91
|
const currentUpdate = previousUpdate.catch(()=>void 0).then(async ()=>{
|
|
90
92
|
const releaseLock = await acquireSpecLock(resolvedSpecPath);
|
|
@@ -92,7 +94,7 @@ async function updateNestedRoutesSpec(specPath, nextRoutes) {
|
|
|
92
94
|
const existingRoutes = await utils_namespaceObject.fs.pathExists(resolvedSpecPath) ? await utils_namespaceObject.fs.readJSON(resolvedSpecPath) : {};
|
|
93
95
|
await writeJSONAtomically(resolvedSpecPath, {
|
|
94
96
|
...existingRoutes,
|
|
95
|
-
...
|
|
97
|
+
...nextRoutesSnapshot
|
|
96
98
|
});
|
|
97
99
|
} finally{
|
|
98
100
|
await releaseLock();
|
|
@@ -36,12 +36,13 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
36
36
|
onBeforeHydrateRouter: ()=>onBeforeHydrateRouter
|
|
37
37
|
});
|
|
38
38
|
const plugin_namespaceObject = require("@modern-js/plugin");
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
const
|
|
44
|
-
const
|
|
39
|
+
const createRouterSyncHook = ()=>(0, plugin_namespaceObject.createSyncHook)();
|
|
40
|
+
const modifyRoutes = createRouterSyncHook();
|
|
41
|
+
const onBeforeCreateRoutes = createRouterSyncHook();
|
|
42
|
+
const onBeforeCreateRouter = createRouterSyncHook();
|
|
43
|
+
const onAfterCreateRouter = createRouterSyncHook();
|
|
44
|
+
const onBeforeHydrateRouter = createRouterSyncHook();
|
|
45
|
+
const onAfterHydrateRouter = createRouterSyncHook();
|
|
45
46
|
exports.modifyRoutes = __webpack_exports__.modifyRoutes;
|
|
46
47
|
exports.onAfterCreateRouter = __webpack_exports__.onAfterCreateRouter;
|
|
47
48
|
exports.onAfterHydrateRouter = __webpack_exports__.onAfterHydrateRouter;
|
|
@@ -28,6 +28,8 @@ var __webpack_require__ = {};
|
|
|
28
28
|
var __webpack_exports__ = {};
|
|
29
29
|
__webpack_require__.r(__webpack_exports__);
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
createRouterPlugin: ()=>createRouterPlugin,
|
|
32
|
+
createRouterProviderRealm: ()=>external_provider_js_namespaceObject.createRouterProviderRealm,
|
|
31
33
|
default: ()=>internal,
|
|
32
34
|
modifyRoutes: ()=>external_plugin_js_namespaceObject.modifyRoutes,
|
|
33
35
|
registerRouterProvider: ()=>external_provider_js_namespaceObject.registerRouterProvider,
|
|
@@ -42,23 +44,33 @@ const external_utils_js_namespaceObject = require("./utils.js");
|
|
|
42
44
|
(0, external_provider_js_namespaceObject.registerRouterProvider)('react-router', external_plugin_js_namespaceObject.routerPlugin, {
|
|
43
45
|
isDefault: true
|
|
44
46
|
});
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
47
|
+
const createRouterPlugin = (localProviders = [])=>{
|
|
48
|
+
const providerRealm = (0, external_provider_js_namespaceObject.createRouterProviderRealm)([
|
|
49
|
+
{
|
|
50
|
+
name: 'react-router',
|
|
51
|
+
factory: external_plugin_js_namespaceObject.routerPlugin,
|
|
52
|
+
isDefault: true
|
|
53
|
+
},
|
|
54
|
+
...localProviders
|
|
55
|
+
]);
|
|
56
|
+
return (userConfig = {})=>({
|
|
57
|
+
name: '@modern-js/plugin-router',
|
|
58
|
+
registryHooks: external_provider_js_namespaceObject.routerProviderRegistryHooks,
|
|
59
|
+
setup: (api)=>{
|
|
60
|
+
const mergedConfig = (0, merge_namespaceObject.merge)(api.getRuntimeConfig().router || {}, userConfig);
|
|
61
|
+
const pluginFactory = (0, external_provider_js_namespaceObject.resolveRouterProvider)(mergedConfig.framework, {
|
|
62
|
+
realm: providerRealm
|
|
63
|
+
});
|
|
64
|
+
const providerPlugin = pluginFactory(userConfig);
|
|
65
|
+
(0, external_provider_js_namespaceObject.reportUnsupportedProviderRegistryHooks)(providerPlugin);
|
|
66
|
+
providerPlugin.setup?.(api);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
const routerPlugin = createRouterPlugin();
|
|
61
71
|
const internal = routerPlugin;
|
|
72
|
+
exports.createRouterPlugin = __webpack_exports__.createRouterPlugin;
|
|
73
|
+
exports.createRouterProviderRealm = __webpack_exports__.createRouterProviderRealm;
|
|
62
74
|
exports["default"] = __webpack_exports__["default"];
|
|
63
75
|
exports.modifyRoutes = __webpack_exports__.modifyRoutes;
|
|
64
76
|
exports.registerRouterProvider = __webpack_exports__.registerRouterProvider;
|
|
@@ -66,6 +78,8 @@ exports.renderRoutes = __webpack_exports__.renderRoutes;
|
|
|
66
78
|
exports.resolveRouterProvider = __webpack_exports__.resolveRouterProvider;
|
|
67
79
|
exports.routerPlugin = __webpack_exports__.routerPlugin;
|
|
68
80
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
81
|
+
"createRouterPlugin",
|
|
82
|
+
"createRouterProviderRealm",
|
|
69
83
|
"default",
|
|
70
84
|
"modifyRoutes",
|
|
71
85
|
"registerRouterProvider",
|
|
@@ -99,10 +99,10 @@ const routerPlugin = (userConfig = {})=>({
|
|
|
99
99
|
};
|
|
100
100
|
let cachedRouter = null;
|
|
101
101
|
const RouterWrapper = (props)=>{
|
|
102
|
-
const routerResult = useRouterCreation({
|
|
102
|
+
const routerResult = useRouterCreation(process.env.MODERN_ENABLE_RSC ? {
|
|
103
103
|
...props,
|
|
104
104
|
rscPayload: props?.rscPayload
|
|
105
|
-
}, {
|
|
105
|
+
} : props, {
|
|
106
106
|
api: api,
|
|
107
107
|
createRoutes,
|
|
108
108
|
supportHtml5History,
|
|
@@ -156,16 +156,15 @@ function useRouterCreation(props, options) {
|
|
|
156
156
|
const baseUrl = selectBasePath(location.pathname).replace(/^\/*/, '/');
|
|
157
157
|
const _basename = '/' === baseUrl ? (0, external_utils_js_namespaceObject.urlJoin)(baseUrl, runtimeContext._internalRouterBaseName || basename || '') : baseUrl;
|
|
158
158
|
const { unstable_getBlockNavState: getBlockNavState } = runtimeContext;
|
|
159
|
-
const rscPayload = props?.rscPayload ? safeUse(props.rscPayload) : null;
|
|
160
|
-
let hydrationData = window._ROUTER_DATA || rscPayload;
|
|
159
|
+
const rscPayload = process.env.MODERN_ENABLE_RSC && props?.rscPayload ? safeUse(props.rscPayload) : null;
|
|
160
|
+
let hydrationData = process.env.MODERN_ENABLE_RSC ? window._ROUTER_DATA || rscPayload : window._ROUTER_DATA;
|
|
161
161
|
return (0, external_react_namespaceObject.useMemo)(()=>{
|
|
162
162
|
if (hydrationData?.errors) hydrationData = {
|
|
163
163
|
...hydrationData,
|
|
164
164
|
errors: (0, external_utils_js_namespaceObject.deserializeErrors)(hydrationData.errors)
|
|
165
165
|
};
|
|
166
|
-
const isRscClient = (0, index_js_namespaceObject.getGlobalIsRscClient)();
|
|
167
166
|
let routes = null;
|
|
168
|
-
routes =
|
|
167
|
+
routes = process.env.MODERN_ENABLE_RSC && (0, index_js_namespaceObject.getGlobalIsRscClient)() ? createRoutes ? createRoutes() : (0, external_utils_js_namespaceObject.createRouteObjectsFromConfig)({
|
|
169
168
|
routesConfig: finalRouteConfig
|
|
170
169
|
}) : createRoutes ? createRoutes() : (0, router_namespaceObject.createRoutesFromElements)((0, external_utils_js_namespaceObject.renderRoutes)({
|
|
171
170
|
routesConfig: finalRouteConfig,
|
|
@@ -173,7 +172,7 @@ function useRouterCreation(props, options) {
|
|
|
173
172
|
}));
|
|
174
173
|
if (!routes) routes = [];
|
|
175
174
|
const hooks = api.getHooks();
|
|
176
|
-
if (rscPayload) try {
|
|
175
|
+
if (process.env.MODERN_ENABLE_RSC && rscPayload) try {
|
|
177
176
|
const router = (0, external_rsc_router_js_namespaceObject.createClientRouterFromPayload)(rscPayload, routes, _basename);
|
|
178
177
|
return {
|
|
179
178
|
router,
|
|
@@ -28,6 +28,7 @@ var __webpack_require__ = {};
|
|
|
28
28
|
var __webpack_exports__ = {};
|
|
29
29
|
__webpack_require__.r(__webpack_exports__);
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
createRouterProviderRealm: ()=>createRouterProviderRealm,
|
|
31
32
|
registerRouterProvider: ()=>registerRouterProvider,
|
|
32
33
|
reportUnsupportedProviderRegistryHooks: ()=>reportUnsupportedProviderRegistryHooks,
|
|
33
34
|
resolveRouterProvider: ()=>resolveRouterProvider,
|
|
@@ -48,54 +49,99 @@ function reportUnsupportedProviderRegistryHooks(providerPlugin) {
|
|
|
48
49
|
if (unsupportedHookNames.length > 0) console.warn(`[@modern-js/runtime] The router provider "${providerPlugin.name}" declares registry hooks outside the router hook contract: ${unsupportedHookNames.join(', ')}. These hooks are not registered when the provider is resolved through \`runtime.router.framework\` — declare them on a separate runtime plugin instead.`);
|
|
49
50
|
return unsupportedHookNames;
|
|
50
51
|
}
|
|
51
|
-
|
|
52
|
+
function createRouterProviderRealm(registrations) {
|
|
53
|
+
const providers = new Map();
|
|
54
|
+
let defaultProvider;
|
|
55
|
+
for (const registration of registrations){
|
|
56
|
+
if (!registration.name) throw new Error('[@modern-js/runtime] A router provider realm cannot contain an unnamed provider.');
|
|
57
|
+
if (providers.has(registration.name)) throw new Error(`[@modern-js/runtime] Router provider "${registration.name}" is declared more than once in the same runtime realm.`);
|
|
58
|
+
if (true === registration.isDefault && void 0 !== defaultProvider && defaultProvider !== registration.name) throw new Error(`[@modern-js/runtime] Router provider realm declares both "${defaultProvider}" and "${registration.name}" as defaults.`);
|
|
59
|
+
providers.set(registration.name, registration.factory);
|
|
60
|
+
if (true === registration.isDefault) defaultProvider = registration.name;
|
|
61
|
+
}
|
|
62
|
+
const providerNames = Object.freeze([
|
|
63
|
+
...providers.keys()
|
|
64
|
+
]);
|
|
65
|
+
return Object.freeze({
|
|
66
|
+
...defaultProvider ? {
|
|
67
|
+
defaultProvider
|
|
68
|
+
} : {},
|
|
69
|
+
get: (name)=>providers.get(name),
|
|
70
|
+
names: ()=>providerNames
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
const REGISTRY_SLOT = Symbol.for('@modern-js/runtime:router-providers:v3');
|
|
74
|
+
const LEGACY_V2_REGISTRY_SLOT = Symbol.for('@modern-js/runtime:router-providers:v2');
|
|
52
75
|
function getRegistry() {
|
|
53
76
|
const host = globalThis;
|
|
54
77
|
host[REGISTRY_SLOT] ??= {
|
|
55
78
|
providers: new Map(),
|
|
79
|
+
duplicateProviders: new Set(),
|
|
56
80
|
warnedDuplicates: new Set()
|
|
57
81
|
};
|
|
82
|
+
host[REGISTRY_SLOT].duplicateProviders ??= new Set();
|
|
58
83
|
host[REGISTRY_SLOT].warnedDuplicates ??= new Set();
|
|
59
84
|
return host[REGISTRY_SLOT];
|
|
60
85
|
}
|
|
86
|
+
function getLegacyV2Registry() {
|
|
87
|
+
const host = globalThis;
|
|
88
|
+
return host[LEGACY_V2_REGISTRY_SLOT];
|
|
89
|
+
}
|
|
61
90
|
function registerRouterProvider(name, factory, options = {}) {
|
|
62
91
|
const registry = getRegistry();
|
|
63
92
|
const existing = registry.providers.get(name);
|
|
64
93
|
if (void 0 !== existing) {
|
|
65
|
-
if (existing !== factory
|
|
66
|
-
registry.warnedDuplicates.add(name);
|
|
67
|
-
console.warn(`[@modern-js/runtime] The router provider "${name}" was registered more than once with different module instances; keeping the first registration. This usually means two copies of the providing plugin were bundled — for Module Federation, add the provider runtime (e.g. '@modern-js/plugin-tanstack/runtime') to the shared modules of both the host and the remote to deduplicate it.`);
|
|
68
|
-
}
|
|
94
|
+
if (existing !== factory) registry.duplicateProviders.add(name);
|
|
69
95
|
return;
|
|
70
96
|
}
|
|
71
|
-
if (true
|
|
72
|
-
if (void 0 !== registry.nonDefaultProvider && registry.nonDefaultProvider !== name) throw new Error(`[@modern-js/runtime] Cannot register router provider "${name}": the competing router provider "${registry.nonDefaultProvider}" is already registered. Only one non-default router provider may be installed at a time — remove one of the router plugins.`);
|
|
73
|
-
registry.nonDefaultProvider = name;
|
|
74
|
-
} else registry.defaultProvider = name;
|
|
97
|
+
if (true === options.isDefault) registry.defaultProvider = name;
|
|
75
98
|
registry.providers.set(name, factory);
|
|
76
99
|
}
|
|
77
100
|
function resolveRouterProvider(framework, options = {}) {
|
|
101
|
+
if (void 0 !== options.realm) {
|
|
102
|
+
const name = framework || options.realm.defaultProvider;
|
|
103
|
+
const realmProviderNames = options.realm.names();
|
|
104
|
+
if (void 0 === name) throw new Error(`[@modern-js/runtime] The app-owned router provider realm does not declare a default provider. Available realm providers: ${realmProviderNames.join(', ') || '(none)'}.`);
|
|
105
|
+
const factory = options.realm.get(name);
|
|
106
|
+
if (void 0 === factory) throw new Error(`[@modern-js/runtime] Router provider "${name}" is not registered in the app-owned router provider realm. Available realm providers: ${realmProviderNames.join(', ') || '(none)'}. Compatibility registry fallback is disabled for app-owned realms.`);
|
|
107
|
+
return factory;
|
|
108
|
+
}
|
|
78
109
|
const registry = getRegistry();
|
|
79
|
-
const
|
|
110
|
+
const legacyV2Registry = getLegacyV2Registry();
|
|
111
|
+
const name = framework || options.localDefault?.name || registry.defaultProvider || legacyV2Registry?.defaultProvider;
|
|
80
112
|
if (void 0 === name) throw new Error('[@modern-js/runtime] No default router provider is registered. This is a bug in the runtime setup.');
|
|
81
113
|
if (void 0 !== options.localDefault && name === options.localDefault.name) return options.localDefault.factory;
|
|
82
114
|
const factory = registry.providers.get(name);
|
|
83
|
-
if (void 0 !== factory)
|
|
115
|
+
if (void 0 !== factory) {
|
|
116
|
+
if (registry.duplicateProviders.has(name) && !registry.warnedDuplicates.has(name)) {
|
|
117
|
+
registry.warnedDuplicates.add(name);
|
|
118
|
+
console.warn(`[@modern-js/runtime] The router provider "${name}" was registered more than once with different module instances, and a router wrapper without an app-owned provider realm is resolving the mixed-version compatibility fallback. The fallback is keeping the first registration. Modern router wrappers isolate app-owned realms automatically. For an older wrapper, share the provider runtime between Module Federation host and remotes or upgrade every app to a realm-aware runtime.`);
|
|
119
|
+
}
|
|
120
|
+
return factory;
|
|
121
|
+
}
|
|
122
|
+
const legacyV2Factory = legacyV2Registry?.providers.get(name);
|
|
123
|
+
if (void 0 !== legacyV2Factory) return legacyV2Factory;
|
|
84
124
|
if ('tanstack' === name) throw new Error("[@modern-js/runtime] `runtime.router.framework` is set to \"tanstack\", but no TanStack router provider is registered. Install @modern-js/plugin-tanstack, add `tanstackRouterPlugin()` to the `plugins` array in modern.config.ts, and make sure '@modern-js/plugin-tanstack/runtime' is imported (e.g. in modern.runtime.ts).");
|
|
85
125
|
throw new Error(`[@modern-js/runtime] Unknown router framework "${name}". Registered providers: ${[
|
|
86
|
-
...
|
|
126
|
+
...new Set([
|
|
127
|
+
...registry.providers.keys(),
|
|
128
|
+
...legacyV2Registry?.providers.keys() ?? []
|
|
129
|
+
])
|
|
87
130
|
].join(', ') || '(none)'}. Install and register the plugin that provides this router framework.`);
|
|
88
131
|
}
|
|
89
132
|
function unsafe_resetRouterProvidersForTesting() {
|
|
90
133
|
const host = globalThis;
|
|
91
134
|
delete host[REGISTRY_SLOT];
|
|
135
|
+
delete host[LEGACY_V2_REGISTRY_SLOT];
|
|
92
136
|
}
|
|
137
|
+
exports.createRouterProviderRealm = __webpack_exports__.createRouterProviderRealm;
|
|
93
138
|
exports.registerRouterProvider = __webpack_exports__.registerRouterProvider;
|
|
94
139
|
exports.reportUnsupportedProviderRegistryHooks = __webpack_exports__.reportUnsupportedProviderRegistryHooks;
|
|
95
140
|
exports.resolveRouterProvider = __webpack_exports__.resolveRouterProvider;
|
|
96
141
|
exports.routerProviderRegistryHooks = __webpack_exports__.routerProviderRegistryHooks;
|
|
97
142
|
exports.unsafe_resetRouterProvidersForTesting = __webpack_exports__.unsafe_resetRouterProvidersForTesting;
|
|
98
143
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
144
|
+
"createRouterProviderRealm",
|
|
99
145
|
"registerRouterProvider",
|
|
100
146
|
"reportUnsupportedProviderRegistryHooks",
|
|
101
147
|
"resolveRouterProvider",
|
|
@@ -109,9 +109,20 @@ function BoundaryDebugger({ controlMode = 'visible', enabledByDefault = false, l
|
|
|
109
109
|
]);
|
|
110
110
|
useEffect(()=>{
|
|
111
111
|
if (!enabled) return void setBoxes([]);
|
|
112
|
+
let resizeObserver;
|
|
113
|
+
const observedElements = new Set();
|
|
114
|
+
const observeBoundaryElements = (elements)=>{
|
|
115
|
+
if (void 0 === resizeObserver) return;
|
|
116
|
+
for (const element of elements)if (!observedElements.has(element)) {
|
|
117
|
+
observedElements.add(element);
|
|
118
|
+
resizeObserver.observe(element);
|
|
119
|
+
}
|
|
120
|
+
};
|
|
112
121
|
const readBoxes = ()=>{
|
|
122
|
+
const elements = collectBoundaryElements(legacySelector);
|
|
123
|
+
observeBoundaryElements(elements);
|
|
113
124
|
const seenBoxes = new Set();
|
|
114
|
-
const nextBoxes =
|
|
125
|
+
const nextBoxes = elements.map((element)=>{
|
|
115
126
|
const boundaryId = getBoundaryId(element);
|
|
116
127
|
if (void 0 === boundaryId || '' === boundaryId) return;
|
|
117
128
|
const rect = element.getBoundingClientRect();
|
|
@@ -139,9 +150,8 @@ function BoundaryDebugger({ controlMode = 'visible', enabledByDefault = false, l
|
|
|
139
150
|
}).filter((box)=>void 0 !== box);
|
|
140
151
|
setBoxes(nextBoxes);
|
|
141
152
|
};
|
|
153
|
+
resizeObserver = "u" < typeof ResizeObserver ? void 0 : new ResizeObserver(readBoxes);
|
|
142
154
|
readBoxes();
|
|
143
|
-
const resizeObserver = "u" < typeof ResizeObserver ? void 0 : new ResizeObserver(readBoxes);
|
|
144
|
-
for (const element of collectBoundaryElements(legacySelector))resizeObserver?.observe(element);
|
|
145
155
|
const mutationObserver = new MutationObserver(readBoxes);
|
|
146
156
|
mutationObserver.observe(document.body, {
|
|
147
157
|
childList: true,
|