@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
@@ -26,6 +26,7 @@ __export(node_exports, {
26
26
  httpCallBack2HonoMid: () => import_hono.httpCallBack2HonoMid,
27
27
  injectNodeSeverPlugin: () => import_plugins.injectNodeSeverPlugin,
28
28
  injectResourcePlugin: () => import_plugins.injectResourcePlugin,
29
+ injectRscManifestPlugin: () => import_plugins.injectRscManifestPlugin,
29
30
  loadCacheConfig: () => import_helper.loadCacheConfig,
30
31
  loadServerCliConfig: () => import_helper.loadServerCliConfig,
31
32
  loadServerEnv: () => import_helper.loadServerEnv,
@@ -50,6 +51,7 @@ var import_helper = require("./helper");
50
51
  httpCallBack2HonoMid,
51
52
  injectNodeSeverPlugin,
52
53
  injectResourcePlugin,
54
+ injectRscManifestPlugin,
53
55
  loadCacheConfig,
54
56
  loadServerCliConfig,
55
57
  loadServerEnv,
@@ -58,7 +58,7 @@ const createWebRequest = (req, res, body) => {
58
58
  signal: controller.signal
59
59
  };
60
60
  res.on("close", () => controller.abort("res closed"));
61
- 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"]) {
61
+ 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"]) {
62
62
  init.body = body !== null && body !== void 0 ? body : (0, import_stream.createReadableStreamFromReadable)(req);
63
63
  init.duplex = "half";
64
64
  }
@@ -28,9 +28,13 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var resource_exports = {};
30
30
  __export(resource_exports, {
31
+ getClientManifest: () => getClientManifest,
31
32
  getHtmlTemplates: () => getHtmlTemplates,
33
+ getRscSSRManifest: () => getRscSSRManifest,
34
+ getRscServerManifest: () => getRscServerManifest,
32
35
  getServerManifest: () => getServerManifest,
33
36
  injectResourcePlugin: () => injectResourcePlugin,
37
+ injectRscManifestPlugin: () => injectRscManifestPlugin,
34
38
  injectServerManifest: () => injectServerManifest,
35
39
  injectTemplates: () => injectTemplates
36
40
  });
@@ -103,16 +107,56 @@ async function getServerManifest(pwd, routes, logger) {
103
107
  nestedRoutesJson
104
108
  };
105
109
  }
