@bleedingdev/modern-js-runtime 3.5.0-ultramodern.4 → 3.5.0-ultramodern.40
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/ssr/index.js +1 -2
- 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/string/loadable.js +3 -11
- package/dist/cjs/index.js +7 -6
- package/dist/cjs/router/cli/code/templates.js +3 -2
- package/dist/cjs/router/cli/nestedRoutesSpec.js +3 -1
- package/dist/cjs/router/runtime/hooks.js +7 -6
- package/dist/cjs/router/runtime/provider.js +1 -1
- package/dist/esm/boundary-debugger/index.mjs +13 -3
- package/dist/esm/cli/code.mjs +12 -12
- package/dist/esm/cli/ssr/index.mjs +1 -2
- 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/string/loadable.mjs +3 -8
- package/dist/esm/exports/loadable.mjs +3 -3
- package/dist/esm/index.mjs +2 -1
- package/dist/esm/router/cli/code/index.mjs +5 -5
- package/dist/esm/router/cli/code/templates.mjs +3 -2
- 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/provider.mjs +1 -1
- package/dist/esm-node/boundary-debugger/index.mjs +13 -3
- package/dist/esm-node/cli/code.mjs +12 -12
- package/dist/esm-node/cli/ssr/index.mjs +1 -2
- 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/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/router/cli/code/index.mjs +5 -5
- package/dist/esm-node/router/cli/code/templates.mjs +3 -2
- 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/provider.mjs +1 -1
- package/dist/types/boundary-debugger/index.d.ts +1 -1
- package/dist/types/common.d.ts +8 -1
- package/dist/types/core/context/index.d.ts +25 -9
- 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/router/runtime/hooks.d.ts +10 -6
- package/dist/types/router/runtime/internal.d.ts +1 -1
- 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 +1 -1
- package/dist/types/router/runtime/types.d.ts +27 -5
- package/package.json +17 -24
- 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
|
@@ -142,9 +142,20 @@ function BoundaryDebugger({ controlMode = 'visible', enabledByDefault = false, l
|
|
|
142
142
|
]);
|
|
143
143
|
(0, external_react_namespaceObject.useEffect)(()=>{
|
|
144
144
|
if (!enabled) return void setBoxes([]);
|
|
145
|
+
let resizeObserver;
|
|
146
|
+
const observedElements = new Set();
|
|
147
|
+
const observeBoundaryElements = (elements)=>{
|
|
148
|
+
if (void 0 === resizeObserver) return;
|
|
149
|
+
for (const element of elements)if (!observedElements.has(element)) {
|
|
150
|
+
observedElements.add(element);
|
|
151
|
+
resizeObserver.observe(element);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
145
154
|
const readBoxes = ()=>{
|
|
155
|
+
const elements = collectBoundaryElements(legacySelector);
|
|
156
|
+
observeBoundaryElements(elements);
|
|
146
157
|
const seenBoxes = new Set();
|
|
147
|
-
const nextBoxes =
|
|
158
|
+
const nextBoxes = elements.map((element)=>{
|
|
148
159
|
const boundaryId = getBoundaryId(element);
|
|
149
160
|
if (void 0 === boundaryId || '' === boundaryId) return;
|
|
150
161
|
const rect = element.getBoundingClientRect();
|
|
@@ -172,9 +183,8 @@ function BoundaryDebugger({ controlMode = 'visible', enabledByDefault = false, l
|
|
|
172
183
|
}).filter((box)=>void 0 !== box);
|
|
173
184
|
setBoxes(nextBoxes);
|
|
174
185
|
};
|
|
186
|
+
resizeObserver = "u" < typeof ResizeObserver ? void 0 : new ResizeObserver(readBoxes);
|
|
175
187
|
readBoxes();
|
|
176
|
-
const resizeObserver = "u" < typeof ResizeObserver ? void 0 : new ResizeObserver(readBoxes);
|
|
177
|
-
for (const element of collectBoundaryElements(legacySelector))resizeObserver?.observe(element);
|
|
178
188
|
const mutationObserver = new MutationObserver(readBoxes);
|
|
179
189
|
mutationObserver.observe(document.body, {
|
|
180
190
|
childList: true,
|
|
@@ -129,14 +129,13 @@ const ssrBuilderPlugin = (modernAPI, outputModule, exportLoadablePath)=>({
|
|
|
129
129
|
const hasServerRendering = hasServerRenderingConfig(userConfig);
|
|
130
130
|
const hasModuleFederationRuntimeMarker = hasServerRendering && shouldUseModuleFederationNodeOutput(config);
|
|
131
131
|
const hasExplicitMfSsrFlag = isModuleFederationAppSSREnabled(userConfig);
|
|
132
|
-
const isCloudflareWorkerSSR = 'workerSSR' === name && userConfig.deploy?.target === 'cloudflare';
|
|
133
132
|
const requireExplicitMfSsrFlag = 'true' === process.env.MODERN_MF_APP_SSR_REQUIRE_EXPLICIT;
|
|
134
133
|
if (hasServerRendering && hasModuleFederationRuntimeMarker && !hasExplicitMfSsrFlag) {
|
|
135
134
|
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.';
|
|
136
135
|
if (requireExplicitMfSsrFlag) throw new Error(`${warningMessage} (enforced by MODERN_MF_APP_SSR_REQUIRE_EXPLICIT=true)`);
|
|
137
136
|
console.warn(warningMessage);
|
|
138
137
|
}
|
|
139
|
-
const isModuleFederationAppSSR = hasServerRendering && hasExplicitMfSsrFlag
|
|
138
|
+
const isModuleFederationAppSSR = hasServerRendering && hasExplicitMfSsrFlag;
|
|
140
139
|
const ssrEnv = userConfig.deploy?.worker?.ssr || userConfig.server?.rsc ? 'edge' : 'node';
|
|
141
140
|
const appContext = modernAPI.getAppContext();
|
|
142
141
|
const { appDirectory, entrypoints } = appContext;
|
|
@@ -0,0 +1,49 @@
|
|
|
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
|
+
ReactRuntimeContext: ()=>ReactRuntimeContext,
|
|
32
|
+
RuntimeContext: ()=>RuntimeContext,
|
|
33
|
+
useRuntimeContext: ()=>useRuntimeContext
|
|
34
|
+
});
|
|
35
|
+
const external_react_namespaceObject = require("react");
|
|
36
|
+
const RuntimeContext = (0, external_react_namespaceObject.createContext)({});
|
|
37
|
+
const ReactRuntimeContext = RuntimeContext;
|
|
38
|
+
const useRuntimeContext = ()=>(0, external_react_namespaceObject.useContext)(RuntimeContext);
|
|
39
|
+
exports.ReactRuntimeContext = __webpack_exports__.ReactRuntimeContext;
|
|
40
|
+
exports.RuntimeContext = __webpack_exports__.RuntimeContext;
|
|
41
|
+
exports.useRuntimeContext = __webpack_exports__.useRuntimeContext;
|
|
42
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
43
|
+
"ReactRuntimeContext",
|
|
44
|
+
"RuntimeContext",
|
|
45
|
+
"useRuntimeContext"
|
|
46
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
47
|
+
Object.defineProperty(exports, '__esModule', {
|
|
48
|
+
value: true
|
|
49
|
+
});
|
|
@@ -29,16 +29,15 @@ var __webpack_exports__ = {};
|
|
|
29
29
|
__webpack_require__.r(__webpack_exports__);
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
31
|
InternalRuntimeContext: ()=>InternalRuntimeContext,
|
|
32
|
-
ReactRuntimeContext: ()=>ReactRuntimeContext,
|
|
33
|
-
RuntimeContext: ()=>RuntimeContext,
|
|
32
|
+
ReactRuntimeContext: ()=>external_public_js_namespaceObject.ReactRuntimeContext,
|
|
33
|
+
RuntimeContext: ()=>external_public_js_namespaceObject.RuntimeContext,
|
|
34
34
|
getInitialContext: ()=>getInitialContext,
|
|
35
|
-
useRuntimeContext: ()=>useRuntimeContext
|
|
35
|
+
useRuntimeContext: ()=>external_public_js_namespaceObject.useRuntimeContext
|
|
36
36
|
});
|
|
37
|
-
const constants_namespaceObject = require("@modern-js/utils/universal/constants");
|
|
38
37
|
const external_react_namespaceObject = require("react");
|
|
38
|
+
const external_public_js_namespaceObject = require("./public.js");
|
|
39
|
+
const ROUTE_MANIFEST = '_MODERNJS_ROUTE_MANIFEST';
|
|
39
40
|
const InternalRuntimeContext = (0, external_react_namespaceObject.createContext)({});
|
|
40
|
-
const RuntimeContext = (0, external_react_namespaceObject.createContext)({});
|
|
41
|
-
const ReactRuntimeContext = RuntimeContext;
|
|
42
41
|
const getInitialContext = (isBrowser = true, routeManifest)=>{
|
|
43
42
|
const requestContext = {
|
|
44
43
|
request: {},
|
|
@@ -46,12 +45,11 @@ const getInitialContext = (isBrowser = true, routeManifest)=>{
|
|
|
46
45
|
};
|
|
47
46
|
return {
|
|
48
47
|
isBrowser,
|
|
49
|
-
routeManifest: routeManifest || "u" > typeof window && window[
|
|
48
|
+
routeManifest: routeManifest || "u" > typeof window && window[ROUTE_MANIFEST],
|
|
50
49
|
requestContext,
|
|
51
50
|
context: requestContext
|
|
52
51
|
};
|
|
53
52
|
};
|
|
54
|
-
const useRuntimeContext = ()=>(0, external_react_namespaceObject.useContext)(RuntimeContext);
|
|
55
53
|
exports.InternalRuntimeContext = __webpack_exports__.InternalRuntimeContext;
|
|
56
54
|
exports.ReactRuntimeContext = __webpack_exports__.ReactRuntimeContext;
|
|
57
55
|
exports.RuntimeContext = __webpack_exports__.RuntimeContext;
|
|
@@ -35,6 +35,42 @@ const external_react_helmet_async_namespaceObject = require("react-helmet-async"
|
|
|
35
35
|
const index_js_namespaceObject = require("../context/index.js");
|
|
36
36
|
const extensions_js_namespaceObject = require("../context/extensions.js");
|
|
37
37
|
const helmetContext_js_namespaceObject = require("../context/helmetContext.js");
|
|
38
|
+
function toRscSafeRecord(value) {
|
|
39
|
+
if (!value || 'object' != typeof value) return value;
|
|
40
|
+
return Object.fromEntries(Object.entries(value));
|
|
41
|
+
}
|
|
42
|
+
function createRscSafeSsrContext(ssrContext) {
|
|
43
|
+
if (!ssrContext) return ssrContext;
|
|
44
|
+
const { request } = ssrContext;
|
|
45
|
+
return {
|
|
46
|
+
nonce: ssrContext.nonce,
|
|
47
|
+
useJsonScript: ssrContext.useJsonScript,
|
|
48
|
+
htmlModifiers: [],
|
|
49
|
+
baseUrl: ssrContext.baseUrl,
|
|
50
|
+
request: request ? {
|
|
51
|
+
url: request.url,
|
|
52
|
+
userAgent: request.userAgent,
|
|
53
|
+
cookie: request.cookie,
|
|
54
|
+
pathname: request.pathname,
|
|
55
|
+
query: toRscSafeRecord(request.query),
|
|
56
|
+
params: toRscSafeRecord(request.params),
|
|
57
|
+
headers: toRscSafeRecord(request.headers),
|
|
58
|
+
host: request.host,
|
|
59
|
+
referer: request.referer
|
|
60
|
+
} : request,
|
|
61
|
+
mode: ssrContext.mode,
|
|
62
|
+
loaderFailureMode: ssrContext.loaderFailureMode
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function createRscSafeRequestContext(ssrContext) {
|
|
66
|
+
const safeSsrContext = createRscSafeSsrContext(ssrContext);
|
|
67
|
+
return {
|
|
68
|
+
request: safeSsrContext?.request || {},
|
|
69
|
+
response: {
|
|
70
|
+
locals: ssrContext?.response?.locals || {}
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
38
74
|
function wrapRuntimeContextProvider(App, contextValue) {
|
|
39
75
|
const { isBrowser, initialData, routes, context, routeManifest, routerContext, unstable_getBlockNavState, ssrContext, _internalContext, _internalRouterBaseName, ...rest } = contextValue;
|
|
40
76
|
const internalContextValue = contextValue;
|
|
@@ -47,6 +83,27 @@ function wrapRuntimeContextProvider(App, contextValue) {
|
|
|
47
83
|
...rest
|
|
48
84
|
};
|
|
49
85
|
(0, extensions_js_namespaceObject.stripRuntimeContextExtensions)(runtimeContextValue);
|
|
86
|
+
if ((0, index_js_namespaceObject.getGlobalEnableRsc)() && !isBrowser) {
|
|
87
|
+
const rscSafeRequestContext = createRscSafeRequestContext(ssrContext);
|
|
88
|
+
const rscInternalContextValue = {
|
|
89
|
+
...internalContextValue,
|
|
90
|
+
context: rscSafeRequestContext,
|
|
91
|
+
requestContext: rscSafeRequestContext,
|
|
92
|
+
ssrContext: createRscSafeSsrContext(ssrContext)
|
|
93
|
+
};
|
|
94
|
+
const rscRuntimeContextValue = {
|
|
95
|
+
...runtimeContextValue,
|
|
96
|
+
context: rscSafeRequestContext,
|
|
97
|
+
requestContext: rscSafeRequestContext
|
|
98
|
+
};
|
|
99
|
+
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(index_js_namespaceObject.InternalRuntimeContext.Provider, {
|
|
100
|
+
value: rscInternalContextValue,
|
|
101
|
+
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(index_js_namespaceObject.RuntimeContext.Provider, {
|
|
102
|
+
value: rscRuntimeContextValue,
|
|
103
|
+
children: App
|
|
104
|
+
})
|
|
105
|
+
});
|
|
106
|
+
}
|
|
50
107
|
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(index_js_namespaceObject.InternalRuntimeContext.Provider, {
|
|
51
108
|
value: internalContextValue,
|
|
52
109
|
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(index_js_namespaceObject.RuntimeContext.Provider, {
|
|
@@ -31,14 +31,18 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
31
31
|
createFederatedCssLinks: ()=>createFederatedCssLinks
|
|
32
32
|
});
|
|
33
33
|
const external_utils_js_namespaceObject = require("./utils.js");
|
|
34
|
+
const escapeHtmlAttribute = (value)=>value.replaceAll('&', '&').replaceAll('"', '"').replaceAll('<', '<').replaceAll('>', '>');
|
|
34
35
|
const createFederatedCssLinks = (assets, options)=>{
|
|
35
36
|
if (void 0 === assets || 0 === assets.length) return '';
|
|
36
37
|
const seen = new Set(options.existingAssets || []);
|
|
37
38
|
const attributes = (0, external_utils_js_namespaceObject.attributesToString)(options.attributes || {});
|
|
38
39
|
const links = [];
|
|
39
|
-
for (const asset of assets)
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
for (const asset of assets){
|
|
41
|
+
const href = escapeHtmlAttribute(asset);
|
|
42
|
+
if (!('' === asset || seen.has(asset) || options.template.includes(asset) || options.template.includes(href))) {
|
|
43
|
+
seen.add(asset);
|
|
44
|
+
links.push(`<link${attributes} href="${href}" rel="stylesheet" />`);
|
|
45
|
+
}
|
|
42
46
|
}
|
|
43
47
|
return links.join('');
|
|
44
48
|
};
|
|
@@ -44,15 +44,13 @@ const node_namespaceObject = require("@modern-js/runtime-utils/node");
|
|
|
44
44
|
const request_namespaceObject = require("@modern-js/runtime-utils/universal/request");
|
|
45
45
|
const external_react_namespaceObject = require("react");
|
|
46
46
|
var external_react_default = /*#__PURE__*/ __webpack_require__.n(external_react_namespaceObject);
|
|
47
|
-
const lifecycle_js_namespaceObject = require("../../router/runtime/lifecycle.js");
|
|
48
|
-
const rsc_router_js_namespaceObject = require("../../router/runtime/rsc-router.js");
|
|
49
47
|
const index_js_namespaceObject = require("../context/index.js");
|
|
50
48
|
const runtime_js_namespaceObject = require("../context/runtime.js");
|
|
51
49
|
const serverPayload_index_js_namespaceObject = require("../context/serverPayload/index.js");
|
|
52
50
|
const external_react_index_js_namespaceObject = require("../react/index.js");
|
|
53
51
|
const external_constants_js_namespaceObject = require("./constants.js");
|
|
52
|
+
const external_requestResponse_js_namespaceObject = require("./requestResponse.js");
|
|
54
53
|
const external_routerCleanup_js_namespaceObject = require("./routerCleanup.js");
|
|
55
|
-
const external_tracer_js_namespaceObject = require("./tracer.js");
|
|
56
54
|
const external_utils_js_namespaceObject = require("./utils.js");
|
|
57
55
|
async function handleRSCRequest(request, Root, context, options, handleRequest) {
|
|
58
56
|
const serverPayload = (0, serverPayload_index_js_namespaceObject.getServerPayload)();
|
|
@@ -72,29 +70,6 @@ async function handleRSCRequest(request, Root, context, options, handleRequest)
|
|
|
72
70
|
runtimeContext: context
|
|
73
71
|
});
|
|
74
72
|
}
|
|
75
|
-
const isRedirectStatus = (status)=>status >= 300 && status <= 399;
|
|
76
|
-
const processRedirect = (headers, status, ctx)=>{
|
|
77
|
-
if (ctx.enableRsc && ctx.isRSCNavigation) return (0, rsc_router_js_namespaceObject.handleRSCRedirect)(headers, ctx.basename, status);
|
|
78
|
-
return new Response(null, {
|
|
79
|
-
status,
|
|
80
|
-
headers
|
|
81
|
-
});
|
|
82
|
-
};
|
|
83
|
-
const applyRouterSnapshotResult = (context, onError)=>{
|
|
84
|
-
const routerServerSnapshot = (0, lifecycle_js_namespaceObject.getRouterServerSnapshot)(context);
|
|
85
|
-
const routerStatusCode = routerServerSnapshot?.statusCode ?? context.routerContext?.statusCode;
|
|
86
|
-
if (routerStatusCode && 200 !== routerStatusCode) context.ssrContext?.response.status(routerStatusCode);
|
|
87
|
-
const errors = Object.values(routerServerSnapshot?.errors || context.routerContext?.errors || {});
|
|
88
|
-
if (errors.length > 0) onError(errors[0], external_tracer_js_namespaceObject.SSRErrors.LOADER_ERROR);
|
|
89
|
-
};
|
|
90
|
-
const createLoaderRedirectResponse = (beforeRenderResult, redirectCtx)=>{
|
|
91
|
-
if (!beforeRenderResult || !isRedirectStatus(beforeRenderResult.status)) return;
|
|
92
|
-
if (beforeRenderResult.headers.has('X-Modernjs-Redirect')) return beforeRenderResult;
|
|
93
|
-
const redirectUrl = beforeRenderResult.headers.get('Location') || '/';
|
|
94
|
-
return processRedirect(new Headers({
|
|
95
|
-
Location: redirectUrl
|
|
96
|
-
}), beforeRenderResult.status, redirectCtx);
|
|
97
|
-
};
|
|
98
73
|
const renderRequest = async (request, Root, context, options, handleRequest, enableRsc)=>{
|
|
99
74
|
if (enableRsc) return handleRSCRequest(request, Root, context, options, handleRequest);
|
|
100
75
|
return handleRequest(request, Root, {
|
|
@@ -102,17 +77,6 @@ const renderRequest = async (request, Root, context, options, handleRequest, ena
|
|
|
102
77
|
runtimeContext: context
|
|
103
78
|
});
|
|
104
79
|
};
|
|
105
|
-
const finalizeRenderResponse = (response, responseProxy, redirectCtx, routerCleanup)=>{
|
|
106
|
-
if (-1 !== responseProxy.status && isRedirectStatus(responseProxy.status) && responseProxy.headers.Location) return processRedirect(new Headers(responseProxy.headers), responseProxy.status, redirectCtx);
|
|
107
|
-
Object.entries(responseProxy.headers).forEach(([key, value])=>{
|
|
108
|
-
response.headers.set(key, value);
|
|
109
|
-
});
|
|
110
|
-
if (-1 !== responseProxy.status) return routerCleanup.deferUntilBodyDone(new Response(response.body, {
|
|
111
|
-
status: responseProxy.status,
|
|
112
|
-
headers: response.headers
|
|
113
|
-
}));
|
|
114
|
-
return routerCleanup.deferUntilBodyDone(response);
|
|
115
|
-
};
|
|
116
80
|
function createSSRContext(request, options) {
|
|
117
81
|
const { config, loaderContext, onError, onTiming, locals, resource, params, responseProxy, reporter } = options;
|
|
118
82
|
const { nonce, useJsonScript } = config;
|
|
@@ -208,20 +172,26 @@ const createRequestHandler = async (handleRequest, createRequestOptions)=>{
|
|
|
208
172
|
isRSCNavigation: 'true' === request.headers.get('x-rsc-tree'),
|
|
209
173
|
basename: ssrContext.baseUrl || '/'
|
|
210
174
|
};
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
175
|
+
const routerCleanup = (0, external_routerCleanup_js_namespaceObject.createRouterCleanup)(context, options.onError);
|
|
176
|
+
const beforeRenderResult = await (0, external_routerCleanup_js_namespaceObject.runWithRouterCleanupOnError)(routerCleanup, ()=>runBeforeRender(context));
|
|
177
|
+
await (0, external_routerCleanup_js_namespaceObject.runWithRouterCleanupOnError)(routerCleanup, ()=>{
|
|
178
|
+
(0, external_requestResponse_js_namespaceObject.applyRouterSnapshotResult)(context, options.onError);
|
|
179
|
+
});
|
|
180
|
+
if ("u" > typeof Response) {
|
|
181
|
+
const redirectResponse = await (0, external_routerCleanup_js_namespaceObject.runWithRouterCleanupOnError)(routerCleanup, ()=>(0, external_requestResponse_js_namespaceObject.createLoaderRedirectResponse)(beforeRenderResult, redirectCtx));
|
|
182
|
+
if (redirectResponse) {
|
|
183
|
+
await routerCleanup.run();
|
|
184
|
+
return redirectResponse;
|
|
217
185
|
}
|
|
186
|
+
}
|
|
187
|
+
await (0, external_routerCleanup_js_namespaceObject.runWithRouterCleanupOnError)(routerCleanup, ()=>{
|
|
218
188
|
if (!createRequestOptions?.enableRsc) {
|
|
219
189
|
const { htmlTemplate } = options.resource;
|
|
220
190
|
options.resource.htmlTemplate = htmlTemplate.replace('</head>', `${external_constants_js_namespaceObject.CHUNK_CSS_PLACEHOLDER}</head>`);
|
|
221
191
|
}
|
|
222
|
-
const response = await renderRequest(request, Root, context, options, handleRequest, !!createRequestOptions?.enableRsc);
|
|
223
|
-
return finalizeRenderResponse(response, responseProxy, redirectCtx, routerCleanup);
|
|
224
192
|
});
|
|
193
|
+
const response = await (0, external_routerCleanup_js_namespaceObject.runWithRouterCleanupOnError)(routerCleanup, ()=>renderRequest(request, Root, context, options, handleRequest, !!createRequestOptions?.enableRsc));
|
|
194
|
+
return (0, external_routerCleanup_js_namespaceObject.finishWithRouterCleanup)(routerCleanup, ()=>(0, external_requestResponse_js_namespaceObject.finalizeRenderResponse)(response, responseProxy, redirectCtx, routerCleanup));
|
|
225
195
|
});
|
|
226
196
|
};
|
|
227
197
|
return requestHandler;
|
|
@@ -0,0 +1,83 @@
|
|
|
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
|
+
applyRouterSnapshotResult: ()=>applyRouterSnapshotResult,
|
|
32
|
+
createLoaderRedirectResponse: ()=>createLoaderRedirectResponse,
|
|
33
|
+
finalizeRenderResponse: ()=>finalizeRenderResponse
|
|
34
|
+
});
|
|
35
|
+
const lifecycle_js_namespaceObject = require("../../router/runtime/lifecycle.js");
|
|
36
|
+
const rsc_router_js_namespaceObject = require("../../router/runtime/rsc-router.js");
|
|
37
|
+
const external_tracer_js_namespaceObject = require("./tracer.js");
|
|
38
|
+
const isRedirectStatus = (status)=>status >= 300 && status <= 399;
|
|
39
|
+
const isNullBodyStatus = (status)=>204 === status || 205 === status || 304 === status;
|
|
40
|
+
const processRedirect = (headers, status, ctx)=>{
|
|
41
|
+
if (ctx.enableRsc && ctx.isRSCNavigation) return (0, rsc_router_js_namespaceObject.handleRSCRedirect)(headers, ctx.basename, status);
|
|
42
|
+
return new Response(null, {
|
|
43
|
+
status,
|
|
44
|
+
headers
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
const applyRouterSnapshotResult = (context, onError)=>{
|
|
48
|
+
const routerServerSnapshot = (0, lifecycle_js_namespaceObject.getRouterServerSnapshot)(context);
|
|
49
|
+
const routerStatusCode = routerServerSnapshot?.statusCode ?? context.routerContext?.statusCode;
|
|
50
|
+
if (routerStatusCode && 200 !== routerStatusCode) context.ssrContext?.response.status(routerStatusCode);
|
|
51
|
+
const errors = Object.values(routerServerSnapshot?.errors || context.routerContext?.errors || {});
|
|
52
|
+
if (errors.length > 0) onError(errors[0], external_tracer_js_namespaceObject.SSRErrors.LOADER_ERROR);
|
|
53
|
+
};
|
|
54
|
+
const createLoaderRedirectResponse = (beforeRenderResult, redirectCtx)=>{
|
|
55
|
+
if (!beforeRenderResult || !isRedirectStatus(beforeRenderResult.status)) return;
|
|
56
|
+
if (beforeRenderResult.headers.has('X-Modernjs-Redirect')) return beforeRenderResult;
|
|
57
|
+
const redirectUrl = beforeRenderResult.headers.get('Location') || '/';
|
|
58
|
+
return processRedirect(new Headers({
|
|
59
|
+
Location: redirectUrl
|
|
60
|
+
}), beforeRenderResult.status, redirectCtx);
|
|
61
|
+
};
|
|
62
|
+
const finalizeRenderResponse = (response, responseProxy, redirectCtx, routerCleanup)=>{
|
|
63
|
+
if (-1 !== responseProxy.status && isRedirectStatus(responseProxy.status) && responseProxy.headers.Location) return processRedirect(new Headers(responseProxy.headers), responseProxy.status, redirectCtx);
|
|
64
|
+
Object.entries(responseProxy.headers).forEach(([key, value])=>{
|
|
65
|
+
response.headers.set(key, value);
|
|
66
|
+
});
|
|
67
|
+
if (-1 !== responseProxy.status) return routerCleanup.deferUntilBodyDone(new Response(isNullBodyStatus(responseProxy.status) ? null : response.body, {
|
|
68
|
+
status: responseProxy.status,
|
|
69
|
+
headers: response.headers
|
|
70
|
+
}));
|
|
71
|
+
return routerCleanup.deferUntilBodyDone(response);
|
|
72
|
+
};
|
|
73
|
+
exports.applyRouterSnapshotResult = __webpack_exports__.applyRouterSnapshotResult;
|
|
74
|
+
exports.createLoaderRedirectResponse = __webpack_exports__.createLoaderRedirectResponse;
|
|
75
|
+
exports.finalizeRenderResponse = __webpack_exports__.finalizeRenderResponse;
|
|
76
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
77
|
+
"applyRouterSnapshotResult",
|
|
78
|
+
"createLoaderRedirectResponse",
|
|
79
|
+
"finalizeRenderResponse"
|
|
80
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
81
|
+
Object.defineProperty(exports, '__esModule', {
|
|
82
|
+
value: true
|
|
83
|
+
});
|
|
@@ -30,14 +30,22 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
31
|
ROUTER_CLEANUP_ERROR: ()=>ROUTER_CLEANUP_ERROR,
|
|
32
32
|
createRouterCleanup: ()=>createRouterCleanup,
|
|
33
|
-
|
|
33
|
+
finishWithRouterCleanup: ()=>finishWithRouterCleanup,
|
|
34
|
+
runWithRouterCleanupOnError: ()=>runWithRouterCleanupOnError
|
|
34
35
|
});
|
|
35
36
|
const lifecycle_js_namespaceObject = require("../../router/runtime/lifecycle.js");
|
|
36
37
|
const ROUTER_CLEANUP_ERROR = 'An error occurs during router runtime cleanup';
|
|
37
|
-
async function
|
|
38
|
-
const routerCleanup = createRouterCleanup(runtimeContext, onError);
|
|
38
|
+
async function runWithRouterCleanupOnError(routerCleanup, callback) {
|
|
39
39
|
try {
|
|
40
|
-
return await callback(
|
|
40
|
+
return await callback();
|
|
41
|
+
} catch (error) {
|
|
42
|
+
await routerCleanup.run();
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function finishWithRouterCleanup(routerCleanup, callback) {
|
|
47
|
+
try {
|
|
48
|
+
return await callback();
|
|
41
49
|
} finally{
|
|
42
50
|
if (!routerCleanup.deferred) await routerCleanup.run();
|
|
43
51
|
}
|
|
@@ -99,11 +107,13 @@ function createRouterCleanup(runtimeContext, onError) {
|
|
|
99
107
|
}
|
|
100
108
|
exports.ROUTER_CLEANUP_ERROR = __webpack_exports__.ROUTER_CLEANUP_ERROR;
|
|
101
109
|
exports.createRouterCleanup = __webpack_exports__.createRouterCleanup;
|
|
102
|
-
exports.
|
|
110
|
+
exports.finishWithRouterCleanup = __webpack_exports__.finishWithRouterCleanup;
|
|
111
|
+
exports.runWithRouterCleanupOnError = __webpack_exports__.runWithRouterCleanupOnError;
|
|
103
112
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
104
113
|
"ROUTER_CLEANUP_ERROR",
|
|
105
114
|
"createRouterCleanup",
|
|
106
|
-
"
|
|
115
|
+
"finishWithRouterCleanup",
|
|
116
|
+
"runWithRouterCleanupOnError"
|
|
107
117
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
108
118
|
Object.defineProperty(exports, '__esModule', {
|
|
109
119
|
value: true
|
|
@@ -29,7 +29,7 @@ var __webpack_exports__ = {};
|
|
|
29
29
|
__webpack_require__.r(__webpack_exports__);
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
31
|
createRouteHydrationScriptTags: ()=>createRouteHydrationScriptTags,
|
|
32
|
-
|
|
32
|
+
getMatchedRouteChunks: ()=>getMatchedRouteChunks,
|
|
33
33
|
injectBeforeHydrationEntryScript: ()=>injectBeforeHydrationEntryScript,
|
|
34
34
|
orderHydrationScriptChunks: ()=>orderHydrationScriptChunks,
|
|
35
35
|
replaceChunkJsPlaceholder: ()=>replaceChunkJsPlaceholder
|
|
@@ -78,6 +78,10 @@ function getMatchedRouteAssets(runtimeContext, routeManifest) {
|
|
|
78
78
|
const matchedRouteIds = (0, lifecycle_js_namespaceObject.getRouterMatchedRouteIds)(runtimeContext) ?? [];
|
|
79
79
|
return matchedRouteIds.flatMap((routeId)=>routeAssets[routeId]?.assets ?? []);
|
|
80
80
|
}
|
|
81
|
+
function getMatchedRouteChunks(runtimeContext, routeManifest, routeAssetToChunk) {
|
|
82
|
+
if (!routeManifest) return [];
|
|
83
|
+
return getMatchedRouteAssets(runtimeContext, routeManifest).map(routeAssetToChunk);
|
|
84
|
+
}
|
|
81
85
|
const orderHydrationScriptChunks = ({ asyncEntryChunks, collectedChunks, matchedRouteChunks, entryName })=>{
|
|
82
86
|
const asyncEntryScriptChunks = [];
|
|
83
87
|
const asyncEntryDependencyChunks = [];
|
|
@@ -108,23 +112,22 @@ function createRouteHydrationScriptTags(runtimeContext, entryName, options = {})
|
|
|
108
112
|
const { nonce, template } = options;
|
|
109
113
|
const routeAssets = getRouteAssets(runtimeContext);
|
|
110
114
|
if (void 0 === routeAssets) return '';
|
|
111
|
-
const
|
|
112
|
-
const
|
|
113
|
-
...
|
|
114
|
-
routeAssets[`async-${entryName}`]
|
|
115
|
-
].filter((
|
|
116
|
-
const jsAssets = Array.from(new Set(assetEntries.flatMap((entry)=>(entry.assets ?? []).filter((asset)=>asset.endsWith('.js')))));
|
|
115
|
+
const existingScriptSrcs = void 0 === template ? new Set() : new Set(getScriptTags(template).map(({ src })=>src));
|
|
116
|
+
const jsAssets = Array.from(new Set([
|
|
117
|
+
...getMatchedRouteAssets(runtimeContext),
|
|
118
|
+
...routeAssets[`async-${entryName}`]?.assets ?? []
|
|
119
|
+
].filter((asset)=>asset.endsWith('.js'))));
|
|
117
120
|
const nonceAttr = void 0 === nonce || '' === nonce ? '' : ` nonce="${nonce}"`;
|
|
118
|
-
return jsAssets.filter((asset)
|
|
121
|
+
return jsAssets.filter((asset)=>!existingScriptSrcs.has(asset)).map((asset)=>`<script src=${asset}${nonceAttr}></script>`).join(' ');
|
|
119
122
|
}
|
|
120
123
|
exports.createRouteHydrationScriptTags = __webpack_exports__.createRouteHydrationScriptTags;
|
|
121
|
-
exports.
|
|
124
|
+
exports.getMatchedRouteChunks = __webpack_exports__.getMatchedRouteChunks;
|
|
122
125
|
exports.injectBeforeHydrationEntryScript = __webpack_exports__.injectBeforeHydrationEntryScript;
|
|
123
126
|
exports.orderHydrationScriptChunks = __webpack_exports__.orderHydrationScriptChunks;
|
|
124
127
|
exports.replaceChunkJsPlaceholder = __webpack_exports__.replaceChunkJsPlaceholder;
|
|
125
128
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
126
129
|
"createRouteHydrationScriptTags",
|
|
127
|
-
"
|
|
130
|
+
"getMatchedRouteChunks",
|
|
128
131
|
"injectBeforeHydrationEntryScript",
|
|
129
132
|
"orderHydrationScriptChunks",
|
|
130
133
|
"replaceChunkJsPlaceholder"
|
|
@@ -28,8 +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
|
-
LoadableCollector: ()=>LoadableCollector
|
|
32
|
-
orderHydrationScriptChunks: ()=>external_scriptOrder_js_namespaceObject.orderHydrationScriptChunks
|
|
31
|
+
LoadableCollector: ()=>LoadableCollector
|
|
33
32
|
});
|
|
34
33
|
const server_namespaceObject = require("@loadable/server");
|
|
35
34
|
const external_federatedCss_js_namespaceObject = require("../federatedCss.js");
|
|
@@ -61,11 +60,6 @@ const readAsset = async (chunk)=>{
|
|
|
61
60
|
return fs.readFile(filepath, 'utf-8');
|
|
62
61
|
};
|
|
63
62
|
class LoadableCollector {
|
|
64
|
-
getMatchedRouteChunks() {
|
|
65
|
-
const { routeManifest, runtimeContext } = this.options;
|
|
66
|
-
if (!routeManifest) return [];
|
|
67
|
-
return (0, external_scriptOrder_js_namespaceObject.getMatchedRouteAssets)(runtimeContext, routeManifest).map(routeAssetToChunk);
|
|
68
|
-
}
|
|
69
63
|
collect(comopnent) {
|
|
70
64
|
const { stats, entryName } = this.options;
|
|
71
65
|
if (!stats) return comopnent;
|
|
@@ -87,7 +81,7 @@ class LoadableCollector {
|
|
|
87
81
|
]));
|
|
88
82
|
} catch (e) {}
|
|
89
83
|
const collectedChunks = extractor ? extractor.getChunkAssets(extractor.chunks) : [];
|
|
90
|
-
const matchedRouteChunks =
|
|
84
|
+
const matchedRouteChunks = (0, external_scriptOrder_js_namespaceObject.getMatchedRouteChunks)(options.runtimeContext, options.routeManifest, routeAssetToChunk);
|
|
91
85
|
const orderedScriptChunks = (0, external_scriptOrder_js_namespaceObject.orderHydrationScriptChunks)({
|
|
92
86
|
asyncEntryChunks: asyncChunks,
|
|
93
87
|
collectedChunks,
|
|
@@ -166,10 +160,8 @@ class LoadableCollector {
|
|
|
166
160
|
}
|
|
167
161
|
}
|
|
168
162
|
exports.LoadableCollector = __webpack_exports__.LoadableCollector;
|
|
169
|
-
exports.orderHydrationScriptChunks = __webpack_exports__.orderHydrationScriptChunks;
|
|
170
163
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
171
|
-
"LoadableCollector"
|
|
172
|
-
"orderHydrationScriptChunks"
|
|
164
|
+
"LoadableCollector"
|
|
173
165
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
174
166
|
Object.defineProperty(exports, '__esModule', {
|
|
175
167
|
value: true
|
package/dist/cjs/index.js
CHANGED
|
@@ -28,19 +28,20 @@ var __webpack_require__ = {};
|
|
|
28
28
|
var __webpack_exports__ = {};
|
|
29
29
|
__webpack_require__.r(__webpack_exports__);
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
-
RuntimeContext: ()=>
|
|
32
|
-
defineRuntimeConfig: ()=>
|
|
33
|
-
getMonitors: ()=>
|
|
31
|
+
RuntimeContext: ()=>public_js_namespaceObject.RuntimeContext,
|
|
32
|
+
defineRuntimeConfig: ()=>config_js_namespaceObject.defineRuntimeConfig,
|
|
33
|
+
getMonitors: ()=>index_js_namespaceObject.getMonitors,
|
|
34
34
|
getRequest: ()=>request_index_js_namespaceObject.getRequest,
|
|
35
35
|
isBrowser: ()=>external_common_js_namespaceObject.isBrowser,
|
|
36
36
|
redirect: ()=>response_index_js_namespaceObject.redirect,
|
|
37
37
|
setHeaders: ()=>response_index_js_namespaceObject.setHeaders,
|
|
38
38
|
setStatus: ()=>response_index_js_namespaceObject.setStatus,
|
|
39
|
-
useRuntimeContext: ()=>
|
|
39
|
+
useRuntimeContext: ()=>public_js_namespaceObject.useRuntimeContext
|
|
40
40
|
});
|
|
41
41
|
const external_common_js_namespaceObject = require("./common.js");
|
|
42
|
-
const
|
|
43
|
-
const
|
|
42
|
+
const config_js_namespaceObject = require("./core/config.js");
|
|
43
|
+
const index_js_namespaceObject = require("./core/context/monitors/index.js");
|
|
44
|
+
const public_js_namespaceObject = require("./core/context/public.js");
|
|
44
45
|
const request_index_js_namespaceObject = require("./core/context/request/index.js");
|
|
45
46
|
const response_index_js_namespaceObject = require("./core/context/response/index.js");
|
|
46
47
|
exports.RuntimeContext = __webpack_exports__.RuntimeContext;
|
|
@@ -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();
|