@modern-js/server-core 2.64.0 → 2.64.2

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.
Files changed (46) hide show
  1. package/dist/cjs/adapters/node/index.js +2 -0
  2. package/dist/cjs/adapters/node/node.js +1 -1
  3. package/dist/cjs/adapters/node/plugins/resource.js +53 -4
  4. package/dist/cjs/plugins/default.js +10 -2
  5. package/dist/cjs/plugins/log.js +3 -1
  6. package/dist/cjs/plugins/render/index.js +6 -0
  7. package/dist/cjs/plugins/render/render.js +29 -15
  8. package/dist/cjs/plugins/render/renderRscHandler.js +51 -0
  9. package/dist/cjs/plugins/render/serverActionHandler.js +51 -0
  10. package/dist/cjs/plugins/render/ssrRender.js +4 -1
  11. package/dist/cjs/utils/error.js +1 -1
  12. package/dist/esm/adapters/node/index.js +2 -1
  13. package/dist/esm/adapters/node/node.js +1 -1
  14. package/dist/esm/adapters/node/plugins/resource.js +174 -5
  15. package/dist/esm/plugins/default.js +10 -2
  16. package/dist/esm/plugins/log.js +2 -2
  17. package/dist/esm/plugins/render/index.js +7 -1
  18. package/dist/esm/plugins/render/render.js +72 -44
  19. package/dist/esm/plugins/render/renderRscHandler.js +49 -0
  20. package/dist/esm/plugins/render/serverActionHandler.js +49 -0
  21. package/dist/esm/plugins/render/ssrRender.js +5 -2
  22. package/dist/esm/utils/error.js +1 -1
  23. package/dist/esm-node/adapters/node/index.js +2 -1
  24. package/dist/esm-node/adapters/node/node.js +1 -1
  25. package/dist/esm-node/adapters/node/plugins/resource.js +49 -4
  26. package/dist/esm-node/plugins/default.js +10 -2
  27. package/dist/esm-node/plugins/log.js +3 -1
  28. package/dist/esm-node/plugins/render/index.js +6 -0
  29. package/dist/esm-node/plugins/render/render.js +30 -16
  30. package/dist/esm-node/plugins/render/renderRscHandler.js +27 -0
  31. package/dist/esm-node/plugins/render/serverActionHandler.js +27 -0
  32. package/dist/esm-node/plugins/render/ssrRender.js +4 -1
  33. package/dist/esm-node/utils/error.js +1 -1
  34. package/dist/types/adapters/node/index.d.ts +1 -1
  35. package/dist/types/adapters/node/plugins/resource.d.ts +5 -1
  36. package/dist/types/plugins/default.d.ts +1 -1
  37. package/dist/types/plugins/render/render.d.ts +1 -1
  38. package/dist/types/plugins/render/renderRscHandler.d.ts +2 -0
  39. package/dist/types/plugins/render/serverActionHandler.d.ts +2 -0
  40. package/dist/types/plugins/render/ssrRender.d.ts +7 -3
  41. package/dist/types/types/config/server.d.ts +2 -0
  42. package/dist/types/types/render.d.ts +4 -1
  43. package/dist/types/types/requestHandler.d.ts +9 -3
  44. package/dist/types/types/server.d.ts +11 -1
  45. package/dist/types/utils/error.d.ts +1 -1
  46. package/package.json +7 -7
@@ -285,7 +285,7 @@ function _getServerManifest() {
285
285
  });
286
286
  return _getServerManifest.apply(this, arguments);
287
287
  }