106
- function injectServerManifest(pwd, routes) {
110
+ function injectServerManifest(pwd, routes, manifestPromise) {
107
111
  return async (c, next) => {
108
112
  if (routes && !c.get("serverManifest")) {
109
113
  const logger = c.get("logger");
110
- const serverManifest = await getServerManifest(pwd, routes, logger);
114
+ const serverManifest = await (manifestPromise || getServerManifest(pwd, routes, logger));
111
115
  c.set("serverManifest", serverManifest);
112
116
  }
113
117
  await next();
114
118
  };
115
119
  }
120
+ async function getRscServerManifest(pwd) {
121
+ const rscServerManifest = await (0, import_utils.compatibleRequire)(import_path.default.join(pwd, "bundles", "react-server-manifest.json")).catch((_) => void 0);
122
+ return rscServerManifest;
123
+ }
124
+ async function getClientManifest(pwd) {
125
+ const rscClientManifest = await (0, import_utils.compatibleRequire)(import_path.default.join(pwd, "react-client-manifest.json")).catch((_) => void 0);
126
+ return rscClientManifest;
127
+ }
128
+ async function getRscSSRManifest(pwd) {
129
+ const rscSSRManifest = await (0, import_utils.compatibleRequire)(import_path.default.join(pwd, "react-ssr-manifest.json")).catch((_) => void 0);
130
+ return rscSSRManifest;
131
+ }
132
+ const injectRscManifestPlugin = () => ({
133
+ name: "@modern-js/plugin-inject-rsc-manifest",
134
+ setup(api) {
135
+ return {
136
+ async prepare() {
137
+ const { middlewares, distDirectory: pwd } = api.useAppContext();
138
+ middlewares.push({
139
+ name: "inject-rsc-manifest",
140
+ handler: async (c, next) => {
141
+ if (!c.get("rscServerManifest")) {
142
+ const rscServerManifest = await getRscServerManifest(pwd);
143
+ c.set("rscServerManifest", rscServerManifest);
144
+ }
145
+ if (!c.get("rscClientManifest")) {
146
+ const rscClientManifest = await getClientManifest(pwd);
147
+ c.set("rscClientManifest", rscClientManifest);
148
+ }
149
+ if (!c.get("rscSSRManifest")) {
150
+ const rscSSRManifest = await getRscSSRManifest(pwd);
151
+ c.set("rscSSRManifest", rscSSRManifest);
152
+ }
153
+ await next();
154
+ }
155
+ });
156
+ }
157
+ };
158
+ }
159
+ });
116
160
  const injectResourcePlugin = () => ({
117
161
  name: "@modern-js/plugin-inject-resource",
118
162
  setup(api) {
@@ -120,13 +164,14 @@ const injectResourcePlugin = () => ({
120
164
  async prepare() {
121
165
  const { middlewares, routes, distDirectory: pwd } = api.useAppContext();
122
166
  let htmlTemplatePromise;
167
+ let manifestPromise;
123
168
  if ((0, import_utils.isProd)()) {
124
- getServerManifest(pwd, routes || [], console);
169
+ manifestPromise = getServerManifest(pwd, routes || [], console);
125
170
  htmlTemplatePromise = getHtmlTemplates(pwd, routes || []);
126
171
  }
127
172
  middlewares.push({
128
173
  name: "inject-server-manifest",
129
- handler: injectServerManifest(pwd, routes)
174
+ handler: injectServerManifest(pwd, routes, manifestPromise)
130
175
  });
131
176
  middlewares.push({
132
177
  name: "inject-html",
@@ -138,9 +183,13 @@ const injectResourcePlugin = () => ({
138
183
  });
139
184
  // Annotate the CommonJS export names for ESM import in node:
140
185
  0 && (module.exports = {
186
+ getClientManifest,
141
187
  getHtmlTemplates,
188
+ getRscSSRManifest,
189
+ getRscServerManifest,
142
190
  getServerManifest,
143
191
  injectResourcePlugin,
192
+ injectRscManifestPlugin,
144
193
  injectServerManifest,
145
194
  injectTemplates
146
195
  });
@@ -25,13 +25,21 @@ var import_log = require("./log");
25
25
  var import_monitors = require("./monitors");
26
26
  var import_processedBy = require("./processedBy");
27
27
  var import_render = require("./render");
28
+ function createSilenceLogger() {
29
+ return new Proxy({}, {
30
+ get: () => {
31
+ return () => {
32
+ };
33
+ }
34
+ });
35
+ }
28
36
  function createDefaultPlugins(options = {}) {
29
37
  const plugins = [
38
+ (0, import_log.logPlugin)(),
30
39
  (0, import_monitors.initMonitorsPlugin)(),
31
40
  (0, import_render.injectRenderHandlerPlugin)(options),
32
- (0, import_monitors.injectloggerPluigin)(options.logger),
41
+ (0, import_monitors.injectloggerPluigin)(options.logger ? options.logger : createSilenceLogger()),
33
42
  (0, import_monitors.injectServerTiming)(),
34
- (0, import_log.logPlugin)(),
35
43
  (0, import_processedBy.processedByPlugin)()
36
44
  ];
37
45
  return plugins;
@@ -61,6 +61,7 @@ function log(fn, prefix, method, path, status = 0, elapsed) {
61
61
  }
62
62
  function logHandler() {
63
63
  return async function logger(c, next) {
64
+ var _c_env_node_res, _c_env_node, _c_env;
64
65
  const { method } = c.req;
65
66
  const monitors = c.get("monitors");
66
67
  if (!monitors) {
@@ -72,7 +73,8 @@ function logHandler() {
72
73
  log(logFn, "<--", method, path);
73
74
  const start = Date.now();
74
75
  await next();
75
- log(logFn, "-->", method, path, c.res.status, time(start));
76
+ var _c_env_node_res_statusCode;
77
+ 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
78
  };
77
79
  }
78
80
  const logPlugin = () => ({
@@ -89,6 +89,9 @@ function createRenderHandler(render) {
89
89
  const monitors = c.get("monitors");
90
90
  const templates = c.get("templates") || {};
91
91
  const serverManifest = c.get("serverManifest") || {};
92
+ const rscServerManifest = c.get("rscServerManifest");
93
+ const rscClientManifest = c.get("rscClientManifest");
94
+ const rscSSRManifest = c.get("rscSSRManifest");
92
95
  const locals = c.get("locals");
93
96
  const metrics = c.get("metrics");
94
97
  const matchPathname = c.get("matchPathname");
@@ -104,6 +107,9 @@ function createRenderHandler(render) {
104
107
  templates,
105
108
  metrics,
106
109
  serverManifest,
110
+ rscServerManifest,
111
+ rscClientManifest,
112
+ rscSSRManifest,
107
113
  loaderContext,
108
114
  locals,
109
115
  matchPathname,
@@ -37,6 +37,8 @@ var import_constants = require("../../constants");
37
37
  var import_utils = require("../../utils");
38
38
  var import_utils2 = require("../../utils");
39
39
  var import_dataHandler = require("./dataHandler");
40
+ var import_renderRscHandler = require("./renderRscHandler");
41
+ var import_serverActionHandler = require("./serverActionHandler");
40
42
  var import_ssrRender = require("./ssrRender");
41
43
  const DYNAMIC_ROUTE_REG = /\/:./;
42
44
  function getRouter(routes) {
@@ -80,17 +82,17 @@ function getHeadersWithoutCookie(headers) {
80
82
  delete _headers.cookie;
81
83
  return _headers;
82
84
  }
83
- async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig, forceCSR, config, onFallback: onFallbackFn }) {
85
+ async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig, forceCSR, config, onFallback }) {
84
86
  const router = getRouter(routes);
85
- return async (req, { logger, reporter, metrics, monitors, nodeReq, templates, serverManifest, locals, matchEntryName, matchPathname, loaderContext }) => {
87
+ return async (req, { logger, reporter, metrics, monitors, nodeReq, templates, serverManifest, rscClientManifest, rscSSRManifest, rscServerManifest, locals, matchEntryName, matchPathname, loaderContext }) => {
86
88
  const forMatchpathname = matchPathname !== null && matchPathname !== void 0 ? matchPathname : (0, import_utils2.getPathname)(req);
87
89
  const [routeInfo, params] = matchRoute(router, forMatchpathname, matchEntryName);
88
90
  const framework = metaName || "modern-js";
89
91
  const fallbackHeader = `x-${(0, import_universal.cutNameByHyphen)(framework)}-ssr-fallback`;
90
92
  let fallbackReason = null;
91
- const onFallback = async (reason, error) => {
93
+ const fallbackWrapper = async (reason, error) => {
92
94
  fallbackReason = reason;
93
- return onFallbackFn === null || onFallbackFn === void 0 ? void 0 : onFallbackFn(reason, {
95
+ return onFallback === null || onFallback === void 0 ? void 0 : onFallback(reason, {
94
96
  logger,
95
97
  reporter,
96
98
  metrics
@@ -113,18 +115,14 @@ async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig
113
115
  }
114
116
  });
115
117
  }
116
- const renderMode = await getRenderMode(req, fallbackHeader, routeInfo.isSSR, forceCSR, nodeReq, onFallback);
118
+ const renderMode = await getRenderMode(req, fallbackHeader, routeInfo.isSSR, forceCSR, nodeReq, fallbackWrapper);
117
119
  const headerData = (0, import_utils2.parseHeaders)(req);
118
- const onError = (e) => {
119
- monitors === null || monitors === void 0 ? void 0 : monitors.error(`SSR Error - ${e instanceof Error ? e.name : e}, error = %s, req.url = %s, req.headers = %o`, e instanceof Error ? e.stack || e.message : e, forMatchpathname, getHeadersWithoutCookie(headerData));
120
+ const onError = (e, key) => {
121
+ monitors === null || monitors === void 0 ? void 0 : monitors.error(`SSR Error - ${key || (e instanceof Error ? e.name : e)}, error = %s, req.url = %s, req.headers = %o`, e instanceof Error ? e.stack || e.message : e, forMatchpathname, getHeadersWithoutCookie(headerData));
120
122
  };
121
123
  const onTiming = (name, dur) => {
122
124
  monitors === null || monitors === void 0 ? void 0 : monitors.timing(name, dur, "SSR");
123
125
  };
124
- const onBoundError = async (e) => {
125
- (0, import_utils2.onError)(import_utils2.ErrorDigest.ERENDER, e, monitors, req);
126
- await (onFallback === null || onFallback === void 0 ? void 0 : onFallback("error", e));
127
- };
128
126
  const renderOptions = {
129
127
  pwd,
130
128
  html,
@@ -139,6 +137,9 @@ async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig
139
137
  logger,
140
138
  metrics,
141
139
  locals,
140
+ rscClientManifest,
141
+ rscSSRManifest,
142
+ rscServerManifest,
142
143
  serverManifest,
143
144
  loaderContext: loaderContext || /* @__PURE__ */ new Map(),
144
145
  onError,
@@ -147,11 +148,17 @@ async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig
147
148
  let response;
148
149
  switch (renderMode) {
149
150
  case "data":
150
- response = await (0, import_dataHandler.dataHandler)(req, renderOptions) || await renderHandler(req, renderOptions, "ssr", onBoundError);
151
+ response = await (0, import_dataHandler.dataHandler)(req, renderOptions) || await renderHandler(req, renderOptions, "ssr", fallbackWrapper);
152
+ break;
153
+ case "rsc-tree":
154
+ response = await (0, import_renderRscHandler.renderRscHandler)(req, renderOptions);
155
+ break;
156
+ case "rsc-action":
157
+ response = await (0, import_serverActionHandler.serverActionHandler)(req, renderOptions);
151
158
  break;
152
159
  case "ssr":
153
160
  case "csr":
154
- response = await renderHandler(req, renderOptions, renderMode, onBoundError);
161
+ response = await renderHandler(req, renderOptions, renderMode, fallbackWrapper);
155
162
  break;
156
163
  default:
157
164
  throw new Error(`Unknown render mode: ${renderMode}`);
@@ -162,7 +169,7 @@ async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig
162
169
  return response;
163
170
  };
164
171
  }
165
- async function renderHandler(request, options, mode, onError) {
172
+ async function renderHandler(request, options, mode, fallbackWrapper) {
166
173
  var _options_config_server;
167
174
  let response = null;
168
175
  const { serverManifest } = options;
@@ -192,7 +199,8 @@ async function renderHandler(request, options, mode, onError) {
192
199
  try {
193
200
  response = await (0, import_ssrRender.ssrRender)(request, options);
194
201
  } catch (e) {
195
- await onError(e);
202
+ options.onError(e, import_utils2.ErrorDigest.ERENDER);
203
+ await fallbackWrapper("error", e);
196
204
  response = csrRender(options.html);
197
205
  }
198
206
  } else {
@@ -209,6 +217,12 @@ async function renderHandler(request, options, mode, onError) {
209
217
  }
210
218
  async function getRenderMode(req, fallbackHeader, isSSR, forceCSR, nodeReq, onFallback) {
211
219
  const query = (0, import_utils2.parseQuery)(req);
220
+ if (req.headers.get("x-rsc-action")) {
221
+ return "rsc-action";
222
+ }
223
+ if (req.headers.get("x-rsc-tree")) {
224
+ return "rsc-tree";
225
+ }
212
226
  if (isSSR) {
213
227
  if (query.__loader) {
214
228
  return "data";
@@ -0,0 +1,51 @@
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 renderRscHandler_exports = {};
20
+ __export(renderRscHandler_exports, {
21
+ renderRscHandler: () => renderRscHandler
22
+ });
23
+ module.exports = __toCommonJS(renderRscHandler_exports);
24
+ var import_constants = require("@modern-js/utils/universal/constants");
25
+ const renderRscHandler = async (req, { serverManifest, routeInfo, rscClientManifest }) => {
26
+ var _serverManifest_renderBundles;
27
+ 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];
28
+ if (!serverBundle) {
29
+ return new Response("Cannot find server bundle for RSC", {
30
+ status: 500
31
+ });
32
+ }
33
+ const { rscRequestHandler } = serverBundle;
34
+ if (!rscRequestHandler) {
35
+ return new Response("Cannot find request handler for RSC", {
36
+ status: 500
37
+ });
38
+ }
39
+ if (!rscClientManifest) {
40
+ return new Response("Cannot find rsc client manifest", {
41
+ status: 500
42
+ });
43
+ }
44
+ return rscRequestHandler({
45
+ clientManifest: rscClientManifest
46
+ });
47
+ };
48
+ // Annotate the CommonJS export names for ESM import in node:
49
+ 0 && (module.exports = {
50
+ renderRscHandler
51
+ });
@@ -0,0 +1,51 @@
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 serverActionHandler_exports = {};
20
+ __export(serverActionHandler_exports, {
21
+ serverActionHandler: () => serverActionHandler
22
+ });
23
+ module.exports = __toCommonJS(serverActionHandler_exports);
24
+ var import_constants = require("@modern-js/utils/universal/constants");
25
+ const serverActionHandler = async (req, { serverManifest, routeInfo, rscClientManifest }) => {
26
+ var _serverManifest_renderBundles;
27
+ 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];
28
+ if (!serverBundle) {
29
+ return new Response("Cannot find server bundle for server action", {
30
+ status: 500
31
+ });
32
+ }
33
+ const { handleAction } = serverBundle;
34
+ if (!handleAction) {
35
+ return new Response("Cannot find server action handler", {
36
+ status: 500
37
+ });
38
+ }
39
+ if (!rscClientManifest) {
40
+ return new Response("Cannot find rsc client manifest", {
41
+ status: 500
42
+ });
43
+ }
44
+ return handleAction(req, {
45
+ clientManifest: rscClientManifest
46
+ });
47
+ };
48
+ // Annotate the CommonJS export names for ESM import in node:
49
+ 0 && (module.exports = {
50
+ serverActionHandler
51
+ });
@@ -26,7 +26,7 @@ var import_constants2 = require("../../constants");
26
26
  var import_utils = require("../../utils");
27
27
  var import_ssrCache = require("./ssrCache");
28
28
  const SERVER_RUNTIME_ENTRY = "requestHandler";
29
- async function ssrRender(request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, locals, params, loaderContext, reporter, cacheConfig, logger, metrics, onError, onTiming }) {
29
+ async function ssrRender(request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, cacheConfig, logger, metrics, onError, onTiming }) {
30
30
  var _serverManifest_renderBundles;
31
31
  const { entryName } = routeInfo;
32
32
  const loadableStats = serverManifest.loadableStats || {};
@@ -56,6 +56,9 @@ async function ssrRender(request, { routeInfo, html, config: userConfig, staticG
56
56
  params,
57
57
  loaderContext,
58
58
  config,
59
+ rscSSRManifest,
60
+ rscClientManifest,
61
+ rscServerManifest,
59
62
  locals,
60
63
  reporter,
61
64
  staticGenerate,
@@ -66,7 +66,7 @@ var ErrorDigest;
66
66
  (function(ErrorDigest2) {
67
67
  ErrorDigest2["ENOTF"] = "Page could not be found";
68
68
  ErrorDigest2["EINTER"] = "Internal server error";
69
- ErrorDigest2["ERENDER"] = "SSR render failed";
69
+ ErrorDigest2["ERENDER"] = "SSR render fallback";
70
70
  })(ErrorDigest || (ErrorDigest = {}));
71
71
  function onError(digest, error, monitors, req) {
72
72
  const headerData = req && (0, import_request.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,
@@ -28,7 +28,7 @@ var createWebRequest = function(req, res, body) {
28
28
  res.on("close", function() {
29
29
  return controller.abort("res closed");
30
30
  });
31
- 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"]) {
31
+ 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"]) {
32
32
  init.body = body !== null && body !== void 0 ? body : createReadableStreamFromReadable(req);
33
33
  init.duplex = "half";
34
34
  }