@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.
Files changed (43) 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/render/index.js +6 -0
  6. package/dist/cjs/plugins/render/render.js +29 -15
  7. package/dist/cjs/plugins/render/renderRscHandler.js +51 -0
  8. package/dist/cjs/plugins/render/serverActionHandler.js +51 -0
  9. package/dist/cjs/plugins/render/ssrRender.js +4 -1
  10. package/dist/cjs/utils/error.js +1 -1
  11. package/dist/esm/adapters/node/index.js +2 -1
  12. package/dist/esm/adapters/node/node.js +1 -1
  13. package/dist/esm/adapters/node/plugins/resource.js +174 -5
  14. package/dist/esm/plugins/default.js +10 -2
  15. package/dist/esm/plugins/render/index.js +7 -1
  16. package/dist/esm/plugins/render/render.js +72 -44
  17. package/dist/esm/plugins/render/renderRscHandler.js +49 -0
  18. package/dist/esm/plugins/render/serverActionHandler.js +49 -0
  19. package/dist/esm/plugins/render/ssrRender.js +5 -2
  20. package/dist/esm/utils/error.js +1 -1
  21. package/dist/esm-node/adapters/node/index.js +2 -1
  22. package/dist/esm-node/adapters/node/node.js +1 -1
  23. package/dist/esm-node/adapters/node/plugins/resource.js +49 -4
  24. package/dist/esm-node/plugins/default.js +10 -2
  25. package/dist/esm-node/plugins/render/index.js +6 -0
  26. package/dist/esm-node/plugins/render/render.js +30 -16
  27. package/dist/esm-node/plugins/render/renderRscHandler.js +27 -0
  28. package/dist/esm-node/plugins/render/serverActionHandler.js +27 -0
  29. package/dist/esm-node/plugins/render/ssrRender.js +4 -1
  30. package/dist/esm-node/utils/error.js +1 -1
  31. package/dist/types/adapters/node/index.d.ts +1 -1
  32. package/dist/types/adapters/node/plugins/resource.d.ts +5 -1
  33. package/dist/types/plugins/default.d.ts +1 -1
  34. package/dist/types/plugins/render/render.d.ts +1 -1
  35. package/dist/types/plugins/render/renderRscHandler.d.ts +2 -0
  36. package/dist/types/plugins/render/serverActionHandler.d.ts +2 -0
  37. package/dist/types/plugins/render/ssrRender.d.ts +7 -3
  38. package/dist/types/types/config/server.d.ts +2 -0
  39. package/dist/types/types/render.d.ts +4 -1
  40. package/dist/types/types/requestHandler.d.ts +9 -3
  41. package/dist/types/types/server.d.ts +11 -1
  42. package/dist/types/utils/error.d.ts +1 -1
  43. package/package.json +7 -7
@@ -2,8 +2,10 @@ import { cutNameByHyphen } from "@modern-js/utils/universal";
2
2
  import { TrieRouter } from "hono/router/trie-router";
3
3
  import { X_MODERNJS_RENDER } from "../../constants";
4
4
  import { uniqueKeyByRoute } from "../../utils";
5
- import { ErrorDigest, createErrorHtml, getPathname, getRuntimeEnv, onError as onErrorFn, parseHeaders, parseQuery, sortRoutes } from "../../utils";
5
+ import { ErrorDigest, createErrorHtml, getPathname, getRuntimeEnv, parseHeaders, parseQuery, sortRoutes } from "../../utils";
6
6
  import { dataHandler } from "./dataHandler";
7
+ import { renderRscHandler } from "./renderRscHandler";
8
+ import { serverActionHandler } from "./serverActionHandler";
7
9
  import { ssrRender } from "./ssrRender";
8
10
  const DYNAMIC_ROUTE_REG = /\/:./;
