@bleedingdev/modern-js-runtime 3.8.3-ultramodern.6 → 3.9.0-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/cli/code.js +3 -1
- package/dist/cjs/cli/ssr/index.js +2 -74
- package/dist/cjs/core/browser/hydrate.js +6 -1
- package/dist/cjs/core/context/index.js +4 -43
- package/dist/cjs/core/context/public.js +4 -7
- package/dist/cjs/core/context/runtime.js +17 -5
- package/dist/cjs/core/react/wrapper.js +22 -65
- package/dist/cjs/core/server/helmet.js +5 -4
- package/dist/cjs/core/server/requestResponse.js +4 -4
- package/dist/cjs/core/server/routerCleanup.js +2 -2
- package/dist/cjs/core/server/shared.js +171 -4
- package/dist/cjs/core/server/stream/afterTemplate.js +21 -16
- package/dist/cjs/core/server/stream/beforeTemplate.js +34 -25
- package/dist/cjs/core/server/stream/beforeTemplate.worker.js +28 -21
- package/dist/cjs/core/server/stream/createReadableStream.js +208 -123
- package/dist/cjs/core/server/stream/createReadableStream.worker.js +159 -90
- package/dist/cjs/core/server/stream/deferredScript.js +3 -3
- package/dist/cjs/core/server/stream/shared.js +2 -2
- package/dist/cjs/core/server/string/index.js +100 -64
- package/dist/cjs/core/server/string/loadable.js +34 -19
- package/dist/cjs/core/server/string/ssrData.js +5 -12
- package/dist/cjs/core/server/utils.js +1 -2
- package/dist/cjs/document/cli/index.js +1 -2
- package/dist/cjs/exports/head.js +7 -14
- package/dist/cjs/router/runtime/PrefetchLink.js +67 -123
- package/dist/cjs/router/runtime/hooks.js +13 -2
- package/dist/cjs/router/runtime/internal.js +7 -45
- package/dist/cjs/router/runtime/plugin.js +2 -8
- package/dist/cjs/router/runtime/plugin.node.js +2 -30
- package/dist/cjs/router/runtime/redirect.js +1 -1
- package/dist/esm/cli/code.mjs +3 -1
- package/dist/esm/cli/ssr/index.mjs +3 -72
- package/dist/esm/core/browser/hydrate.mjs +7 -2
- package/dist/esm/core/context/index.mjs +2 -5
- package/dist/esm/core/context/public.mjs +1 -5
- package/dist/esm/core/context/runtime.mjs +13 -4
- package/dist/esm/core/react/wrapper.mjs +21 -67
- package/dist/esm/core/server/helmet.mjs +5 -4
- package/dist/esm/core/server/requestResponse.mjs +3 -3
- package/dist/esm/core/server/routerCleanup.mjs +1 -1
- package/dist/esm/core/server/shared.mjs +153 -1
- package/dist/esm/core/server/stream/afterTemplate.mjs +23 -18
- package/dist/esm/core/server/stream/beforeTemplate.mjs +37 -28
- package/dist/esm/core/server/stream/beforeTemplate.worker.mjs +31 -24
- package/dist/esm/core/server/stream/createReadableStream.mjs +207 -122
- package/dist/esm/core/server/stream/createReadableStream.worker.mjs +149 -90
- package/dist/esm/core/server/stream/deferredScript.mjs +3 -3
- package/dist/esm/core/server/stream/shared.mjs +2 -2
- package/dist/esm/core/server/string/index.mjs +104 -68
- package/dist/esm/core/server/string/loadable.mjs +34 -19
- package/dist/esm/core/server/string/ssrData.mjs +5 -12
- package/dist/esm/core/server/utils.mjs +1 -2
- package/dist/esm/document/cli/index.mjs +2 -3
- package/dist/esm/exports/head.mjs +7 -14
- package/dist/esm/router/runtime/PrefetchLink.mjs +68 -124
- package/dist/esm/router/runtime/hooks.mjs +9 -1
- package/dist/esm/router/runtime/internal.mjs +2 -33
- package/dist/esm/router/runtime/plugin.mjs +1 -7
- package/dist/esm/router/runtime/plugin.node.mjs +1 -29
- package/dist/esm/router/runtime/redirect.mjs +1 -1
- package/dist/esm-node/cli/code.mjs +3 -1
- package/dist/esm-node/cli/ssr/index.mjs +3 -72
- package/dist/esm-node/core/browser/hydrate.mjs +7 -2
- package/dist/esm-node/core/context/index.mjs +2 -5
- package/dist/esm-node/core/context/public.mjs +1 -5
- package/dist/esm-node/core/context/runtime.mjs +13 -4
- package/dist/esm-node/core/react/wrapper.mjs +21 -67
- package/dist/esm-node/core/server/helmet.mjs +5 -4
- package/dist/esm-node/core/server/requestResponse.mjs +3 -3
- package/dist/esm-node/core/server/routerCleanup.mjs +1 -1
- package/dist/esm-node/core/server/shared.mjs +153 -1
- package/dist/esm-node/core/server/stream/afterTemplate.mjs +23 -18
- package/dist/esm-node/core/server/stream/beforeTemplate.mjs +37 -28
- package/dist/esm-node/core/server/stream/beforeTemplate.worker.mjs +31 -24
- package/dist/esm-node/core/server/stream/createReadableStream.mjs +207 -122
- package/dist/esm-node/core/server/stream/createReadableStream.worker.mjs +149 -90
- package/dist/esm-node/core/server/stream/deferredScript.mjs +3 -3
- package/dist/esm-node/core/server/stream/shared.mjs +2 -2
- package/dist/esm-node/core/server/string/index.mjs +104 -68
- package/dist/esm-node/core/server/string/loadable.mjs +34 -19
- package/dist/esm-node/core/server/string/ssrData.mjs +5 -12
- package/dist/esm-node/core/server/utils.mjs +1 -2
- package/dist/esm-node/document/cli/index.mjs +2 -3
- package/dist/esm-node/exports/head.mjs +7 -14
- package/dist/esm-node/router/runtime/PrefetchLink.mjs +68 -124
- package/dist/esm-node/router/runtime/hooks.mjs +9 -1
- package/dist/esm-node/router/runtime/internal.mjs +2 -33
- package/dist/esm-node/router/runtime/plugin.mjs +1 -7
- package/dist/esm-node/router/runtime/plugin.node.mjs +1 -29
- package/dist/esm-node/router/runtime/redirect.mjs +1 -1
- package/dist/types/cli/index.d.ts +7 -7
- package/dist/types/cli/ssr/index.d.ts +0 -3
- package/dist/types/core/browser/hydrate.d.ts +1 -1
- package/dist/types/core/browser/index.d.ts +1 -1
- package/dist/types/core/compat/hooks.d.ts +1 -1
- package/dist/types/core/compat/index.d.ts +1 -1
- package/dist/types/core/compat/requestContext.d.ts +3 -3
- package/dist/types/core/config.d.ts +1 -1
- package/dist/types/core/context/index.d.ts +8 -10
- package/dist/types/core/context/monitors/index.d.ts +1 -1
- package/dist/types/core/context/monitors/index.server.d.ts +1 -1
- package/dist/types/core/context/public.d.ts +1 -23
- package/dist/types/core/context/runtime.d.ts +27 -3
- package/dist/types/core/context/serverPayload/index.d.ts +1 -1
- package/dist/types/core/index.d.ts +5 -5
- package/dist/types/core/plugin/index.d.ts +1 -1
- package/dist/types/core/plugin/types.d.ts +2 -2
- package/dist/types/core/react/wrapper.d.ts +7 -1
- package/dist/types/core/server/helmet.d.ts +4 -5
- package/dist/types/core/server/index.d.ts +2 -2
- package/dist/types/core/server/react/index.d.ts +2 -2
- package/dist/types/core/server/requestHandler.d.ts +3 -3
- package/dist/types/core/server/requestResponse.d.ts +3 -3
- package/dist/types/core/server/routerCleanup.d.ts +2 -2
- package/dist/types/core/server/server.d.ts +4 -4
- package/dist/types/core/server/shared.d.ts +25 -2
- package/dist/types/core/server/stream/afterTemplate.d.ts +5 -4
- package/dist/types/core/server/stream/beforeTemplate.d.ts +6 -3
- package/dist/types/core/server/stream/beforeTemplate.worker.d.ts +6 -3
- package/dist/types/core/server/stream/createReadableStream.d.ts +1 -1
- package/dist/types/core/server/stream/createReadableStream.worker.d.ts +1 -1
- package/dist/types/core/server/stream/index.d.ts +1 -1
- package/dist/types/core/server/stream/shared.d.ts +5 -5
- package/dist/types/core/server/stream/template.d.ts +2 -2
- package/dist/types/core/server/string/index.d.ts +1 -1
- package/dist/types/core/server/string/loadable.d.ts +7 -4
- package/dist/types/core/server/string/ssrData.d.ts +5 -4
- package/dist/types/core/server/string/types.d.ts +2 -6
- package/dist/types/core/server/tracer.d.ts +1 -1
- package/dist/types/core/server/utils.d.ts +2 -2
- package/dist/types/core/types.d.ts +2 -3
- package/dist/types/document/index.d.ts +12 -12
- package/dist/types/exports/config-routes.d.ts +1 -1
- package/dist/types/exports/head.d.ts +2 -2
- package/dist/types/index.d.ts +9 -9
- package/dist/types/internal.d.ts +1 -1
- package/dist/types/react-server.d.ts +3 -3
- package/dist/types/router/cli/code/getClientRoutes/index.d.ts +1 -1
- package/dist/types/router/cli/handler.d.ts +1 -1
- package/dist/types/router/cli/index.d.ts +3 -3
- package/dist/types/router/index.d.ts +1 -1
- package/dist/types/router/internal.d.ts +2 -2
- package/dist/types/router/runtime/PrefetchLink.d.ts +27 -2
- package/dist/types/router/runtime/hooks.d.ts +19 -2
- package/dist/types/router/runtime/index.d.ts +4 -4
- package/dist/types/router/runtime/internal.d.ts +5 -22
- package/dist/types/router/runtime/plugin.d.ts +3 -3
- package/dist/types/router/runtime/plugin.node.d.ts +3 -3
- package/dist/types/router/runtime/rsc-router.d.ts +3 -3
- package/dist/types/router/runtime/types.d.ts +2 -43
- package/dist/types/router/runtime/utils.d.ts +1 -1
- package/package.json +19 -47
- package/rstest.config.mts +32 -2
- package/dist/cjs/boundary-debugger/index.js +0 -317
- package/dist/cjs/core/context/extensions.js +0 -74
- package/dist/cjs/core/context/helmetContext.js +0 -54
- package/dist/cjs/core/server/federatedCss.js +0 -58
- package/dist/cjs/core/server/scriptOrder.js +0 -140
- package/dist/cjs/module-federation/consume-surface.js +0 -199
- package/dist/cjs/module-federation/distributed-ssr.js +0 -135
- package/dist/cjs/module-federation/index.js +0 -316
- package/dist/cjs/module-federation/last-known-good.js +0 -157
- package/dist/cjs/module-federation/manifest-recovery-runtime-plugin.js +0 -129
- package/dist/cjs/module-federation/surface-resolution-types.js +0 -61
- package/dist/cjs/router/runtime/lifecycle.js +0 -167
- package/dist/cjs/router/runtime/provider.js +0 -153
- package/dist/esm/boundary-debugger/index.mjs +0 -277
- package/dist/esm/core/context/extensions.mjs +0 -33
- package/dist/esm/core/context/helmetContext.mjs +0 -13
- package/dist/esm/core/server/federatedCss.mjs +0 -20
- package/dist/esm/core/server/scriptOrder.mjs +0 -90
- package/dist/esm/module-federation/consume-surface.mjs +0 -158
- package/dist/esm/module-federation/distributed-ssr.mjs +0 -82
- package/dist/esm/module-federation/index.mjs +0 -115
- package/dist/esm/module-federation/last-known-good.mjs +0 -113
- package/dist/esm/module-federation/manifest-recovery-runtime-plugin.mjs +0 -89
- package/dist/esm/module-federation/surface-resolution-types.mjs +0 -8
- package/dist/esm/router/runtime/lifecycle.mjs +0 -105
- package/dist/esm/router/runtime/provider.mjs +0 -100
- package/dist/esm-node/boundary-debugger/index.mjs +0 -278
- package/dist/esm-node/core/context/extensions.mjs +0 -34
- package/dist/esm-node/core/context/helmetContext.mjs +0 -14
- package/dist/esm-node/core/server/federatedCss.mjs +0 -21
- package/dist/esm-node/core/server/scriptOrder.mjs +0 -91
- package/dist/esm-node/module-federation/consume-surface.mjs +0 -159
- package/dist/esm-node/module-federation/distributed-ssr.mjs +0 -83
- package/dist/esm-node/module-federation/index.mjs +0 -116
- package/dist/esm-node/module-federation/last-known-good.mjs +0 -114
- package/dist/esm-node/module-federation/manifest-recovery-runtime-plugin.mjs +0 -90
- package/dist/esm-node/module-federation/surface-resolution-types.mjs +0 -9
- package/dist/esm-node/router/runtime/lifecycle.mjs +0 -106
- package/dist/esm-node/router/runtime/provider.mjs +0 -101
- package/dist/types/boundary-debugger/index.d.ts +0 -28
- package/dist/types/core/context/extensions.d.ts +0 -35
- package/dist/types/core/context/helmetContext.d.ts +0 -10
- package/dist/types/core/server/federatedCss.d.ts +0 -5
- package/dist/types/core/server/scriptOrder.d.ts +0 -25
- package/dist/types/module-federation/consume-surface.d.ts +0 -104
- package/dist/types/module-federation/distributed-ssr.d.ts +0 -61
- package/dist/types/module-federation/index.d.ts +0 -71
- package/dist/types/module-federation/last-known-good.d.ts +0 -52
- package/dist/types/module-federation/manifest-recovery-runtime-plugin.d.ts +0 -25
- package/dist/types/module-federation/surface-resolution-types.d.ts +0 -23
- package/dist/types/router/runtime/lifecycle.d.ts +0 -27
- package/dist/types/router/runtime/provider.d.ts +0 -78
- /package/dist/esm/{rslib-runtime.mjs → rslib-runtime~1.mjs} +0 -0
- /package/dist/esm-node/{rslib-runtime.mjs → rslib-runtime~0.mjs} +0 -0
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { getNavigationWarmupCacheKey } from "@modern-js/runtime-extensions";
|
|
4
3
|
import { Link as router_Link, NavLink, matchRoutes, useHref, useMatches, useResolvedPath } from "@modern-js/runtime-utils/router";
|
|
5
4
|
import react, { useContext, useMemo } from "react";
|
|
6
5
|
import { InternalRuntimeContext } from "../../core/context/index.mjs";
|
|
7
|
-
import { __webpack_require__ } from "../../rslib-runtime.mjs";
|
|
6
|
+
import { __webpack_require__ } from "../../rslib-runtime~1.mjs";
|
|
8
7
|
const getWebpackChunkLoader = ()=>__webpack_chunk_load__;
|
|
9
8
|
const getWebpackPublicPath = ()=>{
|
|
10
9
|
try {
|
|
@@ -20,62 +19,6 @@ function composeEventHandlers(theirHandler, ourHandler) {
|
|
|
20
19
|
};
|
|
21
20
|
}
|
|
22
21
|
const ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
|
|
23
|
-
const DEFAULT_PREFETCH_BEHAVIOR = 'render';
|
|
24
|
-
const INTENT_DELAY = 100;
|
|
25
|
-
const VIEWPORT_ROOT_MARGIN = '200px';
|
|
26
|
-
const MAX_CONCURRENT_WARMUPS = 4;
|
|
27
|
-
const WARMUP_TTL = 30000;
|
|
28
|
-
const SLOW_EFFECTIVE_TYPES = new Set([
|
|
29
|
-
'slow-2g',
|
|
30
|
-
'2g'
|
|
31
|
-
]);
|
|
32
|
-
const warmupCache = new Map();
|
|
33
|
-
const warmupQueue = [];
|
|
34
|
-
let activeWarmups = 0;
|
|
35
|
-
const getWarmupTimestamp = ()=>performance.now();
|
|
36
|
-
const getConnection = ()=>{
|
|
37
|
-
const nav = globalThis.navigator;
|
|
38
|
-
return nav?.connection || nav?.mozConnection || nav?.webkitConnection;
|
|
39
|
-
};
|
|
40
|
-
const shouldWarmupOnCurrentNetwork = ()=>{
|
|
41
|
-
const connection = getConnection();
|
|
42
|
-
if (connection?.saveData) return false;
|
|
43
|
-
if ('string' == typeof connection?.effectiveType && SLOW_EFFECTIVE_TYPES.has(connection.effectiveType)) return false;
|
|
44
|
-
return true;
|
|
45
|
-
};
|
|
46
|
-
const pruneWarmupCache = (now = getWarmupTimestamp())=>{
|
|
47
|
-
for (const [key, timestamp] of warmupCache)if (now - timestamp > WARMUP_TTL) warmupCache.delete(key);
|
|
48
|
-
};
|
|
49
|
-
const runNextWarmup = ()=>{
|
|
50
|
-
while(activeWarmups < MAX_CONCURRENT_WARMUPS && warmupQueue.length > 0){
|
|
51
|
-
const task = warmupQueue.shift();
|
|
52
|
-
if (task.cancelled) continue;
|
|
53
|
-
activeWarmups += 1;
|
|
54
|
-
task.run().catch(()=>{
|
|
55
|
-
warmupCache.delete(task.key);
|
|
56
|
-
}).finally(()=>{
|
|
57
|
-
activeWarmups -= 1;
|
|
58
|
-
runNextWarmup();
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
const scheduleWarmup = (key, run)=>{
|
|
63
|
-
if (!shouldWarmupOnCurrentNetwork()) return ()=>{};
|
|
64
|
-
pruneWarmupCache();
|
|
65
|
-
if (warmupCache.has(key)) return ()=>{};
|
|
66
|
-
warmupCache.set(key, getWarmupTimestamp());
|
|
67
|
-
const task = {
|
|
68
|
-
key,
|
|
69
|
-
run,
|
|
70
|
-
cancelled: false
|
|
71
|
-
};
|
|
72
|
-
warmupQueue.push(task);
|
|
73
|
-
runNextWarmup();
|
|
74
|
-
return ()=>{
|
|
75
|
-
task.cancelled = true;
|
|
76
|
-
if (warmupQueue.includes(task)) warmupCache.delete(task.key);
|
|
77
|
-
};
|
|
78
|
-
};
|
|
79
22
|
const setRef = (ref, value)=>{
|
|
80
23
|
if (!ref) return;
|
|
81
24
|
if ('function' == typeof ref) return void ref(value);
|
|
@@ -83,70 +26,65 @@ const setRef = (ref, value)=>{
|
|
|
83
26
|
ref.current = value;
|
|
84
27
|
} catch {}
|
|
85
28
|
};
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const [
|
|
93
|
-
const
|
|
94
|
-
const [viewportElement, setViewportElement] = react.useState(null);
|
|
29
|
+
function usePrefetchBehavior(prefetch, preload, theirElementProps, policy) {
|
|
30
|
+
const [maybePrefetch, setMaybePrefetch] = react.useState(false);
|
|
31
|
+
const [state, setState] = react.useState({
|
|
32
|
+
code: false,
|
|
33
|
+
data: false
|
|
34
|
+
});
|
|
35
|
+
const [element, setElement] = react.useState(null);
|
|
36
|
+
const observerRef = react.useRef(void 0);
|
|
95
37
|
const { onFocus, onBlur, onMouseEnter, onMouseLeave, onTouchStart } = theirElementProps;
|
|
96
38
|
react.useEffect(()=>{
|
|
97
|
-
if (
|
|
98
|
-
|
|
39
|
+
if (!policy) return void setState({
|
|
40
|
+
code: 'render' === prefetch,
|
|
41
|
+
data: 'render' === prefetch
|
|
42
|
+
});
|
|
43
|
+
const observer = policy.observe({
|
|
44
|
+
element,
|
|
45
|
+
prefetch,
|
|
46
|
+
preload,
|
|
47
|
+
notify: (next)=>setState((previous)=>previous.code === next.code && previous.data === next.data ? previous : next)
|
|
48
|
+
});
|
|
49
|
+
observerRef.current = observer;
|
|
50
|
+
return ()=>{
|
|
51
|
+
observerRef.current = void 0;
|
|
52
|
+
observer.dispose();
|
|
53
|
+
};
|
|
99
54
|
}, [
|
|
55
|
+
policy,
|
|
100
56
|
prefetch,
|
|
101
|
-
preload
|
|
57
|
+
preload,
|
|
58
|
+
element
|
|
59
|
+
]);
|
|
60
|
+
react.useEffect(()=>{
|
|
61
|
+
if (policy || !maybePrefetch) return;
|
|
62
|
+
const timer = setTimeout(()=>setState({
|
|
63
|
+
code: true,
|
|
64
|
+
data: true
|
|
65
|
+
}), 100);
|
|
66
|
+
return ()=>clearTimeout(timer);
|
|
67
|
+
}, [
|
|
68
|
+
policy,
|
|
69
|
+
maybePrefetch
|
|
102
70
|
]);
|
|
103
71
|
const setIntent = ()=>{
|
|
104
|
-
if (
|
|
72
|
+
if (policy) observerRef.current?.onIntent();
|
|
73
|
+
else if ('intent' === prefetch) setMaybePrefetch(true);
|
|
105
74
|
};
|
|
106
75
|
const cancelIntent = ()=>{
|
|
107
|
-
if (
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
76
|
+
if (policy) observerRef.current?.onCancel();
|
|
77
|
+
else if ('intent' === prefetch) {
|
|
78
|
+
setMaybePrefetch(false);
|
|
79
|
+
setState({
|
|
80
|
+
code: false,
|
|
81
|
+
data: false
|
|
82
|
+
});
|
|
111
83
|
}
|
|
112
84
|
};
|
|
113
|
-
react.useEffect(()=>{
|
|
114
|
-
if (maybeWarmup) {
|
|
115
|
-
const id = setTimeout(()=>{
|
|
116
|
-
if ('intent' === prefetch) setShouldPrefetch(true);
|
|
117
|
-
if ('intent' === preload) setShouldPreload(true);
|
|
118
|
-
}, INTENT_DELAY);
|
|
119
|
-
return ()=>{
|
|
120
|
-
clearTimeout(id);
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
}, [
|
|
124
|
-
maybeWarmup,
|
|
125
|
-
prefetch,
|
|
126
|
-
preload
|
|
127
|
-
]);
|
|
128
|
-
react.useEffect(()=>{
|
|
129
|
-
if (!viewportElement || 'viewport' !== prefetch && 'viewport' !== preload || "u" < typeof IntersectionObserver) return;
|
|
130
|
-
const observer = new IntersectionObserver((entries)=>{
|
|
131
|
-
if (!entries.some((entry)=>entry.isIntersecting)) return;
|
|
132
|
-
if ('viewport' === prefetch) setShouldPrefetch(true);
|
|
133
|
-
if ('viewport' === preload) setShouldPreload(true);
|
|
134
|
-
observer.disconnect();
|
|
135
|
-
}, {
|
|
136
|
-
rootMargin: VIEWPORT_ROOT_MARGIN
|
|
137
|
-
});
|
|
138
|
-
observer.observe(viewportElement);
|
|
139
|
-
return ()=>{
|
|
140
|
-
observer.disconnect();
|
|
141
|
-
};
|
|
142
|
-
}, [
|
|
143
|
-
prefetch,
|
|
144
|
-
preload,
|
|
145
|
-
viewportElement
|
|
146
|
-
]);
|
|
147
85
|
return [
|
|
148
|
-
|
|
149
|
-
|
|
86
|
+
state.data,
|
|
87
|
+
state.code,
|
|
150
88
|
{
|
|
151
89
|
onFocus: composeEventHandlers(onFocus, setIntent),
|
|
152
90
|
onBlur: composeEventHandlers(onBlur, cancelIntent),
|
|
@@ -154,7 +92,7 @@ function usePrefetchBehavior(prefetch, preload, theirElementProps) {
|
|
|
154
92
|
onMouseLeave: composeEventHandlers(onMouseLeave, cancelIntent),
|
|
155
93
|
onTouchStart: composeEventHandlers(onTouchStart, setIntent)
|
|
156
94
|
},
|
|
157
|
-
|
|
95
|
+
setElement
|
|
158
96
|
];
|
|
159
97
|
}
|
|
160
98
|
async function loadRouteModule(route, routeAssets, chunkLoader) {
|
|
@@ -195,7 +133,8 @@ const PrefetchPageLinks = ({ path, includeData })=>{
|
|
|
195
133
|
const context = useContext(InternalRuntimeContext);
|
|
196
134
|
const { routeManifest, routes } = context;
|
|
197
135
|
const { routeAssets } = routeManifest || {};
|
|
198
|
-
const
|
|
136
|
+
const policy = context.linkPrefetchPolicy;
|
|
137
|
+
const allowNetworkWarmup = policy?.canWarmup() ?? true;
|
|
199
138
|
const matches = useMemo(()=>Array.isArray(routes) ? matchRoutes(routes, pathname) : [], [
|
|
200
139
|
pathname,
|
|
201
140
|
routes
|
|
@@ -215,7 +154,16 @@ const PrefetchPageLinks = ({ path, includeData })=>{
|
|
|
215
154
|
const routeAsset = routeId ? routeAssets[routeId] : void 0;
|
|
216
155
|
const chunkIds = routeAsset?.chunkIds;
|
|
217
156
|
if (!routeId || !Array.isArray(chunkIds) || 0 === chunkIds.length) return ()=>{};
|
|
218
|
-
|
|
157
|
+
const run = ()=>loadRouteModule(match.route, routeAssets, chunkLoader);
|
|
158
|
+
if (policy) return policy.schedule({
|
|
159
|
+
runtimeContext: context,
|
|
160
|
+
chunkLoader,
|
|
161
|
+
publicPath: getWebpackPublicPath(),
|
|
162
|
+
key: `route-module:${routeId}:${chunkIds.join(',')}`,
|
|
163
|
+
run
|
|
164
|
+
});
|
|
165
|
+
run().catch(()=>{});
|
|
166
|
+
return ()=>{};
|
|
219
167
|
});
|
|
220
168
|
return ()=>{
|
|
221
169
|
cancellations.forEach((cancel)=>cancel());
|
|
@@ -224,6 +172,7 @@ const PrefetchPageLinks = ({ path, includeData })=>{
|
|
|
224
172
|
allowNetworkWarmup,
|
|
225
173
|
chunkLoader,
|
|
226
174
|
context,
|
|
175
|
+
policy,
|
|
227
176
|
routeAssetGeneration
|
|
228
177
|
]);
|
|
229
178
|
if (!allowNetworkWarmup || !includeData || !window._SSR_DATA) return null;
|
|
@@ -235,10 +184,11 @@ const PrefetchPageLinks = ({ path, includeData })=>{
|
|
|
235
184
|
};
|
|
236
185
|
const PrefetchDataLinks = ({ matches, path, routeManifest })=>{
|
|
237
186
|
const { pathname, search, hash } = path;
|
|
187
|
+
const policy = useContext(InternalRuntimeContext).linkPrefetchPolicy;
|
|
238
188
|
const currentMatches = useMatches();
|
|
239
189
|
const basename = useHref('/');
|
|
240
190
|
const dataHrefs = useMemo(()=>matches?.filter((match, index)=>{
|
|
241
|
-
if (
|
|
191
|
+
if (policy?.allowData(match.route) === false || !match.route.loader || 'function' != typeof match.route.loader || 0 === match.route.loader.length) return false;
|
|
242
192
|
if (match.route.shouldRevalidate) {
|
|
243
193
|
const currentUrl = new URL(location.pathname + location.search + location.hash, window.origin);
|
|
244
194
|
const nextUrl = new URL(pathname + search + hash, window.origin);
|
|
@@ -265,16 +215,10 @@ const PrefetchDataLinks = ({ matches, path, routeManifest })=>{
|
|
|
265
215
|
children: dataHrefs
|
|
266
216
|
});
|
|
267
217
|
};
|
|
268
|
-
const
|
|
269
|
-
if (false === preload || 'none' === preload) return 'none';
|
|
270
|
-
if (void 0 !== preload) return preload;
|
|
271
|
-
if ('none' === prefetch) return 'none';
|
|
272
|
-
return prefetch;
|
|
273
|
-
};
|
|
274
|
-
const createPrefetchLink = (Link)=>/*#__PURE__*/ react.forwardRef(({ to, prefetch = DEFAULT_PREFETCH_BEHAVIOR, preload, ...props }, forwardedRef)=>{
|
|
218
|
+
const createPrefetchLink = (Link)=>/*#__PURE__*/ react.forwardRef(({ to, prefetch, preload, ...props }, forwardedRef)=>{
|
|
275
219
|
const isAbsolute = 'string' == typeof to && ABSOLUTE_URL_REGEX.test(to);
|
|
276
|
-
const
|
|
277
|
-
const [shouldPrefetch, shouldPreload, prefetchHandlers, setViewportElement] = usePrefetchBehavior(prefetch,
|
|
220
|
+
const policy = useContext(InternalRuntimeContext).linkPrefetchPolicy;
|
|
221
|
+
const [shouldPrefetch, shouldPreload, prefetchHandlers, setViewportElement] = usePrefetchBehavior(prefetch, preload, props, policy);
|
|
278
222
|
const setAnchorRef = react.useCallback((element)=>{
|
|
279
223
|
setViewportElement(element);
|
|
280
224
|
setRef(forwardedRef, element);
|
|
@@ -6,4 +6,12 @@ const onBeforeCreateRouter = createRouterSyncHook();
|
|
|
6
6
|
const onAfterCreateRouter = createRouterSyncHook();
|
|
7
7
|
const onBeforeHydrateRouter = createRouterSyncHook();
|
|
8
8
|
const onAfterHydrateRouter = createRouterSyncHook();
|
|
9
|
-
|
|
9
|
+
const routerProviderRegistryHooks = {
|
|
10
|
+
modifyRoutes: modifyRoutes,
|
|
11
|
+
onBeforeCreateRoutes: onBeforeCreateRoutes,
|
|
12
|
+
onBeforeCreateRouter: onBeforeCreateRouter,
|
|
13
|
+
onAfterCreateRouter: onAfterCreateRouter,
|
|
14
|
+
onBeforeHydrateRouter: onBeforeHydrateRouter,
|
|
15
|
+
onAfterHydrateRouter: onAfterHydrateRouter
|
|
16
|
+
};
|
|
17
|
+
export { modifyRoutes, onAfterCreateRouter, onAfterHydrateRouter, onBeforeCreateRouter, onBeforeCreateRoutes, onBeforeHydrateRouter, routerProviderRegistryHooks };
|
|
@@ -1,34 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { createRouterProviderRealm, registerRouterProvider, reportUnsupportedProviderRegistryHooks, resolveRouterProvider, routerProviderRegistryHooks } from "./provider.mjs";
|
|
4
|
-
registerRouterProvider('react-router', routerPlugin, {
|
|
5
|
-
isDefault: true
|
|
6
|
-
});
|
|
7
|
-
const createRouterPlugin = (localProviders = [])=>{
|
|
8
|
-
const providerRealm = createRouterProviderRealm([
|
|
9
|
-
{
|
|
10
|
-
name: 'react-router',
|
|
11
|
-
factory: routerPlugin,
|
|
12
|
-
isDefault: true
|
|
13
|
-
},
|
|
14
|
-
...localProviders
|
|
15
|
-
]);
|
|
16
|
-
return (userConfig = {})=>({
|
|
17
|
-
name: '@modern-js/plugin-router',
|
|
18
|
-
registryHooks: routerProviderRegistryHooks,
|
|
19
|
-
setup: (api)=>{
|
|
20
|
-
const mergedConfig = merge(api.getRuntimeConfig().router || {}, userConfig);
|
|
21
|
-
const pluginFactory = resolveRouterProvider(mergedConfig.framework, {
|
|
22
|
-
realm: providerRealm
|
|
23
|
-
});
|
|
24
|
-
const providerPlugin = pluginFactory(userConfig);
|
|
25
|
-
reportUnsupportedProviderRegistryHooks(providerPlugin);
|
|
26
|
-
providerPlugin.setup?.(api);
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
|
-
const internal_routerPlugin = createRouterPlugin();
|
|
31
|
-
const internal = internal_routerPlugin;
|
|
1
|
+
export { routerProviderRegistryHooks } from "./hooks.mjs";
|
|
2
|
+
export { modifyRoutes, routerPlugin as default, routerPlugin } from "./plugin.mjs";
|
|
32
3
|
export { renderRoutes } from "./utils.mjs";
|
|
33
|
-
export default internal;
|
|
34
|
-
export { createRouterPlugin, createRouterProviderRealm, internal_routerPlugin as routerPlugin, modifyRoutes, registerRouterProvider, resolveRouterProvider };
|
|
@@ -4,9 +4,8 @@ import { RouterProvider, createBrowserRouter, createHashRouter, createRoutesFrom
|
|
|
4
4
|
import { normalizePathname } from "@modern-js/runtime-utils/url";
|
|
5
5
|
import * as __rspack_external_react from "react";
|
|
6
6
|
import { InternalRuntimeContext, getGlobalEnableRsc, getGlobalIsRscClient, getGlobalLayoutApp, getGlobalRoutes } from "../../core/context/index.mjs";
|
|
7
|
-
import {
|
|
7
|
+
import { routerProviderRegistryHooks } from "./hooks.mjs";
|
|
8
8
|
import { Link } from "./PrefetchLink.mjs";
|
|
9
|
-
import { routerProviderRegistryHooks } from "./provider.mjs";
|
|
10
9
|
import { createClientRouterFromPayload } from "./rsc-router.mjs";
|
|
11
10
|
import { createRouteObjectsFromConfig, deserializeErrors, renderRoutes, urlJoin } from "./utils.mjs";
|
|
12
11
|
let finalRouteConfig = {
|
|
@@ -168,11 +167,6 @@ function useRouterCreation(props, options) {
|
|
|
168
167
|
basename: _basename,
|
|
169
168
|
hydrationData
|
|
170
169
|
});
|
|
171
|
-
applyRouterRuntimeState(runtimeContext, {
|
|
172
|
-
framework: 'react-router',
|
|
173
|
-
basename: _basename,
|
|
174
|
-
instance: router
|
|
175
|
-
});
|
|
176
170
|
hooks.onAfterCreateRouter.call({
|
|
177
171
|
...routerLifecycleContext,
|
|
178
172
|
router,
|
|
@@ -8,9 +8,8 @@ import { useContext } from "react";
|
|
|
8
8
|
import { InternalRuntimeContext, getGlobalEnableRsc, getGlobalLayoutApp, getGlobalRoutes } from "../../core/context/index.mjs";
|
|
9
9
|
import { setServerPayload } from "../../core/context/serverPayload/index.server.mjs";
|
|
10
10
|
import DeferredDataScripts_node from "./DeferredDataScripts.node.mjs";
|
|
11
|
-
import {
|
|
11
|
+
import { routerProviderRegistryHooks } from "./hooks.mjs";
|
|
12
12
|
import { Link } from "./PrefetchLink.mjs";
|
|
13
|
-
import { routerProviderRegistryHooks } from "./provider.mjs";
|
|
14
13
|
import { RSCStaticRouter, createServerPayload, handleRSCRedirect, prepareRSCRoutes } from "./rsc-router.mjs";
|
|
15
14
|
import { createRouteObjectsFromConfig, renderRoutes, urlJoin } from "./utils.mjs";
|
|
16
15
|
function createRemixRequest(request) {
|
|
@@ -23,24 +22,6 @@ function createRemixRequest(request) {
|
|
|
23
22
|
signal: controller.signal
|
|
24
23
|
});
|
|
25
24
|
}
|
|
26
|
-
function createReactRouterServerSnapshot(routerContext, basename) {
|
|
27
|
-
return createRouterServerSnapshot({
|
|
28
|
-
framework: 'react-router',
|
|
29
|
-
basename,
|
|
30
|
-
statusCode: routerContext.statusCode,
|
|
31
|
-
errors: routerContext.errors,
|
|
32
|
-
routerData: {
|
|
33
|
-
loaderData: routerContext.loaderData,
|
|
34
|
-
errors: routerContext.errors
|
|
35
|
-
},
|
|
36
|
-
matches: routerContext.matches.map((match)=>{
|
|
37
|
-
const routeId = match.route.id;
|
|
38
|
-
return 'string' == typeof routeId ? {
|
|
39
|
-
routeId
|
|
40
|
-
} : void 0;
|
|
41
|
-
}).filter((match)=>void 0 !== match)
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
25
|
const routerPlugin = (userConfig = {})=>({
|
|
45
26
|
name: '@modern-js/plugin-router',
|
|
46
27
|
registryHooks: routerProviderRegistryHooks,
|
|
@@ -107,18 +88,9 @@ const routerPlugin = (userConfig = {})=>({
|
|
|
107
88
|
throw errors[0];
|
|
108
89
|
}
|
|
109
90
|
context.routerContext = routerContext;
|
|
110
|
-
const routerServerSnapshot = createReactRouterServerSnapshot(routerContext, _basename);
|
|
111
|
-
applyRouterRuntimeState(context, {
|
|
112
|
-
framework: 'react-router',
|
|
113
|
-
basename: _basename,
|
|
114
|
-
instance: routerContext,
|
|
115
|
-
matchedRouteIds: routerServerSnapshot.matchedRouteIds,
|
|
116
|
-
serverSnapshot: routerServerSnapshot
|
|
117
|
-
});
|
|
118
91
|
hooks.onAfterCreateRouter.call({
|
|
119
92
|
...routerLifecycleContext,
|
|
120
93
|
router: routerContext,
|
|
121
|
-
serverSnapshot: routerServerSnapshot,
|
|
122
94
|
runtimeContext: context
|
|
123
95
|
});
|
|
124
96
|
let payload;
|
|
@@ -74,7 +74,9 @@ const generateCode = async (entrypoints, appContext, config, hooks)=>{
|
|
|
74
74
|
const bootstrapFile = path.resolve(internalDirectory, `./${entryName}/${ENTRY_BOOTSTRAP_FILE_NAME}`);
|
|
75
75
|
await fs.outputFile(bootstrapFile, `import(/* webpackChunkName: "async-${entryName}" */ './${INDEX_FILE_NAME}');`, 'utf8');
|
|
76
76
|
const bootstrapServerFile = path.resolve(internalDirectory, `./${entryName}/${ENTRY_SERVER_BOOTSTRAP_FILE_NAME}`);
|
|
77
|
-
if (ssrMode) await fs.outputFile(bootstrapServerFile, `export const requestHandler = import('./${SERVER_ENTRY_POINT_FILE_NAME}').then((m) => m.requestHandler)
|
|
77
|
+
if (ssrMode) await fs.outputFile(bootstrapServerFile, `export const requestHandler = import('./${SERVER_ENTRY_POINT_FILE_NAME}').then((m) => m.requestHandler);
|
|
78
|
+
// The renderer awaits this promise later; retain its rejection without an early unhandled rejection.
|
|
79
|
+
requestHandler.catch(() => {});`, 'utf8');
|
|
78
80
|
}
|
|
79
81
|
if (ssrMode) {
|
|
80
82
|
const indexServerCode = __rspack_external__template_server_mjs_f98cfe58.serverIndex({
|
|
@@ -4,51 +4,6 @@ import { LOADABLE_STATS_FILE, isUseSSRBundle } from "@modern-js/utils";
|
|
|
4
4
|
import path from "path";
|
|
5
5
|
import loadable_bundler_plugin from "./loadable-bundler-plugin.mjs";
|
|
6
6
|
import { resolveSSRMode } from "./mode.mjs";
|
|
7
|
-
const getRspackPlugins = (rspackConfig)=>{
|
|
8
|
-
if (!rspackConfig) return [];
|
|
9
|
-
const rspackEntries = Array.isArray(rspackConfig) ? rspackConfig : [
|
|
10
|
-
rspackConfig
|
|
11
|
-
];
|
|
12
|
-
const plugins = [];
|
|
13
|
-
for (const entry of rspackEntries){
|
|
14
|
-
if (!entry || 'function' == typeof entry || 'object' != typeof entry) continue;
|
|
15
|
-
const maybePlugins = entry.plugins;
|
|
16
|
-
if (Array.isArray(maybePlugins)) {
|
|
17
|
-
for (const plugin of maybePlugins)if (plugin) plugins.push(plugin);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
return plugins;
|
|
21
|
-
};
|
|
22
|
-
const getRspackPluginName = (plugin)=>{
|
|
23
|
-
if ('string' == typeof plugin) return plugin;
|
|
24
|
-
if ('function' == typeof plugin) return plugin.name;
|
|
25
|
-
if (Array.isArray(plugin)) {
|
|
26
|
-
const [first] = plugin;
|
|
27
|
-
if (!first) return;
|
|
28
|
-
if ('string' == typeof first) return first;
|
|
29
|
-
if ('function' == typeof first) return first.name;
|
|
30
|
-
if ('object' == typeof first) return first.name || first.constructor?.name;
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
return plugin.name || plugin.constructor?.name;
|
|
34
|
-
};
|
|
35
|
-
const hasServerRenderingConfig = (userConfig)=>{
|
|
36
|
-
const { output, server } = userConfig;
|
|
37
|
-
if (output?.ssg) return true;
|
|
38
|
-
if (output?.ssgByEntries && Object.keys(output.ssgByEntries).length > 0) return true;
|
|
39
|
-
if (server?.ssr) return true;
|
|
40
|
-
if (server?.ssrByEntries && Object.keys(server.ssrByEntries).length > 0) return true;
|
|
41
|
-
return false;
|
|
42
|
-
};
|
|
43
|
-
const isModuleFederationAppSSREnabledInConfig = (ssr)=>{
|
|
44
|
-
if (!ssr || 'object' != typeof ssr) return false;
|
|
45
|
-
return true === ssr.moduleFederationAppSSR;
|
|
46
|
-
};
|
|
47
|
-
const isModuleFederationAppSSREnabled = (userConfig)=>{
|
|
48
|
-
if (isModuleFederationAppSSREnabledInConfig(userConfig.server?.ssr)) return true;
|
|
49
|
-
if (userConfig.server?.ssrByEntries && 'object' == typeof userConfig.server.ssrByEntries) return Object.values(userConfig.server.ssrByEntries).some(isModuleFederationAppSSREnabledInConfig);
|
|
50
|
-
return false;
|
|
51
|
-
};
|
|
52
7
|
const checkUseStringSSR = (config, appDirectory, entrypoints)=>{
|
|
53
8
|
if (entrypoints && entrypoints.length > 0) {
|
|
54
9
|
for (const entrypoint of entrypoints){
|
|
@@ -64,41 +19,19 @@ const checkUseStringSSR = (config, appDirectory, entrypoints)=>{
|
|
|
64
19
|
}
|
|
65
20
|
return true;
|
|
66
21
|
};
|
|
67
|
-
const isModuleFederationRspackPlugin = (plugin)=>{
|
|
68
|
-
const candidate = getRspackPluginName(plugin);
|
|
69
|
-
return 'string' == typeof candidate && /modulefederation/i.test(candidate);
|
|
70
|
-
};
|
|
71
|
-
const hasModuleFederationMarker = (config)=>{
|
|
72
|
-
if ('true' === process.env.MF_SSR_PRJ) return true;
|
|
73
|
-
const define = config.source?.define || {};
|
|
74
|
-
if ('REMOTE_IP_STRATEGY' in define || 'FEDERATION_IPV4' in define) return true;
|
|
75
|
-
const plugins = getRspackPlugins(config.tools?.rspack);
|
|
76
|
-
return plugins.some(isModuleFederationRspackPlugin);
|
|
77
|
-
};
|
|
78
22
|
const isNodeEnvironmentTarget = (target)=>'string' == typeof target && ('node' === target || 'async-node' === target || target.startsWith('node'));
|
|
79
|
-
const shouldUseModuleFederationNodeOutput = (config)=>isNodeEnvironmentTarget(config.output?.target) && hasModuleFederationMarker(config);
|
|
80
23
|
const ssrBuilderPlugin = (modernAPI, outputModule, exportLoadablePath)=>({
|
|
81
24
|
name: '@modern-js/builder-plugin-ssr',
|
|
82
25
|
setup (api) {
|
|
83
26
|
api.modifyEnvironmentConfig((config, { name, mergeEnvironmentConfig })=>{
|
|
84
27
|
const isServerEnvironment = isNodeEnvironmentTarget(config.output.target) || 'workerSSR' === name;
|
|
85
28
|
const userConfig = modernAPI.getNormalizedConfig();
|
|
86
|
-
const hasServerRendering = hasServerRenderingConfig(userConfig);
|
|
87
|
-
const hasModuleFederationRuntimeMarker = hasServerRendering && shouldUseModuleFederationNodeOutput(config);
|
|
88
|
-
const hasExplicitMfSsrFlag = isModuleFederationAppSSREnabled(userConfig);
|
|
89
|
-
const requireExplicitMfSsrFlag = 'true' === process.env.MODERN_MF_APP_SSR_REQUIRE_EXPLICIT;
|
|
90
|
-
if (hasServerRendering && hasModuleFederationRuntimeMarker && !hasExplicitMfSsrFlag) {
|
|
91
|
-
const warningMessage = '[modernjs][mf-ssr] Module Federation SSR was auto-detected from runtime markers. Set server.ssr.moduleFederationAppSSR=true explicitly in host and remotes to avoid heuristic drift.';
|
|
92
|
-
if (requireExplicitMfSsrFlag) throw new Error(`${warningMessage} (enforced by MODERN_MF_APP_SSR_REQUIRE_EXPLICIT=true)`);
|
|
93
|
-
console.warn(warningMessage);
|
|
94
|
-
}
|
|
95
|
-
const isModuleFederationAppSSR = hasServerRendering && hasExplicitMfSsrFlag;
|
|
96
29
|
const ssrEnv = userConfig.deploy?.worker?.ssr || userConfig.server?.rsc ? 'edge' : 'node';
|
|
97
30
|
const appContext = modernAPI.getAppContext();
|
|
98
31
|
const { appDirectory, entrypoints } = appContext;
|
|
99
32
|
const useLoadablePlugin = isUseSSRBundle(userConfig) && !isServerEnvironment && checkUseStringSSR(userConfig, appDirectory, entrypoints);
|
|
100
33
|
const outputConfig = {
|
|
101
|
-
module: isServerEnvironment &&
|
|
34
|
+
module: isServerEnvironment && outputModule
|
|
102
35
|
};
|
|
103
36
|
const useLoadableComponents = isUseSSRBundle(userConfig) && checkUseStringSSR(userConfig, appDirectory, entrypoints);
|
|
104
37
|
return mergeEnvironmentConfig(config, {
|
|
@@ -108,12 +41,10 @@ const ssrBuilderPlugin = (modernAPI, outputModule, exportLoadablePath)=>({
|
|
|
108
41
|
'process.env.MODERN_SSR_ENV': JSON.stringify(ssrEnv),
|
|
109
42
|
'process.env.MODERN_ENABLE_HYDRATION': JSON.stringify(isUseSSRBundle(userConfig)),
|
|
110
43
|
'process.env.MODERN_ENABLE_RSC': JSON.stringify(Boolean(userConfig.server?.rsc)),
|
|
111
|
-
__MODERN_ENABLE_RSC__: JSON.stringify(Boolean(userConfig.server?.rsc))
|
|
112
|
-
'process.env.MODERN_MF_APP_SSR': JSON.stringify(String(isModuleFederationAppSSR))
|
|
44
|
+
__MODERN_ENABLE_RSC__: JSON.stringify(Boolean(userConfig.server?.rsc))
|
|
113
45
|
}
|
|
114
46
|
},
|
|
115
47
|
output: outputConfig,
|
|
116
|
-
splitChunks: isServerEnvironment && (hasModuleFederationRuntimeMarker || hasExplicitMfSsrFlag) ? false : void 0,
|
|
117
48
|
tools: {
|
|
118
49
|
bundlerChain: useLoadablePlugin ? (chain)=>{
|
|
119
50
|
chain.plugin('loadable').use(loadable_bundler_plugin, [
|
|
@@ -182,4 +113,4 @@ const ssrPlugin = ()=>({
|
|
|
182
113
|
});
|
|
183
114
|
const cli_ssr = ssrPlugin;
|
|
184
115
|
export default cli_ssr;
|
|
185
|
-
export {
|
|
116
|
+
export { ssrPlugin };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "node:module";
|
|
2
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { loadableReady } from "@loadable/component";
|
|
4
4
|
import { SSR_HYDRATION_ID_PREFIX } from "@modern-js/utils/universal/constants";
|
|
5
5
|
import { hydrateRoot } from "react-dom/client";
|
|
@@ -35,7 +35,12 @@ function hydrate_hydrateRoot(App, context, ModernRender, ModernHydrate) {
|
|
|
35
35
|
callback: callback,
|
|
36
36
|
children: App
|
|
37
37
|
});
|
|
38
|
-
return ModernHydrate(
|
|
38
|
+
return ModernHydrate(/*#__PURE__*/ jsxs(Fragment, {
|
|
39
|
+
children: [
|
|
40
|
+
wrapRuntimeContextProvider(/*#__PURE__*/ jsx(SSRApp, {}), hydrateContext),
|
|
41
|
+
null
|
|
42
|
+
]
|
|
43
|
+
}));
|
|
39
44
|
}
|
|
40
45
|
}
|
|
41
46
|
return stringSSRHydrate();
|
|
@@ -42,10 +42,7 @@ function getGlobalBasename() {
|
|
|
42
42
|
return globalContext.basename;
|
|
43
43
|
}
|
|
44
44
|
export { DefaultNotFound } from "../../router/runtime/DefaultNotFound.mjs";
|
|
45
|
-
export { modifyRoutes, onAfterCreateRouter, onAfterHydrateRouter, onBeforeCreateRouter, onBeforeCreateRoutes, onBeforeHydrateRouter } from "../../router/runtime/hooks.mjs";
|
|
46
|
-
export {
|
|
47
|
-
export { createRouterProviderRealm, registerRouterProvider, resolveRouterProvider, routerProviderRegistryHooks } from "../../router/runtime/provider.mjs";
|
|
48
|
-
export { createRuntimeContextExtension } from "./extensions.mjs";
|
|
49
|
-
export { InternalRuntimeContext, RuntimeContext, getInitialContext } from "./runtime.mjs";
|
|
45
|
+
export { modifyRoutes, onAfterCreateRouter, onAfterHydrateRouter, onBeforeCreateRouter, onBeforeCreateRoutes, onBeforeHydrateRouter, routerProviderRegistryHooks } from "../../router/runtime/hooks.mjs";
|
|
46
|
+
export { InternalRuntimeContext, RuntimeComponentResolverContext, RuntimeContext, getInitialContext } from "./runtime.mjs";
|
|
50
47
|
export { getServerPayload, setServerPayload } from "./serverPayload/index.mjs";
|
|
51
48
|
export { getCurrentEntryName, getGlobalApp, getGlobalBasename, getGlobalEnableRsc, getGlobalInternalRuntimeContext, getGlobalIsRscClient, getGlobalLayoutApp, getGlobalRSCRoot, getGlobalRoutes, setGlobalContext, setGlobalInternalRuntimeContext };
|
|
@@ -1,6 +1,2 @@
|
|
|
1
1
|
import "node:module";
|
|
2
|
-
|
|
3
|
-
const RuntimeContext = createContext({});
|
|
4
|
-
const ReactRuntimeContext = RuntimeContext;
|
|
5
|
-
const useRuntimeContext = ()=>useContext(RuntimeContext);
|
|
6
|
-
export { ReactRuntimeContext, RuntimeContext, useRuntimeContext };
|
|
2
|
+
export { ReactRuntimeContext, RuntimeContext, useRuntimeContext } from "./runtime.mjs";
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import "node:module";
|
|
2
|
-
import { createContext } from "react";
|
|
2
|
+
import { createContext, useContext } from "react";
|
|
3
3
|
const ROUTE_MANIFEST = '_MODERNJS_ROUTE_MANIFEST';
|
|
4
|
-
|
|
4
|
+
function getRuntimeReactContext(kind, create) {
|
|
5
|
+
const key = Symbol.for(`@modern-js/runtime:react-context:v1:${kind}`);
|
|
6
|
+
const contexts = globalThis;
|
|
7
|
+
contexts[key] ??= create();
|
|
8
|
+
return contexts[key];
|
|
9
|
+
}
|
|
10
|
+
const InternalRuntimeContext = getRuntimeReactContext('internal', ()=>createContext({}));
|
|
11
|
+
const RuntimeContext = getRuntimeReactContext('public', ()=>createContext({}));
|
|
12
|
+
const RuntimeComponentResolverContext = getRuntimeReactContext('component-resolver', ()=>createContext(void 0));
|
|
13
|
+
const ReactRuntimeContext = RuntimeContext;
|
|
14
|
+
const useRuntimeContext = ()=>useContext(RuntimeContext);
|
|
5
15
|
const getInitialContext = (isBrowser = true, routeManifest)=>{
|
|
6
16
|
const requestContext = {
|
|
7
17
|
request: {
|
|
@@ -25,5 +35,4 @@ const getInitialContext = (isBrowser = true, routeManifest)=>{
|
|
|
25
35
|
context: requestContext
|
|
26
36
|
};
|
|
27
37
|
};
|
|
28
|
-
export { ReactRuntimeContext, RuntimeContext, useRuntimeContext }
|
|
29
|
-
export { InternalRuntimeContext, getInitialContext };
|
|
38
|
+
export { InternalRuntimeContext, ReactRuntimeContext, RuntimeComponentResolverContext, RuntimeContext, getInitialContext, useRuntimeContext };
|