288
- function injectServerManifest(pwd, routes) {
288
+ function injectServerManifest(pwd, routes, manifestPromise) {
289
289
  return function() {
290
290
  var _ref = _async_to_generator(function(c, next) {
291
291
  var logger, serverManifest;
@@ -300,7 +300,7 @@ function injectServerManifest(pwd, routes) {
300
300
  logger = c.get("logger");
301
301
  return [
302
302
  4,
303
- getServerManifest(pwd, routes, logger)
303
+ manifestPromise || getServerManifest(pwd, routes, logger)
304
304
  ];
305
305
  case 1:
306
306
  serverManifest = _state.sent();
@@ -324,6 +324,171 @@ function injectServerManifest(pwd, routes) {
324
324
  };
325
325
  }();
326
326
  }
327
+ function getRscServerManifest(pwd) {
328
+ return _getRscServerManifest.apply(this, arguments);
329
+ }
330
+ function _getRscServerManifest() {
331
+ _getRscServerManifest = _async_to_generator(function(pwd) {
332
+ var rscServerManifest;
333
+ return _ts_generator(this, function(_state) {
334
+ switch (_state.label) {
335
+ case 0:
336
+ return [
337
+ 4,
338
+ compatibleRequire(path.join(pwd, "bundles", "react-server-manifest.json")).catch(function(_) {
339
+ return void 0;
340
+ })
341
+ ];
342
+ case 1:
343
+ rscServerManifest = _state.sent();
344
+ return [
345
+ 2,
346
+ rscServerManifest
347
+ ];
348
+ }
349
+ });
350
+ });
351
+ return _getRscServerManifest.apply(this, arguments);
352
+ }
353
+ function getClientManifest(pwd) {
354
+ return _getClientManifest.apply(this, arguments);
355
+ }
356
+ function _getClientManifest() {
357
+ _getClientManifest = _async_to_generator(function(pwd) {
358
+ var rscClientManifest;
359
+ return _ts_generator(this, function(_state) {
360
+ switch (_state.label) {
361
+ case 0:
362
+ return [
363
+ 4,
364
+ compatibleRequire(path.join(pwd, "react-client-manifest.json")).catch(function(_) {
365
+ return void 0;
366
+ })
367
+ ];
368
+ case 1:
369
+ rscClientManifest = _state.sent();
370
+ return [
371
+ 2,
372
+ rscClientManifest
373
+ ];
374
+ }
375
+ });
376
+ });
377
+ return _getClientManifest.apply(this, arguments);
378
+ }
379
+ function getRscSSRManifest(pwd) {
380
+ return _getRscSSRManifest.apply(this, arguments);
381
+ }
382
+ function _getRscSSRManifest() {
383
+ _getRscSSRManifest = _async_to_generator(function(pwd) {
384
+ var rscSSRManifest;
385
+ return _ts_generator(this, function(_state) {
386
+ switch (_state.label) {
387
+ case 0:
388
+ return [
389
+ 4,
390
+ compatibleRequire(path.join(pwd, "react-ssr-manifest.json")).catch(function(_) {
391
+ return void 0;
392
+ })
393
+ ];
394
+ case 1:
395
+ rscSSRManifest = _state.sent();
396
+ return [
397
+ 2,
398
+ rscSSRManifest
399
+ ];
400
+ }
401
+ });
402
+ });
403
+ return _getRscSSRManifest.apply(this, arguments);
404
+ }
405
+ var injectRscManifestPlugin = function() {
406
+ return {
407
+ name: "@modern-js/plugin-inject-rsc-manifest",
408
+ setup: function setup(api) {
409
+ return {
410
+ prepare: function prepare() {
411
+ return _async_to_generator(function() {
412
+ var _api_useAppContext, middlewares, pwd;
413
+ return _ts_generator(this, function(_state) {
414
+ _api_useAppContext = api.useAppContext(), middlewares = _api_useAppContext.middlewares, pwd = _api_useAppContext.distDirectory;
415
+ middlewares.push({
416
+ name: "inject-rsc-manifest",
417
+ handler: function() {
418
+ var _ref = _async_to_generator(function(c, next) {
419
+ var rscServerManifest, rscClientManifest, rscSSRManifest;
420
+ return _ts_generator(this, function(_state2) {
421
+ switch (_state2.label) {
422
+ case 0:
423
+ if (!!c.get("rscServerManifest"))
424
+ return [
425
+ 3,
426
+ 2
427
+ ];
428
+ return [
429
+ 4,
430
+ getRscServerManifest(pwd)
431
+ ];
432
+ case 1:
433
+ rscServerManifest = _state2.sent();
434
+ c.set("rscServerManifest", rscServerManifest);
435
+ _state2.label = 2;
436
+ case 2:
437
+ if (!!c.get("rscClientManifest"))
438
+ return [
439
+ 3,
440
+ 4
441
+ ];
442
+ return [
443
+ 4,
444
+ getClientManifest(pwd)
445
+ ];
446
+ case 3:
447
+ rscClientManifest = _state2.sent();
448
+ c.set("rscClientManifest", rscClientManifest);
449
+ _state2.label = 4;
450
+ case 4:
451
+ if (!!c.get("rscSSRManifest"))
452
+ return [
453
+ 3,
454
+ 6
455
+ ];
456
+ return [
457
+ 4,
458
+ getRscSSRManifest(pwd)
459
+ ];
460
+ case 5:
461
+ rscSSRManifest = _state2.sent();
462
+ c.set("rscSSRManifest", rscSSRManifest);
463
+ _state2.label = 6;
464
+ case 6:
465
+ return [
466
+ 4,
467
+ next()
468
+ ];
469
+ case 7:
470
+ _state2.sent();
471
+ return [
472
+ 2
473
+ ];
474
+ }
475
+ });
476
+ });
477
+ return function(c, next) {
478
+ return _ref.apply(this, arguments);
479
+ };
480
+ }()
481
+ });
482
+ return [
483
+ 2
484
+ ];
485
+ });
486
+ })();
487
+ }
488
+ };
489
+ }
490
+ };
491
+ };
327
492
  var injectResourcePlugin = function() {
328
493
  return {
329
494
  name: "@modern-js/plugin-inject-resource",
@@ -331,16 +496,16 @@ var injectResourcePlugin = function() {
331
496
  return {
332
497
  prepare: function prepare() {
333
498
  return _async_to_generator(function() {
334
- var _api_useAppContext, middlewares, routes, pwd, htmlTemplatePromise;
499
+ var _api_useAppContext, middlewares, routes, pwd, htmlTemplatePromise, manifestPromise;
335
500
  return _ts_generator(this, function(_state) {
336
501
  _api_useAppContext = api.useAppContext(), middlewares = _api_useAppContext.middlewares, routes = _api_useAppContext.routes, pwd = _api_useAppContext.distDirectory;
337
502
  if (isProd()) {
338
- getServerManifest(pwd, routes || [], console);
503
+ manifestPromise = getServerManifest(pwd, routes || [], console);
339
504
  htmlTemplatePromise = getHtmlTemplates(pwd, routes || []);
340
505
  }
341
506
  middlewares.push({
342
507
  name: "inject-server-manifest",
343
- handler: injectServerManifest(pwd, routes)
508
+ handler: injectServerManifest(pwd, routes, manifestPromise)
344
509
  });
345
510
  middlewares.push({
346
511
  name: "inject-html",
@@ -357,9 +522,13 @@ var injectResourcePlugin = function() {
357
522
  };
358
523
  };
359
524
  export {
525
+ getClientManifest,
360
526
  getHtmlTemplates,
527
+ getRscSSRManifest,
528
+ getRscServerManifest,
361
529
  getServerManifest,
362
530
  injectResourcePlugin,
531
+ injectRscManifestPlugin,
363
532
  injectServerManifest,
364
533
  injectTemplates
365
534
  };
@@ -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;
@@ -41,7 +41,7 @@ function log(fn, prefix, method, path) {
41
41
  function logHandler() {
42
42
  return function() {
43
43
  var _logger = _async_to_generator(function(c, next) {
44
- var method, monitors, path, logFn, start;
44
+ var _c_env_node_res, _c_env_node, _c_env, method, monitors, path, logFn, start, _c_env_node_res_statusCode;
45
45
  return _ts_generator(this, function(_state) {
46
46
  switch (_state.label) {
47
47
  case 0:
@@ -72,7 +72,7 @@ function logHandler() {
72
72
  ];
73
73
  case 3:
74
74
  _state.sent();
75
- log(logFn, "-->", method, path, c.res.status, time(start));
75
+ log(logFn, "-->", method, path, (_c_env_node_res_statusCode = c === null || c === void 0 ? void 0 : (_c_env = c.env) === null || _c_env === void 0 ? void 0 : (_c_env_node = _c_env.node) === null || _c_env_node === void 0 ? void 0 : (_c_env_node_res = _c_env_node.res) === null || _c_env_node_res === void 0 ? void 0 : _c_env_node_res.statusCode) !== null && _c_env_node_res_statusCode !== void 0 ? _c_env_node_res_statusCode : c.res.status, time(start));
76
76
  return [
77
77
  2
78
78
  ];
@@ -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, onError as onErrorFn, parseHeaders, parseQuery, sortRoutes } from "../../utils";
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, onFallbackFn, router;
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, onFallbackFn = param.onFallback;
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, onFallback, html, renderMode, headerData, onError, onTiming, onBoundError, renderOptions, response, _tmp;
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
- onFallback = function() {
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
- onFallbackFn === null || onFallbackFn === void 0 ? void 0 : onFallbackFn(reason, {
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 onFallback2(reason, error) {
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, onFallback)
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 "ssr":
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
- 6
199
+ 10
207
200
  ];
208
201
  }
209
202
  return [
210
203
  3,
211
- 8
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", onBoundError)
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
- 9
229
+ 13
237
230
  ];
238
231
  case 6:
239
232
  return [
240
233
  4,
241
- renderHandler(req, renderOptions, renderMode, onBoundError)
234
+ renderRscHandler(req, renderOptions)
242
235
  ];
243
236
  case 7:
244
237
  response = _state2.sent();
245
238
  return [
246
239
  3,
247
- 9
240
+ 13
248
241
  ];
249
242
  case 8:
250
- throw new Error("Unknown render mode: ".concat(renderMode));
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, onError) {
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, onError) {
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
- onError(e)
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,
@@ -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 failed";
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);