@modern-js/server-core 2.58.3-alpha.1 → 2.59.0
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/hono.js +13 -6
- package/dist/cjs/adapters/node/node.js +2 -2
- package/dist/cjs/adapters/node/plugins/resource.js +1 -1
- package/dist/cjs/adapters/node/plugins/static.js +1 -1
- package/dist/cjs/adapters/node/polyfills/install.js +1 -1
- package/dist/cjs/plugins/customServer/base.js +3 -1
- package/dist/cjs/plugins/customServer/context.js +1 -1
- package/dist/cjs/plugins/customServer/index.js +6 -22
- package/dist/cjs/plugins/default.js +2 -2
- package/dist/cjs/plugins/render/index.js +5 -3
- package/dist/cjs/plugins/render/inject.js +13 -3
- package/dist/cjs/plugins/render/render.js +21 -19
- package/dist/cjs/plugins/render/ssrRender.js +1 -1
- package/dist/cjs/serverBase.js +2 -1
- package/dist/esm/adapters/node/helper/loadConfig.js +1 -1
- package/dist/esm/adapters/node/hono.js +29 -15
- package/dist/esm/adapters/node/node.js +2 -2
- package/dist/esm/adapters/node/plugins/resource.js +31 -3
- package/dist/esm/adapters/node/plugins/static.js +1 -1
- package/dist/esm/adapters/node/polyfills/install.js +3 -3
- package/dist/esm/plugins/customServer/base.js +7 -1
- package/dist/esm/plugins/customServer/context.js +1 -1
- package/dist/esm/plugins/customServer/index.js +8 -17
- package/dist/esm/plugins/default.js +3 -3
- package/dist/esm/plugins/render/index.js +6 -4
- package/dist/esm/plugins/render/inject.js +33 -5
- package/dist/esm/plugins/render/render.js +50 -42
- package/dist/esm/plugins/render/ssrRender.js +2 -2
- package/dist/esm/serverBase.js +2 -1
- package/dist/esm-node/adapters/node/helper/loadConfig.js +1 -1
- package/dist/esm-node/adapters/node/hono.js +13 -6
- package/dist/esm-node/adapters/node/node.js +2 -2
- package/dist/esm-node/adapters/node/plugins/resource.js +2 -2
- package/dist/esm-node/adapters/node/plugins/static.js +1 -1
- package/dist/esm-node/adapters/node/polyfills/install.js +3 -3
- package/dist/esm-node/plugins/customServer/base.js +3 -1
- package/dist/esm-node/plugins/customServer/context.js +1 -1
- package/dist/esm-node/plugins/customServer/index.js +6 -12
- package/dist/esm-node/plugins/default.js +3 -3
- package/dist/esm-node/plugins/render/index.js +5 -3
- package/dist/esm-node/plugins/render/inject.js +13 -3
- package/dist/esm-node/plugins/render/render.js +21 -19
- package/dist/esm-node/plugins/render/ssrRender.js +2 -2
- package/dist/esm-node/serverBase.js +2 -1
- package/dist/types/adapters/node/hono.d.ts +4 -2
- package/dist/types/adapters/node/plugins/nodeServer.d.ts +1 -1
- package/dist/types/adapters/node/plugins/static.d.ts +1 -1
- package/dist/types/pluginManager.d.ts +1 -1
- package/dist/types/plugins/customServer/context.d.ts +2 -2
- package/dist/types/plugins/customServer/index.d.ts +2 -2
- package/dist/types/plugins/render/inject.d.ts +1 -1
- package/dist/types/plugins/render/render.d.ts +2 -7
- package/dist/types/plugins/render/ssrRender.d.ts +2 -2
- package/dist/types/serverBase.d.ts +1 -0
- package/dist/types/types/config/bff.d.ts +1 -1
- package/dist/types/types/config/server.d.ts +0 -23
- package/dist/types/types/plugin.d.ts +8 -2
- package/dist/types/types/render.d.ts +2 -0
- package/dist/types/types/requestHandler.d.ts +1 -1
- package/dist/types/types/server.d.ts +2 -1
- package/package.json +7 -7
|
@@ -25,15 +25,22 @@ module.exports = __toCommonJS(hono_exports);
|
|
|
25
25
|
const httpCallBack2HonoMid = (handler) => {
|
|
26
26
|
return async (context, next) => {
|
|
27
27
|
const { req, res } = context.env.node;
|
|
28
|
+
const onPipe = () => {
|
|
29
|
+
res._modernBodyPiped = true;
|
|
30
|
+
};
|
|
31
|
+
res.once("pipe", onPipe);
|
|
28
32
|
req.__honoRequest = context.req;
|
|
29
33
|
req.__templates = context.get("templates") || {};
|
|
30
34
|
req.__serverManifest = context.get("serverManifest") || {};
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
try {
|
|
36
|
+
await handler(req, res);
|
|
37
|
+
} finally {
|
|
38
|
+
delete req.__honoRequest;
|
|
39
|
+
delete req.__templates;
|
|
40
|
+
delete req.__serverManifest;
|
|
41
|
+
res.removeListener("pipe", onPipe);
|
|
42
|
+
}
|
|
43
|
+
if (res.headersSent || res._modernBodyPiped) {
|
|
37
44
|
context.finalized = true;
|
|
38
45
|
} else {
|
|
39
46
|
await next();
|
|
@@ -35,8 +35,8 @@ __export(node_exports, {
|
|
|
35
35
|
});
|
|
36
36
|
module.exports = __toCommonJS(node_exports);
|
|
37
37
|
var import_node_http = require("node:http");
|
|
38
|
-
var import_stream = require("./polyfills/stream");
|
|
39
38
|
var import_install = require("./polyfills/install");
|
|
39
|
+
var import_stream = require("./polyfills/stream");
|
|
40
40
|
var import_polyfills = require("./polyfills");
|
|
41
41
|
(0, import_install.installGlobals)();
|
|
42
42
|
const createWebRequest = (req, res, body) => {
|
|
@@ -116,7 +116,7 @@ const getRequestListener = (handler) => {
|
|
|
116
116
|
res
|
|
117
117
|
}
|
|
118
118
|
});
|
|
119
|
-
if (!res.headersSent && !response.res) {
|
|
119
|
+
if (!res.headersSent && !response.res && !res._modernBodyPiped) {
|
|
120
120
|
await sendResponse(response, res);
|
|
121
121
|
}
|
|
122
122
|
} catch (error) {
|
|
@@ -86,7 +86,7 @@ async function getServerManifest(pwd, routes, logger) {
|
|
|
86
86
|
const renderBundle = await loadBundle(renderBundlePath, logger);
|
|
87
87
|
const loaderBundle = await loadBundle(loaderBundlePath, logger);
|
|
88
88
|
renderBundle && (renderBundles[entryName] = renderBundle);
|
|
89
|
-
loaderBundle && (loaderBundles[entryName] = loaderBundle);
|
|
89
|
+
loaderBundle && (loaderBundles[entryName] = (loaderBundle === null || loaderBundle === void 0 ? void 0 : loaderBundle.loadModules) ? await (loaderBundle === null || loaderBundle === void 0 ? void 0 : loaderBundle.loadModules()) : loaderBundle);
|
|
90
90
|
}));
|
|
91
91
|
const loadableUri = import_path.default.join(pwd, import_utils.LOADABLE_STATS_FILE);
|
|
92
92
|
const loadableStats = await (0, import_utils.compatibleRequire)(loadableUri).catch((_) => ({}));
|
|
@@ -34,9 +34,9 @@ __export(static_exports, {
|
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(static_exports);
|
|
36
36
|
var import_path = __toESM(require("path"));
|
|
37
|
+
var import_fileReader = require("@modern-js/runtime-utils/fileReader");
|
|
37
38
|
var import_utils = require("@modern-js/utils");
|
|
38
39
|
var import_mime = require("hono/utils/mime");
|
|
39
|
-
var import_fileReader = require("@modern-js/runtime-utils/fileReader");
|
|
40
40
|
var import_utils2 = require("../../../utils");
|
|
41
41
|
const serverStaticPlugin = () => ({
|
|
42
42
|
name: "@modern-js/plugin-server-static",
|
|
@@ -22,8 +22,8 @@ __export(install_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(install_exports);
|
|
24
24
|
var import_fetch = require("@web-std/fetch");
|
|
25
|
-
var import_stream = require("@web-std/stream");
|
|
26
25
|
var import_file = require("@web-std/file");
|
|
26
|
+
var import_stream = require("@web-std/stream");
|
|
27
27
|
if (!Object.getOwnPropertyDescriptor(import_fetch.Headers.prototype, "getSetCookie")) {
|
|
28
28
|
Object.defineProperty(import_fetch.Headers.prototype, "getSetCookie", {
|
|
29
29
|
value: function getSetCookie() {
|
|
@@ -39,7 +39,9 @@ function createBaseHookContext(c, resParams) {
|
|
|
39
39
|
var _req = /* @__PURE__ */ new WeakMap(), _c = /* @__PURE__ */ new WeakMap(), _headersData = /* @__PURE__ */ new WeakMap(), _headers = /* @__PURE__ */ new WeakMap();
|
|
40
40
|
class BaseHookRequest {
|
|
41
41
|
get url() {
|
|
42
|
-
|
|
42
|
+
const query = (0, import_class_private_field_get._)(this, _c).req.query();
|
|
43
|
+
const q = Object.entries(query).map(([key, value]) => `${key}=${value}`).join("&");
|
|
44
|
+
return q ? `${(0, import_class_private_field_get._)(this, _c).req.path}?${q}` : (0, import_class_private_field_get._)(this, _c).req.path;
|
|
43
45
|
}
|
|
44
46
|
// TODO: remove next major version
|
|
45
47
|
set url(_u) {
|
|
@@ -24,9 +24,9 @@ __export(context_exports, {
|
|
|
24
24
|
getAfterRenderCtx: () => getAfterRenderCtx
|
|
25
25
|
});
|
|
26
26
|
module.exports = __toCommonJS(context_exports);
|
|
27
|
+
var import_base = require("./base");
|
|
27
28
|
var import_routerApi = require("./routerApi");
|
|
28
29
|
var import_template = require("./template");
|
|
29
|
-
var import_base = require("./base");
|
|
30
30
|
function getAfterMatchCtx(entryName, baseHookCtx) {
|
|
31
31
|
const afterMatchCtx = baseHookCtx;
|
|
32
32
|
afterMatchCtx.router = new import_routerApi.RouterAPI(entryName);
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
19
|
var customServer_exports = {};
|
|
30
20
|
__export(customServer_exports, {
|
|
@@ -33,11 +23,11 @@ __export(customServer_exports, {
|
|
|
33
23
|
});
|
|
34
24
|
module.exports = __toCommonJS(customServer_exports);
|
|
35
25
|
var import_time = require("@modern-js/runtime-utils/time");
|
|
36
|
-
var import_utils = require("../../utils");
|
|
37
|
-
var import_helper = require("../../helper");
|
|
38
26
|
var import_constants = require("../../constants");
|
|
39
|
-
var
|
|
27
|
+
var import_helper = require("../../helper");
|
|
28
|
+
var import_utils = require("../../utils");
|
|
40
29
|
var import_base = require("./base");
|
|
30
|
+
var import_context = require("./context");
|
|
41
31
|
const noop = () => {
|
|
42
32
|
};
|
|
43
33
|
const isHtmlResponse = (response) => {
|
|
@@ -65,14 +55,7 @@ class CustomServer {
|
|
|
65
55
|
if (current !== entryName) {
|
|
66
56
|
const rewriteRoute = routes.find((route) => route.entryName === current);
|
|
67
57
|
if (rewriteRoute) {
|
|
68
|
-
|
|
69
|
-
const url2 = new URL(c.req.url);
|
|
70
|
-
const newUrl = new URL(rewriteRoute.urlPath, url2.origin);
|
|
71
|
-
return this.serverBase.request(newUrl, {
|
|
72
|
-
headers,
|
|
73
|
-
method,
|
|
74
|
-
signal
|
|
75
|
-
}, c.env);
|
|
58
|
+
c.set("matchPathname", rewriteRoute.urlPath);
|
|
76
59
|
}
|
|
77
60
|
}
|
|
78
61
|
if (c.finalized) {
|
|
@@ -182,7 +165,8 @@ async function createMiddlewareContextFromHono(c) {
|
|
|
182
165
|
"GET",
|
|
183
166
|
"HEAD"
|
|
184
167
|
].includes(method) && !rawRequest.body && c.env.node.req) {
|
|
185
|
-
const
|
|
168
|
+
const streamModulePath = "../../adapters/node/polyfills/stream.js";
|
|
169
|
+
const { createReadableStreamFromReadable } = await import(streamModulePath);
|
|
186
170
|
const init = {
|
|
187
171
|
body: createReadableStreamFromReadable(c.env.node.req),
|
|
188
172
|
headers: rawRequest.headers,
|
|
@@ -21,10 +21,10 @@ __export(default_exports, {
|
|
|
21
21
|
createDefaultPlugins: () => createDefaultPlugins
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(default_exports);
|
|
24
|
-
var
|
|
24
|
+
var import_log = require("./log");
|
|
25
25
|
var import_monitors = require("./monitors");
|
|
26
26
|
var import_processedBy = require("./processedBy");
|
|
27
|
-
var
|
|
27
|
+
var import_render = require("./render");
|
|
28
28
|
function createDefaultPlugins(options = {}) {
|
|
29
29
|
const plugins = [
|
|
30
30
|
(0, import_monitors.initMonitorsPlugin)(),
|
|
@@ -23,10 +23,10 @@ __export(render_exports, {
|
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(render_exports);
|
|
25
25
|
var import_constants = require("@modern-js/utils/universal/constants");
|
|
26
|
-
var
|
|
26
|
+
var import_helper = require("../../helper");
|
|
27
27
|
var import_utils = require("../../utils");
|
|
28
28
|
var import_customServer = require("../customServer");
|
|
29
|
-
var
|
|
29
|
+
var import_monitors = require("../monitors");
|
|
30
30
|
__reExport(render_exports, require("./inject"), module.exports);
|
|
31
31
|
const renderPlugin = () => ({
|
|
32
32
|
name: "@modern-js/plugin-render",
|
|
@@ -85,6 +85,7 @@ function createRenderHandler(render) {
|
|
|
85
85
|
const serverManifest = c.get("serverManifest") || {};
|
|
86
86
|
const locals = c.get("locals");
|
|
87
87
|
const metrics = c.get("metrics");
|
|
88
|
+
const matchPathname = c.get("matchPathname");
|
|
88
89
|
const loaderContext = (0, import_helper.getLoaderCtx)(c);
|
|
89
90
|
const request = c.req.raw;
|
|
90
91
|
const nodeReq = (_c_env_node = c.env.node) === null || _c_env_node === void 0 ? void 0 : _c_env_node.req;
|
|
@@ -97,7 +98,8 @@ function createRenderHandler(render) {
|
|
|
97
98
|
metrics,
|
|
98
99
|
serverManifest,
|
|
99
100
|
loaderContext,
|
|
100
|
-
locals
|
|
101
|
+
locals,
|
|
102
|
+
matchPathname
|
|
101
103
|
});
|
|
102
104
|
const { body, status, headers } = res;
|
|
103
105
|
const headersData = {};
|
|
@@ -31,16 +31,25 @@ const injectRenderHandlerPlugin = ({ staticGenerate, cacheConfig }) => ({
|
|
|
31
31
|
var _config_render;
|
|
32
32
|
const { distDirectory: pwd, routes, metaName } = api.useAppContext();
|
|
33
33
|
const config = api.useConfigContext();
|
|
34
|
+
const hookRunner = api.useHookRunners();
|
|
34
35
|
if (!routes) {
|
|
35
36
|
return;
|
|
36
37
|
}
|
|
38
|
+
const onFallback = async (reason, utils, error) => {
|
|
39
|
+
await hookRunner.fallback({
|
|
40
|
+
reason,
|
|
41
|
+
...utils,
|
|
42
|
+
error
|
|
43
|
+
});
|
|
44
|
+
};
|
|
37
45
|
const getRenderHandlerOptions = {
|
|
38
46
|
pwd,
|
|
39
47
|
routes,
|
|
40
48
|
config,
|
|
41
49
|
metaName,
|
|
42
50
|
cacheConfig: ((_config_render = config.render) === null || _config_render === void 0 ? void 0 : _config_render.cache) || cacheConfig,
|
|
43
|
-
staticGenerate
|
|
51
|
+
staticGenerate,
|
|
52
|
+
onFallback
|
|
44
53
|
};
|
|
45
54
|
const render = await getRenderHandler(getRenderHandlerOptions);
|
|
46
55
|
api.setAppContext({
|
|
@@ -52,7 +61,7 @@ const injectRenderHandlerPlugin = ({ staticGenerate, cacheConfig }) => ({
|
|
|
52
61
|
};
|
|
53
62
|
}
|
|
54
63
|
});
|
|
55
|
-
async function getRenderHandler({ pwd, routes, config, cacheConfig, metaName, staticGenerate }) {
|
|
64
|
+
async function getRenderHandler({ pwd, routes, config, cacheConfig, metaName, staticGenerate, onFallback }) {
|
|
56
65
|
var _config_server, _config_security;
|
|
57
66
|
const ssrConfig = (_config_server = config.server) === null || _config_server === void 0 ? void 0 : _config_server.ssr;
|
|
58
67
|
const forceCSR = typeof ssrConfig === "object" ? ssrConfig.forceCSR : false;
|
|
@@ -64,7 +73,8 @@ async function getRenderHandler({ pwd, routes, config, cacheConfig, metaName, st
|
|
|
64
73
|
cacheConfig,
|
|
65
74
|
forceCSR,
|
|
66
75
|
nonce: (_config_security = config.security) === null || _config_security === void 0 ? void 0 : _config_security.nonce,
|
|
67
|
-
metaName: metaName || "modern-js"
|
|
76
|
+
metaName: metaName || "modern-js",
|
|
77
|
+
onFallback
|
|
68
78
|
});
|
|
69
79
|
return render;
|
|
70
80
|
}
|
|
@@ -33,11 +33,10 @@ __export(render_exports, {
|
|
|
33
33
|
module.exports = __toCommonJS(render_exports);
|
|
34
34
|
var import_universal = require("@modern-js/utils/universal");
|
|
35
35
|
var import_trie_router = require("hono/router/trie-router");
|
|
36
|
-
var import_utils = require("../../utils");
|
|
37
36
|
var import_constants = require("../../constants");
|
|
37
|
+
var import_utils = require("../../utils");
|
|
38
38
|
var import_dataHandler = require("./dataHandler");
|
|
39
39
|
var import_ssrRender = require("./ssrRender");
|
|
40
|
-
var import_utils2 = require("@modern-js/utils");
|
|
41
40
|
const DYNAMIC_ROUTE_REG = /\/:./;
|
|
42
41
|
function getRouter(routes) {
|
|
43
42
|
const dynamicRoutes = [];
|
|
@@ -61,8 +60,7 @@ function getRouter(routes) {
|
|
|
61
60
|
}
|
|
62
61
|
return router;
|
|
63
62
|
}
|
|
64
|
-
function matchRoute(router,
|
|
65
|
-
const pathname = (0, import_utils.getPathname)(request);
|
|
63
|
+
function matchRoute(router, pathname) {
|
|
66
64
|
const matched = router.match("*", pathname);
|
|
67
65
|
const result = matched[0][0];
|
|
68
66
|
return result || [];
|
|
@@ -77,9 +75,14 @@ function getHeadersWithoutCookie(headers) {
|
|
|
77
75
|
}
|
|
78
76
|
async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig, forceCSR, config, onFallback: onFallbackFn }) {
|
|
79
77
|
const router = getRouter(routes);
|
|
80
|
-
return async (req, { logger, reporter, metrics, monitors, nodeReq, templates, serverManifest, locals, loaderContext }) => {
|
|
81
|
-
const
|
|
78
|
+
return async (req, { logger, reporter, metrics, monitors, nodeReq, templates, serverManifest, locals, matchPathname, loaderContext }) => {
|
|
79
|
+
const forMatchpathname = matchPathname !== null && matchPathname !== void 0 ? matchPathname : (0, import_utils.getPathname)(req);
|
|
80
|
+
const [routeInfo, params] = matchRoute(router, forMatchpathname);
|
|
81
|
+
const framework = metaName || "modern-js";
|
|
82
|
+
const fallbackHeader = `x-${(0, import_universal.cutNameByHyphen)(framework)}-ssr-fallback`;
|
|
83
|
+
let fallbackReason = null;
|
|
82
84
|
const onFallback = async (reason, error) => {
|
|
85
|
+
fallbackReason = reason;
|
|
83
86
|
return onFallbackFn === null || onFallbackFn === void 0 ? void 0 : onFallbackFn(reason, {
|
|
84
87
|
logger,
|
|
85
88
|
reporter,
|
|
@@ -103,11 +106,10 @@ async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig
|
|
|
103
106
|
}
|
|
104
107
|
});
|
|
105
108
|
}
|
|
106
|
-
const renderMode = await getRenderMode(req,
|
|
107
|
-
const pathname = (0, import_utils.getPathname)(req);
|
|
109
|
+
const renderMode = await getRenderMode(req, fallbackHeader, routeInfo.isSSR, forceCSR, nodeReq, onFallback);
|
|
108
110
|
const headerData = (0, import_utils.parseHeaders)(req);
|
|
109
111
|
const onError = (e) => {
|
|
110
|
-
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,
|
|
112
|
+
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));
|
|
111
113
|
};
|
|
112
114
|
const onTiming = (name, dur) => {
|
|
113
115
|
monitors === null || monitors === void 0 ? void 0 : monitors.timing(name, dur, "SSR");
|
|
@@ -147,6 +149,9 @@ async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig
|
|
|
147
149
|
default:
|
|
148
150
|
throw new Error(`Unknown render mode: ${renderMode}`);
|
|
149
151
|
}
|
|
152
|
+
if (fallbackReason) {
|
|
153
|
+
response.headers.set(fallbackHeader, `1;reason=${fallbackReason}`);
|
|
154
|
+
}
|
|
150
155
|
return response;
|
|
151
156
|
};
|
|
152
157
|
}
|
|
@@ -161,11 +166,14 @@ async function renderHandler(request, options, mode, onError) {
|
|
|
161
166
|
let response = null;
|
|
162
167
|
const { serverManifest } = options;
|
|
163
168
|
const ssrByRouteIds = (_options_config_server = options.config.server) === null || _options_config_server === void 0 ? void 0 : _options_config_server.ssrByRouteIds;
|
|
164
|
-
|
|
169
|
+
const runtimeEnv = (0, import_utils.getRuntimeEnv)();
|
|
170
|
+
if (serverManifest.nestedRoutesJson && ssrByRouteIds && (ssrByRouteIds === null || ssrByRouteIds === void 0 ? void 0 : ssrByRouteIds.length) > 0 && runtimeEnv === "node") {
|
|
165
171
|
const { nestedRoutesJson } = serverManifest;
|
|
166
172
|
const routes = nestedRoutesJson === null || nestedRoutesJson === void 0 ? void 0 : nestedRoutesJson[options.routeInfo.entryName];
|
|
167
173
|
if (routes) {
|
|
168
|
-
const
|
|
174
|
+
const urlPath = "node:url";
|
|
175
|
+
const { pathToFileURL } = await import(urlPath);
|
|
176
|
+
const { matchRoutes } = await import(pathToFileURL(require.resolve("@modern-js/runtime-utils/remix-router")).href);
|
|
169
177
|
const url = new URL(request.url);
|
|
170
178
|
const matchedRoutes = matchRoutes(routes, url.pathname, options.routeInfo.urlPath);
|
|
171
179
|
if (!matchedRoutes) {
|
|
@@ -189,12 +197,7 @@ async function renderHandler(request, options, mode, onError) {
|
|
|
189
197
|
} else {
|
|
190
198
|
response = csrRender(options.html);
|
|
191
199
|
}
|
|
192
|
-
|
|
193
|
-
if (!options.staticGenerate) {
|
|
194
|
-
newRes = (0, import_utils.transformResponse)(response, injectServerData(serverData));
|
|
195
|
-
} else {
|
|
196
|
-
newRes = response;
|
|
197
|
-
}
|
|
200
|
+
const newRes = (0, import_utils.transformResponse)(response, injectServerData(serverData));
|
|
198
201
|
const { routeInfo } = options;
|
|
199
202
|
applyExtendHeaders(newRes, routeInfo);
|
|
200
203
|
return newRes;
|
|
@@ -204,9 +207,8 @@ async function renderHandler(request, options, mode, onError) {
|
|
|
204
207
|
});
|
|
205
208
|
}
|
|
206
209
|
}
|
|
207
|
-
async function getRenderMode(req,
|
|
210
|
+
async function getRenderMode(req, fallbackHeader, isSSR, forceCSR, nodeReq, onFallback) {
|
|
208
211
|
const query = (0, import_utils.parseQuery)(req);
|
|
209
|
-
const fallbackHeader = `x-${(0, import_universal.cutNameByHyphen)(framework)}-ssr-fallback`;
|
|
210
212
|
if (isSSR) {
|
|
211
213
|
if (query.__loader) {
|
|
212
214
|
return "data";
|
|
@@ -22,8 +22,8 @@ __export(ssrRender_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(ssrRender_exports);
|
|
24
24
|
var import_constants = require("@modern-js/utils/universal/constants");
|
|
25
|
-
var import_utils = require("../../utils");
|
|
26
25
|
var import_constants2 = require("../../constants");
|
|
26
|
+
var import_utils = require("../../utils");
|
|
27
27
|
var import_ssrCache = require("./ssrCache");
|
|
28
28
|
const SERVER_RUNTIME_ENTRY = "requestHandler";
|
|
29
29
|
async function ssrRender(request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, locals, params, loaderContext, reporter, cacheConfig, logger, metrics, onError, onTiming }) {
|
package/dist/cjs/serverBase.js
CHANGED
|
@@ -24,8 +24,8 @@ __export(serverBase_exports, {
|
|
|
24
24
|
module.exports = __toCommonJS(serverBase_exports);
|
|
25
25
|
var import_class_private_method_get = require("@swc/helpers/_/_class_private_method_get");
|
|
26
26
|
var import_class_private_method_init = require("@swc/helpers/_/_class_private_method_init");
|
|
27
|
-
var import_hono = require("hono");
|
|
28
27
|
var import_plugin = require("@modern-js/plugin");
|
|
28
|
+
var import_hono = require("hono");
|
|
29
29
|
var import_pluginManager = require("./pluginManager");
|
|
30
30
|
var _getAppContext = /* @__PURE__ */ new WeakSet(), _applyMiddlewares = /* @__PURE__ */ new WeakSet();
|
|
31
31
|
class ServerBase {
|
|
@@ -100,6 +100,7 @@ function getAppContext() {
|
|
|
100
100
|
middlewares: [],
|
|
101
101
|
appDirectory: (context === null || context === void 0 ? void 0 : context.appDirectory) || "",
|
|
102
102
|
apiDirectory: context === null || context === void 0 ? void 0 : context.apiDirectory,
|
|
103
|
+
internalDirectory: (context === null || context === void 0 ? void 0 : context.internalDirectory) || "",
|
|
103
104
|
lambdaDirectory: context === null || context === void 0 ? void 0 : context.lambdaDirectory,
|
|
104
105
|
sharedDirectory: (context === null || context === void 0 ? void 0 : context.sharedDirectory) || "",
|
|
105
106
|
distDirectory: pwd,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
2
2
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
3
3
|
import path from "path";
|
|
4
|
-
import { fs, DEFAULT_SERVER_CONFIG,
|
|
4
|
+
import { fs, DEFAULT_SERVER_CONFIG, OUTPUT_CONFIG_FILE, lodash as _, compatibleRequire, ensureAbsolutePath, requireExistModule } from "@modern-js/utils";
|
|
5
5
|
import { parse } from "flatted";
|
|
6
6
|
var requireConfig = function() {
|
|
7
7
|
var _ref = _async_to_generator(function(serverConfigPath) {
|
|
@@ -3,50 +3,64 @@ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
|
3
3
|
var httpCallBack2HonoMid = function(handler) {
|
|
4
4
|
return function() {
|
|
5
5
|
var _ref = _async_to_generator(function(context, next) {
|
|
6
|
-
var _context_env_node, req, res;
|
|
6
|
+
var _context_env_node, req, res, onPipe;
|
|
7
7
|
return _ts_generator(this, function(_state) {
|
|
8
8
|
switch (_state.label) {
|
|
9
9
|
case 0:
|
|
10
10
|
_context_env_node = context.env.node, req = _context_env_node.req, res = _context_env_node.res;
|
|
11
|
+
onPipe = function() {
|
|
12
|
+
res._modernBodyPiped = true;
|
|
13
|
+
};
|
|
14
|
+
res.once("pipe", onPipe);
|
|
11
15
|
req.__honoRequest = context.req;
|
|
12
16
|
req.__templates = context.get("templates") || {};
|
|
13
17
|
req.__serverManifest = context.get("serverManifest") || {};
|
|
18
|
+
_state.label = 1;
|
|
19
|
+
case 1:
|
|
20
|
+
_state.trys.push([
|
|
21
|
+
1,
|
|
22
|
+
,
|
|
23
|
+
3,
|
|
24
|
+
4
|
|
25
|
+
]);
|
|
14
26
|
return [
|
|
15
27
|
4,
|
|
16
28
|
handler(req, res)
|
|
17
29
|
];
|
|
18
|
-
case
|
|
30
|
+
case 2:
|
|
19
31
|
_state.sent();
|
|
20
32
|
return [
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return setTimeout(resolve, 0);
|
|
24
|
-
})
|
|
33
|
+
3,
|
|
34
|
+
4
|
|
25
35
|
];
|
|
26
|
-
case
|
|
27
|
-
_state.sent();
|
|
36
|
+
case 3:
|
|
28
37
|
delete req.__honoRequest;
|
|
29
38
|
delete req.__templates;
|
|
30
39
|
delete req.__serverManifest;
|
|
31
|
-
|
|
40
|
+
res.removeListener("pipe", onPipe);
|
|
41
|
+
return [
|
|
42
|
+
7
|
|
43
|
+
];
|
|
44
|
+
case 4:
|
|
45
|
+
if (!(res.headersSent || res._modernBodyPiped))
|
|
32
46
|
return [
|
|
33
47
|
3,
|
|
34
|
-
|
|
48
|
+
5
|
|
35
49
|
];
|
|
36
50
|
context.finalized = true;
|
|
37
51
|
return [
|
|
38
52
|
3,
|
|
39
|
-
|
|
53
|
+
7
|
|
40
54
|
];
|
|
41
|
-
case
|
|
55
|
+
case 5:
|
|
42
56
|
return [
|
|
43
57
|
4,
|
|
44
58
|
next()
|
|
45
59
|
];
|
|
46
|
-
case
|
|
60
|
+
case 6:
|
|
47
61
|
_state.sent();
|
|
48
|
-
_state.label =
|
|
49
|
-
case
|
|
62
|
+
_state.label = 7;
|
|
63
|
+
case 7:
|
|
50
64
|
return [
|
|
51
65
|
2
|
|
52
66
|
];
|
|
@@ -3,8 +3,8 @@ import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
|
|
|
3
3
|
import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
|
|
4
4
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
5
5
|
import { ServerResponse } from "node:http";
|
|
6
|
-
import { createReadableStreamFromReadable, writeReadableStreamToWritable } from "./polyfills/stream";
|
|
7
6
|
import { installGlobals } from "./polyfills/install";
|
|
7
|
+
import { createReadableStreamFromReadable, writeReadableStreamToWritable } from "./polyfills/stream";
|
|
8
8
|
import { writeReadableStreamToWritable as writeReadableStreamToWritable2 } from "./polyfills";
|
|
9
9
|
installGlobals();
|
|
10
10
|
var createWebRequest = function(req, res, body) {
|
|
@@ -145,7 +145,7 @@ var getRequestListener = function(handler) {
|
|
|
145
145
|
];
|
|
146
146
|
case 1:
|
|
147
147
|
response = _state.sent();
|
|
148
|
-
if (!(!res.headersSent && !response.res))
|
|
148
|
+
if (!(!res.headersSent && !response.res && !res._modernBodyPiped))
|
|
149
149
|
return [
|
|
150
150
|
3,
|
|
151
151
|
3
|
|
@@ -3,7 +3,7 @@ import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
|
|
|
3
3
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
4
4
|
import path from "path";
|
|
5
5
|
import { fileReader } from "@modern-js/runtime-utils/fileReader";
|
|
6
|
-
import { LOADABLE_STATS_FILE, MAIN_ENTRY_NAME, NESTED_ROUTE_SPEC_FILE, ROUTE_MANIFEST_FILE, SERVER_BUNDLE_DIRECTORY,
|
|
6
|
+
import { fs, LOADABLE_STATS_FILE, MAIN_ENTRY_NAME, NESTED_ROUTE_SPEC_FILE, ROUTE_MANIFEST_FILE, SERVER_BUNDLE_DIRECTORY, compatibleRequire } from "@modern-js/utils";
|
|
7
7
|
function getHtmlTemplates(pwd, routes) {
|
|
8
8
|
return _getHtmlTemplates.apply(this, arguments);
|
|
9
9
|
}
|
|
@@ -180,7 +180,7 @@ function _getServerManifest() {
|
|
|
180
180
|
return Boolean(route.bundle);
|
|
181
181
|
}).map(function() {
|
|
182
182
|
var _ref = _async_to_generator(function(route) {
|
|
183
|
-
var entryName, renderBundlePath, loaderBundlePath, renderBundle, loaderBundle;
|
|
183
|
+
var entryName, renderBundlePath, loaderBundlePath, renderBundle, loaderBundle, _tmp, _tmp1;
|
|
184
184
|
return _ts_generator(this, function(_state2) {
|
|
185
185
|
switch (_state2.label) {
|
|
186
186
|
case 0:
|
|
@@ -200,7 +200,35 @@ function _getServerManifest() {
|
|
|
200
200
|
case 2:
|
|
201
201
|
loaderBundle = _state2.sent();
|
|
202
202
|
renderBundle && (renderBundles[entryName] = renderBundle);
|
|
203
|
-
|
|
203
|
+
_tmp = loaderBundle;
|
|
204
|
+
if (!_tmp)
|
|
205
|
+
return [
|
|
206
|
+
3,
|
|
207
|
+
6
|
|
208
|
+
];
|
|
209
|
+
if (!(loaderBundle === null || loaderBundle === void 0 ? void 0 : loaderBundle.loadModules))
|
|
210
|
+
return [
|
|
211
|
+
3,
|
|
212
|
+
4
|
|
213
|
+
];
|
|
214
|
+
return [
|
|
215
|
+
4,
|
|
216
|
+
loaderBundle === null || loaderBundle === void 0 ? void 0 : loaderBundle.loadModules()
|
|
217
|
+
];
|
|
218
|
+
case 3:
|
|
219
|
+
_tmp1 = _state2.sent();
|
|
220
|
+
return [
|
|
221
|
+
3,
|
|
222
|
+
5
|
|
223
|
+
];
|
|
224
|
+
case 4:
|
|
225
|
+
_tmp1 = loaderBundle;
|
|
226
|
+
_state2.label = 5;
|
|
227
|
+
case 5:
|
|
228
|
+
_tmp = loaderBundles[entryName] = _tmp1;
|
|
229
|
+
_state2.label = 6;
|
|
230
|
+
case 6:
|
|
231
|
+
_tmp;
|
|
204
232
|
return [
|
|
205
233
|
2
|
|
206
234
|
];
|
|
@@ -3,9 +3,9 @@ import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
|
|
|
3
3
|
import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
|
|
4
4
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
5
5
|
import path from "path";
|
|
6
|
+
import { fileReader } from "@modern-js/runtime-utils/fileReader";
|
|
6
7
|
import { fs } from "@modern-js/utils";
|
|
7
8
|
import { getMimeType } from "hono/utils/mime";
|
|
8
|
-
import { fileReader } from "@modern-js/runtime-utils/fileReader";
|
|
9
9
|
import { sortRoutes } from "../../../utils";
|
|
10
10
|
var serverStaticPlugin = function() {
|
|
11
11
|
return {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { FormData as NodeFormData, Headers as NodeHeaders, Request as NodeRequest, Response as NodeResponse } from "@web-std/fetch";
|
|
2
|
+
import { Blob as NodeBlob, File as NodeFile } from "@web-std/file";
|
|
3
|
+
import { ReadableStream as NodeReadableStream, TransformStream as NodeTransformStream, WritableStream as NodeWritableStream } from "@web-std/stream";
|
|
4
4
|
if (!Object.getOwnPropertyDescriptor(NodeHeaders.prototype, "getSetCookie")) {
|
|
5
5
|
Object.defineProperty(NodeHeaders.prototype, "getSetCookie", {
|
|
6
6
|
value: function getSetCookie() {
|
|
@@ -3,6 +3,7 @@ import { _ as _class_private_field_get } from "@swc/helpers/_/_class_private_fie
|
|
|
3
3
|
import { _ as _class_private_field_init } from "@swc/helpers/_/_class_private_field_init";
|
|
4
4
|
import { _ as _class_private_field_set } from "@swc/helpers/_/_class_private_field_set";
|
|
5
5
|
import { _ as _create_class } from "@swc/helpers/_/_create_class";
|
|
6
|
+
import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
|
|
6
7
|
import { getCookie } from "hono/cookie";
|
|
7
8
|
import { getHost } from "../../utils";
|
|
8
9
|
function createBaseHookContext(c, resParams) {
|
|
@@ -59,7 +60,12 @@ var BaseHookRequest = /* @__PURE__ */ function() {
|
|
|
59
60
|
{
|
|
60
61
|
key: "url",
|
|
61
62
|
get: function get() {
|
|
62
|
-
|
|
63
|
+
var query = _class_private_field_get(this, _c).req.query();
|
|
64
|
+
var q = Object.entries(query).map(function(param) {
|
|
65
|
+
var _param = _sliced_to_array(param, 2), key = _param[0], value = _param[1];
|
|
66
|
+
return "".concat(key, "=").concat(value);
|
|
67
|
+
}).join("&");
|
|
68
|
+
return q ? "".concat(_class_private_field_get(this, _c).req.path, "?").concat(q) : _class_private_field_get(this, _c).req.path;
|
|
63
69
|
},
|
|
64
70
|
set: (
|
|
65
71
|
// TODO: remove next major version
|
|
@@ -2,9 +2,9 @@ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
|
2
2
|
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
|
|
3
3
|
import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
|
|
4
4
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
5
|
+
import { createBaseHookContext } from "./base";
|
|
5
6
|
import { RouterAPI } from "./routerApi";
|
|
6
7
|
import { TemplateApi } from "./template";
|
|
7
|
-
import { createBaseHookContext } from "./base";
|
|
8
8
|
function getAfterMatchCtx(entryName, baseHookCtx) {
|
|
9
9
|
var afterMatchCtx = baseHookCtx;
|
|
10
10
|
afterMatchCtx.router = new RouterAPI(entryName);
|