9
11
  function getRouter(routes) {
@@ -47,17 +49,17 @@ function getHeadersWithoutCookie(headers) {
47
49
  delete _headers.cookie;
48
50
  return _headers;
49
51
  }
50
- async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig, forceCSR, config, onFallback: onFallbackFn }) {
52
+ async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig, forceCSR, config, onFallback }) {
51
53
  const router = getRouter(routes);
52
- return async (req, { logger, reporter, metrics, monitors, nodeReq, templates, serverManifest, locals, matchEntryName, matchPathname, loaderContext }) => {
54
+ return async (req, { logger, reporter, metrics, monitors, nodeReq, templates, serverManifest, rscClientManifest, rscSSRManifest, rscServerManifest, locals, matchEntryName, matchPathname, loaderContext }) => {
53
55
  const forMatchpathname = matchPathname !== null && matchPathname !== void 0 ? matchPathname : getPathname(req);
54
56
  const [routeInfo, params] = matchRoute(router, forMatchpathname, matchEntryName);
55
57
  const framework = metaName || "modern-js";
56
58
  const fallbackHeader = `x-${cutNameByHyphen(framework)}-ssr-fallback`;
57
59
  let fallbackReason = null;
58
- const onFallback = async (reason, error) => {
60
+ const fallbackWrapper = async (reason, error) => {
59
61
  fallbackReason = reason;
60
- return onFallbackFn === null || onFallbackFn === void 0 ? void 0 : onFallbackFn(reason, {
62
+ return onFallback === null || onFallback === void 0 ? void 0 : onFallback(reason, {
61
63
  logger,
62
64
  reporter,
63
65
  metrics
@@ -80,18 +82,14 @@ async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig
80
82
  }
81
83
  });
82
84
  }
83
- const renderMode = await getRenderMode(req, fallbackHeader, routeInfo.isSSR, forceCSR, nodeReq, onFallback);
85
+ const renderMode = await getRenderMode(req, fallbackHeader, routeInfo.isSSR, forceCSR, nodeReq, fallbackWrapper);
84
86
  const headerData = parseHeaders(req);
85
- const onError = (e) => {
86
- 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));
87
+ const onError = (e, key) => {
88
+ 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));
87
89
  };
88
90
  const onTiming = (name, dur) => {
89
91
  monitors === null || monitors === void 0 ? void 0 : monitors.timing(name, dur, "SSR");
90
92
  };
91
- const onBoundError = async (e) => {
92
- onErrorFn(ErrorDigest.ERENDER, e, monitors, req);
93
- await (onFallback === null || onFallback === void 0 ? void 0 : onFallback("error", e));
94
- };
95
93
  const renderOptions = {
96
94
  pwd,
97
95
  html,
@@ -106,6 +104,9 @@ async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig
106
104
  logger,
107
105
  metrics,
108
106
  locals,
107
+ rscClientManifest,
108
+ rscSSRManifest,
109
+ rscServerManifest,
109
110
  serverManifest,
110
111
  loaderContext: loaderContext || /* @__PURE__ */ new Map(),
111
112
  onError,
@@ -114,11 +115,17 @@ async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig
114
115
  let response;
115
116
  switch (renderMode) {
116
117
  case "data":
117
- response = await dataHandler(req, renderOptions) || await renderHandler(req, renderOptions, "ssr", onBoundError);
118
+ response = await dataHandler(req, renderOptions) || await renderHandler(req, renderOptions, "ssr", fallbackWrapper);
119
+ break;
120
+ case "rsc-tree":
121
+ response = await renderRscHandler(req, renderOptions);
122
+ break;
123
+ case "rsc-action":
124
+ response = await serverActionHandler(req, renderOptions);
118
125
  break;
119
126
  case "ssr":
120
127
  case "csr":
121
- response = await renderHandler(req, renderOptions, renderMode, onBoundError);
128
+ response = await renderHandler(req, renderOptions, renderMode, fallbackWrapper);
122
129
  break;
123
130
  default:
124
131
  throw new Error(`Unknown render mode: ${renderMode}`);
@@ -129,7 +136,7 @@ async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig
129
136
  return response;
130
137
  };
131
138
  }
132
- async function renderHandler(request, options, mode, onError) {
139
+ async function renderHandler(request, options, mode, fallbackWrapper) {
133
140
  var _options_config_server;
134
141
  let response = null;
135
142
  const { serverManifest } = options;
@@ -159,7 +166,8 @@ async function renderHandler(request, options, mode, onError) {
159
166
  try {
160
167
  response = await ssrRender(request, options);
161
168
  } catch (e) {
162
- await onError(e);
169
+ options.onError(e, ErrorDigest.ERENDER);
170
+ await fallbackWrapper("error", e);
163
171
  response = csrRender(options.html);
164
172
  }
165
173
  } else {
@@ -176,6 +184,12 @@ async function renderHandler(request, options, mode, onError) {
176
184
  }
177
185
  async function getRenderMode(req, fallbackHeader, isSSR, forceCSR, nodeReq, onFallback) {
178
186
  const query = parseQuery(req);
187
+ if (req.headers.get("x-rsc-action")) {
188
+ return "rsc-action";
189
+ }
190
+ if (req.headers.get("x-rsc-tree")) {
191
+ return "rsc-tree";
192
+ }
179
193
  if (isSSR) {
180
194
  if (query.__loader) {
181
195
  return "data";
@@ -0,0 +1,27 @@
1
+ import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
2
+ const renderRscHandler = async (req, { serverManifest, routeInfo, rscClientManifest }) => {
3
+ var _serverManifest_renderBundles;
4
+ 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];
5
+ if (!serverBundle) {
6
+ return new Response("Cannot find server bundle for RSC", {
7
+ status: 500
8
+ });
9
+ }
10
+ const { rscRequestHandler } = serverBundle;
11
+ if (!rscRequestHandler) {
12
+ return new Response("Cannot find request handler for RSC", {
13
+ status: 500
14
+ });
15
+ }
16
+ if (!rscClientManifest) {
17
+ return new Response("Cannot find rsc client manifest", {
18
+ status: 500
19
+ });
20
+ }
21
+ return rscRequestHandler({
22
+ clientManifest: rscClientManifest
23
+ });
24
+ };
25
+ export {
26
+ renderRscHandler
27
+ };
@@ -0,0 +1,27 @@
1
+ import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
2
+ const serverActionHandler = async (req, { serverManifest, routeInfo, rscClientManifest }) => {
3
+ var _serverManifest_renderBundles;
4
+ 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];
5
+ if (!serverBundle) {
6
+ return new Response("Cannot find server bundle for server action", {
7
+ status: 500
8
+ });
9
+ }
10
+ const { handleAction } = serverBundle;
11
+ if (!handleAction) {
12
+ return new Response("Cannot find server action handler", {
13
+ status: 500
14
+ });
15
+ }
16
+ if (!rscClientManifest) {
17
+ return new Response("Cannot find rsc client manifest", {
18
+ status: 500
19
+ });
20
+ }
21
+ return handleAction(req, {
22
+ clientManifest: rscClientManifest
23
+ });
24
+ };
25
+ export {
26
+ serverActionHandler
27
+ };
@@ -3,7 +3,7 @@ import { X_MODERNJS_RENDER } from "../../constants";
3
3
  import { getPathname, parseHeaders } from "../../utils";
4
4
  import { getCacheResult, matchCacheControl } from "./ssrCache";
5
5
  const SERVER_RUNTIME_ENTRY = "requestHandler";
6
- async function ssrRender(request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, locals, params, loaderContext, reporter, cacheConfig, logger, metrics, onError, onTiming }) {
6
+ async function ssrRender(request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, cacheConfig, logger, metrics, onError, onTiming }) {
7
7
  var _serverManifest_renderBundles;
8
8
  const { entryName } = routeInfo;
9
9
  const loadableStats = serverManifest.loadableStats || {};
@@ -33,6 +33,9 @@ async function ssrRender(request, { routeInfo, html, config: userConfig, staticG
33
33
  params,
34
34
  loaderContext,
35
35
  config,
36
+ rscSSRManifest,
37
+ rscClientManifest,
38
+ rscServerManifest,
36
39
  locals,
37
40
  reporter,
38
41
  staticGenerate,
@@ -41,7 +41,7 @@ var ErrorDigest;
41
41
  (function(ErrorDigest2) {
42
42
  ErrorDigest2["ENOTF"] = "Page could not be found";
43
43
  ErrorDigest2["EINTER"] = "Internal server error";
44
- ErrorDigest2["ERENDER"] = "SSR render failed";
44
+ ErrorDigest2["ERENDER"] = "SSR render fallback";
45
45
  })(ErrorDigest || (ErrorDigest = {}));
46
46
  function onError(digest, error, monitors, req) {
47
47
  const headerData = req && parseHeaders(req);
@@ -1,5 +1,5 @@
1
1
  export { httpCallBack2HonoMid, connectMid2HonoMid } from './hono';
2
2
  export type { ServerNodeContext, ServerNodeMiddleware } from './hono';
3
3
  export { createNodeServer, sendResponse, createWebRequest, writeReadableStreamToWritable, } from './node';
4
- export { serverStaticPlugin, injectResourcePlugin, getHtmlTemplates, getServerManifest, injectNodeSeverPlugin, } from './plugins';
4
+ export { serverStaticPlugin, injectResourcePlugin, getHtmlTemplates, getServerManifest, injectNodeSeverPlugin, injectRscManifestPlugin, } from './plugins';
5
5
  export { loadServerPlugins, loadServerEnv, loadServerRuntimeConfig, loadServerCliConfig, loadCacheConfig, } from './helper';
@@ -3,5 +3,9 @@ import type { Middleware, ServerEnv, ServerManifest, ServerPlugin } from '../../
3
3
  export declare function getHtmlTemplates(pwd: string, routes: ServerRoute[]): Promise<Record<string, string>>;
4
4
  export declare function injectTemplates(pwd: string, routes?: ServerRoute[], htmlTemplatePromise?: ReturnType<typeof getHtmlTemplates>): Middleware<ServerEnv>;
5
5
  export declare function getServerManifest(pwd: string, routes: ServerRoute[], logger: Logger): Promise<ServerManifest>;
6
- export declare function injectServerManifest(pwd: string, routes?: ServerRoute[]): Middleware<ServerEnv>;
6
+ export declare function injectServerManifest(pwd: string, routes?: ServerRoute[], manifestPromise?: Promise<ServerManifest>): Middleware<ServerEnv>;
7
+ export declare function getRscServerManifest(pwd: string): Promise<any>;
8
+ export declare function getClientManifest(pwd: string): Promise<any>;
9
+ export declare function getRscSSRManifest(pwd: string): Promise<any>;
10
+ export declare const injectRscManifestPlugin: () => ServerPlugin;
7
11
  export declare const injectResourcePlugin: () => ServerPlugin;
@@ -2,6 +2,6 @@ import type { Logger } from '@modern-js/types';
2
2
  import type { ServerPlugin } from '../types';
3
3
  import { type InjectRenderHandlerOptions } from './render';
4
4
  export type CreateDefaultPluginsOptions = InjectRenderHandlerOptions & {
5
- logger?: Logger;
5
+ logger?: Logger | false;
6
6
  };
7
7
  export declare function createDefaultPlugins(options?: CreateDefaultPluginsOptions): ServerPlugin[];
@@ -12,5 +12,5 @@ interface CreateRenderOptions {
12
12
  forceCSR?: boolean;
13
13
  nonce?: string;
14
14
  }
15
- export declare function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig, forceCSR, config, onFallback: onFallbackFn, }: CreateRenderOptions): Promise<Render>;
15
+ export declare function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig, forceCSR, config, onFallback, }: CreateRenderOptions): Promise<Render>;
16
16
  export {};
@@ -0,0 +1,2 @@
1
+ import type { SSRRenderOptions } from './ssrRender';
2
+ export declare const renderRscHandler: (req: Request, { serverManifest, routeInfo, rscClientManifest }: SSRRenderOptions) => Promise<Response>;
@@ -0,0 +1,2 @@
1
+ import type { SSRRenderOptions } from './ssrRender';
2
+ export declare const serverActionHandler: (req: Request, { serverManifest, routeInfo, rscClientManifest }: SSRRenderOptions) => Promise<Response>;
@@ -1,6 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  import type { IncomingMessage } from 'http';
3
3
  import type { Logger, Metrics, Reporter, ServerRoute } from '@modern-js/types';
4
+ import type { ClientManifest as RscClientManifest, SSRManifest as RscSSRManifest, ServerManifest as RscServerManifest } from '@modern-js/types/server';
4
5
  import type { CacheConfig, ServerManifest, UserConfig } from '../../types';
5
6
  import type { OnError, OnTiming, Params } from '../../types/requestHandler';
6
7
  export interface SSRRenderOptions {
@@ -10,6 +11,9 @@ export interface SSRRenderOptions {
10
11
  staticGenerate: boolean;
11
12
  config: UserConfig;
12
13
  serverManifest: ServerManifest;
14
+ rscServerManifest?: RscServerManifest;
15
+ rscClientManifest?: RscClientManifest;
16
+ rscSSRManifest?: RscSSRManifest;
13
17
  loaderContext: Map<string, unknown>;
14
18
  params: Params;
15
19
  logger: Logger;
@@ -19,7 +23,7 @@ export interface SSRRenderOptions {
19
23
  locals?: Record<string, any>;
20
24
  cacheConfig?: CacheConfig;
21
25
  nodeReq?: IncomingMessage;
22
- onError?: OnError;
23
- onTiming?: OnTiming;
26
+ onError: OnError;
27
+ onTiming: OnTiming;
24
28
  }
25
- export declare function ssrRender(request: Request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, locals, params, loaderContext, reporter, cacheConfig, logger, metrics, onError, onTiming, }: SSRRenderOptions): Promise<Response>;
29
+ export declare function ssrRender(request: Request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, cacheConfig, logger, metrics, onError, onTiming, }: SSRRenderOptions): Promise<Response>;
@@ -25,6 +25,7 @@ export interface ServerUserConfig {
25
25
  publicRoutes?: Record<string, string>;
26
26
  ssr?: SSR;
27
27
  ssrByEntries?: SSRByEntries;
28
+ rsc?: boolean;
28
29
  baseUrl?: string | string[];
29
30
  port?: number;
30
31
  watchOptions?: WatchOptions;
@@ -34,6 +35,7 @@ export interface ServerUserConfig {
34
35
  * @default false
35
36
  */
36
37
  useJsonScript?: boolean;
38
+ logger?: boolean | Record<string, unknown>;
37
39
  }
38
40
  export type ServerNormalizedConfig = ServerUserConfig;
39
41
  export {};
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import type { IncomingMessage } from 'node:http';
3
- import type { Logger, Metrics, Monitors, Reporter } from '@modern-js/types';
3
+ import type { Logger, Metrics, Monitors, Reporter, ClientManifest as RscClientManifest, SSRManifest as RscSSRManifest, ServerManifest as RscServerManifest } from '@modern-js/types';
4
4
  import type { ServerManifest } from './server';
5
5
  export interface RenderOptions {
6
6
  loaderContext?: Map<string, unknown>;
@@ -20,6 +20,9 @@ export interface RenderOptions {
20
20
  matchEntryName?: string;
21
21
  monitors?: Monitors;
22
22
  serverManifest: ServerManifest;
23
+ rscServerManifest?: RscServerManifest;
24
+ rscClientManifest?: RscClientManifest;
25
+ rscSSRManifest?: RscSSRManifest;
23
26
  nodeReq?: IncomingMessage;
24
27
  }
25
28
  export type Render = (request: Request, options: RenderOptions) => Promise<Response>;
@@ -1,4 +1,5 @@
1
1
  import type { Logger, Metrics, Reporter, ServerRoute } from '@modern-js/types';
2
+ import type { ClientManifest as RscClientManifest, SSRManifest as RscSSRManifest, ServerManifest as RscServerManifest } from '@modern-js/types/server';
2
3
  import type { ServerUserConfig, SourceUserConfig } from './config';
3
4
  export type Resource = {
4
5
  loadableStats: Record<string, any>;
@@ -20,13 +21,18 @@ export type RequestHandlerConfig = {
20
21
  enableAsyncEntry?: SourceUserConfig['enableAsyncEntry'];
21
22
  };
22
23
  export type LoaderContext = Map<string, any>;
23
- export type OnError = (err: unknown) => void;
24
+ export type OnError = (err: unknown, key?: string) => void;
24
25
  export type OnTiming = (name: string, dur: number) => void;
25
26
  export type RequestHandlerOptions = {
26
27
  resource: Resource;
27
28
  config: RequestHandlerConfig;
28
29
  params: Params;
29
30
  loaderContext: LoaderContext;
31
+ rscServerManifest?: RscServerManifest;
32
+ rscClientManifest?: RscClientManifest;
33
+ rscSSRManifest?: RscSSRManifest;
34
+ RSCRoot?: any;
35
+ rscRoot?: any;
30
36
  /** @deprecated */
31
37
  locals?: Record<string, any>;
32
38
  /** @deprecated */
@@ -37,7 +43,7 @@ export type RequestHandlerOptions = {
37
43
  logger: Logger;
38
44
  /** @deprecated */
39
45
  metrics?: Metrics;
40
- onError?: OnError;
41
- onTiming?: OnTiming;
46
+ onError: OnError;
47
+ onTiming: OnTiming;
42
48
  };
43
49
  export type RequestHandler = (request: Request, options: RequestHandlerOptions) => Promise<Response>;
@@ -1,4 +1,5 @@
1
1
  import type { Logger, Metrics, Monitors, NestedRoute, Reporter, ServerRoute } from '@modern-js/types';
2
+ import type { ClientManifest as RscClientManifest, SSRManifest as RscSSRManifest, ServerManifest as RscServerManifest } from '@modern-js/types/server';
2
3
  import type { RequestHandler as BundleRequestHandler, OnError, OnTiming } from './requestHandler';
3
4
  export type RequestHandler = (request: Request, ...args: any[]) => Response | Promise<Response>;
4
5
  type ServerLoaderBundle = {
@@ -16,7 +17,13 @@ type ServerLoaderBundle = {
16
17
  }) => Promise<any>;
17
18
  };
18
19
  type ServerRenderBundle = {
19
- requestHandler: Promise<BundleRequestHandler>;
20
+ requestHandler?: Promise<BundleRequestHandler>;
21
+ handleAction?: (req: Request, options: {
22
+ clientManifest: RscClientManifest;
23
+ }) => Promise<Response>;
24
+ rscRequestHandler?: (options: {
25
+ clientManifest: RscClientManifest;
26
+ }) => Promise<Response>;
20
27
  };
21
28
  export type ServerManifest = {
22
29
  loaderBundles?: Record<string, ServerLoaderBundle>;
@@ -34,6 +41,9 @@ type ServerVariables = {
34
41
  metrics?: Metrics;
35
42
  monitors: Monitors;
36
43
  serverManifest?: ServerManifest;
44
+ rscServerManifest?: RscServerManifest;
45
+ rscClientManifest?: RscClientManifest;
46
+ rscSSRManifest?: RscSSRManifest;
37
47
  templates?: Record<string, string>;
38
48
  matchPathname?: string;
39
49
  matchEntryName?: string;
@@ -3,6 +3,6 @@ export declare const createErrorHtml: (status: number) => string;
3
3
  export declare enum ErrorDigest {
4
4
  ENOTF = "Page could not be found",
5
5
  EINTER = "Internal server error",
6
- ERENDER = "SSR render failed"
6
+ ERENDER = "SSR render fallback"
7
7
  }
8
8
  export declare function onError(digest: ErrorDigest, error: Error | string, monitors?: Monitors, req?: Request): void;
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.64.1",
18
+ "version": "2.64.3",
19
19
  "jsnext:source": "./src/index.ts",
20
20
  "types": "./dist/types/index.d.ts",
21
21
  "main": "./dist/cjs/index.js",
@@ -53,9 +53,9 @@
53
53
  "flatted": "^3.2.9",
54
54
  "hono": "^3.12.2",
55
55
  "ts-deepmerge": "7.0.2",
56
- "@modern-js/plugin": "2.64.1",
57
- "@modern-js/runtime-utils": "2.64.1",
58
- "@modern-js/utils": "2.64.1"
56
+ "@modern-js/plugin": "2.64.3",
57
+ "@modern-js/runtime-utils": "2.64.3",
58
+ "@modern-js/utils": "2.64.3"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@types/jest": "^29",
@@ -65,9 +65,9 @@
65
65
  "jest": "^29",
66
66
  "ts-jest": "^29.1.0",
67
67
  "typescript": "^5",
68
- "@modern-js/types": "2.64.1",
69
- "@scripts/build": "2.64.1",
70
- "@scripts/jest-config": "2.64.1"
68
+ "@modern-js/types": "2.64.3",
69
+ "@scripts/build": "2.64.3",
70
+ "@scripts/jest-config": "2.64.3"
71
71
  },
72
72
  "sideEffects": false,
73
73
  "publishConfig": {