@modern-js/server-core 2.64.1 → 2.64.3
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/adapters/node/index.js +2 -0
- package/dist/cjs/adapters/node/node.js +1 -1
- package/dist/cjs/adapters/node/plugins/resource.js +53 -4
- package/dist/cjs/plugins/default.js +10 -2
- package/dist/cjs/plugins/render/index.js +6 -0
- package/dist/cjs/plugins/render/render.js +29 -15
- package/dist/cjs/plugins/render/renderRscHandler.js +51 -0
- package/dist/cjs/plugins/render/serverActionHandler.js +51 -0
- package/dist/cjs/plugins/render/ssrRender.js +4 -1
- package/dist/cjs/utils/error.js +1 -1
- package/dist/esm/adapters/node/index.js +2 -1
- package/dist/esm/adapters/node/node.js +1 -1
- package/dist/esm/adapters/node/plugins/resource.js +174 -5
- package/dist/esm/plugins/default.js +10 -2
- package/dist/esm/plugins/render/index.js +7 -1
- package/dist/esm/plugins/render/render.js +72 -44
- package/dist/esm/plugins/render/renderRscHandler.js +49 -0
- package/dist/esm/plugins/render/serverActionHandler.js +49 -0
- package/dist/esm/plugins/render/ssrRender.js +5 -2
- package/dist/esm/utils/error.js +1 -1
- package/dist/esm-node/adapters/node/index.js +2 -1
- package/dist/esm-node/adapters/node/node.js +1 -1
- package/dist/esm-node/adapters/node/plugins/resource.js +49 -4
- package/dist/esm-node/plugins/default.js +10 -2
- package/dist/esm-node/plugins/render/index.js +6 -0
- package/dist/esm-node/plugins/render/render.js +30 -16
- package/dist/esm-node/plugins/render/renderRscHandler.js +27 -0
- package/dist/esm-node/plugins/render/serverActionHandler.js +27 -0
- package/dist/esm-node/plugins/render/ssrRender.js +4 -1
- package/dist/esm-node/utils/error.js +1 -1
- package/dist/types/adapters/node/index.d.ts +1 -1
- package/dist/types/adapters/node/plugins/resource.d.ts +5 -1
- package/dist/types/plugins/default.d.ts +1 -1
- package/dist/types/plugins/render/render.d.ts +1 -1
- package/dist/types/plugins/render/renderRscHandler.d.ts +2 -0
- package/dist/types/plugins/render/serverActionHandler.d.ts +2 -0
- package/dist/types/plugins/render/ssrRender.d.ts +7 -3
- package/dist/types/types/config/server.d.ts +2 -0
- package/dist/types/types/render.d.ts +4 -1
- package/dist/types/types/requestHandler.d.ts +9 -3
- package/dist/types/types/server.d.ts +11 -1
- package/dist/types/utils/error.d.ts +1 -1
- package/package.json +7 -7
|
@@ -2,14 +2,22 @@ import { logPlugin } from "./log";
|
|
|
2
2
|
import { initMonitorsPlugin, injectServerTiming, injectloggerPluigin } from "./monitors";
|
|
3
3
|
import { processedByPlugin } from "./processedBy";
|
|
4
4
|
import { injectRenderHandlerPlugin } from "./render";
|
|
5
|
+
function createSilenceLogger() {
|
|
6
|
+
return new Proxy({}, {
|
|
7
|
+
get: function() {
|
|
8
|
+
return function() {
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
}
|
|
5
13
|
function createDefaultPlugins() {
|
|
6
14
|
var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
7
15
|
var plugins = [
|
|
16
|
+
logPlugin(),
|
|
8
17
|
initMonitorsPlugin(),
|
|
9
18
|
injectRenderHandlerPlugin(options),
|
|
10
|
-
injectloggerPluigin(options.logger),
|
|
19
|
+
injectloggerPluigin(options.logger ? options.logger : createSilenceLogger()),
|
|
11
20
|
injectServerTiming(),
|
|
12
|
-
logPlugin(),
|
|
13
21
|
processedByPlugin()
|
|
14
22
|
];
|
|
15
23
|
return plugins;
|
|
@@ -133,7 +133,7 @@ function getPageRoutes(routes) {
|
|
|
133
133
|
function createRenderHandler(render) {
|
|
134
134
|
return function() {
|
|
135
135
|
var _ref = _async_to_generator(function(c, _) {
|
|
136
|
-
var _c_env_node, logger, reporter, monitors, templates, serverManifest, locals, metrics, matchPathname, matchEntryName, loaderContext, request, nodeReq, res, body, status, headers, headersData;
|
|
136
|
+
var _c_env_node, logger, reporter, monitors, templates, serverManifest, rscServerManifest, rscClientManifest, rscSSRManifest, locals, metrics, matchPathname, matchEntryName, loaderContext, request, nodeReq, res, body, status, headers, headersData;
|
|
137
137
|
return _ts_generator(this, function(_state) {
|
|
138
138
|
switch (_state.label) {
|
|
139
139
|
case 0:
|
|
@@ -142,6 +142,9 @@ function createRenderHandler(render) {
|
|
|
142
142
|
monitors = c.get("monitors");
|
|
143
143
|
templates = c.get("templates") || {};
|
|
144
144
|
serverManifest = c.get("serverManifest") || {};
|
|
145
|
+
rscServerManifest = c.get("rscServerManifest");
|
|
146
|
+
rscClientManifest = c.get("rscClientManifest");
|
|
147
|
+
rscSSRManifest = c.get("rscSSRManifest");
|
|
145
148
|
locals = c.get("locals");
|
|
146
149
|
metrics = c.get("metrics");
|
|
147
150
|
matchPathname = c.get("matchPathname");
|
|
@@ -159,6 +162,9 @@ function createRenderHandler(render) {
|
|
|
159
162
|
templates,
|
|
160
163
|
metrics,
|
|
161
164
|
serverManifest,
|
|
165
|
+
rscServerManifest,
|
|
166
|
+
rscClientManifest,
|
|
167
|
+
rscSSRManifest,
|
|
162
168
|
loaderContext,
|
|
163
169
|
locals,
|
|
164
170
|
matchPathname,
|
|
@@ -10,8 +10,10 @@ import { cutNameByHyphen } from "@modern-js/utils/universal";
|
|
|
10
10
|
import { TrieRouter } from "hono/router/trie-router";
|
|
11
11
|
import { X_MODERNJS_RENDER } from "../../constants";
|
|
12
12
|
import { uniqueKeyByRoute } from "../../utils";
|
|
13
|
-
import { ErrorDigest, createErrorHtml, getPathname, getRuntimeEnv,
|
|
13
|
+
import { ErrorDigest, createErrorHtml, getPathname, getRuntimeEnv, parseHeaders, parseQuery, sortRoutes } from "../../utils";
|
|
14
14
|
import { dataHandler } from "./dataHandler";
|
|
15
|
+
import { renderRscHandler } from "./renderRscHandler";
|
|
16
|
+
import { serverActionHandler } from "./serverActionHandler";
|
|
15
17
|
import { ssrRender } from "./ssrRender";
|
|
16
18
|
var DYNAMIC_ROUTE_REG = /\/:./;
|
|
17
19
|
function getRouter(routes) {
|
|
@@ -76,31 +78,31 @@ function createRender(_) {
|
|
|
76
78
|
}
|
|
77
79
|
function _createRender() {
|
|
78
80
|
_createRender = _async_to_generator(function(param) {
|
|
79
|
-
var routes, pwd, metaName, staticGenerate, cacheConfig, forceCSR, config,
|
|
81
|
+
var routes, pwd, metaName, staticGenerate, cacheConfig, forceCSR, config, onFallback, router;
|
|
80
82
|
return _ts_generator(this, function(_state) {
|
|
81
|
-
routes = param.routes, pwd = param.pwd, metaName = param.metaName, staticGenerate = param.staticGenerate, cacheConfig = param.cacheConfig, forceCSR = param.forceCSR, config = param.config,
|
|
83
|
+
routes = param.routes, pwd = param.pwd, metaName = param.metaName, staticGenerate = param.staticGenerate, cacheConfig = param.cacheConfig, forceCSR = param.forceCSR, config = param.config, onFallback = param.onFallback;
|
|
82
84
|
router = getRouter(routes);
|
|
83
85
|
return [
|
|
84
86
|
2,
|
|
85
87
|
function() {
|
|
86
88
|
var _ref = _async_to_generator(function(req, param2) {
|
|
87
|
-
var logger, reporter, metrics, monitors, nodeReq, templates, serverManifest, locals, matchEntryName, matchPathname, loaderContext, forMatchpathname, _matchRoute, routeInfo, params, framework, fallbackHeader, fallbackReason,
|
|
89
|
+
var logger, reporter, metrics, monitors, nodeReq, templates, serverManifest, rscClientManifest, rscSSRManifest, rscServerManifest, locals, matchEntryName, matchPathname, loaderContext, forMatchpathname, _matchRoute, routeInfo, params, framework, fallbackHeader, fallbackReason, fallbackWrapper, html, renderMode, headerData, onError, onTiming, renderOptions, response, _tmp;
|
|
88
90
|
return _ts_generator(this, function(_state2) {
|
|
89
91
|
switch (_state2.label) {
|
|
90
92
|
case 0:
|
|
91
|
-
logger = param2.logger, reporter = param2.reporter, metrics = param2.metrics, monitors = param2.monitors, nodeReq = param2.nodeReq, templates = param2.templates, serverManifest = param2.serverManifest, locals = param2.locals, matchEntryName = param2.matchEntryName, matchPathname = param2.matchPathname, loaderContext = param2.loaderContext;
|
|
93
|
+
logger = param2.logger, reporter = param2.reporter, metrics = param2.metrics, monitors = param2.monitors, nodeReq = param2.nodeReq, templates = param2.templates, serverManifest = param2.serverManifest, rscClientManifest = param2.rscClientManifest, rscSSRManifest = param2.rscSSRManifest, rscServerManifest = param2.rscServerManifest, locals = param2.locals, matchEntryName = param2.matchEntryName, matchPathname = param2.matchPathname, loaderContext = param2.loaderContext;
|
|
92
94
|
forMatchpathname = matchPathname !== null && matchPathname !== void 0 ? matchPathname : getPathname(req);
|
|
93
95
|
_matchRoute = _sliced_to_array(matchRoute(router, forMatchpathname, matchEntryName), 2), routeInfo = _matchRoute[0], params = _matchRoute[1];
|
|
94
96
|
framework = metaName || "modern-js";
|
|
95
97
|
fallbackHeader = "x-".concat(cutNameByHyphen(framework), "-ssr-fallback");
|
|
96
98
|
fallbackReason = null;
|
|
97
|
-
|
|
99
|
+
fallbackWrapper = function() {
|
|
98
100
|
var _ref2 = _async_to_generator(function(reason, error) {
|
|
99
101
|
return _ts_generator(this, function(_state3) {
|
|
100
102
|
fallbackReason = reason;
|
|
101
103
|
return [
|
|
102
104
|
2,
|
|
103
|
-
|
|
105
|
+
onFallback === null || onFallback === void 0 ? void 0 : onFallback(reason, {
|
|
104
106
|
logger,
|
|
105
107
|
reporter,
|
|
106
108
|
metrics
|
|
@@ -108,7 +110,7 @@ function _createRender() {
|
|
|
108
110
|
];
|
|
109
111
|
});
|
|
110
112
|
});
|
|
111
|
-
return function
|
|
113
|
+
return function fallbackWrapper2(reason, error) {
|
|
112
114
|
return _ref2.apply(this, arguments);
|
|
113
115
|
};
|
|
114
116
|
}();
|
|
@@ -137,39 +139,17 @@ function _createRender() {
|
|
|
137
139
|
}
|
|
138
140
|
return [
|
|
139
141
|
4,
|
|
140
|
-
getRenderMode(req, fallbackHeader, routeInfo.isSSR, forceCSR, nodeReq,
|
|
142
|
+
getRenderMode(req, fallbackHeader, routeInfo.isSSR, forceCSR, nodeReq, fallbackWrapper)
|
|
141
143
|
];
|
|
142
144
|
case 1:
|
|
143
145
|
renderMode = _state2.sent();
|
|
144
146
|
headerData = parseHeaders(req);
|
|
145
|
-
onError = function(e) {
|
|
146
|
-
monitors === null || monitors === void 0 ? void 0 : monitors.error("SSR Error - ".concat(_instanceof(e, Error) ? e.name : e, ", error = %s, req.url = %s, req.headers = %o"), _instanceof(e, Error) ? e.stack || e.message : e, forMatchpathname, getHeadersWithoutCookie(headerData));
|
|
147
|
+
onError = function(e, key) {
|
|
148
|
+
monitors === null || monitors === void 0 ? void 0 : monitors.error("SSR Error - ".concat(key || (_instanceof(e, Error) ? e.name : e), ", error = %s, req.url = %s, req.headers = %o"), _instanceof(e, Error) ? e.stack || e.message : e, forMatchpathname, getHeadersWithoutCookie(headerData));
|
|
147
149
|
};
|
|
148
150
|
onTiming = function(name, dur) {
|
|
149
151
|
monitors === null || monitors === void 0 ? void 0 : monitors.timing(name, dur, "SSR");
|
|
150
152
|
};
|
|
151
|
-
onBoundError = function() {
|
|
152
|
-
var _ref2 = _async_to_generator(function(e) {
|
|
153
|
-
return _ts_generator(this, function(_state3) {
|
|
154
|
-
switch (_state3.label) {
|
|
155
|
-
case 0:
|
|
156
|
-
onErrorFn(ErrorDigest.ERENDER, e, monitors, req);
|
|
157
|
-
return [
|
|
158
|
-
4,
|
|
159
|
-
onFallback === null || onFallback === void 0 ? void 0 : onFallback("error", e)
|
|
160
|
-
];
|
|
161
|
-
case 1:
|
|
162
|
-
_state3.sent();
|
|
163
|
-
return [
|
|
164
|
-
2
|
|
165
|
-
];
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
return function onBoundError2(e) {
|
|
170
|
-
return _ref2.apply(this, arguments);
|
|
171
|
-
};
|
|
172
|
-
}();
|
|
173
153
|
renderOptions = {
|
|
174
154
|
pwd,
|
|
175
155
|
html,
|
|
@@ -184,6 +164,9 @@ function _createRender() {
|
|
|
184
164
|
logger,
|
|
185
165
|
metrics,
|
|
186
166
|
locals,
|
|
167
|
+
rscClientManifest,
|
|
168
|
+
rscSSRManifest,
|
|
169
|
+
rscServerManifest,
|
|
187
170
|
serverManifest,
|
|
188
171
|
loaderContext: loaderContext || /* @__PURE__ */ new Map(),
|
|
189
172
|
onError,
|
|
@@ -195,20 +178,30 @@ function _createRender() {
|
|
|
195
178
|
3,
|
|
196
179
|
2
|
|
197
180
|
];
|
|
198
|
-
case "
|
|
181
|
+
case "rsc-tree":
|
|
199
182
|
return [
|
|
200
183
|
3,
|
|
201
184
|
6
|
|
202
185
|
];
|
|
186
|
+
case "rsc-action":
|
|
187
|
+
return [
|
|
188
|
+
3,
|
|
189
|
+
8
|
|
190
|
+
];
|
|
191
|
+
case "ssr":
|
|
192
|
+
return [
|
|
193
|
+
3,
|
|
194
|
+
10
|
|
195
|
+
];
|
|
203
196
|
case "csr":
|
|
204
197
|
return [
|
|
205
198
|
3,
|
|
206
|
-
|
|
199
|
+
10
|
|
207
200
|
];
|
|
208
201
|
}
|
|
209
202
|
return [
|
|
210
203
|
3,
|
|
211
|
-
|
|
204
|
+
12
|
|
212
205
|
];
|
|
213
206
|
case 2:
|
|
214
207
|
return [
|
|
@@ -224,7 +217,7 @@ function _createRender() {
|
|
|
224
217
|
];
|
|
225
218
|
return [
|
|
226
219
|
4,
|
|
227
|
-
renderHandler(req, renderOptions, "ssr",
|
|
220
|
+
renderHandler(req, renderOptions, "ssr", fallbackWrapper)
|
|
228
221
|
];
|
|
229
222
|
case 4:
|
|
230
223
|
_tmp = _state2.sent();
|
|
@@ -233,22 +226,44 @@ function _createRender() {
|
|
|
233
226
|
response = _tmp;
|
|
234
227
|
return [
|
|
235
228
|
3,
|
|
236
|
-
|
|
229
|
+
13
|
|
237
230
|
];
|
|
238
231
|
case 6:
|
|
239
232
|
return [
|
|
240
233
|
4,
|
|
241
|
-
|
|
234
|
+
renderRscHandler(req, renderOptions)
|
|
242
235
|
];
|
|
243
236
|
case 7:
|
|
244
237
|
response = _state2.sent();
|
|
245
238
|
return [
|
|
246
239
|
3,
|
|
247
|
-
|
|
240
|
+
13
|
|
248
241
|
];
|
|
249
242
|
case 8:
|
|
250
|
-
|
|
243
|
+
return [
|
|
244
|
+
4,
|
|
245
|
+
serverActionHandler(req, renderOptions)
|
|
246
|
+
];
|
|
251
247
|
case 9:
|
|
248
|
+
response = _state2.sent();
|
|
249
|
+
return [
|
|
250
|
+
3,
|
|
251
|
+
13
|
|
252
|
+
];
|
|
253
|
+
case 10:
|
|
254
|
+
return [
|
|
255
|
+
4,
|
|
256
|
+
renderHandler(req, renderOptions, renderMode, fallbackWrapper)
|
|
257
|
+
];
|
|
258
|
+
case 11:
|
|
259
|
+
response = _state2.sent();
|
|
260
|
+
return [
|
|
261
|
+
3,
|
|
262
|
+
13
|
|
263
|
+
];
|
|
264
|
+
case 12:
|
|
265
|
+
throw new Error("Unknown render mode: ".concat(renderMode));
|
|
266
|
+
case 13:
|
|
252
267
|
if (fallbackReason) {
|
|
253
268
|
response.headers.set(fallbackHeader, "1;reason=".concat(fallbackReason));
|
|
254
269
|
}
|
|
@@ -268,11 +283,11 @@ function _createRender() {
|
|
|
268
283
|
});
|
|
269
284
|
return _createRender.apply(this, arguments);
|
|
270
285
|
}
|
|
271
|
-
function renderHandler(request, options, mode,
|
|
286
|
+
function renderHandler(request, options, mode, fallbackWrapper) {
|
|
272
287
|
return _renderHandler.apply(this, arguments);
|
|
273
288
|
}
|
|
274
289
|
function _renderHandler() {
|
|
275
|
-
_renderHandler = _async_to_generator(function(request, options, mode,
|
|
290
|
+
_renderHandler = _async_to_generator(function(request, options, mode, fallbackWrapper) {
|
|
276
291
|
var _options_config_server, response, serverManifest, ssrByRouteIds, runtimeEnv, nestedRoutesJson, routes, urlPath, pathToFileURL, matchRoutes, url, matchedRoutes, _lastMatch_route, lastMatch, e, routeInfo;
|
|
277
292
|
function applyExtendHeaders(r, route) {
|
|
278
293
|
Object.entries(route.responseHeaders || {}).forEach(function(param) {
|
|
@@ -350,9 +365,10 @@ function _renderHandler() {
|
|
|
350
365
|
];
|
|
351
366
|
case 6:
|
|
352
367
|
e = _state.sent();
|
|
368
|
+
options.onError(e, ErrorDigest.ERENDER);
|
|
353
369
|
return [
|
|
354
370
|
4,
|
|
355
|
-
|
|
371
|
+
fallbackWrapper("error", e)
|
|
356
372
|
];
|
|
357
373
|
case 7:
|
|
358
374
|
_state.sent();
|
|
@@ -391,6 +407,18 @@ function _getRenderMode() {
|
|
|
391
407
|
switch (_state.label) {
|
|
392
408
|
case 0:
|
|
393
409
|
query = parseQuery(req);
|
|
410
|
+
if (req.headers.get("x-rsc-action")) {
|
|
411
|
+
return [
|
|
412
|
+
2,
|
|
413
|
+
"rsc-action"
|
|
414
|
+
];
|
|
415
|
+
}
|
|
416
|
+
if (req.headers.get("x-rsc-tree")) {
|
|
417
|
+
return [
|
|
418
|
+
2,
|
|
419
|
+
"rsc-tree"
|
|
420
|
+
];
|
|
421
|
+
}
|
|
394
422
|
if (!isSSR)
|
|
395
423
|
return [
|
|
396
424
|
3,
|
|
@@ -0,0 +1,49 @@
|
|
|
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
|
+
var renderRscHandler = function() {
|
|
5
|
+
var _ref = _async_to_generator(function(req, param) {
|
|
6
|
+
var serverManifest, routeInfo, rscClientManifest, _serverManifest_renderBundles, serverBundle, rscRequestHandler;
|
|
7
|
+
return _ts_generator(this, function(_state) {
|
|
8
|
+
serverManifest = param.serverManifest, routeInfo = param.routeInfo, rscClientManifest = param.rscClientManifest;
|
|
9
|
+
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];
|
|
10
|
+
if (!serverBundle) {
|
|
11
|
+
return [
|
|
12
|
+
2,
|
|
13
|
+
new Response("Cannot find server bundle for RSC", {
|
|
14
|
+
status: 500
|
|
15
|
+
})
|
|
16
|
+
];
|
|
17
|
+
}
|
|
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
|
+
});
|
|
42
|
+
});
|
|
43
|
+
return function renderRscHandler2(req, _) {
|
|
44
|
+
return _ref.apply(this, arguments);
|
|
45
|
+
};
|
|
46
|
+
}();
|
|
47
|
+
export {
|
|
48
|
+
renderRscHandler
|
|
49
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
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
|
+
var serverActionHandler = function() {
|
|
5
|
+
var _ref = _async_to_generator(function(req, param) {
|
|
6
|
+
var serverManifest, routeInfo, rscClientManifest, _serverManifest_renderBundles, serverBundle, handleAction;
|
|
7
|
+
return _ts_generator(this, function(_state) {
|
|
8
|
+
serverManifest = param.serverManifest, routeInfo = param.routeInfo, rscClientManifest = param.rscClientManifest;
|
|
9
|
+
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];
|
|
10
|
+
if (!serverBundle) {
|
|
11
|
+
return [
|
|
12
|
+
2,
|
|
13
|
+
new Response("Cannot find server bundle for server action", {
|
|
14
|
+
status: 500
|
|
15
|
+
})
|
|
16
|
+
];
|
|
17
|
+
}
|
|
18
|
+
handleAction = serverBundle.handleAction;
|
|
19
|
+
if (!handleAction) {
|
|
20
|
+
return [
|
|
21
|
+
2,
|
|
22
|
+
new Response("Cannot find server action handler", {
|
|
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
|
+
handleAction(req, {
|
|
38
|
+
clientManifest: rscClientManifest
|
|
39
|
+
})
|
|
40
|
+
];
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
return function serverActionHandler2(req, _) {
|
|
44
|
+
return _ref.apply(this, arguments);
|
|
45
|
+
};
|
|
46
|
+
}();
|
|
47
|
+
export {
|
|
48
|
+
serverActionHandler
|
|
49
|
+
};
|
|
@@ -11,11 +11,11 @@ function ssrRender(request, _) {
|
|
|
11
11
|
}
|
|
12
12
|
function _ssrRender() {
|
|
13
13
|
_ssrRender = _async_to_generator(function(request, param) {
|
|
14
|
-
var routeInfo, html, userConfig, staticGenerate, nodeReq, serverManifest, locals, params, loaderContext, reporter, cacheConfig, logger, metrics, onError, onTiming, _serverManifest_renderBundles, entryName, loadableStats, routeManifest, headers, key, renderBundle, requestHandler, config, requestHandlerOptions, cacheControl, response;
|
|
14
|
+
var routeInfo, html, userConfig, staticGenerate, nodeReq, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, cacheConfig, logger, metrics, onError, onTiming, _serverManifest_renderBundles, entryName, loadableStats, routeManifest, headers, key, renderBundle, requestHandler, config, requestHandlerOptions, cacheControl, response;
|
|
15
15
|
return _ts_generator(this, function(_state) {
|
|
16
16
|
switch (_state.label) {
|
|
17
17
|
case 0:
|
|
18
|
-
routeInfo = param.routeInfo, html = param.html, userConfig = param.config, staticGenerate = param.staticGenerate, nodeReq = param.nodeReq, serverManifest = param.serverManifest, locals = param.locals, params = param.params, loaderContext = param.loaderContext, reporter = param.reporter, cacheConfig = param.cacheConfig, logger = param.logger, metrics = param.metrics, onError = param.onError, onTiming = param.onTiming;
|
|
18
|
+
routeInfo = param.routeInfo, html = param.html, userConfig = param.config, staticGenerate = param.staticGenerate, nodeReq = param.nodeReq, serverManifest = param.serverManifest, rscSSRManifest = param.rscSSRManifest, rscClientManifest = param.rscClientManifest, rscServerManifest = param.rscServerManifest, locals = param.locals, params = param.params, loaderContext = param.loaderContext, reporter = param.reporter, cacheConfig = param.cacheConfig, logger = param.logger, metrics = param.metrics, onError = param.onError, onTiming = param.onTiming;
|
|
19
19
|
entryName = routeInfo.entryName;
|
|
20
20
|
loadableStats = serverManifest.loadableStats || {};
|
|
21
21
|
routeManifest = serverManifest.routeManifest || {};
|
|
@@ -49,6 +49,9 @@ function _ssrRender() {
|
|
|
49
49
|
params,
|
|
50
50
|
loaderContext,
|
|
51
51
|
config,
|
|
52
|
+
rscSSRManifest,
|
|
53
|
+
rscClientManifest,
|
|
54
|
+
rscServerManifest,
|
|
52
55
|
locals,
|
|
53
56
|
reporter,
|
|
54
57
|
staticGenerate,
|
package/dist/esm/utils/error.js
CHANGED
|
@@ -13,7 +13,7 @@ var ErrorDigest;
|
|
|
13
13
|
(function(ErrorDigest2) {
|
|
14
14
|
ErrorDigest2["ENOTF"] = "Page could not be found";
|
|
15
15
|
ErrorDigest2["EINTER"] = "Internal server error";
|
|
16
|
-
ErrorDigest2["ERENDER"] = "SSR render
|
|
16
|
+
ErrorDigest2["ERENDER"] = "SSR render fallback";
|
|
17
17
|
})(ErrorDigest || (ErrorDigest = {}));
|
|
18
18
|
function onError(digest, error, monitors, req) {
|
|
19
19
|
var headerData = req && parseHeaders(req);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { httpCallBack2HonoMid, connectMid2HonoMid } from "./hono";
|
|
2
2
|
import { createNodeServer, sendResponse, createWebRequest, writeReadableStreamToWritable } from "./node";
|
|
3
|
-
import { serverStaticPlugin, injectResourcePlugin, getHtmlTemplates, getServerManifest, injectNodeSeverPlugin } from "./plugins";
|
|
3
|
+
import { serverStaticPlugin, injectResourcePlugin, getHtmlTemplates, getServerManifest, injectNodeSeverPlugin, injectRscManifestPlugin } from "./plugins";
|
|
4
4
|
import { loadServerPlugins, loadServerEnv, loadServerRuntimeConfig, loadServerCliConfig, loadCacheConfig } from "./helper";
|
|
5
5
|
export {
|
|
6
6
|
connectMid2HonoMid,
|
|
@@ -11,6 +11,7 @@ export {
|
|
|
11
11
|
httpCallBack2HonoMid,
|
|
12
12
|
injectNodeSeverPlugin,
|
|
13
13
|
injectResourcePlugin,
|
|
14
|
+
injectRscManifestPlugin,
|
|
14
15
|
loadCacheConfig,
|
|
15
16
|
loadServerCliConfig,
|
|
16
17
|
loadServerEnv,
|
|
@@ -22,7 +22,7 @@ const createWebRequest = (req, res, body) => {
|
|
|
22
22
|
signal: controller.signal
|
|
23
23
|
};
|
|
24
24
|
res.on("close", () => controller.abort("res closed"));
|
|
25
|
-
if (body || !(method === "GET" || method === "HEAD") && ((_req_url = req.url) === null || _req_url === void 0 ? void 0 : _req_url.includes("__loader")) || req.headers["x-mf-micro"]) {
|
|
25
|
+
if (body || !(method === "GET" || method === "HEAD") && ((_req_url = req.url) === null || _req_url === void 0 ? void 0 : _req_url.includes("__loader")) || req.headers["x-mf-micro"] || req.headers["x-rsc-action"] || req.headers["x-parse-through-body"]) {
|
|
26
26
|
init.body = body !== null && body !== void 0 ? body : createReadableStreamFromReadable(req);
|
|
27
27
|
init.duplex = "half";
|
|
28
28
|
}
|
|
@@ -66,16 +66,56 @@ async function getServerManifest(pwd, routes, logger) {
|
|
|
66
66
|
nestedRoutesJson
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
|
-
function injectServerManifest(pwd, routes) {
|
|
69
|
+
function injectServerManifest(pwd, routes, manifestPromise) {
|
|
70
70
|
return async (c, next) => {
|
|
71
71
|
if (routes && !c.get("serverManifest")) {
|
|
72
72
|
const logger = c.get("logger");
|
|
73
|
-
const serverManifest = await getServerManifest(pwd, routes, logger);
|
|
73
|
+
const serverManifest = await (manifestPromise || getServerManifest(pwd, routes, logger));
|
|
74
74
|
c.set("serverManifest", serverManifest);
|
|
75
75
|
}
|
|
76
76
|
await next();
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
|
+
async function getRscServerManifest(pwd) {
|
|
80
|
+
const rscServerManifest = await compatibleRequire(path.join(pwd, "bundles", "react-server-manifest.json")).catch((_) => void 0);
|
|
81
|
+
return rscServerManifest;
|
|
82
|
+
}
|
|
83
|
+
async function getClientManifest(pwd) {
|
|
84
|
+
const rscClientManifest = await compatibleRequire(path.join(pwd, "react-client-manifest.json")).catch((_) => void 0);
|
|
85
|
+
return rscClientManifest;
|
|
86
|
+
}
|
|
87
|
+
async function getRscSSRManifest(pwd) {
|
|
88
|
+
const rscSSRManifest = await compatibleRequire(path.join(pwd, "react-ssr-manifest.json")).catch((_) => void 0);
|
|
89
|
+
return rscSSRManifest;
|
|
90
|
+
}
|
|
91
|
+
const injectRscManifestPlugin = () => ({
|
|
92
|
+
name: "@modern-js/plugin-inject-rsc-manifest",
|
|
93
|
+
setup(api) {
|
|
94
|
+
return {
|
|
95
|
+
async prepare() {
|
|
96
|
+
const { middlewares, distDirectory: pwd } = api.useAppContext();
|
|
97
|
+
middlewares.push({
|
|
98
|
+
name: "inject-rsc-manifest",
|
|
99
|
+
handler: async (c, next) => {
|
|
100
|
+
if (!c.get("rscServerManifest")) {
|
|
101
|
+
const rscServerManifest = await getRscServerManifest(pwd);
|
|
102
|
+
c.set("rscServerManifest", rscServerManifest);
|
|
103
|
+
}
|
|
104
|
+
if (!c.get("rscClientManifest")) {
|
|
105
|
+
const rscClientManifest = await getClientManifest(pwd);
|
|
106
|
+
c.set("rscClientManifest", rscClientManifest);
|
|
107
|
+
}
|
|
108
|
+
if (!c.get("rscSSRManifest")) {
|
|
109
|
+
const rscSSRManifest = await getRscSSRManifest(pwd);
|
|
110
|
+
c.set("rscSSRManifest", rscSSRManifest);
|
|
111
|
+
}
|
|
112
|
+
await next();
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
});
|
|
79
119
|
const injectResourcePlugin = () => ({
|
|
80
120
|
name: "@modern-js/plugin-inject-resource",
|
|
81
121
|
setup(api) {
|
|
@@ -83,13 +123,14 @@ const injectResourcePlugin = () => ({
|
|
|
83
123
|
async prepare() {
|
|
84
124
|
const { middlewares, routes, distDirectory: pwd } = api.useAppContext();
|
|
85
125
|
let htmlTemplatePromise;
|
|
126
|
+
let manifestPromise;
|
|
86
127
|
if (isProd()) {
|
|
87
|
-
getServerManifest(pwd, routes || [], console);
|
|
128
|
+
manifestPromise = getServerManifest(pwd, routes || [], console);
|
|
88
129
|
htmlTemplatePromise = getHtmlTemplates(pwd, routes || []);
|
|
89
130
|
}
|
|
90
131
|
middlewares.push({
|
|
91
132
|
name: "inject-server-manifest",
|
|
92
|
-
handler: injectServerManifest(pwd, routes)
|
|
133
|
+
handler: injectServerManifest(pwd, routes, manifestPromise)
|
|
93
134
|
});
|
|
94
135
|
middlewares.push({
|
|
95
136
|
name: "inject-html",
|
|
@@ -100,9 +141,13 @@ const injectResourcePlugin = () => ({
|
|
|
100
141
|
}
|
|
101
142
|
});
|
|
102
143
|
export {
|
|
144
|
+
getClientManifest,
|
|
103
145
|
getHtmlTemplates,
|
|
146
|
+
getRscSSRManifest,
|
|
147
|
+
getRscServerManifest,
|
|
104
148
|
getServerManifest,
|
|
105
149
|
injectResourcePlugin,
|
|
150
|
+
injectRscManifestPlugin,
|
|
106
151
|
injectServerManifest,
|
|
107
152
|
injectTemplates
|
|
108
153
|
};
|
|
@@ -2,13 +2,21 @@ import { logPlugin } from "./log";
|
|
|
2
2
|
import { initMonitorsPlugin, injectServerTiming, injectloggerPluigin } from "./monitors";
|
|
3
3
|
import { processedByPlugin } from "./processedBy";
|
|
4
4
|
import { injectRenderHandlerPlugin } from "./render";
|
|
5
|
+
function createSilenceLogger() {
|
|
6
|
+
return new Proxy({}, {
|
|
7
|
+
get: () => {
|
|
8
|
+
return () => {
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
}
|
|
5
13
|
function createDefaultPlugins(options = {}) {
|
|
6
14
|
const plugins = [
|
|
15
|
+
logPlugin(),
|
|
7
16
|
initMonitorsPlugin(),
|
|
8
17
|
injectRenderHandlerPlugin(options),
|
|
9
|
-
injectloggerPluigin(options.logger),
|
|
18
|
+
injectloggerPluigin(options.logger ? options.logger : createSilenceLogger()),
|
|
10
19
|
injectServerTiming(),
|
|
11
|
-
logPlugin(),
|
|
12
20
|
processedByPlugin()
|
|
13
21
|
];
|
|
14
22
|
return plugins;
|
|
@@ -65,6 +65,9 @@ function createRenderHandler(render) {
|
|
|
65
65
|
const monitors = c.get("monitors");
|
|
66
66
|
const templates = c.get("templates") || {};
|
|
67
67
|
const serverManifest = c.get("serverManifest") || {};
|
|
68
|
+
const rscServerManifest = c.get("rscServerManifest");
|
|
69
|
+
const rscClientManifest = c.get("rscClientManifest");
|
|
70
|
+
const rscSSRManifest = c.get("rscSSRManifest");
|
|
68
71
|
const locals = c.get("locals");
|
|
69
72
|
const metrics = c.get("metrics");
|
|
70
73
|
const matchPathname = c.get("matchPathname");
|
|
@@ -80,6 +83,9 @@ function createRenderHandler(render) {
|
|
|
80
83
|
templates,
|
|
81
84
|
metrics,
|
|
82
85
|
serverManifest,
|
|
86
|
+
rscServerManifest,
|
|
87
|
+
rscClientManifest,
|
|
88
|
+
rscSSRManifest,
|
|
83
89
|
loaderContext,
|
|
84
90
|
locals,
|
|
85
91
|
matchPathname,
|