@modern-js/server-core 2.67.11 → 2.68.1
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/plugins/render/csrRscRender.js +78 -0
- package/dist/cjs/plugins/render/render.js +25 -16
- package/dist/cjs/plugins/render/renderRscHandler.js +31 -6
- package/dist/cjs/plugins/render/ssrRender.js +2 -15
- package/dist/cjs/plugins/render/utils.js +41 -0
- package/dist/esm/plugins/render/csrRscRender.js +88 -0
- package/dist/esm/plugins/render/render.js +95 -40
- package/dist/esm/plugins/render/renderRscHandler.js +67 -35
- package/dist/esm/plugins/render/ssrRender.js +1 -14
- package/dist/esm/plugins/render/utils.js +17 -0
- package/dist/esm-node/plugins/render/csrRscRender.js +54 -0
- package/dist/esm-node/plugins/render/render.js +25 -16
- package/dist/esm-node/plugins/render/renderRscHandler.js +31 -6
- package/dist/esm-node/plugins/render/ssrRender.js +1 -14
- package/dist/esm-node/plugins/render/utils.js +17 -0
- package/dist/types/plugins/default.d.ts +1 -1
- package/dist/types/plugins/render/csrRscRender.d.ts +2 -0
- package/dist/types/plugins/render/renderRscHandler.d.ts +1 -1
- package/dist/types/plugins/render/utils.d.ts +3 -0
- package/dist/types/types/requestHandler.d.ts +2 -0
- package/dist/types/types/server.d.ts +6 -4
- package/package.json +6 -6
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var csrRscRender_exports = {};
|
|
20
|
+
__export(csrRscRender_exports, {
|
|
21
|
+
csrRscRender: () => csrRscRender
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(csrRscRender_exports);
|
|
24
|
+
var import_constants = require("@modern-js/utils/universal/constants");
|
|
25
|
+
var import_utils = require("./utils");
|
|
26
|
+
const csrRscRender = async (req, options) => {
|
|
27
|
+
var _serverManifest_renderBundles;
|
|
28
|
+
const { routeInfo, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, monitors, logger, metrics, onError, onTiming, staticGenerate, html } = options;
|
|
29
|
+
const serverBundle = serverManifest === null || serverManifest === void 0 ? void 0 : (_serverManifest_renderBundles = serverManifest.renderBundles) === null || _serverManifest_renderBundles === void 0 ? void 0 : _serverManifest_renderBundles[routeInfo.entryName || import_constants.MAIN_ENTRY_NAME];
|
|
30
|
+
const loadableStats = serverManifest.loadableStats || {};
|
|
31
|
+
const routeManifest = serverManifest.routeManifest || {};
|
|
32
|
+
const config = (0, import_utils.createRequestHandlerConfig)(options.config);
|
|
33
|
+
const requestHandlerOptions = {
|
|
34
|
+
resource: {
|
|
35
|
+
route: routeInfo,
|
|
36
|
+
loadableStats,
|
|
37
|
+
routeManifest,
|
|
38
|
+
entryName: routeInfo.entryName || import_constants.MAIN_ENTRY_NAME
|
|
39
|
+
},
|
|
40
|
+
config,
|
|
41
|
+
params,
|
|
42
|
+
loaderContext,
|
|
43
|
+
html,
|
|
44
|
+
rscSSRManifest,
|
|
45
|
+
rscClientManifest,
|
|
46
|
+
rscServerManifest,
|
|
47
|
+
locals,
|
|
48
|
+
reporter,
|
|
49
|
+
staticGenerate,
|
|
50
|
+
logger,
|
|
51
|
+
metrics,
|
|
52
|
+
monitors,
|
|
53
|
+
onError,
|
|
54
|
+
onTiming
|
|
55
|
+
};
|
|
56
|
+
if (!serverBundle) {
|
|
57
|
+
return new Response("Cannot find server bundle for RSC", {
|
|
58
|
+
status: 500
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
const renderRscStreamHandler = await serverBundle.renderRscStreamHandler;
|
|
62
|
+
if (!renderRscStreamHandler) {
|
|
63
|
+
return new Response("Cannot find render handler for RSC", {
|
|
64
|
+
status: 500
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (!rscClientManifest) {
|
|
68
|
+
return new Response("Cannot find rsc client manifest", {
|
|
69
|
+
status: 500
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
const response = await renderRscStreamHandler(req, requestHandlerOptions);
|
|
73
|
+
return response;
|
|
74
|
+
};
|
|
75
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
76
|
+
0 && (module.exports = {
|
|
77
|
+
csrRscRender
|
|
78
|
+
});
|
|
@@ -36,6 +36,7 @@ var import_trie_router = require("hono/router/trie-router");
|
|
|
36
36
|
var import_constants = require("../../constants");
|
|
37
37
|
var import_utils = require("../../utils");
|
|
38
38
|
var import_utils2 = require("../../utils");
|
|
39
|
+
var import_csrRscRender = require("./csrRscRender");
|
|
39
40
|
var import_dataHandler = require("./dataHandler");
|
|
40
41
|
var import_renderRscHandler = require("./renderRscHandler");
|
|
41
42
|
var import_serverActionHandler = require("./serverActionHandler");
|
|
@@ -193,12 +194,12 @@ async function renderHandler(request, options, mode, fallbackWrapper, framework)
|
|
|
193
194
|
const url = new URL(request.url);
|
|
194
195
|
const matchedRoutes = matchRoutes(routes, url.pathname, options.routeInfo.urlPath);
|
|
195
196
|
if (!matchedRoutes) {
|
|
196
|
-
response = csrRender(options
|
|
197
|
+
response = await csrRender(request, options);
|
|
197
198
|
} else {
|
|
198
199
|
var _lastMatch_route;
|
|
199
200
|
const lastMatch = matchedRoutes[matchedRoutes.length - 1];
|
|
200
201
|
if (!(lastMatch === null || lastMatch === void 0 ? void 0 : (_lastMatch_route = lastMatch.route) === null || _lastMatch_route === void 0 ? void 0 : _lastMatch_route.id) || !ssrByRouteIds.includes(lastMatch.route.id)) {
|
|
201
|
-
response = csrRender(options
|
|
202
|
+
response = await csrRender(request, options);
|
|
202
203
|
}
|
|
203
204
|
}
|
|
204
205
|
}
|
|
@@ -209,14 +210,17 @@ async function renderHandler(request, options, mode, fallbackWrapper, framework)
|
|
|
209
210
|
} catch (e) {
|
|
210
211
|
options.onError(e, import_utils2.ErrorDigest.ERENDER);
|
|
211
212
|
await fallbackWrapper("error", e);
|
|
212
|
-
response = csrRender(
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
213
|
+
response = await csrRender(request, {
|
|
214
|
+
...options,
|
|
215
|
+
html: injectFallbackReasonToHtml({
|
|
216
|
+
html: options.html,
|
|
217
|
+
reason: "error",
|
|
218
|
+
framework
|
|
219
|
+
})
|
|
220
|
+
});
|
|
217
221
|
}
|
|
218
222
|
} else {
|
|
219
|
-
response = csrRender(options
|
|
223
|
+
response = await csrRender(request, options);
|
|
220
224
|
}
|
|
221
225
|
const { routeInfo } = options;
|
|
222
226
|
applyExtendHeaders(response, routeInfo);
|
|
@@ -261,14 +265,19 @@ function injectFallbackReasonToHtml({ html, reason, framework }) {
|
|
|
261
265
|
})}</script>`;
|
|
262
266
|
return html.replace(/<\/head>/, `${tag}</head>`);
|
|
263
267
|
}
|
|
264
|
-
function csrRender(
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
268
|
+
async function csrRender(request, options) {
|
|
269
|
+
const { html, rscClientManifest } = options;
|
|
270
|
+
if (!rscClientManifest || process.env.MODERN_DISABLE_INJECT_RSC_DATA) {
|
|
271
|
+
return new Response(html, {
|
|
272
|
+
status: 200,
|
|
273
|
+
headers: new Headers({
|
|
274
|
+
"content-type": "text/html; charset=UTF-8",
|
|
275
|
+
[import_constants.X_MODERNJS_RENDER]: "client"
|
|
276
|
+
})
|
|
277
|
+
});
|
|
278
|
+
} else {
|
|
279
|
+
return (0, import_csrRscRender.csrRscRender)(request, options);
|
|
280
|
+
}
|
|
272
281
|
}
|
|
273
282
|
// Annotate the CommonJS export names for ESM import in node:
|
|
274
283
|
0 && (module.exports = {
|
|
@@ -22,16 +22,43 @@ __export(renderRscHandler_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(renderRscHandler_exports);
|
|
24
24
|
var import_constants = require("@modern-js/utils/universal/constants");
|
|
25
|
-
|
|
25
|
+
var import_utils = require("./utils");
|
|
26
|
+
const renderRscHandler = async (req, options) => {
|
|
26
27
|
var _serverManifest_renderBundles;
|
|
28
|
+
const { routeInfo, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, monitors, logger, metrics, onError, onTiming, staticGenerate } = options;
|
|
27
29
|
const serverBundle = serverManifest === null || serverManifest === void 0 ? void 0 : (_serverManifest_renderBundles = serverManifest.renderBundles) === null || _serverManifest_renderBundles === void 0 ? void 0 : _serverManifest_renderBundles[routeInfo.entryName || import_constants.MAIN_ENTRY_NAME];
|
|
30
|
+
const loadableStats = serverManifest.loadableStats || {};
|
|
31
|
+
const routeManifest = serverManifest.routeManifest || {};
|
|
32
|
+
const config = (0, import_utils.createRequestHandlerConfig)(options.config);
|
|
33
|
+
const requestHandlerOptions = {
|
|
34
|
+
resource: {
|
|
35
|
+
route: routeInfo,
|
|
36
|
+
loadableStats,
|
|
37
|
+
routeManifest,
|
|
38
|
+
entryName: routeInfo.entryName || import_constants.MAIN_ENTRY_NAME
|
|
39
|
+
},
|
|
40
|
+
config,
|
|
41
|
+
params,
|
|
42
|
+
loaderContext,
|
|
43
|
+
rscSSRManifest,
|
|
44
|
+
rscClientManifest,
|
|
45
|
+
rscServerManifest,
|
|
46
|
+
locals,
|
|
47
|
+
reporter,
|
|
48
|
+
staticGenerate,
|
|
49
|
+
logger,
|
|
50
|
+
metrics,
|
|
51
|
+
monitors,
|
|
52
|
+
onError,
|
|
53
|
+
onTiming
|
|
54
|
+
};
|
|
28
55
|
if (!serverBundle) {
|
|
29
56
|
return new Response("Cannot find server bundle for RSC", {
|
|
30
57
|
status: 500
|
|
31
58
|
});
|
|
32
59
|
}
|
|
33
|
-
const
|
|
34
|
-
if (!
|
|
60
|
+
const rscPayloadHandler = await serverBundle.rscPayloadHandler;
|
|
61
|
+
if (!rscPayloadHandler) {
|
|
35
62
|
return new Response("Cannot find request handler for RSC", {
|
|
36
63
|
status: 500
|
|
37
64
|
});
|
|
@@ -41,9 +68,7 @@ const renderRscHandler = async (req, { serverManifest, routeInfo, rscClientManif
|
|
|
41
68
|
status: 500
|
|
42
69
|
});
|
|
43
70
|
}
|
|
44
|
-
return
|
|
45
|
-
clientManifest: rscClientManifest
|
|
46
|
-
});
|
|
71
|
+
return rscPayloadHandler(req, requestHandlerOptions);
|
|
47
72
|
};
|
|
48
73
|
// Annotate the CommonJS export names for ESM import in node:
|
|
49
74
|
0 && (module.exports = {
|
|
@@ -25,6 +25,7 @@ var import_constants = require("@modern-js/utils/universal/constants");
|
|
|
25
25
|
var import_constants2 = require("../../constants");
|
|
26
26
|
var import_utils = require("../../utils");
|
|
27
27
|
var import_ssrCache = require("./ssrCache");
|
|
28
|
+
var import_utils2 = require("./utils");
|
|
28
29
|
const SERVER_RUNTIME_ENTRY = "requestHandler";
|
|
29
30
|
async function ssrRender(request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, monitors, cacheConfig, logger, metrics, onError, onTiming }) {
|
|
30
31
|
var _serverManifest_renderBundles;
|
|
@@ -44,7 +45,7 @@ async function ssrRender(request, { routeInfo, html, config: userConfig, staticG
|
|
|
44
45
|
throw new Error(`Can't find renderBundle ${entryName || import_constants.MAIN_ENTRY_NAME}`);
|
|
45
46
|
}
|
|
46
47
|
const requestHandler = await renderBundle[SERVER_RUNTIME_ENTRY];
|
|
47
|
-
const config = createRequestHandlerConfig(userConfig);
|
|
48
|
+
const config = (0, import_utils2.createRequestHandlerConfig)(userConfig);
|
|
48
49
|
const requestHandlerOptions = {
|
|
49
50
|
resource: {
|
|
50
51
|
route: routeInfo,
|
|
@@ -94,20 +95,6 @@ class IncomingMessgeProxy {
|
|
|
94
95
|
this.url = (0, import_utils.getPathname)(req);
|
|
95
96
|
}
|
|
96
97
|
}
|
|
97
|
-
function createRequestHandlerConfig(userConfig) {
|
|
98
|
-
const { output, server, security, html, source } = userConfig;
|
|
99
|
-
return {
|
|
100
|
-
ssr: server === null || server === void 0 ? void 0 : server.ssr,
|
|
101
|
-
ssrByEntries: server === null || server === void 0 ? void 0 : server.ssrByEntries,
|
|
102
|
-
nonce: security === null || security === void 0 ? void 0 : security.nonce,
|
|
103
|
-
enableInlineScripts: output === null || output === void 0 ? void 0 : output.enableInlineScripts,
|
|
104
|
-
enableInlineStyles: output === null || output === void 0 ? void 0 : output.enableInlineStyles,
|
|
105
|
-
crossorigin: html === null || html === void 0 ? void 0 : html.crossorigin,
|
|
106
|
-
scriptLoading: html === null || html === void 0 ? void 0 : html.scriptLoading,
|
|
107
|
-
useJsonScript: server === null || server === void 0 ? void 0 : server.useJsonScript,
|
|
108
|
-
enableAsyncEntry: source === null || source === void 0 ? void 0 : source.enableAsyncEntry
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
98
|
// Annotate the CommonJS export names for ESM import in node:
|
|
112
99
|
0 && (module.exports = {
|
|
113
100
|
ssrRender
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var utils_exports = {};
|
|
20
|
+
__export(utils_exports, {
|
|
21
|
+
createRequestHandlerConfig: () => createRequestHandlerConfig
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(utils_exports);
|
|
24
|
+
function createRequestHandlerConfig(userConfig) {
|
|
25
|
+
const { output, server, security, html, source } = userConfig;
|
|
26
|
+
return {
|
|
27
|
+
ssr: server === null || server === void 0 ? void 0 : server.ssr,
|
|
28
|
+
ssrByEntries: server === null || server === void 0 ? void 0 : server.ssrByEntries,
|
|
29
|
+
nonce: security === null || security === void 0 ? void 0 : security.nonce,
|
|
30
|
+
enableInlineScripts: output === null || output === void 0 ? void 0 : output.enableInlineScripts,
|
|
31
|
+
enableInlineStyles: output === null || output === void 0 ? void 0 : output.enableInlineStyles,
|
|
32
|
+
crossorigin: html === null || html === void 0 ? void 0 : html.crossorigin,
|
|
33
|
+
scriptLoading: html === null || html === void 0 ? void 0 : html.scriptLoading,
|
|
34
|
+
useJsonScript: server === null || server === void 0 ? void 0 : server.useJsonScript,
|
|
35
|
+
enableAsyncEntry: source === null || source === void 0 ? void 0 : source.enableAsyncEntry
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
39
|
+
0 && (module.exports = {
|
|
40
|
+
createRequestHandlerConfig
|
|
41
|
+
});
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
2
|
+
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
3
|
+
import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
4
|
+
import { createRequestHandlerConfig } from "./utils";
|
|
5
|
+
var csrRscRender = function() {
|
|
6
|
+
var _ref = _async_to_generator(function(req, options) {
|
|
7
|
+
var _serverManifest_renderBundles, routeInfo, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, monitors, logger, metrics, onError, onTiming, staticGenerate, html, serverBundle, loadableStats, routeManifest, config, requestHandlerOptions, renderRscStreamHandler, response;
|
|
8
|
+
return _ts_generator(this, function(_state) {
|
|
9
|
+
switch (_state.label) {
|
|
10
|
+
case 0:
|
|
11
|
+
routeInfo = options.routeInfo, serverManifest = options.serverManifest, rscSSRManifest = options.rscSSRManifest, rscClientManifest = options.rscClientManifest, rscServerManifest = options.rscServerManifest, locals = options.locals, params = options.params, loaderContext = options.loaderContext, reporter = options.reporter, monitors = options.monitors, logger = options.logger, metrics = options.metrics, onError = options.onError, onTiming = options.onTiming, staticGenerate = options.staticGenerate, html = options.html;
|
|
12
|
+
serverBundle = serverManifest === null || serverManifest === void 0 ? void 0 : (_serverManifest_renderBundles = serverManifest.renderBundles) === null || _serverManifest_renderBundles === void 0 ? void 0 : _serverManifest_renderBundles[routeInfo.entryName || MAIN_ENTRY_NAME];
|
|
13
|
+
loadableStats = serverManifest.loadableStats || {};
|
|
14
|
+
routeManifest = serverManifest.routeManifest || {};
|
|
15
|
+
config = createRequestHandlerConfig(options.config);
|
|
16
|
+
requestHandlerOptions = {
|
|
17
|
+
resource: {
|
|
18
|
+
route: routeInfo,
|
|
19
|
+
loadableStats,
|
|
20
|
+
routeManifest,
|
|
21
|
+
entryName: routeInfo.entryName || MAIN_ENTRY_NAME
|
|
22
|
+
},
|
|
23
|
+
config,
|
|
24
|
+
params,
|
|
25
|
+
loaderContext,
|
|
26
|
+
html,
|
|
27
|
+
rscSSRManifest,
|
|
28
|
+
rscClientManifest,
|
|
29
|
+
rscServerManifest,
|
|
30
|
+
locals,
|
|
31
|
+
reporter,
|
|
32
|
+
staticGenerate,
|
|
33
|
+
logger,
|
|
34
|
+
metrics,
|
|
35
|
+
monitors,
|
|
36
|
+
onError,
|
|
37
|
+
onTiming
|
|
38
|
+
};
|
|
39
|
+
if (!serverBundle) {
|
|
40
|
+
return [
|
|
41
|
+
2,
|
|
42
|
+
new Response("Cannot find server bundle for RSC", {
|
|
43
|
+
status: 500
|
|
44
|
+
})
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
return [
|
|
48
|
+
4,
|
|
49
|
+
serverBundle.renderRscStreamHandler
|
|
50
|
+
];
|
|
51
|
+
case 1:
|
|
52
|
+
renderRscStreamHandler = _state.sent();
|
|
53
|
+
if (!renderRscStreamHandler) {
|
|
54
|
+
return [
|
|
55
|
+
2,
|
|
56
|
+
new Response("Cannot find render handler for RSC", {
|
|
57
|
+
status: 500
|
|
58
|
+
})
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
if (!rscClientManifest) {
|
|
62
|
+
return [
|
|
63
|
+
2,
|
|
64
|
+
new Response("Cannot find rsc client manifest", {
|
|
65
|
+
status: 500
|
|
66
|
+
})
|
|
67
|
+
];
|
|
68
|
+
}
|
|
69
|
+
return [
|
|
70
|
+
4,
|
|
71
|
+
renderRscStreamHandler(req, requestHandlerOptions)
|
|
72
|
+
];
|
|
73
|
+
case 2:
|
|
74
|
+
response = _state.sent();
|
|
75
|
+
return [
|
|
76
|
+
2,
|
|
77
|
+
response
|
|
78
|
+
];
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
return function csrRscRender2(req, options) {
|
|
83
|
+
return _ref.apply(this, arguments);
|
|
84
|
+
};
|
|
85
|
+
}();
|
|
86
|
+
export {
|
|
87
|
+
csrRscRender
|
|
88
|
+
};
|
|
@@ -11,6 +11,7 @@ import { TrieRouter } from "hono/router/trie-router";
|
|
|
11
11
|
import { X_MODERNJS_RENDER } from "../../constants";
|
|
12
12
|
import { uniqueKeyByRoute } from "../../utils";
|
|
13
13
|
import { ErrorDigest, createErrorHtml, getPathname, getRuntimeEnv, parseHeaders, parseQuery, sortRoutes } from "../../utils";
|
|
14
|
+
import { csrRscRender } from "./csrRscRender";
|
|
14
15
|
import { dataHandler } from "./dataHandler";
|
|
15
16
|
import { renderRscHandler } from "./renderRscHandler";
|
|
16
17
|
import { serverActionHandler } from "./serverActionHandler";
|
|
@@ -313,14 +314,14 @@ function _renderHandler() {
|
|
|
313
314
|
if (!(serverManifest.nestedRoutesJson && ssrByRouteIds && (ssrByRouteIds === null || ssrByRouteIds === void 0 ? void 0 : ssrByRouteIds.length) > 0 && runtimeEnv === "node"))
|
|
314
315
|
return [
|
|
315
316
|
3,
|
|
316
|
-
|
|
317
|
+
6
|
|
317
318
|
];
|
|
318
319
|
nestedRoutesJson = serverManifest.nestedRoutesJson;
|
|
319
320
|
routes = nestedRoutesJson === null || nestedRoutesJson === void 0 ? void 0 : nestedRoutesJson[options.routeInfo.entryName];
|
|
320
321
|
if (!routes)
|
|
321
322
|
return [
|
|
322
323
|
3,
|
|
323
|
-
|
|
324
|
+
6
|
|
324
325
|
];
|
|
325
326
|
urlPath = "node:url";
|
|
326
327
|
return [
|
|
@@ -337,67 +338,98 @@ function _renderHandler() {
|
|
|
337
338
|
matchRoutes = _state.sent().matchRoutes;
|
|
338
339
|
url = new URL(request.url);
|
|
339
340
|
matchedRoutes = matchRoutes(routes, url.pathname, options.routeInfo.urlPath);
|
|
340
|
-
if (
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
_state.label = 3;
|
|
341
|
+
if (!!matchedRoutes)
|
|
342
|
+
return [
|
|
343
|
+
3,
|
|
344
|
+
4
|
|
345
|
+
];
|
|
346
|
+
return [
|
|
347
|
+
4,
|
|
348
|
+
csrRender(request, options)
|
|
349
|
+
];
|
|
350
350
|
case 3:
|
|
351
|
+
response = _state.sent();
|
|
352
|
+
return [
|
|
353
|
+
3,
|
|
354
|
+
6
|
|
355
|
+
];
|
|
356
|
+
case 4:
|
|
357
|
+
lastMatch = matchedRoutes[matchedRoutes.length - 1];
|
|
358
|
+
if (!(!(lastMatch === null || lastMatch === void 0 ? void 0 : (_lastMatch_route = lastMatch.route) === null || _lastMatch_route === void 0 ? void 0 : _lastMatch_route.id) || !ssrByRouteIds.includes(lastMatch.route.id)))
|
|
359
|
+
return [
|
|
360
|
+
3,
|
|
361
|
+
6
|
|
362
|
+
];
|
|
363
|
+
return [
|
|
364
|
+
4,
|
|
365
|
+
csrRender(request, options)
|
|
366
|
+
];
|
|
367
|
+
case 5:
|
|
368
|
+
response = _state.sent();
|
|
369
|
+
_state.label = 6;
|
|
370
|
+
case 6:
|
|
351
371
|
if (!(mode === "ssr" && !response))
|
|
352
372
|
return [
|
|
353
373
|
3,
|
|
354
|
-
|
|
374
|
+
13
|
|
355
375
|
];
|
|
356
|
-
_state.label =
|
|
357
|
-
case
|
|
376
|
+
_state.label = 7;
|
|
377
|
+
case 7:
|
|
358
378
|
_state.trys.push([
|
|
359
|
-
|
|
360
|
-
|
|
379
|
+
7,
|
|
380
|
+
9,
|
|
361
381
|
,
|
|
362
|
-
|
|
382
|
+
12
|
|
363
383
|
]);
|
|
364
384
|
return [
|
|
365
385
|
4,
|
|
366
386
|
ssrRender(request, options)
|
|
367
387
|
];
|
|
368
|
-
case
|
|
388
|
+
case 8:
|
|
369
389
|
response = _state.sent();
|
|
370
390
|
return [
|
|
371
391
|
3,
|
|
372
|
-
|
|
392
|
+
12
|
|
373
393
|
];
|
|
374
|
-
case
|
|
394
|
+
case 9:
|
|
375
395
|
e = _state.sent();
|
|
376
396
|
options.onError(e, ErrorDigest.ERENDER);
|
|
377
397
|
return [
|
|
378
398
|
4,
|
|
379
399
|
fallbackWrapper("error", e)
|
|
380
400
|
];
|
|
381
|
-
case
|
|
401
|
+
case 10:
|
|
382
402
|
_state.sent();
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
403
|
+
return [
|
|
404
|
+
4,
|
|
405
|
+
csrRender(request, _object_spread_props(_object_spread({}, options), {
|
|
406
|
+
html: injectFallbackReasonToHtml({
|
|
407
|
+
html: options.html,
|
|
408
|
+
reason: "error",
|
|
409
|
+
framework
|
|
410
|
+
})
|
|
411
|
+
}))
|
|
412
|
+
];
|
|
413
|
+
case 11:
|
|
414
|
+
response = _state.sent();
|
|
388
415
|
return [
|
|
389
416
|
3,
|
|
390
|
-
|
|
417
|
+
12
|
|
391
418
|
];
|
|
392
|
-
case
|
|
419
|
+
case 12:
|
|
393
420
|
return [
|
|
394
421
|
3,
|
|
395
|
-
|
|
422
|
+
15
|
|
396
423
|
];
|
|
397
|
-
case
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
424
|
+
case 13:
|
|
425
|
+
return [
|
|
426
|
+
4,
|
|
427
|
+
csrRender(request, options)
|
|
428
|
+
];
|
|
429
|
+
case 14:
|
|
430
|
+
response = _state.sent();
|
|
431
|
+
_state.label = 15;
|
|
432
|
+
case 15:
|
|
401
433
|
routeInfo = options.routeInfo;
|
|
402
434
|
applyExtendHeaders(response, routeInfo);
|
|
403
435
|
return [
|
|
@@ -503,13 +535,36 @@ function injectFallbackReasonToHtml(param) {
|
|
|
503
535
|
}), "</script>");
|
|
504
536
|
return html.replace(/<\/head>/, "".concat(tag, "</head>"));
|
|
505
537
|
}
|
|
506
|
-
function csrRender(
|
|
507
|
-
return
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
538
|
+
function csrRender(request, options) {
|
|
539
|
+
return _csrRender.apply(this, arguments);
|
|
540
|
+
}
|
|
541
|
+
function _csrRender() {
|
|
542
|
+
_csrRender = _async_to_generator(function(request, options) {
|
|
543
|
+
var html, rscClientManifest;
|
|
544
|
+
return _ts_generator(this, function(_state) {
|
|
545
|
+
html = options.html, rscClientManifest = options.rscClientManifest;
|
|
546
|
+
if (!rscClientManifest || process.env.MODERN_DISABLE_INJECT_RSC_DATA) {
|
|
547
|
+
return [
|
|
548
|
+
2,
|
|
549
|
+
new Response(html, {
|
|
550
|
+
status: 200,
|
|
551
|
+
headers: new Headers(_define_property({
|
|
552
|
+
"content-type": "text/html; charset=UTF-8"
|
|
553
|
+
}, X_MODERNJS_RENDER, "client"))
|
|
554
|
+
})
|
|
555
|
+
];
|
|
556
|
+
} else {
|
|
557
|
+
return [
|
|
558
|
+
2,
|
|
559
|
+
csrRscRender(request, options)
|
|
560
|
+
];
|
|
561
|
+
}
|
|
562
|
+
return [
|
|
563
|
+
2
|
|
564
|
+
];
|
|
565
|
+
});
|
|
512
566
|
});
|
|
567
|
+
return _csrRender.apply(this, arguments);
|
|
513
568
|
}
|
|
514
569
|
export {
|
|
515
570
|
createRender
|
|
@@ -1,46 +1,78 @@
|
|
|
1
1
|
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
2
2
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
3
3
|
import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
4
|
+
import { createRequestHandlerConfig } from "./utils";
|
|
4
5
|
var renderRscHandler = function() {
|
|
5
|
-
var _ref = _async_to_generator(function(req,
|
|
6
|
-
var
|
|
6
|
+
var _ref = _async_to_generator(function(req, options) {
|
|
7
|
+
var _serverManifest_renderBundles, routeInfo, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, monitors, logger, metrics, onError, onTiming, staticGenerate, serverBundle, loadableStats, routeManifest, config, requestHandlerOptions, rscPayloadHandler;
|
|
7
8
|
return _ts_generator(this, function(_state) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
switch (_state.label) {
|
|
10
|
+
case 0:
|
|
11
|
+
routeInfo = options.routeInfo, serverManifest = options.serverManifest, rscSSRManifest = options.rscSSRManifest, rscClientManifest = options.rscClientManifest, rscServerManifest = options.rscServerManifest, locals = options.locals, params = options.params, loaderContext = options.loaderContext, reporter = options.reporter, monitors = options.monitors, logger = options.logger, metrics = options.metrics, onError = options.onError, onTiming = options.onTiming, staticGenerate = options.staticGenerate;
|
|
12
|
+
serverBundle = serverManifest === null || serverManifest === void 0 ? void 0 : (_serverManifest_renderBundles = serverManifest.renderBundles) === null || _serverManifest_renderBundles === void 0 ? void 0 : _serverManifest_renderBundles[routeInfo.entryName || MAIN_ENTRY_NAME];
|
|
13
|
+
loadableStats = serverManifest.loadableStats || {};
|
|
14
|
+
routeManifest = serverManifest.routeManifest || {};
|
|
15
|
+
config = createRequestHandlerConfig(options.config);
|
|
16
|
+
requestHandlerOptions = {
|
|
17
|
+
resource: {
|
|
18
|
+
route: routeInfo,
|
|
19
|
+
loadableStats,
|
|
20
|
+
routeManifest,
|
|
21
|
+
entryName: routeInfo.entryName || MAIN_ENTRY_NAME
|
|
22
|
+
},
|
|
23
|
+
config,
|
|
24
|
+
params,
|
|
25
|
+
loaderContext,
|
|
26
|
+
rscSSRManifest,
|
|
27
|
+
rscClientManifest,
|
|
28
|
+
rscServerManifest,
|
|
29
|
+
locals,
|
|
30
|
+
reporter,
|
|
31
|
+
staticGenerate,
|
|
32
|
+
logger,
|
|
33
|
+
metrics,
|
|
34
|
+
monitors,
|
|
35
|
+
onError,
|
|
36
|
+
onTiming
|
|
37
|
+
};
|
|
38
|
+
if (!serverBundle) {
|
|
39
|
+
return [
|
|
40
|
+
2,
|
|
41
|
+
new Response("Cannot find server bundle for RSC", {
|
|
42
|
+
status: 500
|
|
43
|
+
})
|
|
44
|
+
];
|
|
45
|
+
}
|
|
46
|
+
return [
|
|
47
|
+
4,
|
|
48
|
+
serverBundle.rscPayloadHandler
|
|
49
|
+
];
|
|
50
|
+
case 1:
|
|
51
|
+
rscPayloadHandler = _state.sent();
|
|
52
|
+
if (!rscPayloadHandler) {
|
|
53
|
+
return [
|
|
54
|
+
2,
|
|
55
|
+
new Response("Cannot find request handler for RSC", {
|
|
56
|
+
status: 500
|
|
57
|
+
})
|
|
58
|
+
];
|
|
59
|
+
}
|
|
60
|
+
if (!rscClientManifest) {
|
|
61
|
+
return [
|
|
62
|
+
2,
|
|
63
|
+
new Response("Cannot find rsc client manifest", {
|
|
64
|
+
status: 500
|
|
65
|
+
})
|
|
66
|
+
];
|
|
67
|
+
}
|
|
68
|
+
return [
|
|
69
|
+
2,
|
|
70
|
+
rscPayloadHandler(req, requestHandlerOptions)
|
|
71
|
+
];
|
|
17
72
|
}
|
|
18
|
-
rscRequestHandler = serverBundle.rscRequestHandler;
|
|
19
|
-
if (!rscRequestHandler) {
|
|
20
|
-
return [
|
|
21
|
-
2,
|
|
22
|
-
new Response("Cannot find request handler for RSC", {
|
|
23
|
-
status: 500
|
|
24
|
-
})
|
|
25
|
-
];
|
|
26
|
-
}
|
|
27
|
-
if (!rscClientManifest) {
|
|
28
|
-
return [
|
|
29
|
-
2,
|
|
30
|
-
new Response("Cannot find rsc client manifest", {
|
|
31
|
-
status: 500
|
|
32
|
-
})
|
|
33
|
-
];
|
|
34
|
-
}
|
|
35
|
-
return [
|
|
36
|
-
2,
|
|
37
|
-
rscRequestHandler({
|
|
38
|
-
clientManifest: rscClientManifest
|
|
39
|
-
})
|
|
40
|
-
];
|
|
41
73
|
});
|
|
42
74
|
});
|
|
43
|
-
return function renderRscHandler2(req,
|
|
75
|
+
return function renderRscHandler2(req, options) {
|
|
44
76
|
return _ref.apply(this, arguments);
|
|
45
77
|
};
|
|
46
78
|
}();
|
|
@@ -5,6 +5,7 @@ import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
|
5
5
|
import { X_MODERNJS_RENDER } from "../../constants";
|
|
6
6
|
import { getPathname, parseHeaders } from "../../utils";
|
|
7
7
|
import { getCacheResult, matchCacheControl } from "./ssrCache";
|
|
8
|
+
import { createRequestHandlerConfig } from "./utils";
|
|
8
9
|
var SERVER_RUNTIME_ENTRY = "requestHandler";
|
|
9
10
|
function ssrRender(request, _) {
|
|
10
11
|
return _ssrRender.apply(this, arguments);
|
|
@@ -118,20 +119,6 @@ var IncomingMessgeProxy = function IncomingMessgeProxy2(req) {
|
|
|
118
119
|
this.method = req.method;
|
|
119
120
|
this.url = getPathname(req);
|
|
120
121
|
};
|
|
121
|
-
function createRequestHandlerConfig(userConfig) {
|
|
122
|
-
var output = userConfig.output, server = userConfig.server, security = userConfig.security, html = userConfig.html, source = userConfig.source;
|
|
123
|
-
return {
|
|
124
|
-
ssr: server === null || server === void 0 ? void 0 : server.ssr,
|
|
125
|
-
ssrByEntries: server === null || server === void 0 ? void 0 : server.ssrByEntries,
|
|
126
|
-
nonce: security === null || security === void 0 ? void 0 : security.nonce,
|
|
127
|
-
enableInlineScripts: output === null || output === void 0 ? void 0 : output.enableInlineScripts,
|
|
128
|
-
enableInlineStyles: output === null || output === void 0 ? void 0 : output.enableInlineStyles,
|
|
129
|
-
crossorigin: html === null || html === void 0 ? void 0 : html.crossorigin,
|
|
130
|
-
scriptLoading: html === null || html === void 0 ? void 0 : html.scriptLoading,
|
|
131
|
-
useJsonScript: server === null || server === void 0 ? void 0 : server.useJsonScript,
|
|
132
|
-
enableAsyncEntry: source === null || source === void 0 ? void 0 : source.enableAsyncEntry
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
122
|
export {
|
|
136
123
|
ssrRender
|
|
137
124
|
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
function createRequestHandlerConfig(userConfig) {
|
|
2
|
+
var output = userConfig.output, server = userConfig.server, security = userConfig.security, html = userConfig.html, source = userConfig.source;
|
|
3
|
+
return {
|
|
4
|
+
ssr: server === null || server === void 0 ? void 0 : server.ssr,
|
|
5
|
+
ssrByEntries: server === null || server === void 0 ? void 0 : server.ssrByEntries,
|
|
6
|
+
nonce: security === null || security === void 0 ? void 0 : security.nonce,
|
|
7
|
+
enableInlineScripts: output === null || output === void 0 ? void 0 : output.enableInlineScripts,
|
|
8
|
+
enableInlineStyles: output === null || output === void 0 ? void 0 : output.enableInlineStyles,
|
|
9
|
+
crossorigin: html === null || html === void 0 ? void 0 : html.crossorigin,
|
|
10
|
+
scriptLoading: html === null || html === void 0 ? void 0 : html.scriptLoading,
|
|
11
|
+
useJsonScript: server === null || server === void 0 ? void 0 : server.useJsonScript,
|
|
12
|
+
enableAsyncEntry: source === null || source === void 0 ? void 0 : source.enableAsyncEntry
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
createRequestHandlerConfig
|
|
17
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
2
|
+
import { createRequestHandlerConfig } from "./utils";
|
|
3
|
+
const csrRscRender = async (req, options) => {
|
|
4
|
+
var _serverManifest_renderBundles;
|
|
5
|
+
const { routeInfo, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, monitors, logger, metrics, onError, onTiming, staticGenerate, html } = options;
|
|
6
|
+
const serverBundle = serverManifest === null || serverManifest === void 0 ? void 0 : (_serverManifest_renderBundles = serverManifest.renderBundles) === null || _serverManifest_renderBundles === void 0 ? void 0 : _serverManifest_renderBundles[routeInfo.entryName || MAIN_ENTRY_NAME];
|
|
7
|
+
const loadableStats = serverManifest.loadableStats || {};
|
|
8
|
+
const routeManifest = serverManifest.routeManifest || {};
|
|
9
|
+
const config = createRequestHandlerConfig(options.config);
|
|
10
|
+
const requestHandlerOptions = {
|
|
11
|
+
resource: {
|
|
12
|
+
route: routeInfo,
|
|
13
|
+
loadableStats,
|
|
14
|
+
routeManifest,
|
|
15
|
+
entryName: routeInfo.entryName || MAIN_ENTRY_NAME
|
|
16
|
+
},
|
|
17
|
+
config,
|
|
18
|
+
params,
|
|
19
|
+
loaderContext,
|
|
20
|
+
html,
|
|
21
|
+
rscSSRManifest,
|
|
22
|
+
rscClientManifest,
|
|
23
|
+
rscServerManifest,
|
|
24
|
+
locals,
|
|
25
|
+
reporter,
|
|
26
|
+
staticGenerate,
|
|
27
|
+
logger,
|
|
28
|
+
metrics,
|
|
29
|
+
monitors,
|
|
30
|
+
onError,
|
|
31
|
+
onTiming
|
|
32
|
+
};
|
|
33
|
+
if (!serverBundle) {
|
|
34
|
+
return new Response("Cannot find server bundle for RSC", {
|
|
35
|
+
status: 500
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
const renderRscStreamHandler = await serverBundle.renderRscStreamHandler;
|
|
39
|
+
if (!renderRscStreamHandler) {
|
|
40
|
+
return new Response("Cannot find render handler for RSC", {
|
|
41
|
+
status: 500
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (!rscClientManifest) {
|
|
45
|
+
return new Response("Cannot find rsc client manifest", {
|
|
46
|
+
status: 500
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
const response = await renderRscStreamHandler(req, requestHandlerOptions);
|
|
50
|
+
return response;
|
|
51
|
+
};
|
|
52
|
+
export {
|
|
53
|
+
csrRscRender
|
|
54
|
+
};
|
|
@@ -3,6 +3,7 @@ import { TrieRouter } from "hono/router/trie-router";
|
|
|
3
3
|
import { X_MODERNJS_RENDER } from "../../constants";
|
|
4
4
|
import { uniqueKeyByRoute } from "../../utils";
|
|
5
5
|
import { ErrorDigest, createErrorHtml, getPathname, getRuntimeEnv, parseHeaders, parseQuery, sortRoutes } from "../../utils";
|
|
6
|
+
import { csrRscRender } from "./csrRscRender";
|
|
6
7
|
import { dataHandler } from "./dataHandler";
|
|
7
8
|
import { renderRscHandler } from "./renderRscHandler";
|
|
8
9
|
import { serverActionHandler } from "./serverActionHandler";
|
|
@@ -160,12 +161,12 @@ async function renderHandler(request, options, mode, fallbackWrapper, framework)
|
|
|
160
161
|
const url = new URL(request.url);
|
|
161
162
|
const matchedRoutes = matchRoutes(routes, url.pathname, options.routeInfo.urlPath);
|
|
162
163
|
if (!matchedRoutes) {
|
|
163
|
-
response = csrRender(options
|
|
164
|
+
response = await csrRender(request, options);
|
|
164
165
|
} else {
|
|
165
166
|
var _lastMatch_route;
|
|
166
167
|
const lastMatch = matchedRoutes[matchedRoutes.length - 1];
|
|
167
168
|
if (!(lastMatch === null || lastMatch === void 0 ? void 0 : (_lastMatch_route = lastMatch.route) === null || _lastMatch_route === void 0 ? void 0 : _lastMatch_route.id) || !ssrByRouteIds.includes(lastMatch.route.id)) {
|
|
168
|
-
response = csrRender(options
|
|
169
|
+
response = await csrRender(request, options);
|
|
169
170
|
}
|
|
170
171
|
}
|
|
171
172
|
}
|
|
@@ -176,14 +177,17 @@ async function renderHandler(request, options, mode, fallbackWrapper, framework)
|
|
|
176
177
|
} catch (e) {
|
|
177
178
|
options.onError(e, ErrorDigest.ERENDER);
|
|
178
179
|
await fallbackWrapper("error", e);
|
|
179
|
-
response = csrRender(
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
180
|
+
response = await csrRender(request, {
|
|
181
|
+
...options,
|
|
182
|
+
html: injectFallbackReasonToHtml({
|
|
183
|
+
html: options.html,
|
|
184
|
+
reason: "error",
|
|
185
|
+
framework
|
|
186
|
+
})
|
|
187
|
+
});
|
|
184
188
|
}
|
|
185
189
|
} else {
|
|
186
|
-
response = csrRender(options
|
|
190
|
+
response = await csrRender(request, options);
|
|
187
191
|
}
|
|
188
192
|
const { routeInfo } = options;
|
|
189
193
|
applyExtendHeaders(response, routeInfo);
|
|
@@ -228,14 +232,19 @@ function injectFallbackReasonToHtml({ html, reason, framework }) {
|
|
|
228
232
|
})}</script>`;
|
|
229
233
|
return html.replace(/<\/head>/, `${tag}</head>`);
|
|
230
234
|
}
|
|
231
|
-
function csrRender(
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
235
|
+
async function csrRender(request, options) {
|
|
236
|
+
const { html, rscClientManifest } = options;
|
|
237
|
+
if (!rscClientManifest || process.env.MODERN_DISABLE_INJECT_RSC_DATA) {
|
|
238
|
+
return new Response(html, {
|
|
239
|
+
status: 200,
|
|
240
|
+
headers: new Headers({
|
|
241
|
+
"content-type": "text/html; charset=UTF-8",
|
|
242
|
+
[X_MODERNJS_RENDER]: "client"
|
|
243
|
+
})
|
|
244
|
+
});
|
|
245
|
+
} else {
|
|
246
|
+
return csrRscRender(request, options);
|
|
247
|
+
}
|
|
239
248
|
}
|
|
240
249
|
export {
|
|
241
250
|
createRender
|
|
@@ -1,14 +1,41 @@
|
|
|
1
1
|
import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
2
|
-
|
|
2
|
+
import { createRequestHandlerConfig } from "./utils";
|
|
3
|
+
const renderRscHandler = async (req, options) => {
|
|
3
4
|
var _serverManifest_renderBundles;
|
|
5
|
+
const { routeInfo, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, monitors, logger, metrics, onError, onTiming, staticGenerate } = options;
|
|
4
6
|
const serverBundle = serverManifest === null || serverManifest === void 0 ? void 0 : (_serverManifest_renderBundles = serverManifest.renderBundles) === null || _serverManifest_renderBundles === void 0 ? void 0 : _serverManifest_renderBundles[routeInfo.entryName || MAIN_ENTRY_NAME];
|
|
7
|
+
const loadableStats = serverManifest.loadableStats || {};
|
|
8
|
+
const routeManifest = serverManifest.routeManifest || {};
|
|
9
|
+
const config = createRequestHandlerConfig(options.config);
|
|
10
|
+
const requestHandlerOptions = {
|
|
11
|
+
resource: {
|
|
12
|
+
route: routeInfo,
|
|
13
|
+
loadableStats,
|
|
14
|
+
routeManifest,
|
|
15
|
+
entryName: routeInfo.entryName || MAIN_ENTRY_NAME
|
|
16
|
+
},
|
|
17
|
+
config,
|
|
18
|
+
params,
|
|
19
|
+
loaderContext,
|
|
20
|
+
rscSSRManifest,
|
|
21
|
+
rscClientManifest,
|
|
22
|
+
rscServerManifest,
|
|
23
|
+
locals,
|
|
24
|
+
reporter,
|
|
25
|
+
staticGenerate,
|
|
26
|
+
logger,
|
|
27
|
+
metrics,
|
|
28
|
+
monitors,
|
|
29
|
+
onError,
|
|
30
|
+
onTiming
|
|
31
|
+
};
|
|
5
32
|
if (!serverBundle) {
|
|
6
33
|
return new Response("Cannot find server bundle for RSC", {
|
|
7
34
|
status: 500
|
|
8
35
|
});
|
|
9
36
|
}
|
|
10
|
-
const
|
|
11
|
-
if (!
|
|
37
|
+
const rscPayloadHandler = await serverBundle.rscPayloadHandler;
|
|
38
|
+
if (!rscPayloadHandler) {
|
|
12
39
|
return new Response("Cannot find request handler for RSC", {
|
|
13
40
|
status: 500
|
|
14
41
|
});
|
|
@@ -18,9 +45,7 @@ const renderRscHandler = async (req, { serverManifest, routeInfo, rscClientManif
|
|
|
18
45
|
status: 500
|
|
19
46
|
});
|
|
20
47
|
}
|
|
21
|
-
return
|
|
22
|
-
clientManifest: rscClientManifest
|
|
23
|
-
});
|
|
48
|
+
return rscPayloadHandler(req, requestHandlerOptions);
|
|
24
49
|
};
|
|
25
50
|
export {
|
|
26
51
|
renderRscHandler
|
|
@@ -2,6 +2,7 @@ import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
|
2
2
|
import { X_MODERNJS_RENDER } from "../../constants";
|
|
3
3
|
import { getPathname, parseHeaders } from "../../utils";
|
|
4
4
|
import { getCacheResult, matchCacheControl } from "./ssrCache";
|
|
5
|
+
import { createRequestHandlerConfig } from "./utils";
|
|
5
6
|
const SERVER_RUNTIME_ENTRY = "requestHandler";
|
|
6
7
|
async function ssrRender(request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, monitors, cacheConfig, logger, metrics, onError, onTiming }) {
|
|
7
8
|
var _serverManifest_renderBundles;
|
|
@@ -71,20 +72,6 @@ class IncomingMessgeProxy {
|
|
|
71
72
|
this.url = getPathname(req);
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
|
-
function createRequestHandlerConfig(userConfig) {
|
|
75
|
-
const { output, server, security, html, source } = userConfig;
|
|
76
|
-
return {
|
|
77
|
-
ssr: server === null || server === void 0 ? void 0 : server.ssr,
|
|
78
|
-
ssrByEntries: server === null || server === void 0 ? void 0 : server.ssrByEntries,
|
|
79
|
-
nonce: security === null || security === void 0 ? void 0 : security.nonce,
|
|
80
|
-
enableInlineScripts: output === null || output === void 0 ? void 0 : output.enableInlineScripts,
|
|
81
|
-
enableInlineStyles: output === null || output === void 0 ? void 0 : output.enableInlineStyles,
|
|
82
|
-
crossorigin: html === null || html === void 0 ? void 0 : html.crossorigin,
|
|
83
|
-
scriptLoading: html === null || html === void 0 ? void 0 : html.scriptLoading,
|
|
84
|
-
useJsonScript: server === null || server === void 0 ? void 0 : server.useJsonScript,
|
|
85
|
-
enableAsyncEntry: source === null || source === void 0 ? void 0 : source.enableAsyncEntry
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
75
|
export {
|
|
89
76
|
ssrRender
|
|
90
77
|
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
function createRequestHandlerConfig(userConfig) {
|
|
2
|
+
const { output, server, security, html, source } = userConfig;
|
|
3
|
+
return {
|
|
4
|
+
ssr: server === null || server === void 0 ? void 0 : server.ssr,
|
|
5
|
+
ssrByEntries: server === null || server === void 0 ? void 0 : server.ssrByEntries,
|
|
6
|
+
nonce: security === null || security === void 0 ? void 0 : security.nonce,
|
|
7
|
+
enableInlineScripts: output === null || output === void 0 ? void 0 : output.enableInlineScripts,
|
|
8
|
+
enableInlineStyles: output === null || output === void 0 ? void 0 : output.enableInlineStyles,
|
|
9
|
+
crossorigin: html === null || html === void 0 ? void 0 : html.crossorigin,
|
|
10
|
+
scriptLoading: html === null || html === void 0 ? void 0 : html.scriptLoading,
|
|
11
|
+
useJsonScript: server === null || server === void 0 ? void 0 : server.useJsonScript,
|
|
12
|
+
enableAsyncEntry: source === null || source === void 0 ? void 0 : source.enableAsyncEntry
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
createRequestHandlerConfig
|
|
17
|
+
};
|
|
@@ -4,4 +4,4 @@ import { type InjectRenderHandlerOptions } from './render';
|
|
|
4
4
|
export type CreateDefaultPluginsOptions = InjectRenderHandlerOptions & {
|
|
5
5
|
logger?: Logger | false;
|
|
6
6
|
};
|
|
7
|
-
export declare function createDefaultPlugins(options?: CreateDefaultPluginsOptions): (
|
|
7
|
+
export declare function createDefaultPlugins(options?: CreateDefaultPluginsOptions): (ServerPlugin | ServerPluginLegacy)[];
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { SSRRenderOptions } from './ssrRender';
|
|
2
|
-
export declare const renderRscHandler: (req: Request,
|
|
2
|
+
export declare const renderRscHandler: (req: Request, options: SSRRenderOptions) => Promise<Response>;
|
|
@@ -28,11 +28,13 @@ export type RequestHandlerOptions = {
|
|
|
28
28
|
config: RequestHandlerConfig;
|
|
29
29
|
params: Params;
|
|
30
30
|
loaderContext: LoaderContext;
|
|
31
|
+
html?: string;
|
|
31
32
|
rscServerManifest?: RscServerManifest;
|
|
32
33
|
rscClientManifest?: RscClientManifest;
|
|
33
34
|
rscSSRManifest?: RscSSRManifest;
|
|
34
35
|
RSCRoot?: any;
|
|
35
36
|
rscRoot?: any;
|
|
37
|
+
serverPayload?: any;
|
|
36
38
|
/** @deprecated */
|
|
37
39
|
locals?: Record<string, any>;
|
|
38
40
|
/** @deprecated */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Logger, Metrics, Monitors, NestedRoute, Reporter, ServerRoute } from '@modern-js/types';
|
|
2
2
|
import type { ClientManifest as RscClientManifest, SSRManifest as RscSSRManifest, ServerManifest as RscServerManifest } from '@modern-js/types/server';
|
|
3
|
-
import type { RequestHandler as BundleRequestHandler, OnError, OnTiming } from './requestHandler';
|
|
3
|
+
import type { RequestHandler as BundleRequestHandler, OnError, OnTiming, RequestHandlerOptions, Resource } from './requestHandler';
|
|
4
4
|
export type RequestHandler = (request: Request, ...args: any[]) => Response | Promise<Response>;
|
|
5
5
|
export type ServerLoaderBundle = {
|
|
6
6
|
routes: NestedRoute[];
|
|
@@ -17,14 +17,16 @@ export type ServerLoaderBundle = {
|
|
|
17
17
|
onTiming?: OnTiming;
|
|
18
18
|
}) => Promise<any>;
|
|
19
19
|
};
|
|
20
|
+
export type RscPayloadHandlerOptions = Omit<RequestHandlerOptions, 'resource'> & {
|
|
21
|
+
resource: Omit<Resource, 'htmlTemplate'>;
|
|
22
|
+
};
|
|
20
23
|
type ServerRenderBundle = {
|
|
21
24
|
requestHandler?: Promise<BundleRequestHandler>;
|
|
22
25
|
handleAction?: (req: Request, options: {
|
|
23
26
|
clientManifest: RscClientManifest;
|
|
24
27
|
}) => Promise<Response>;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}) => Promise<Response>;
|
|
28
|
+
rscPayloadHandler?: (req: Request, options: RscPayloadHandlerOptions) => Promise<Response>;
|
|
29
|
+
renderRscStreamHandler?: (req: Request, options: RscPayloadHandlerOptions) => Promise<Response>;
|
|
28
30
|
};
|
|
29
31
|
export type ServerManifest = {
|
|
30
32
|
loaderBundles?: Record<string, ServerLoaderBundle>;
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"modern",
|
|
16
16
|
"modern.js"
|
|
17
17
|
],
|
|
18
|
-
"version": "2.
|
|
18
|
+
"version": "2.68.1",
|
|
19
19
|
"jsnext:source": "./src/index.ts",
|
|
20
20
|
"types": "./dist/types/index.d.ts",
|
|
21
21
|
"main": "./dist/cjs/index.js",
|
|
@@ -54,10 +54,10 @@
|
|
|
54
54
|
"flatted": "^3.3.3",
|
|
55
55
|
"hono": "^3.12.2",
|
|
56
56
|
"ts-deepmerge": "7.0.2",
|
|
57
|
-
"@modern-js/plugin": "2.
|
|
58
|
-
"@modern-js/plugin-v2": "2.
|
|
59
|
-
"@modern-js/
|
|
60
|
-
"@modern-js/utils": "2.
|
|
57
|
+
"@modern-js/plugin": "2.68.1",
|
|
58
|
+
"@modern-js/plugin-v2": "2.68.1",
|
|
59
|
+
"@modern-js/utils": "2.68.1",
|
|
60
|
+
"@modern-js/runtime-utils": "2.68.1"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@types/cloneable-readable": "^2.0.3",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"jest": "^29",
|
|
69
69
|
"ts-jest": "^29.1.0",
|
|
70
70
|
"typescript": "^5",
|
|
71
|
-
"@modern-js/types": "2.
|
|
71
|
+
"@modern-js/types": "2.68.1",
|
|
72
72
|
"@scripts/build": "2.66.0",
|
|
73
73
|
"@scripts/jest-config": "2.66.0"
|
|
74
74
|
},
|