@modern-js/server-core 2.64.1 → 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.
- 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,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,
|
|
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
|
|
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
|
|
60
|
+
const fallbackWrapper = async (reason, error) => {
|
|
59
61
|
fallbackReason = reason;
|
|
60
|
-
return
|
|
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,
|
|
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",
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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
|
|
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
|
|
15
|
+
export declare function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig, forceCSR, config, onFallback, }: CreateRenderOptions): Promise<Render>;
|
|
16
16
|
export {};
|
|
@@ -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
|
|
23
|
-
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
|
|
41
|
-
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
|
|
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
|
|
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.
|
|
18
|
+
"version": "2.64.2",
|
|
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.
|
|
57
|
-
"@modern-js/runtime-utils": "2.64.
|
|
58
|
-
"@modern-js/utils": "2.64.
|
|
56
|
+
"@modern-js/plugin": "2.64.2",
|
|
57
|
+
"@modern-js/runtime-utils": "2.64.2",
|
|
58
|
+
"@modern-js/utils": "2.64.2"
|
|
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.
|
|
69
|
-
"@scripts/build": "2.64.
|
|
70
|
-
"@scripts/jest-config": "2.64.
|
|
68
|
+
"@modern-js/types": "2.64.2",
|
|
69
|
+
"@scripts/build": "2.64.2",
|
|
70
|
+
"@scripts/jest-config": "2.64.2"
|
|
71
71
|
},
|
|
72
72
|
"sideEffects": false,
|
|
73
73
|
"publishConfig": {
|