@modern-js/server-core 2.49.4 → 2.49.5-alpha.1
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/node.js +3 -3
- package/dist/cjs/base/index.js +2 -0
- package/dist/cjs/base/middlewares/customServer/index.js +48 -8
- package/dist/cjs/base/middlewares/customServer/loader.js +37 -0
- package/dist/cjs/base/middlewares/index.js +9 -0
- package/dist/cjs/base/middlewares/renderHandler/index.js +10 -2
- package/dist/cjs/base/middlewares/renderHandler/render.js +4 -3
- package/dist/cjs/base/middlewares/renderHandler/ssrCache.js +1 -1
- package/dist/cjs/base/middlewares/renderHandler/ssrRender.js +2 -1
- package/dist/cjs/base/utils/index.js +3 -3
- package/dist/cjs/base/utils/request.js +19 -6
- package/dist/esm/base/adapters/node/node.js +3 -3
- package/dist/esm/base/index.js +2 -1
- package/dist/esm/base/middlewares/customServer/index.js +122 -59
- package/dist/esm/base/middlewares/customServer/loader.js +13 -0
- package/dist/esm/base/middlewares/index.js +4 -0
- package/dist/esm/base/middlewares/renderHandler/index.js +75 -27
- package/dist/esm/base/middlewares/renderHandler/render.js +5 -4
- package/dist/esm/base/middlewares/renderHandler/ssrCache.js +1 -1
- package/dist/esm/base/middlewares/renderHandler/ssrRender.js +3 -2
- package/dist/esm/base/utils/index.js +1 -1
- package/dist/esm/base/utils/request.js +18 -6
- package/dist/esm-node/base/adapters/node/node.js +3 -3
- package/dist/esm-node/base/index.js +2 -1
- package/dist/esm-node/base/middlewares/customServer/index.js +46 -7
- package/dist/esm-node/base/middlewares/customServer/loader.js +13 -0
- package/dist/esm-node/base/middlewares/index.js +4 -0
- package/dist/esm-node/base/middlewares/renderHandler/index.js +11 -3
- package/dist/esm-node/base/middlewares/renderHandler/render.js +4 -3
- package/dist/esm-node/base/middlewares/renderHandler/ssrCache.js +1 -1
- package/dist/esm-node/base/middlewares/renderHandler/ssrRender.js +2 -1
- package/dist/esm-node/base/utils/index.js +1 -1
- package/dist/esm-node/base/utils/request.js +18 -6
- package/dist/types/base/adapters/node/node.d.ts +1 -1
- package/dist/types/base/index.d.ts +1 -1
- package/dist/types/base/middlewares/customServer/index.d.ts +2 -1
- package/dist/types/base/middlewares/customServer/loader.d.ts +10 -0
- package/dist/types/base/middlewares/index.d.ts +1 -0
- package/dist/types/base/middlewares/renderHandler/ssrRender.d.ts +2 -1
- package/dist/types/base/utils/index.d.ts +1 -1
- package/dist/types/base/utils/request.d.ts +7 -2
- package/dist/types/core/plugin.d.ts +8 -8
- package/dist/types/core/render.d.ts +1 -0
- package/package.json +5 -5
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
2
2
|
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
|
|
3
|
+
import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
|
|
3
4
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
4
5
|
import { checkIsProd, sortRoutes, getRuntimeEnv } from "../../utils";
|
|
5
6
|
import { initReporter } from "../monitor";
|
|
6
|
-
import { CustomServer } from "../customServer";
|
|
7
|
+
import { CustomServer, getLoaderCtx } from "../customServer";
|
|
7
8
|
import { createRender } from "./render";
|
|
8
9
|
function createRenderHandler(render) {
|
|
9
10
|
return function() {
|
|
10
11
|
var _ref = _async_to_generator(function(c, _) {
|
|
11
|
-
var _c_env_node, logger, reporter, templates, serverManifest, locals, metrics, request, nodeReq, res, body, status, headers, headersData;
|
|
12
|
+
var _c_env_node, logger, reporter, templates, serverManifest, locals, metrics, loaderContext, request, nodeReq, res, body, status, headers, headersData;
|
|
12
13
|
return _ts_generator(this, function(_state) {
|
|
13
14
|
switch (_state.label) {
|
|
14
15
|
case 0:
|
|
@@ -18,6 +19,7 @@ function createRenderHandler(render) {
|
|
|
18
19
|
serverManifest = c.get("serverManifest") || {};
|
|
19
20
|
locals = c.get("locals");
|
|
20
21
|
metrics = c.get("metrics");
|
|
22
|
+
loaderContext = getLoaderCtx(c);
|
|
21
23
|
request = c.req.raw;
|
|
22
24
|
nodeReq = (_c_env_node = c.env.node) === null || _c_env_node === void 0 ? void 0 : _c_env_node.req;
|
|
23
25
|
return [
|
|
@@ -29,6 +31,7 @@ function createRenderHandler(render) {
|
|
|
29
31
|
templates,
|
|
30
32
|
metrics,
|
|
31
33
|
serverManifest,
|
|
34
|
+
loaderContext,
|
|
32
35
|
locals
|
|
33
36
|
})
|
|
34
37
|
];
|
|
@@ -114,7 +117,7 @@ function bindRenderHandler(server, options) {
|
|
|
114
117
|
}
|
|
115
118
|
function _bindRenderHandler() {
|
|
116
119
|
_bindRenderHandler = _async_to_generator(function(server, options) {
|
|
117
|
-
var routes, pwd, disableCustomHook, runner, customServer, cacheModuleName, ssrCache, pageRoutes, render, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, route, originUrlPath, entryName, urlPath, customServerHookMiddleware, customServerMiddleware;
|
|
120
|
+
var routes, pwd, disableCustomHook, runner, customServer, cacheModuleName, ssrCache, pageRoutes, render, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, route, originUrlPath, entryName, urlPath, customServerHookMiddleware, customServerMiddleware, _server, err;
|
|
118
121
|
return _ts_generator(this, function(_state) {
|
|
119
122
|
switch (_state.label) {
|
|
120
123
|
case 0:
|
|
@@ -123,7 +126,7 @@ function _bindRenderHandler() {
|
|
|
123
126
|
if (!(routes && routes.length > 0))
|
|
124
127
|
return [
|
|
125
128
|
3,
|
|
126
|
-
|
|
129
|
+
12
|
|
127
130
|
];
|
|
128
131
|
customServer = new CustomServer(runner, server, pwd);
|
|
129
132
|
if (!(getRuntimeEnv() === "node"))
|
|
@@ -156,34 +159,79 @@ function _bindRenderHandler() {
|
|
|
156
159
|
case 4:
|
|
157
160
|
render = _state.sent();
|
|
158
161
|
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
162
|
+
_state.label = 5;
|
|
163
|
+
case 5:
|
|
164
|
+
_state.trys.push([
|
|
165
|
+
5,
|
|
166
|
+
10,
|
|
167
|
+
11,
|
|
168
|
+
12
|
|
169
|
+
]);
|
|
170
|
+
_iterator = pageRoutes[Symbol.iterator]();
|
|
171
|
+
_state.label = 6;
|
|
172
|
+
case 6:
|
|
173
|
+
if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done))
|
|
174
|
+
return [
|
|
175
|
+
3,
|
|
176
|
+
9
|
|
177
|
+
];
|
|
178
|
+
route = _step.value;
|
|
179
|
+
originUrlPath = route.urlPath, entryName = route.entryName;
|
|
180
|
+
urlPath = originUrlPath.endsWith("/") ? "".concat(originUrlPath, "*") : "".concat(originUrlPath, "/*");
|
|
181
|
+
customServerHookMiddleware = customServer.getHookMiddleware(entryName || "main", routes);
|
|
182
|
+
server.use(urlPath, initReporter(entryName));
|
|
183
|
+
!disableCustomHook && server.use(urlPath, customServerHookMiddleware);
|
|
184
|
+
return [
|
|
185
|
+
4,
|
|
186
|
+
customServer.getServerMiddleware()
|
|
187
|
+
];
|
|
188
|
+
case 7:
|
|
189
|
+
customServerMiddleware = _state.sent();
|
|
190
|
+
if (customServerMiddleware) {
|
|
191
|
+
if (Array.isArray(customServerMiddleware)) {
|
|
192
|
+
;
|
|
193
|
+
(_server = server).use.apply(_server, [
|
|
194
|
+
urlPath
|
|
195
|
+
].concat(_to_consumable_array(customServerMiddleware)));
|
|
196
|
+
} else {
|
|
168
197
|
server.use(urlPath, customServerMiddleware);
|
|
169
|
-
render && server.all(urlPath, createRenderHandler(render));
|
|
170
198
|
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
|
|
199
|
+
}
|
|
200
|
+
render && server.all(urlPath, createRenderHandler(render));
|
|
201
|
+
_state.label = 8;
|
|
202
|
+
case 8:
|
|
203
|
+
_iteratorNormalCompletion = true;
|
|
204
|
+
return [
|
|
205
|
+
3,
|
|
206
|
+
6
|
|
207
|
+
];
|
|
208
|
+
case 9:
|
|
209
|
+
return [
|
|
210
|
+
3,
|
|
211
|
+
12
|
|
212
|
+
];
|
|
213
|
+
case 10:
|
|
214
|
+
err = _state.sent();
|
|
215
|
+
_didIteratorError = true;
|
|
216
|
+
_iteratorError = err;
|
|
217
|
+
return [
|
|
218
|
+
3,
|
|
219
|
+
12
|
|
220
|
+
];
|
|
221
|
+
case 11:
|
|
222
|
+
try {
|
|
223
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
224
|
+
_iterator.return();
|
|
225
|
+
}
|
|
174
226
|
} finally {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
_iterator.return();
|
|
178
|
-
}
|
|
179
|
-
} finally {
|
|
180
|
-
if (_didIteratorError) {
|
|
181
|
-
throw _iteratorError;
|
|
182
|
-
}
|
|
227
|
+
if (_didIteratorError) {
|
|
228
|
+
throw _iteratorError;
|
|
183
229
|
}
|
|
184
230
|
}
|
|
185
|
-
|
|
186
|
-
|
|
231
|
+
return [
|
|
232
|
+
7
|
|
233
|
+
];
|
|
234
|
+
case 12:
|
|
187
235
|
return [
|
|
188
236
|
2
|
|
189
237
|
];
|
|
@@ -3,8 +3,8 @@ import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
|
|
|
3
3
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
4
4
|
import { cutNameByHyphen } from "@modern-js/utils/universal";
|
|
5
5
|
import { TrieRouter } from "hono/router/trie-router";
|
|
6
|
+
import { parseQuery, getPathname, createErrorHtml, sortRoutes, transformResponse, onError as onErrorFn, ErrorDigest } from "../../utils";
|
|
6
7
|
import { REPLACE_REG } from "../../../base/constants";
|
|
7
|
-
import { createErrorHtml, sortRoutes, parseQuery, transformResponse, getPathname, onError as onErrorFn, ErrorDigest } from "../../utils";
|
|
8
8
|
import { dataHandler } from "./dataHandler";
|
|
9
9
|
import { ssrRender } from "./ssrRender";
|
|
10
10
|
function getRouter(routes) {
|
|
@@ -53,11 +53,11 @@ function _createRender() {
|
|
|
53
53
|
2,
|
|
54
54
|
function() {
|
|
55
55
|
var _ref = _async_to_generator(function(req, param2) {
|
|
56
|
-
var logger, nodeReq, reporter, templates, serverManifest, locals, metrics, _matchRoute, routeInfo, params, onFallback, html, renderMode, onError, renderOptions, response;
|
|
56
|
+
var logger, nodeReq, reporter, templates, serverManifest, locals, metrics, loaderContext, _matchRoute, routeInfo, params, onFallback, html, renderMode, onError, renderOptions, response;
|
|
57
57
|
return _ts_generator(this, function(_state2) {
|
|
58
58
|
switch (_state2.label) {
|
|
59
59
|
case 0:
|
|
60
|
-
logger = param2.logger, nodeReq = param2.nodeReq, reporter = param2.reporter, templates = param2.templates, serverManifest = param2.serverManifest, locals = param2.locals, metrics = param2.metrics;
|
|
60
|
+
logger = param2.logger, nodeReq = param2.nodeReq, reporter = param2.reporter, templates = param2.templates, serverManifest = param2.serverManifest, locals = param2.locals, metrics = param2.metrics, loaderContext = param2.loaderContext;
|
|
61
61
|
_matchRoute = _sliced_to_array(matchRoute(router, req), 2), routeInfo = _matchRoute[0], params = _matchRoute[1];
|
|
62
62
|
onFallback = function() {
|
|
63
63
|
var _ref2 = _async_to_generator(function(reason, error) {
|
|
@@ -141,7 +141,8 @@ function _createRender() {
|
|
|
141
141
|
params,
|
|
142
142
|
locals,
|
|
143
143
|
serverManifest,
|
|
144
|
-
metrics
|
|
144
|
+
metrics,
|
|
145
|
+
loaderContext: loaderContext || /* @__PURE__ */ new Map()
|
|
145
146
|
};
|
|
146
147
|
switch (renderMode) {
|
|
147
148
|
case "data":
|
|
@@ -6,8 +6,8 @@ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
|
6
6
|
import { Readable } from "stream";
|
|
7
7
|
import { SERVER_DIR, requireExistModule } from "@modern-js/utils";
|
|
8
8
|
import { createMemoryStorage } from "@modern-js/runtime-utils/storer";
|
|
9
|
-
import { createReadableStreamFromReadable } from "../../adapters/node/polyfills/stream";
|
|
10
9
|
import { createTransformStream, getPathname } from "../../utils";
|
|
10
|
+
import { createReadableStreamFromReadable } from "../../adapters/node/polyfills/stream";
|
|
11
11
|
var CacheManager = /* @__PURE__ */ function() {
|
|
12
12
|
"use strict";
|
|
13
13
|
function CacheManager2(container) {
|
|
@@ -24,11 +24,11 @@ function ssrRender(request, _) {
|
|
|
24
24
|
}
|
|
25
25
|
function _ssrRender() {
|
|
26
26
|
_ssrRender = _async_to_generator(function(request, param) {
|
|
27
|
-
var routeInfo, html, staticGenerate, nonce, metaName, reporter, logger, nodeReq, serverManifest, locals, params, metrics, _serverManifest_renderBundles, entryName, loadableStats, routeManifest, host, isSpider, responseProxy, query, headers, key, ssrContext, renderBundle, runtimeEnv, ssrResult, cacheStatus, render, cacheModuleName, ssrCache, incomingMessage, cacheControl, _ref, data, status, redirection, headers1, Readable, streamModule, createReadableStreamFromReadable, _tmp, data1;
|
|
27
|
+
var routeInfo, html, staticGenerate, nonce, metaName, reporter, logger, nodeReq, serverManifest, locals, params, metrics, loaderContext, _serverManifest_renderBundles, entryName, loadableStats, routeManifest, host, isSpider, responseProxy, query, headers, key, ssrContext, renderBundle, runtimeEnv, ssrResult, cacheStatus, render, cacheModuleName, ssrCache, incomingMessage, cacheControl, _ref, data, status, redirection, headers1, Readable, streamModule, createReadableStreamFromReadable, _tmp, data1;
|
|
28
28
|
return _ts_generator(this, function(_state) {
|
|
29
29
|
switch (_state.label) {
|
|
30
30
|
case 0:
|
|
31
|
-
routeInfo = param.routeInfo, html = param.html, staticGenerate = param.staticGenerate, nonce = param.nonce, metaName = param.metaName, reporter = param.reporter, logger = param.logger, nodeReq = param.nodeReq, serverManifest = param.serverManifest, locals = param.locals, params = param.params, metrics = param.metrics;
|
|
31
|
+
routeInfo = param.routeInfo, html = param.html, staticGenerate = param.staticGenerate, nonce = param.nonce, metaName = param.metaName, reporter = param.reporter, logger = param.logger, nodeReq = param.nodeReq, serverManifest = param.serverManifest, locals = param.locals, params = param.params, metrics = param.metrics, loaderContext = param.loaderContext;
|
|
32
32
|
entryName = routeInfo.entryName;
|
|
33
33
|
loadableStats = serverManifest.loadableStats || {};
|
|
34
34
|
routeManifest = serverManifest.routeManifest || {};
|
|
@@ -66,6 +66,7 @@ function _ssrRender() {
|
|
|
66
66
|
redirection: {},
|
|
67
67
|
template: html,
|
|
68
68
|
loadableStats,
|
|
69
|
+
loaderContext,
|
|
69
70
|
routeManifest,
|
|
70
71
|
entryName,
|
|
71
72
|
staticGenerate,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
|
|
2
|
-
function parseQuery(
|
|
3
|
-
var url = request.url;
|
|
4
|
-
var q = url.split("?")[1];
|
|
2
|
+
function parseQuery(req) {
|
|
5
3
|
var query = {};
|
|
4
|
+
var url = req.url;
|
|
5
|
+
var q = url.split("?")[1];
|
|
6
6
|
if (q) {
|
|
7
|
-
q
|
|
8
|
-
|
|
9
|
-
query[
|
|
7
|
+
var search = new URLSearchParams(q);
|
|
8
|
+
search.forEach(function(v, k) {
|
|
9
|
+
query[k] = v;
|
|
10
10
|
});
|
|
11
11
|
}
|
|
12
12
|
return query;
|
|
@@ -31,9 +31,21 @@ function getHost(request) {
|
|
|
31
31
|
host = (host === null || host === void 0 ? void 0 : host.split(/\s*,\s*/, 1)[0]) || "undefined";
|
|
32
32
|
return host;
|
|
33
33
|
}
|
|
34
|
+
function parseCookie(req) {
|
|
35
|
+
var _cookie = req.headers.get("Cookie");
|
|
36
|
+
var cookie = {};
|
|
37
|
+
_cookie === null || _cookie === void 0 ? void 0 : _cookie.trim().split(";").forEach(function(item) {
|
|
38
|
+
var _item_trim_split = _sliced_to_array(item.trim().split("="), 2), k = _item_trim_split[0], v = _item_trim_split[1];
|
|
39
|
+
if (k) {
|
|
40
|
+
cookie[k] = v;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
return cookie;
|
|
44
|
+
}
|
|
34
45
|
export {
|
|
35
46
|
getHost,
|
|
36
47
|
getPathname,
|
|
48
|
+
parseCookie,
|
|
37
49
|
parseHeaders,
|
|
38
50
|
parseQuery
|
|
39
51
|
};
|
|
@@ -2,7 +2,7 @@ import { ServerResponse } from "node:http";
|
|
|
2
2
|
import { createReadableStreamFromReadable, writeReadableStreamToWritable } from "./polyfills/stream";
|
|
3
3
|
import { installGlobals } from "./polyfills/install";
|
|
4
4
|
installGlobals();
|
|
5
|
-
const createWebRequest = (req, res) => {
|
|
5
|
+
const createWebRequest = (req, res, body) => {
|
|
6
6
|
var _req_url;
|
|
7
7
|
const headerRecord = [];
|
|
8
8
|
const len = req.rawHeaders.length;
|
|
@@ -20,8 +20,8 @@ const createWebRequest = (req, res) => {
|
|
|
20
20
|
signal: controller.signal
|
|
21
21
|
};
|
|
22
22
|
res.on("close", () => controller.abort());
|
|
23
|
-
if (!(method === "GET" || method === "HEAD") && ((_req_url = req.url) === null || _req_url === void 0 ? void 0 : _req_url.includes("__loader"))) {
|
|
24
|
-
init.body = createReadableStreamFromReadable(req);
|
|
23
|
+
if (body || !(method === "GET" || method === "HEAD") && ((_req_url = req.url) === null || _req_url === void 0 ? void 0 : _req_url.includes("__loader"))) {
|
|
24
|
+
init.body = body !== null && body !== void 0 ? body : createReadableStreamFromReadable(req);
|
|
25
25
|
init.duplex = "half";
|
|
26
26
|
}
|
|
27
27
|
const url = `http://${req.headers.host}${req.url}`;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createErrorHtml, onError, ErrorDigest } from "./utils";
|
|
2
2
|
import { AGGRED_DIR } from "./constants";
|
|
3
|
-
import { favionFallbackMiddleware, injectReporter, injectLogger, getRenderHandler, bindRenderHandler, logHandler, processedBy } from "./middlewares";
|
|
3
|
+
import { favionFallbackMiddleware, injectReporter, injectLogger, getRenderHandler, bindRenderHandler, logHandler, processedBy, getLoaderCtx } from "./middlewares";
|
|
4
4
|
import { createServerBase } from "./serverBase";
|
|
5
5
|
export {
|
|
6
6
|
AGGRED_DIR,
|
|
@@ -9,6 +9,7 @@ export {
|
|
|
9
9
|
createErrorHtml,
|
|
10
10
|
createServerBase,
|
|
11
11
|
favionFallbackMiddleware,
|
|
12
|
+
getLoaderCtx,
|
|
12
13
|
getRenderHandler,
|
|
13
14
|
injectLogger,
|
|
14
15
|
injectReporter,
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { time } from "@modern-js/runtime-utils/time";
|
|
2
2
|
import { transformResponse } from "../../utils";
|
|
3
3
|
import { ServerReportTimings } from "../../constants";
|
|
4
|
+
import { getLoaderCtx } from "./loader";
|
|
4
5
|
import { getAfterMatchCtx, getAfterRenderCtx, createCustomMiddlewaresCtx, createAfterStreamingRenderContext } from "./context";
|
|
5
6
|
import { createBaseHookContext } from "./base";
|
|
7
|
+
import { getLoaderCtx as getLoaderCtx2 } from "./loader";
|
|
6
8
|
const noop = () => {
|
|
7
9
|
};
|
|
8
10
|
const isHtmlResponse = (response) => {
|
|
@@ -70,13 +72,16 @@ class CustomServer {
|
|
|
70
72
|
}
|
|
71
73
|
};
|
|
72
74
|
}
|
|
73
|
-
getServerMiddleware() {
|
|
75
|
+
async getServerMiddleware() {
|
|
76
|
+
const serverMiddleware = await this.serverMiddlewarePromise;
|
|
77
|
+
if (!serverMiddleware) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (Array.isArray(serverMiddleware)) {
|
|
81
|
+
return getUnstableMiddlewares(serverMiddleware);
|
|
82
|
+
}
|
|
74
83
|
return async (c, next) => {
|
|
75
84
|
var _c_env;
|
|
76
|
-
const serverMiddleware = await this.serverMiddlewarePromise;
|
|
77
|
-
if (!serverMiddleware) {
|
|
78
|
-
return next();
|
|
79
|
-
}
|
|
80
85
|
const reporter = c.get("reporter");
|
|
81
86
|
const locals = {};
|
|
82
87
|
const resArgs = {
|
|
@@ -109,7 +114,7 @@ class CustomServer {
|
|
|
109
114
|
middleware: webExtension
|
|
110
115
|
}
|
|
111
116
|
}, {
|
|
112
|
-
onLast: () =>
|
|
117
|
+
onLast: () => []
|
|
113
118
|
});
|
|
114
119
|
}
|
|
115
120
|
}
|
|
@@ -121,6 +126,40 @@ function isRedirect(headers, code) {
|
|
|
121
126
|
308
|
|
122
127
|
].includes(code || 0) || headers.get("Location");
|
|
123
128
|
}
|
|
129
|
+
function getUnstableMiddlewares(serverMiddleware) {
|
|
130
|
+
return serverMiddleware.map((middleware) => {
|
|
131
|
+
return async (c, next) => {
|
|
132
|
+
const context = createMiddlewareContextFromHono(c);
|
|
133
|
+
return middleware(context, next);
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
function createMiddlewareContextFromHono(c) {
|
|
138
|
+
const loaderContext = getLoaderCtx(c);
|
|
139
|
+
return {
|
|
140
|
+
get request() {
|
|
141
|
+
return c.req.raw;
|
|
142
|
+
},
|
|
143
|
+
get response() {
|
|
144
|
+
return c.res;
|
|
145
|
+
},
|
|
146
|
+
set response(newRes) {
|
|
147
|
+
c.res = newRes;
|
|
148
|
+
},
|
|
149
|
+
get(key) {
|
|
150
|
+
return loaderContext.get(key);
|
|
151
|
+
},
|
|
152
|
+
set(key, value) {
|
|
153
|
+
return loaderContext.set(key, value);
|
|
154
|
+
},
|
|
155
|
+
status: c.status.bind(c),
|
|
156
|
+
header: c.header.bind(c),
|
|
157
|
+
body: c.body.bind(c),
|
|
158
|
+
html: c.html.bind(c),
|
|
159
|
+
redirect: c.redirect.bind(c)
|
|
160
|
+
};
|
|
161
|
+
}
|
|
124
162
|
export {
|
|
125
|
-
CustomServer
|
|
163
|
+
CustomServer,
|
|
164
|
+
getLoaderCtx2 as getLoaderCtx
|
|
126
165
|
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
function getLoaderCtx(c) {
|
|
2
|
+
const loaderContext = c.get("loaderContext");
|
|
3
|
+
if (loaderContext) {
|
|
4
|
+
return loaderContext;
|
|
5
|
+
} else {
|
|
6
|
+
const loaderContext2 = /* @__PURE__ */ new Map();
|
|
7
|
+
c.set("loaderContext", loaderContext2);
|
|
8
|
+
return loaderContext2;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
getLoaderCtx
|
|
13
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { checkIsProd, sortRoutes, getRuntimeEnv } from "../../utils";
|
|
2
2
|
import { initReporter } from "../monitor";
|
|
3
|
-
import { CustomServer } from "../customServer";
|
|
3
|
+
import { CustomServer, getLoaderCtx } from "../customServer";
|
|
4
4
|
import { createRender } from "./render";
|
|
5
5
|
function createRenderHandler(render) {
|
|
6
6
|
return async (c, _) => {
|
|
@@ -11,6 +11,7 @@ function createRenderHandler(render) {
|
|
|
11
11
|
const serverManifest = c.get("serverManifest") || {};
|
|
12
12
|
const locals = c.get("locals");
|
|
13
13
|
const metrics = c.get("metrics");
|
|
14
|
+
const loaderContext = getLoaderCtx(c);
|
|
14
15
|
const request = c.req.raw;
|
|
15
16
|
const nodeReq = (_c_env_node = c.env.node) === null || _c_env_node === void 0 ? void 0 : _c_env_node.req;
|
|
16
17
|
const res = await render(request, {
|
|
@@ -20,6 +21,7 @@ function createRenderHandler(render) {
|
|
|
20
21
|
templates,
|
|
21
22
|
metrics,
|
|
22
23
|
serverManifest,
|
|
24
|
+
loaderContext,
|
|
23
25
|
locals
|
|
24
26
|
});
|
|
25
27
|
const { body, status, headers } = res;
|
|
@@ -74,8 +76,14 @@ async function bindRenderHandler(server, options) {
|
|
|
74
76
|
const customServerHookMiddleware = customServer.getHookMiddleware(entryName || "main", routes);
|
|
75
77
|
server.use(urlPath, initReporter(entryName));
|
|
76
78
|
!disableCustomHook && server.use(urlPath, customServerHookMiddleware);
|
|
77
|
-
const customServerMiddleware = customServer.getServerMiddleware();
|
|
78
|
-
|
|
79
|
+
const customServerMiddleware = await customServer.getServerMiddleware();
|
|
80
|
+
if (customServerMiddleware) {
|
|
81
|
+
if (Array.isArray(customServerMiddleware)) {
|
|
82
|
+
server.use(urlPath, ...customServerMiddleware);
|
|
83
|
+
} else {
|
|
84
|
+
server.use(urlPath, customServerMiddleware);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
79
87
|
render && server.all(urlPath, createRenderHandler(render));
|
|
80
88
|
}
|
|
81
89
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { cutNameByHyphen } from "@modern-js/utils/universal";
|
|
2
2
|
import { TrieRouter } from "hono/router/trie-router";
|
|
3
|
+
import { parseQuery, getPathname, createErrorHtml, sortRoutes, transformResponse, onError as onErrorFn, ErrorDigest } from "../../utils";
|
|
3
4
|
import { REPLACE_REG } from "../../../base/constants";
|
|
4
|
-
import { createErrorHtml, sortRoutes, parseQuery, transformResponse, getPathname, onError as onErrorFn, ErrorDigest } from "../../utils";
|
|
5
5
|
import { dataHandler } from "./dataHandler";
|
|
6
6
|
import { ssrRender } from "./ssrRender";
|
|
7
7
|
function getRouter(routes) {
|
|
@@ -22,7 +22,7 @@ function matchRoute(router, request) {
|
|
|
22
22
|
}
|
|
23
23
|
async function createRender({ routes, pwd, metaName, staticGenerate, forceCSR, nonce, onFallback: onFallbackFn }) {
|
|
24
24
|
const router = getRouter(routes);
|
|
25
|
-
return async (req, { logger, nodeReq, reporter, templates, serverManifest, locals, metrics }) => {
|
|
25
|
+
return async (req, { logger, nodeReq, reporter, templates, serverManifest, locals, metrics, loaderContext }) => {
|
|
26
26
|
const [routeInfo, params] = matchRoute(router, req);
|
|
27
27
|
const onFallback = async (reason, error) => {
|
|
28
28
|
return onFallbackFn === null || onFallbackFn === void 0 ? void 0 : onFallbackFn(reason, {
|
|
@@ -67,7 +67,8 @@ async function createRender({ routes, pwd, metaName, staticGenerate, forceCSR, n
|
|
|
67
67
|
params,
|
|
68
68
|
locals,
|
|
69
69
|
serverManifest,
|
|
70
|
-
metrics
|
|
70
|
+
metrics,
|
|
71
|
+
loaderContext: loaderContext || /* @__PURE__ */ new Map()
|
|
71
72
|
};
|
|
72
73
|
switch (renderMode) {
|
|
73
74
|
case "data":
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Readable } from "stream";
|
|
2
2
|
import { SERVER_DIR, requireExistModule } from "@modern-js/utils";
|
|
3
3
|
import { createMemoryStorage } from "@modern-js/runtime-utils/storer";
|
|
4
|
-
import { createReadableStreamFromReadable } from "../../adapters/node/polyfills/stream";
|
|
5
4
|
import { createTransformStream, getPathname } from "../../utils";
|
|
5
|
+
import { createReadableStreamFromReadable } from "../../adapters/node/polyfills/stream";
|
|
6
6
|
class CacheManager {
|
|
7
7
|
async getCacheResult(req, cacheControl, render, ssrContext) {
|
|
8
8
|
const key = this.computedKey(req, cacheControl);
|
|
@@ -15,7 +15,7 @@ const defaultReporter = {
|
|
|
15
15
|
reportWarn() {
|
|
16
16
|
}
|
|
17
17
|
};
|
|
18
|
-
async function ssrRender(request, { routeInfo, html, staticGenerate, nonce, metaName, reporter, logger, nodeReq, serverManifest, locals, params, metrics }) {
|
|
18
|
+
async function ssrRender(request, { routeInfo, html, staticGenerate, nonce, metaName, reporter, logger, nodeReq, serverManifest, locals, params, metrics, loaderContext }) {
|
|
19
19
|
var _serverManifest_renderBundles;
|
|
20
20
|
const { entryName } = routeInfo;
|
|
21
21
|
const loadableStats = serverManifest.loadableStats || {};
|
|
@@ -54,6 +54,7 @@ async function ssrRender(request, { routeInfo, html, staticGenerate, nonce, meta
|
|
|
54
54
|
redirection: {},
|
|
55
55
|
template: html,
|
|
56
56
|
loadableStats,
|
|
57
|
+
loaderContext,
|
|
57
58
|
routeManifest,
|
|
58
59
|
entryName,
|
|
59
60
|
staticGenerate,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
function parseQuery(
|
|
2
|
-
const { url } = request;
|
|
3
|
-
const q = url.split("?")[1];
|
|
1
|
+
function parseQuery(req) {
|
|
4
2
|
const query = {};
|
|
3
|
+
const { url } = req;
|
|
4
|
+
const q = url.split("?")[1];
|
|
5
5
|
if (q) {
|
|
6
|
-
q
|
|
7
|
-
|
|
8
|
-
query[
|
|
6
|
+
const search = new URLSearchParams(q);
|
|
7
|
+
search.forEach((v, k) => {
|
|
8
|
+
query[k] = v;
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
return query;
|
|
@@ -30,9 +30,21 @@ function getHost(request) {
|
|
|
30
30
|
host = (host === null || host === void 0 ? void 0 : host.split(/\s*,\s*/, 1)[0]) || "undefined";
|
|
31
31
|
return host;
|
|
32
32
|
}
|
|
33
|
+
function parseCookie(req) {
|
|
34
|
+
const _cookie = req.headers.get("Cookie");
|
|
35
|
+
const cookie = {};
|
|
36
|
+
_cookie === null || _cookie === void 0 ? void 0 : _cookie.trim().split(";").forEach((item) => {
|
|
37
|
+
const [k, v] = item.trim().split("=");
|
|
38
|
+
if (k) {
|
|
39
|
+
cookie[k] = v;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
return cookie;
|
|
43
|
+
}
|
|
33
44
|
export {
|
|
34
45
|
getHost,
|
|
35
46
|
getPathname,
|
|
47
|
+
parseCookie,
|
|
36
48
|
parseHeaders,
|
|
37
49
|
parseQuery
|
|
38
50
|
};
|
|
@@ -4,7 +4,7 @@ import { Server as NodeServer } from 'node:http';
|
|
|
4
4
|
import type { Server as NodeHttpsServer } from 'node:https';
|
|
5
5
|
import { NodeRequest, NodeResponse } from '../../../core/plugin';
|
|
6
6
|
import { RequestHandler } from '../../../core/server';
|
|
7
|
-
export declare const createWebRequest: (req: NodeRequest, res: NodeResponse) => Request;
|
|
7
|
+
export declare const createWebRequest: (req: NodeRequest, res: NodeResponse, body?: BodyInit) => Request;
|
|
8
8
|
export declare const sendResponse: (response: Response, res: NodeResponse) => Promise<void>;
|
|
9
9
|
declare const getRequestListener: (handler: RequestHandler) => (req: NodeRequest, res: NodeResponse) => Promise<void>;
|
|
10
10
|
type NodeServerWrapper = (NodeServer | NodeHttpsServer) & {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { createErrorHtml, onError, ErrorDigest } from './utils';
|
|
2
2
|
export { AGGRED_DIR } from './constants';
|
|
3
|
-
export { favionFallbackMiddleware, injectReporter, injectLogger, getRenderHandler, bindRenderHandler, logHandler, processedBy, } from './middlewares';
|
|
3
|
+
export { favionFallbackMiddleware, injectReporter, injectLogger, getRenderHandler, bindRenderHandler, logHandler, processedBy, getLoaderCtx, } from './middlewares';
|
|
4
4
|
export type { BindRenderHandleOptions } from './middlewares';
|
|
5
5
|
export type { ServerBase, ServerBaseOptions } from './serverBase';
|
|
6
6
|
export { createServerBase } from './serverBase';
|
|
@@ -3,11 +3,12 @@ import { ServerBase } from '../../serverBase';
|
|
|
3
3
|
import { ServerHookRunner } from '../../../core/plugin';
|
|
4
4
|
import { Middleware, ServerEnv } from '../../../core/server';
|
|
5
5
|
import type { ServerNodeEnv } from '../../adapters/node/hono';
|
|
6
|
+
export { getLoaderCtx } from './loader';
|
|
6
7
|
export declare class CustomServer {
|
|
7
8
|
private runner;
|
|
8
9
|
private serverMiddlewarePromise;
|
|
9
10
|
private serverBase;
|
|
10
11
|
constructor(runner: ServerHookRunner, serverBase: ServerBase, pwd: string);
|
|
11
12
|
getHookMiddleware(entryName: string, routes: ServerRoute[]): Middleware<ServerEnv>;
|
|
12
|
-
getServerMiddleware(): Middleware<ServerNodeEnv & ServerEnv>;
|
|
13
|
+
getServerMiddleware(): Promise<Middleware<ServerNodeEnv & ServerEnv> | Array<Middleware<ServerNodeEnv & ServerEnv>> | undefined>;
|
|
13
14
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Context } from '../../../core/server';
|
|
2
|
+
type LoaderContext = Map<string, unknown>;
|
|
3
|
+
type Var = {
|
|
4
|
+
loaderContext: LoaderContext;
|
|
5
|
+
};
|
|
6
|
+
interface Env {
|
|
7
|
+
Variables: Var;
|
|
8
|
+
}
|
|
9
|
+
export declare function getLoaderCtx(c: Context<Env>): LoaderContext;
|
|
10
|
+
export {};
|
|
@@ -11,6 +11,7 @@ export interface SSRRenderOptions {
|
|
|
11
11
|
metaName: string;
|
|
12
12
|
logger: Logger;
|
|
13
13
|
serverManifest: ServerManifest;
|
|
14
|
+
loaderContext: Map<string, unknown>;
|
|
14
15
|
params: Params;
|
|
15
16
|
/** Produce by custom server hook */
|
|
16
17
|
locals?: Record<string, any>;
|
|
@@ -19,5 +20,5 @@ export interface SSRRenderOptions {
|
|
|
19
20
|
nodeReq?: IncomingMessage;
|
|
20
21
|
nonce?: string;
|
|
21
22
|
}
|
|
22
|
-
export declare function ssrRender(request: Request, { routeInfo, html, staticGenerate, nonce, metaName, reporter, logger, nodeReq, serverManifest, locals, params, metrics, }: SSRRenderOptions): Promise<Response>;
|
|
23
|
+
export declare function ssrRender(request: Request, { routeInfo, html, staticGenerate, nonce, metaName, reporter, logger, nodeReq, serverManifest, locals, params, metrics, loaderContext, }: SSRRenderOptions): Promise<Response>;
|
|
23
24
|
export declare function getPathnameFromNodeReq(nodeReq: IncomingMessage): string;
|