@modern-js/server-core 2.49.2 → 2.49.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/base/adapters/node/bff.js +1 -1
- package/dist/cjs/base/adapters/node/middlewares/serverManifest.js +26 -25
- package/dist/cjs/base/adapters/node/middlewares/serverPublic.js +3 -0
- package/dist/cjs/base/index.js +4 -0
- package/dist/cjs/base/middlewares/customServer/context.js +3 -4
- package/dist/cjs/base/middlewares/renderHandler/index.js +11 -3
- package/dist/cjs/base/middlewares/renderHandler/render.js +61 -18
- package/dist/cjs/base/middlewares/renderHandler/ssrRender.js +2 -2
- package/dist/cjs/base/utils/error.js +17 -2
- package/dist/cjs/core/plugin.js +2 -0
- package/dist/esm/base/adapters/node/bff.js +1 -1
- package/dist/esm/base/adapters/node/middlewares/serverManifest.js +60 -30
- package/dist/esm/base/adapters/node/middlewares/serverPublic.js +5 -0
- package/dist/esm/base/index.js +3 -1
- package/dist/esm/base/middlewares/customServer/context.js +3 -3
- package/dist/esm/base/middlewares/renderHandler/index.js +31 -5
- package/dist/esm/base/middlewares/renderHandler/render.js +229 -68
- package/dist/esm/base/middlewares/renderHandler/ssrRender.js +3 -3
- package/dist/esm/base/utils/error.js +15 -1
- package/dist/esm/core/plugin.js +2 -0
- package/dist/esm-node/base/adapters/node/bff.js +1 -1
- package/dist/esm-node/base/adapters/node/middlewares/serverManifest.js +27 -26
- package/dist/esm-node/base/adapters/node/middlewares/serverPublic.js +3 -0
- package/dist/esm-node/base/index.js +3 -1
- package/dist/esm-node/base/middlewares/customServer/context.js +3 -4
- package/dist/esm-node/base/middlewares/renderHandler/index.js +11 -3
- package/dist/esm-node/base/middlewares/renderHandler/render.js +62 -19
- package/dist/esm-node/base/middlewares/renderHandler/ssrRender.js +2 -2
- package/dist/esm-node/base/utils/error.js +14 -1
- package/dist/esm-node/core/plugin.js +2 -0
- package/dist/types/base/adapters/node/middlewares/serverManifest.d.ts +2 -2
- package/dist/types/base/index.d.ts +1 -1
- package/dist/types/base/middlewares/renderHandler/index.d.ts +1 -1
- package/dist/types/base/middlewares/renderHandler/render.d.ts +9 -2
- package/dist/types/base/middlewares/renderHandler/ssrRender.d.ts +3 -1
- package/dist/types/base/utils/error.d.ts +7 -0
- package/dist/types/core/plugin.d.ts +51 -2
- package/package.json +7 -7
|
@@ -44,7 +44,7 @@ const bindBFFHandler = async (server, options) => {
|
|
|
44
44
|
await next();
|
|
45
45
|
};
|
|
46
46
|
} else {
|
|
47
|
-
const renderHandler = enableHandleWeb ? await (0, import_middlewares.getRenderHandler)(options) : null;
|
|
47
|
+
const renderHandler = enableHandleWeb ? await (0, import_middlewares.getRenderHandler)(options, server) : null;
|
|
48
48
|
handler = await server.runner.prepareApiServer({
|
|
49
49
|
pwd: options.pwd,
|
|
50
50
|
prefix,
|
|
@@ -34,34 +34,34 @@ __export(serverManifest_exports, {
|
|
|
34
34
|
module.exports = __toCommonJS(serverManifest_exports);
|
|
35
35
|
var import_path = __toESM(require("path"));
|
|
36
36
|
var import_utils = require("@modern-js/utils");
|
|
37
|
-
|
|
37
|
+
const dynamicImport = (filePath) => {
|
|
38
|
+
try {
|
|
39
|
+
const module2 = require(filePath);
|
|
40
|
+
return Promise.resolve(module2);
|
|
41
|
+
} catch (e) {
|
|
42
|
+
return Promise.reject(e);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const loadBundle = async (filepath, logger) => {
|
|
46
|
+
if (!await import_utils.fs.pathExists(filepath)) {
|
|
47
|
+
return void 0;
|
|
48
|
+
}
|
|
49
|
+
return dynamicImport(filepath).catch((e) => {
|
|
50
|
+
logger.error(`Load ${filepath} bundle failed, error = %s`, e instanceof Error ? e.stack || e.message : e);
|
|
51
|
+
return void 0;
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
async function getServerManifest(pwd, routes, logger) {
|
|
38
55
|
const loaderBundles = {};
|
|
39
56
|
const renderBundles = {};
|
|
40
|
-
await Promise.all(routes.map(async (route) => {
|
|
57
|
+
await Promise.all(routes.filter((route) => Boolean(route.bundle)).map(async (route) => {
|
|
41
58
|
const entryName = route.entryName || import_utils.MAIN_ENTRY_NAME;
|
|
42
|
-
const loaderBundlePath = import_path.default.join(pwd, import_utils.SERVER_BUNDLE_DIRECTORY, `${entryName}-server-loaders.js`);
|
|
43
59
|
const renderBundlePath = import_path.default.join(pwd, route.bundle || "");
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return Promise.reject(e);
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
await Promise.allSettled([
|
|
53
|
-
dynamicImport(loaderBundlePath),
|
|
54
|
-
dynamicImport(renderBundlePath)
|
|
55
|
-
]).then((results) => {
|
|
56
|
-
const { status: loaderStatus } = results[0];
|
|
57
|
-
if (loaderStatus === "fulfilled") {
|
|
58
|
-
loaderBundles[entryName] = results[0].value;
|
|
59
|
-
}
|
|
60
|
-
const { status: renderStatus } = results[1];
|
|
61
|
-
if (renderStatus === "fulfilled") {
|
|
62
|
-
renderBundles[entryName] = results[1].value;
|
|
63
|
-
}
|
|
64
|
-
});
|
|
60
|
+
const loaderBundlePath = import_path.default.join(pwd, import_utils.SERVER_BUNDLE_DIRECTORY, `${entryName}-server-loaders.js`);
|
|
61
|
+
const renderBundle = await loadBundle(renderBundlePath, logger);
|
|
62
|
+
const loaderBundle = await loadBundle(loaderBundlePath, logger);
|
|
63
|
+
renderBundle && (renderBundles[entryName] = renderBundle);
|
|
64
|
+
loaderBundle && (loaderBundles[entryName] = loaderBundle);
|
|
65
65
|
}));
|
|
66
66
|
const loadableUri = import_path.default.join(pwd, import_utils.LOADABLE_STATS_FILE);
|
|
67
67
|
const loadableStats = await Promise.resolve().then(() => __toESM(require(loadableUri))).catch((_) => ({}));
|
|
@@ -77,7 +77,8 @@ async function getServerManifest(pwd, routes) {
|
|
|
77
77
|
function injectServerManifest(pwd, routes) {
|
|
78
78
|
return async (c, next) => {
|
|
79
79
|
if (routes && !c.get("serverManifest")) {
|
|
80
|
-
const
|
|
80
|
+
const logger = c.get("logger");
|
|
81
|
+
const serverManifest = await getServerManifest(pwd, routes, logger);
|
|
81
82
|
c.set("serverManifest", serverManifest);
|
|
82
83
|
}
|
|
83
84
|
await next();
|
package/dist/cjs/base/index.js
CHANGED
|
@@ -19,6 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
var base_exports = {};
|
|
20
20
|
__export(base_exports, {
|
|
21
21
|
AGGRED_DIR: () => import_constants.AGGRED_DIR,
|
|
22
|
+
ErrorDigest: () => import_utils.ErrorDigest,
|
|
22
23
|
bindRenderHandler: () => import_middlewares.bindRenderHandler,
|
|
23
24
|
createErrorHtml: () => import_utils.createErrorHtml,
|
|
24
25
|
createServerBase: () => import_serverBase.createServerBase,
|
|
@@ -27,6 +28,7 @@ __export(base_exports, {
|
|
|
27
28
|
injectLogger: () => import_middlewares.injectLogger,
|
|
28
29
|
injectReporter: () => import_middlewares.injectReporter,
|
|
29
30
|
logHandler: () => import_middlewares.logHandler,
|
|
31
|
+
onError: () => import_utils.onError,
|
|
30
32
|
processedBy: () => import_middlewares.processedBy
|
|
31
33
|
});
|
|
32
34
|
module.exports = __toCommonJS(base_exports);
|
|
@@ -37,6 +39,7 @@ var import_serverBase = require("./serverBase");
|
|
|
37
39
|
// Annotate the CommonJS export names for ESM import in node:
|
|
38
40
|
0 && (module.exports = {
|
|
39
41
|
AGGRED_DIR,
|
|
42
|
+
ErrorDigest,
|
|
40
43
|
bindRenderHandler,
|
|
41
44
|
createErrorHtml,
|
|
42
45
|
createServerBase,
|
|
@@ -45,5 +48,6 @@ var import_serverBase = require("./serverBase");
|
|
|
45
48
|
injectLogger,
|
|
46
49
|
injectReporter,
|
|
47
50
|
logHandler,
|
|
51
|
+
onError,
|
|
48
52
|
processedBy
|
|
49
53
|
});
|
|
@@ -43,13 +43,12 @@ function createCustomMiddlewaresCtx(c, locals) {
|
|
|
43
43
|
var _c_env_node, _c_env_node1;
|
|
44
44
|
const baseContext = (0, import_base.createBaseHookContext)(c);
|
|
45
45
|
const reporter = c.get("reporter");
|
|
46
|
+
const response = baseContext.response;
|
|
47
|
+
response.locals = locals;
|
|
46
48
|
return {
|
|
47
49
|
...baseContext,
|
|
48
50
|
reporter,
|
|
49
|
-
response
|
|
50
|
-
...baseContext.response,
|
|
51
|
-
locals
|
|
52
|
-
},
|
|
51
|
+
response,
|
|
53
52
|
source: {
|
|
54
53
|
req: (_c_env_node = c.env.node) === null || _c_env_node === void 0 ? void 0 : _c_env_node.req,
|
|
55
54
|
res: (_c_env_node1 = c.env.node) === null || _c_env_node1 === void 0 ? void 0 : _c_env_node1.res
|
|
@@ -59,8 +59,15 @@ function createRenderHandler(render) {
|
|
|
59
59
|
return res;
|
|
60
60
|
};
|
|
61
61
|
}
|
|
62
|
-
async function getRenderHandler(options) {
|
|
62
|
+
async function getRenderHandler(options, serverBase) {
|
|
63
63
|
const { routes, pwd, config } = options;
|
|
64
|
+
const onFallback = async (reason, utils, error) => {
|
|
65
|
+
await (serverBase === null || serverBase === void 0 ? void 0 : serverBase.runner.fallback({
|
|
66
|
+
reason,
|
|
67
|
+
error,
|
|
68
|
+
...utils
|
|
69
|
+
}));
|
|
70
|
+
};
|
|
64
71
|
if (routes && routes.length > 0) {
|
|
65
72
|
var _config_server, _options_config_security;
|
|
66
73
|
const ssrConfig = (_config_server = config.server) === null || _config_server === void 0 ? void 0 : _config_server.ssr;
|
|
@@ -71,7 +78,8 @@ async function getRenderHandler(options) {
|
|
|
71
78
|
staticGenerate: options.staticGenerate,
|
|
72
79
|
metaName: options.metaName || "modern-js",
|
|
73
80
|
forceCSR,
|
|
74
|
-
nonce: (_options_config_security = options.config.security) === null || _options_config_security === void 0 ? void 0 : _options_config_security.nonce
|
|
81
|
+
nonce: (_options_config_security = options.config.security) === null || _options_config_security === void 0 ? void 0 : _options_config_security.nonce,
|
|
82
|
+
onFallback
|
|
75
83
|
});
|
|
76
84
|
return render;
|
|
77
85
|
}
|
|
@@ -88,7 +96,7 @@ async function bindRenderHandler(server, options) {
|
|
|
88
96
|
await ssrCache.loadCacheMod((0, import_utils.checkIsProd)() ? pwd : void 0);
|
|
89
97
|
}
|
|
90
98
|
const pageRoutes = routes.filter((route) => !route.isApi).sort(import_utils.sortRoutes);
|
|
91
|
-
const render = await getRenderHandler(options);
|
|
99
|
+
const render = await getRenderHandler(options, server);
|
|
92
100
|
for (const route of pageRoutes) {
|
|
93
101
|
const { urlPath: originUrlPath, entryName } = route;
|
|
94
102
|
const urlPath = originUrlPath.endsWith("/") ? `${originUrlPath}*` : `${originUrlPath}/*`;
|
|
@@ -22,13 +22,38 @@ __export(render_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(render_exports);
|
|
24
24
|
var import_universal = require("@modern-js/utils/universal");
|
|
25
|
+
var import_trie_router = require("hono/router/trie-router");
|
|
25
26
|
var import_constants = require("../../../base/constants");
|
|
26
27
|
var import_utils = require("../../utils");
|
|
27
28
|
var import_dataHandler = require("./dataHandler");
|
|
28
29
|
var import_ssrRender = require("./ssrRender");
|
|
29
|
-
|
|
30
|
+
function getRouter(routes) {
|
|
31
|
+
const sorted = routes.sort(import_utils.sortRoutes);
|
|
32
|
+
const router = new import_trie_router.TrieRouter();
|
|
33
|
+
for (const route of sorted) {
|
|
34
|
+
const { urlPath: originUrlPath } = route;
|
|
35
|
+
const urlPath = originUrlPath.endsWith("/") ? `${originUrlPath}*` : `${originUrlPath}/*`;
|
|
36
|
+
router.add("*", urlPath, route);
|
|
37
|
+
}
|
|
38
|
+
return router;
|
|
39
|
+
}
|
|
40
|
+
function matchRoute(router, request) {
|
|
41
|
+
const pathname = (0, import_utils.getPathname)(request);
|
|
42
|
+
const matched = router.match("*", pathname);
|
|
43
|
+
const result = matched[0][0];
|
|
44
|
+
return result || [];
|
|
45
|
+
}
|
|
46
|
+
async function createRender({ routes, pwd, metaName, staticGenerate, forceCSR, nonce, onFallback: onFallbackFn }) {
|
|
47
|
+
const router = getRouter(routes);
|
|
30
48
|
return async (req, { logger, nodeReq, reporter, templates, serverManifest, locals, metrics }) => {
|
|
31
|
-
const routeInfo = matchRoute(
|
|
49
|
+
const [routeInfo, params] = matchRoute(router, req);
|
|
50
|
+
const onFallback = async (reason, error) => {
|
|
51
|
+
return onFallbackFn === null || onFallbackFn === void 0 ? void 0 : onFallbackFn(reason, {
|
|
52
|
+
logger,
|
|
53
|
+
reporter,
|
|
54
|
+
metrics
|
|
55
|
+
}, error);
|
|
56
|
+
};
|
|
32
57
|
if (!routeInfo) {
|
|
33
58
|
return new Response((0, import_utils.createErrorHtml)(404), {
|
|
34
59
|
status: 404,
|
|
@@ -46,7 +71,11 @@ async function createRender({ routes, pwd, metaName, staticGenerate, forceCSR, n
|
|
|
46
71
|
}
|
|
47
72
|
});
|
|
48
73
|
}
|
|
49
|
-
const renderMode = getRenderMode(req, metaName || "modern-js", routeInfo.isSSR, forceCSR, nodeReq);
|
|
74
|
+
const renderMode = await getRenderMode(req, metaName || "modern-js", routeInfo.isSSR, forceCSR, nodeReq, onFallback);
|
|
75
|
+
const onError = async (e) => {
|
|
76
|
+
(0, import_utils.onError)(logger, import_utils.ErrorDigest.ERENDER, e, req);
|
|
77
|
+
await (onFallback === null || onFallback === void 0 ? void 0 : onFallback("error", e));
|
|
78
|
+
};
|
|
50
79
|
const renderOptions = {
|
|
51
80
|
pwd,
|
|
52
81
|
html,
|
|
@@ -58,6 +87,7 @@ async function createRender({ routes, pwd, metaName, staticGenerate, forceCSR, n
|
|
|
58
87
|
nodeReq,
|
|
59
88
|
reporter,
|
|
60
89
|
serverRoutes: routes,
|
|
90
|
+
params,
|
|
61
91
|
locals,
|
|
62
92
|
serverManifest,
|
|
63
93
|
metrics
|
|
@@ -66,38 +96,46 @@ async function createRender({ routes, pwd, metaName, staticGenerate, forceCSR, n
|
|
|
66
96
|
case "data":
|
|
67
97
|
let response = await (0, import_dataHandler.dataHandler)(req, renderOptions);
|
|
68
98
|
if (!response) {
|
|
69
|
-
response = await renderHandler(req, renderOptions, "ssr");
|
|
99
|
+
response = await renderHandler(req, renderOptions, "ssr", onError);
|
|
70
100
|
}
|
|
71
101
|
return response;
|
|
72
102
|
case "ssr":
|
|
73
103
|
case "csr":
|
|
74
|
-
return renderHandler(req, renderOptions, renderMode);
|
|
104
|
+
return renderHandler(req, renderOptions, renderMode, onError);
|
|
75
105
|
default:
|
|
76
106
|
throw new Error(`Unknown render mode: ${renderMode}`);
|
|
77
107
|
}
|
|
78
108
|
};
|
|
79
109
|
}
|
|
80
|
-
async function renderHandler(request, options, mode) {
|
|
110
|
+
async function renderHandler(request, options, mode, onError) {
|
|
81
111
|
const serverData = {
|
|
82
112
|
router: {
|
|
83
113
|
baseUrl: options.routeInfo.urlPath,
|
|
84
|
-
params:
|
|
114
|
+
params: options.params
|
|
85
115
|
}
|
|
86
116
|
};
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (pathname.startsWith(route.urlPath)) {
|
|
95
|
-
return route;
|
|
117
|
+
let response;
|
|
118
|
+
if (mode === "ssr") {
|
|
119
|
+
try {
|
|
120
|
+
response = await (0, import_ssrRender.ssrRender)(request, options);
|
|
121
|
+
} catch (e) {
|
|
122
|
+
await onError(e);
|
|
123
|
+
response = csrRender(options.html);
|
|
96
124
|
}
|
|
125
|
+
} else {
|
|
126
|
+
response = csrRender(options.html);
|
|
127
|
+
}
|
|
128
|
+
const newRes = (0, import_utils.transformResponse)(response, injectServerData(serverData));
|
|
129
|
+
const { routeInfo } = options;
|
|
130
|
+
applyExtendHeaders(newRes, routeInfo);
|
|
131
|
+
return newRes;
|
|
132
|
+
function applyExtendHeaders(r, route) {
|
|
133
|
+
Object.entries(route.responseHeaders || {}).forEach(([k, v]) => {
|
|
134
|
+
r.headers.set(k, v);
|
|
135
|
+
});
|
|
97
136
|
}
|
|
98
|
-
return void 0;
|
|
99
137
|
}
|
|
100
|
-
function getRenderMode(req, framework, isSSR, forceCSR, nodeReq) {
|
|
138
|
+
async function getRenderMode(req, framework, isSSR, forceCSR, nodeReq, onFallback) {
|
|
101
139
|
const query = (0, import_utils.parseQuery)(req);
|
|
102
140
|
const fallbackHeader = `x-${(0, import_universal.cutNameByHyphen)(framework)}-ssr-fallback`;
|
|
103
141
|
if (isSSR) {
|
|
@@ -105,6 +143,11 @@ function getRenderMode(req, framework, isSSR, forceCSR, nodeReq) {
|
|
|
105
143
|
return "data";
|
|
106
144
|
}
|
|
107
145
|
if (forceCSR && (query.csr || req.headers.get(fallbackHeader) || (nodeReq === null || nodeReq === void 0 ? void 0 : nodeReq.headers[fallbackHeader]))) {
|
|
146
|
+
if (query.csr) {
|
|
147
|
+
await (onFallback === null || onFallback === void 0 ? void 0 : onFallback("query"));
|
|
148
|
+
} else {
|
|
149
|
+
await (onFallback === null || onFallback === void 0 ? void 0 : onFallback("header"));
|
|
150
|
+
}
|
|
108
151
|
return "csr";
|
|
109
152
|
}
|
|
110
153
|
return "ssr";
|
|
@@ -49,7 +49,7 @@ const defaultReporter = {
|
|
|
49
49
|
reportWarn() {
|
|
50
50
|
}
|
|
51
51
|
};
|
|
52
|
-
async function ssrRender(request, { routeInfo, html, staticGenerate, nonce, metaName, reporter, logger, nodeReq, serverManifest, locals, metrics }) {
|
|
52
|
+
async function ssrRender(request, { routeInfo, html, staticGenerate, nonce, metaName, reporter, logger, nodeReq, serverManifest, locals, params, metrics }) {
|
|
53
53
|
var _serverManifest_renderBundles;
|
|
54
54
|
const { entryName } = routeInfo;
|
|
55
55
|
const loadableStats = serverManifest.loadableStats || {};
|
|
@@ -69,7 +69,7 @@ async function ssrRender(request, { routeInfo, html, staticGenerate, nonce, meta
|
|
|
69
69
|
const ssrContext = {
|
|
70
70
|
request: {
|
|
71
71
|
baseUrl: routeInfo.urlPath,
|
|
72
|
-
params
|
|
72
|
+
params,
|
|
73
73
|
pathname: nodeReq ? getPathnameFromNodeReq(nodeReq) : (0, import_utils.getPathname)(request),
|
|
74
74
|
host,
|
|
75
75
|
query,
|
|
@@ -18,7 +18,9 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var error_exports = {};
|
|
20
20
|
__export(error_exports, {
|
|
21
|
-
|
|
21
|
+
ErrorDigest: () => ErrorDigest,
|
|
22
|
+
createErrorHtml: () => createErrorHtml,
|
|
23
|
+
onError: () => onError
|
|
22
24
|
});
|
|
23
25
|
module.exports = __toCommonJS(error_exports);
|
|
24
26
|
const ERROR_PAGE_TEXT = {
|
|
@@ -59,7 +61,20 @@ const createErrorHtml = (status) => {
|
|
|
59
61
|
</html>
|
|
60
62
|
`;
|
|
61
63
|
};
|
|
64
|
+
var ErrorDigest;
|
|
65
|
+
(function(ErrorDigest2) {
|
|
66
|
+
ErrorDigest2["ENOTF"] = "Page could not be found";
|
|
67
|
+
ErrorDigest2["EINTER"] = "Internal server error";
|
|
68
|
+
ErrorDigest2["ERENDER"] = "SSR render failed";
|
|
69
|
+
})(ErrorDigest || (ErrorDigest = {}));
|
|
70
|
+
function onError(logger, digest, error, req) {
|
|
71
|
+
const headers = req === null || req === void 0 ? void 0 : req.headers;
|
|
72
|
+
headers === null || headers === void 0 ? void 0 : headers.delete("cookie");
|
|
73
|
+
logger.error(req ? `Server Error - ${digest}, error = %s, req.url = %s, req.headers = %o` : `Server Error - ${digest}, error = %s`, error instanceof Error ? error.stack || error.message : error, req === null || req === void 0 ? void 0 : req.url, headers);
|
|
74
|
+
}
|
|
62
75
|
// Annotate the CommonJS export names for ESM import in node:
|
|
63
76
|
0 && (module.exports = {
|
|
64
|
-
|
|
77
|
+
ErrorDigest,
|
|
78
|
+
createErrorHtml,
|
|
79
|
+
onError
|
|
65
80
|
});
|
package/dist/cjs/core/plugin.js
CHANGED
|
@@ -33,6 +33,7 @@ const gather = (0, import_plugin.createParallelWorkflow)();
|
|
|
33
33
|
const config = (0, import_plugin.createWaterfall)();
|
|
34
34
|
const prepare = (0, import_plugin.createWaterfall)();
|
|
35
35
|
const prepareWebServer = (0, import_plugin.createAsyncPipeline)();
|
|
36
|
+
const fallback = (0, import_plugin.createParallelWorkflow)();
|
|
36
37
|
const prepareApiServer = (0, import_plugin.createAsyncPipeline)();
|
|
37
38
|
const onApiChange = (0, import_plugin.createAsyncWaterfall)();
|
|
38
39
|
const repack = (0, import_plugin.createWaterfall)();
|
|
@@ -56,6 +57,7 @@ const serverHooks = {
|
|
|
56
57
|
gather,
|
|
57
58
|
config,
|
|
58
59
|
prepare,
|
|
60
|
+
fallback,
|
|
59
61
|
prepareWebServer,
|
|
60
62
|
prepareApiServer,
|
|
61
63
|
repack,
|
|
@@ -1,12 +1,51 @@
|
|
|
1
1
|
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
2
|
+
import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
|
|
2
3
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
3
4
|
import path from "path";
|
|
4
|
-
import { LOADABLE_STATS_FILE, MAIN_ENTRY_NAME, ROUTE_MANIFEST_FILE, SERVER_BUNDLE_DIRECTORY } from "@modern-js/utils";
|
|
5
|
-
function
|
|
5
|
+
import { LOADABLE_STATS_FILE, MAIN_ENTRY_NAME, ROUTE_MANIFEST_FILE, SERVER_BUNDLE_DIRECTORY, fs } from "@modern-js/utils";
|
|
6
|
+
var dynamicImport = function(filePath) {
|
|
7
|
+
try {
|
|
8
|
+
var module = require(filePath);
|
|
9
|
+
return Promise.resolve(module);
|
|
10
|
+
} catch (e) {
|
|
11
|
+
return Promise.reject(e);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
var loadBundle = function() {
|
|
15
|
+
var _ref = _async_to_generator(function(filepath, logger) {
|
|
16
|
+
return _ts_generator(this, function(_state) {
|
|
17
|
+
switch (_state.label) {
|
|
18
|
+
case 0:
|
|
19
|
+
return [
|
|
20
|
+
4,
|
|
21
|
+
fs.pathExists(filepath)
|
|
22
|
+
];
|
|
23
|
+
case 1:
|
|
24
|
+
if (!_state.sent()) {
|
|
25
|
+
return [
|
|
26
|
+
2,
|
|
27
|
+
void 0
|
|
28
|
+
];
|
|
29
|
+
}
|
|
30
|
+
return [
|
|
31
|
+
2,
|
|
32
|
+
dynamicImport(filepath).catch(function(e) {
|
|
33
|
+
logger.error("Load ".concat(filepath, " bundle failed, error = %s"), _instanceof(e, Error) ? e.stack || e.message : e);
|
|
34
|
+
return void 0;
|
|
35
|
+
})
|
|
36
|
+
];
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
return function loadBundle2(filepath, logger) {
|
|
41
|
+
return _ref.apply(this, arguments);
|
|
42
|
+
};
|
|
43
|
+
}();
|
|
44
|
+
function getServerManifest(pwd, routes, logger) {
|
|
6
45
|
return _getServerManifest.apply(this, arguments);
|
|
7
46
|
}
|
|
8
47
|
function _getServerManifest() {
|
|
9
|
-
_getServerManifest = _async_to_generator(function(pwd, routes) {
|
|
48
|
+
_getServerManifest = _async_to_generator(function(pwd, routes, logger) {
|
|
10
49
|
var loaderBundles, renderBundles, loadableUri, loadableStats, routesManifestUri, routeManifest;
|
|
11
50
|
return _ts_generator(this, function(_state) {
|
|
12
51
|
switch (_state.label) {
|
|
@@ -15,41 +54,31 @@ function _getServerManifest() {
|
|
|
15
54
|
renderBundles = {};
|
|
16
55
|
return [
|
|
17
56
|
4,
|
|
18
|
-
Promise.all(routes.
|
|
57
|
+
Promise.all(routes.filter(function(route) {
|
|
58
|
+
return Boolean(route.bundle);
|
|
59
|
+
}).map(function() {
|
|
19
60
|
var _ref = _async_to_generator(function(route) {
|
|
20
|
-
var entryName, loaderBundlePath,
|
|
61
|
+
var entryName, renderBundlePath, loaderBundlePath, renderBundle, loaderBundle;
|
|
21
62
|
return _ts_generator(this, function(_state2) {
|
|
22
63
|
switch (_state2.label) {
|
|
23
64
|
case 0:
|
|
24
65
|
entryName = route.entryName || MAIN_ENTRY_NAME;
|
|
25
|
-
loaderBundlePath = path.join(pwd, SERVER_BUNDLE_DIRECTORY, "".concat(entryName, "-server-loaders.js"));
|
|
26
66
|
renderBundlePath = path.join(pwd, route.bundle || "");
|
|
27
|
-
|
|
28
|
-
try {
|
|
29
|
-
var module = require(filePath);
|
|
30
|
-
return Promise.resolve(module);
|
|
31
|
-
} catch (e) {
|
|
32
|
-
return Promise.reject(e);
|
|
33
|
-
}
|
|
34
|
-
};
|
|
67
|
+
loaderBundlePath = path.join(pwd, SERVER_BUNDLE_DIRECTORY, "".concat(entryName, "-server-loaders.js"));
|
|
35
68
|
return [
|
|
36
69
|
4,
|
|
37
|
-
|
|
38
|
-
dynamicImport(loaderBundlePath),
|
|
39
|
-
dynamicImport(renderBundlePath)
|
|
40
|
-
]).then(function(results) {
|
|
41
|
-
var _results_ = results[0], loaderStatus = _results_.status;
|
|
42
|
-
if (loaderStatus === "fulfilled") {
|
|
43
|
-
loaderBundles[entryName] = results[0].value;
|
|
44
|
-
}
|
|
45
|
-
var _results_1 = results[1], renderStatus = _results_1.status;
|
|
46
|
-
if (renderStatus === "fulfilled") {
|
|
47
|
-
renderBundles[entryName] = results[1].value;
|
|
48
|
-
}
|
|
49
|
-
})
|
|
70
|
+
loadBundle(renderBundlePath, logger)
|
|
50
71
|
];
|
|
51
72
|
case 1:
|
|
52
|
-
_state2.sent();
|
|
73
|
+
renderBundle = _state2.sent();
|
|
74
|
+
return [
|
|
75
|
+
4,
|
|
76
|
+
loadBundle(loaderBundlePath, logger)
|
|
77
|
+
];
|
|
78
|
+
case 2:
|
|
79
|
+
loaderBundle = _state2.sent();
|
|
80
|
+
renderBundle && (renderBundles[entryName] = renderBundle);
|
|
81
|
+
loaderBundle && (loaderBundles[entryName] = loaderBundle);
|
|
53
82
|
return [
|
|
54
83
|
2
|
|
55
84
|
];
|
|
@@ -98,7 +127,7 @@ function _getServerManifest() {
|
|
|
98
127
|
function injectServerManifest(pwd, routes) {
|
|
99
128
|
return function() {
|
|
100
129
|
var _ref = _async_to_generator(function(c, next) {
|
|
101
|
-
var serverManifest;
|
|
130
|
+
var logger, serverManifest;
|
|
102
131
|
return _ts_generator(this, function(_state) {
|
|
103
132
|
switch (_state.label) {
|
|
104
133
|
case 0:
|
|
@@ -107,9 +136,10 @@ function injectServerManifest(pwd, routes) {
|
|
|
107
136
|
3,
|
|
108
137
|
2
|
|
109
138
|
];
|
|
139
|
+
logger = c.get("logger");
|
|
110
140
|
return [
|
|
111
141
|
4,
|
|
112
|
-
getServerManifest(pwd, routes)
|
|
142
|
+
getServerManifest(pwd, routes, logger)
|
|
113
143
|
];
|
|
114
144
|
case 1:
|
|
115
145
|
serverManifest = _state.sent();
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
2
|
+
import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
|
|
2
3
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
3
4
|
import path from "path";
|
|
4
5
|
import { fileReader } from "@modern-js/runtime-utils/fileReader";
|
|
@@ -31,6 +32,10 @@ function createPublicMiddleware(param) {
|
|
|
31
32
|
if (mimeType) {
|
|
32
33
|
c.header("Content-Type", mimeType);
|
|
33
34
|
}
|
|
35
|
+
Object.entries(route.responseHeaders || {}).forEach(function(param2) {
|
|
36
|
+
var _param = _sliced_to_array(param2, 2), k = _param[0], v = _param[1];
|
|
37
|
+
c.header(k, v);
|
|
38
|
+
});
|
|
34
39
|
return [
|
|
35
40
|
2,
|
|
36
41
|
c.body(data, 200)
|
package/dist/esm/base/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { createErrorHtml } from "./utils";
|
|
1
|
+
import { createErrorHtml, onError, ErrorDigest } from "./utils";
|
|
2
2
|
import { AGGRED_DIR } from "./constants";
|
|
3
3
|
import { favionFallbackMiddleware, injectReporter, injectLogger, getRenderHandler, bindRenderHandler, logHandler, processedBy } from "./middlewares";
|
|
4
4
|
import { createServerBase } from "./serverBase";
|
|
5
5
|
export {
|
|
6
6
|
AGGRED_DIR,
|
|
7
|
+
ErrorDigest,
|
|
7
8
|
bindRenderHandler,
|
|
8
9
|
createErrorHtml,
|
|
9
10
|
createServerBase,
|
|
@@ -12,5 +13,6 @@ export {
|
|
|
12
13
|
injectLogger,
|
|
13
14
|
injectReporter,
|
|
14
15
|
logHandler,
|
|
16
|
+
onError,
|
|
15
17
|
processedBy
|
|
16
18
|
};
|
|
@@ -41,11 +41,11 @@ function createCustomMiddlewaresCtx(c, locals) {
|
|
|
41
41
|
var _c_env_node, _c_env_node1;
|
|
42
42
|
var baseContext = createBaseHookContext(c);
|
|
43
43
|
var reporter = c.get("reporter");
|
|
44
|
+
var response = baseContext.response;
|
|
45
|
+
response.locals = locals;
|
|
44
46
|
return _object_spread_props(_object_spread({}, baseContext), {
|
|
45
47
|
reporter,
|
|
46
|
-
response
|
|
47
|
-
locals
|
|
48
|
-
}),
|
|
48
|
+
response,
|
|
49
49
|
source: {
|
|
50
50
|
req: (_c_env_node = c.env.node) === null || _c_env_node === void 0 ? void 0 : _c_env_node.req,
|
|
51
51
|
res: (_c_env_node1 = c.env.node) === null || _c_env_node1 === void 0 ? void 0 : _c_env_node1.res
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
2
|
+
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
|
|
2
3
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
3
4
|
import { checkIsProd, sortRoutes, getRuntimeEnv } from "../../utils";
|
|
4
5
|
import { initReporter } from "../monitor";
|
|
@@ -45,14 +46,38 @@ function createRenderHandler(render) {
|
|
|
45
46
|
};
|
|
46
47
|
}();
|
|
47
48
|
}
|
|
48
|
-
function getRenderHandler(options) {
|
|
49
|
+
function getRenderHandler(options, serverBase) {
|
|
49
50
|
return _getRenderHandler.apply(this, arguments);
|
|
50
51
|
}
|
|
51
52
|
function _getRenderHandler() {
|
|
52
|
-
_getRenderHandler = _async_to_generator(function(options) {
|
|
53
|
-
var routes, pwd, config, _config_server, _options_config_security, ssrConfig, forceCSR, render;
|
|
53
|
+
_getRenderHandler = _async_to_generator(function(options, serverBase) {
|
|
54
|
+
var routes, pwd, config, onFallback, _config_server, _options_config_security, ssrConfig, forceCSR, render;
|
|
54
55
|
return _ts_generator(this, function(_state) {
|
|
55
56
|
routes = options.routes, pwd = options.pwd, config = options.config;
|
|
57
|
+
onFallback = function() {
|
|
58
|
+
var _ref = _async_to_generator(function(reason, utils, error) {
|
|
59
|
+
return _ts_generator(this, function(_state2) {
|
|
60
|
+
switch (_state2.label) {
|
|
61
|
+
case 0:
|
|
62
|
+
return [
|
|
63
|
+
4,
|
|
64
|
+
serverBase === null || serverBase === void 0 ? void 0 : serverBase.runner.fallback(_object_spread({
|
|
65
|
+
reason,
|
|
66
|
+
error
|
|
67
|
+
}, utils))
|
|
68
|
+
];
|
|
69
|
+
case 1:
|
|
70
|
+
_state2.sent();
|
|
71
|
+
return [
|
|
72
|
+
2
|
|
73
|
+
];
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
return function onFallback2(reason, utils, error) {
|
|
78
|
+
return _ref.apply(this, arguments);
|
|
79
|
+
};
|
|
80
|
+
}();
|
|
56
81
|
if (routes && routes.length > 0) {
|
|
57
82
|
;
|
|
58
83
|
ssrConfig = (_config_server = config.server) === null || _config_server === void 0 ? void 0 : _config_server.ssr;
|
|
@@ -63,7 +88,8 @@ function _getRenderHandler() {
|
|
|
63
88
|
staticGenerate: options.staticGenerate,
|
|
64
89
|
metaName: options.metaName || "modern-js",
|
|
65
90
|
forceCSR,
|
|
66
|
-
nonce: (_options_config_security = options.config.security) === null || _options_config_security === void 0 ? void 0 : _options_config_security.nonce
|
|
91
|
+
nonce: (_options_config_security = options.config.security) === null || _options_config_security === void 0 ? void 0 : _options_config_security.nonce,
|
|
92
|
+
onFallback
|
|
67
93
|
});
|
|
68
94
|
return [
|
|
69
95
|
2,
|
|
@@ -120,7 +146,7 @@ function _bindRenderHandler() {
|
|
|
120
146
|
}).sort(sortRoutes);
|
|
121
147
|
return [
|
|
122
148
|
4,
|
|
123
|
-
getRenderHandler(options)
|
|
149
|
+
getRenderHandler(options, server)
|
|
124
150
|
];
|
|
125
151
|
case 4:
|
|
126
152
|
render = _state.sent();
|