@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
|
@@ -1,28 +1,81 @@
|
|
|
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 { cutNameByHyphen } from "@modern-js/utils/universal";
|
|
5
|
+
import { TrieRouter } from "hono/router/trie-router";
|
|
4
6
|
import { REPLACE_REG } from "../../../base/constants";
|
|
5
|
-
import { createErrorHtml, sortRoutes, parseQuery, transformResponse, getPathname } from "../../utils";
|
|
7
|
+
import { createErrorHtml, sortRoutes, parseQuery, transformResponse, getPathname, onError as onErrorFn, ErrorDigest } from "../../utils";
|
|
6
8
|
import { dataHandler } from "./dataHandler";
|
|
7
9
|
import { ssrRender } from "./ssrRender";
|
|
10
|
+
function getRouter(routes) {
|
|
11
|
+
var sorted = routes.sort(sortRoutes);
|
|
12
|
+
var router = new TrieRouter();
|
|
13
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
14
|
+
try {
|
|
15
|
+
for (var _iterator = sorted[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
16
|
+
var route = _step.value;
|
|
17
|
+
var originUrlPath = route.urlPath;
|
|
18
|
+
var urlPath = originUrlPath.endsWith("/") ? "".concat(originUrlPath, "*") : "".concat(originUrlPath, "/*");
|
|
19
|
+
router.add("*", urlPath, route);
|
|
20
|
+
}
|
|
21
|
+
} catch (err) {
|
|
22
|
+
_didIteratorError = true;
|
|
23
|
+
_iteratorError = err;
|
|
24
|
+
} finally {
|
|
25
|
+
try {
|
|
26
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
27
|
+
_iterator.return();
|
|
28
|
+
}
|
|
29
|
+
} finally {
|
|
30
|
+
if (_didIteratorError) {
|
|
31
|
+
throw _iteratorError;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return router;
|
|
36
|
+
}
|
|
37
|
+
function matchRoute(router, request) {
|
|
38
|
+
var pathname = getPathname(request);
|
|
39
|
+
var matched = router.match("*", pathname);
|
|
40
|
+
var result = matched[0][0];
|
|
41
|
+
return result || [];
|
|
42
|
+
}
|
|
8
43
|
function createRender(_) {
|
|
9
44
|
return _createRender.apply(this, arguments);
|
|
10
45
|
}
|
|
11
46
|
function _createRender() {
|
|
12
47
|
_createRender = _async_to_generator(function(param) {
|
|
13
|
-
var routes, pwd, metaName, staticGenerate, forceCSR, nonce;
|
|
48
|
+
var routes, pwd, metaName, staticGenerate, forceCSR, nonce, onFallbackFn, router;
|
|
14
49
|
return _ts_generator(this, function(_state) {
|
|
15
|
-
routes = param.routes, pwd = param.pwd, metaName = param.metaName, staticGenerate = param.staticGenerate, forceCSR = param.forceCSR, nonce = param.nonce;
|
|
50
|
+
routes = param.routes, pwd = param.pwd, metaName = param.metaName, staticGenerate = param.staticGenerate, forceCSR = param.forceCSR, nonce = param.nonce, onFallbackFn = param.onFallback;
|
|
51
|
+
router = getRouter(routes);
|
|
16
52
|
return [
|
|
17
53
|
2,
|
|
18
54
|
function() {
|
|
19
55
|
var _ref = _async_to_generator(function(req, param2) {
|
|
20
|
-
var logger, nodeReq, reporter, templates, serverManifest, locals, metrics, routeInfo, html, renderMode, renderOptions, response;
|
|
56
|
+
var logger, nodeReq, reporter, templates, serverManifest, locals, metrics, _matchRoute, routeInfo, params, onFallback, html, renderMode, onError, renderOptions, response;
|
|
21
57
|
return _ts_generator(this, function(_state2) {
|
|
22
58
|
switch (_state2.label) {
|
|
23
59
|
case 0:
|
|
24
60
|
logger = param2.logger, nodeReq = param2.nodeReq, reporter = param2.reporter, templates = param2.templates, serverManifest = param2.serverManifest, locals = param2.locals, metrics = param2.metrics;
|
|
25
|
-
|
|
61
|
+
_matchRoute = _sliced_to_array(matchRoute(router, req), 2), routeInfo = _matchRoute[0], params = _matchRoute[1];
|
|
62
|
+
onFallback = function() {
|
|
63
|
+
var _ref2 = _async_to_generator(function(reason, error) {
|
|
64
|
+
return _ts_generator(this, function(_state3) {
|
|
65
|
+
return [
|
|
66
|
+
2,
|
|
67
|
+
onFallbackFn === null || onFallbackFn === void 0 ? void 0 : onFallbackFn(reason, {
|
|
68
|
+
logger,
|
|
69
|
+
reporter,
|
|
70
|
+
metrics
|
|
71
|
+
}, error)
|
|
72
|
+
];
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
return function onFallback2(reason, error) {
|
|
76
|
+
return _ref2.apply(this, arguments);
|
|
77
|
+
};
|
|
78
|
+
}();
|
|
26
79
|
if (!routeInfo) {
|
|
27
80
|
return [
|
|
28
81
|
2,
|
|
@@ -46,7 +99,34 @@ function _createRender() {
|
|
|
46
99
|
})
|
|
47
100
|
];
|
|
48
101
|
}
|
|
49
|
-
|
|
102
|
+
return [
|
|
103
|
+
4,
|
|
104
|
+
getRenderMode(req, metaName || "modern-js", routeInfo.isSSR, forceCSR, nodeReq, onFallback)
|
|
105
|
+
];
|
|
106
|
+
case 1:
|
|
107
|
+
renderMode = _state2.sent();
|
|
108
|
+
onError = function() {
|
|
109
|
+
var _ref2 = _async_to_generator(function(e) {
|
|
110
|
+
return _ts_generator(this, function(_state3) {
|
|
111
|
+
switch (_state3.label) {
|
|
112
|
+
case 0:
|
|
113
|
+
onErrorFn(logger, ErrorDigest.ERENDER, e, req);
|
|
114
|
+
return [
|
|
115
|
+
4,
|
|
116
|
+
onFallback === null || onFallback === void 0 ? void 0 : onFallback("error", e)
|
|
117
|
+
];
|
|
118
|
+
case 1:
|
|
119
|
+
_state3.sent();
|
|
120
|
+
return [
|
|
121
|
+
2
|
|
122
|
+
];
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
return function onError2(e) {
|
|
127
|
+
return _ref2.apply(this, arguments);
|
|
128
|
+
};
|
|
129
|
+
}();
|
|
50
130
|
renderOptions = {
|
|
51
131
|
pwd,
|
|
52
132
|
html,
|
|
@@ -58,6 +138,7 @@ function _createRender() {
|
|
|
58
138
|
nodeReq,
|
|
59
139
|
reporter,
|
|
60
140
|
serverRoutes: routes,
|
|
141
|
+
params,
|
|
61
142
|
locals,
|
|
62
143
|
serverManifest,
|
|
63
144
|
metrics
|
|
@@ -66,55 +147,55 @@ function _createRender() {
|
|
|
66
147
|
case "data":
|
|
67
148
|
return [
|
|
68
149
|
3,
|
|
69
|
-
|
|
150
|
+
2
|
|
70
151
|
];
|
|
71
152
|
case "ssr":
|
|
72
153
|
return [
|
|
73
154
|
3,
|
|
74
|
-
|
|
155
|
+
6
|
|
75
156
|
];
|
|
76
157
|
case "csr":
|
|
77
158
|
return [
|
|
78
159
|
3,
|
|
79
|
-
|
|
160
|
+
6
|
|
80
161
|
];
|
|
81
162
|
}
|
|
82
163
|
return [
|
|
83
164
|
3,
|
|
84
|
-
|
|
165
|
+
7
|
|
85
166
|
];
|
|
86
|
-
case
|
|
167
|
+
case 2:
|
|
87
168
|
return [
|
|
88
169
|
4,
|
|
89
170
|
dataHandler(req, renderOptions)
|
|
90
171
|
];
|
|
91
|
-
case
|
|
172
|
+
case 3:
|
|
92
173
|
response = _state2.sent();
|
|
93
174
|
if (!!response)
|
|
94
175
|
return [
|
|
95
176
|
3,
|
|
96
|
-
|
|
177
|
+
5
|
|
97
178
|
];
|
|
98
179
|
return [
|
|
99
180
|
4,
|
|
100
|
-
renderHandler(req, renderOptions, "ssr")
|
|
181
|
+
renderHandler(req, renderOptions, "ssr", onError)
|
|
101
182
|
];
|
|
102
|
-
case 3:
|
|
103
|
-
response = _state2.sent();
|
|
104
|
-
_state2.label = 4;
|
|
105
183
|
case 4:
|
|
184
|
+
response = _state2.sent();
|
|
185
|
+
_state2.label = 5;
|
|
186
|
+
case 5:
|
|
106
187
|
return [
|
|
107
188
|
2,
|
|
108
189
|
response
|
|
109
190
|
];
|
|
110
|
-
case
|
|
191
|
+
case 6:
|
|
111
192
|
return [
|
|
112
193
|
2,
|
|
113
|
-
renderHandler(req, renderOptions, renderMode)
|
|
194
|
+
renderHandler(req, renderOptions, renderMode, onError)
|
|
114
195
|
];
|
|
115
|
-
case 6:
|
|
116
|
-
throw new Error("Unknown render mode: ".concat(renderMode));
|
|
117
196
|
case 7:
|
|
197
|
+
throw new Error("Unknown render mode: ".concat(renderMode));
|
|
198
|
+
case 8:
|
|
118
199
|
return [
|
|
119
200
|
2
|
|
120
201
|
];
|
|
@@ -130,77 +211,157 @@ function _createRender() {
|
|
|
130
211
|
});
|
|
131
212
|
return _createRender.apply(this, arguments);
|
|
132
213
|
}
|
|
133
|
-
function renderHandler(request, options, mode) {
|
|
214
|
+
function renderHandler(request, options, mode, onError) {
|
|
134
215
|
return _renderHandler.apply(this, arguments);
|
|
135
216
|
}
|
|
136
217
|
function _renderHandler() {
|
|
137
|
-
_renderHandler = _async_to_generator(function(request, options, mode) {
|
|
138
|
-
var serverData, response;
|
|
218
|
+
_renderHandler = _async_to_generator(function(request, options, mode, onError) {
|
|
219
|
+
var serverData, response, e, newRes, routeInfo;
|
|
220
|
+
function applyExtendHeaders(r, route) {
|
|
221
|
+
Object.entries(route.responseHeaders || {}).forEach(function(param) {
|
|
222
|
+
var _param = _sliced_to_array(param, 2), k = _param[0], v = _param[1];
|
|
223
|
+
r.headers.set(k, v);
|
|
224
|
+
});
|
|
225
|
+
}
|
|
139
226
|
return _ts_generator(this, function(_state) {
|
|
140
227
|
switch (_state.label) {
|
|
141
228
|
case 0:
|
|
142
229
|
serverData = {
|
|
143
230
|
router: {
|
|
144
231
|
baseUrl: options.routeInfo.urlPath,
|
|
145
|
-
params:
|
|
232
|
+
params: options.params
|
|
146
233
|
}
|
|
147
234
|
};
|
|
235
|
+
if (!(mode === "ssr"))
|
|
236
|
+
return [
|
|
237
|
+
3,
|
|
238
|
+
6
|
|
239
|
+
];
|
|
240
|
+
_state.label = 1;
|
|
241
|
+
case 1:
|
|
242
|
+
_state.trys.push([
|
|
243
|
+
1,
|
|
244
|
+
3,
|
|
245
|
+
,
|
|
246
|
+
5
|
|
247
|
+
]);
|
|
148
248
|
return [
|
|
149
249
|
4,
|
|
150
|
-
|
|
250
|
+
ssrRender(request, options)
|
|
151
251
|
];
|
|
152
|
-
case
|
|
252
|
+
case 2:
|
|
153
253
|
response = _state.sent();
|
|
254
|
+
return [
|
|
255
|
+
3,
|
|
256
|
+
5
|
|
257
|
+
];
|
|
258
|
+
case 3:
|
|
259
|
+
e = _state.sent();
|
|
260
|
+
return [
|
|
261
|
+
4,
|
|
262
|
+
onError(e)
|
|
263
|
+
];
|
|
264
|
+
case 4:
|
|
265
|
+
_state.sent();
|
|
266
|
+
response = csrRender(options.html);
|
|
267
|
+
return [
|
|
268
|
+
3,
|
|
269
|
+
5
|
|
270
|
+
];
|
|
271
|
+
case 5:
|
|
272
|
+
return [
|
|
273
|
+
3,
|
|
274
|
+
7
|
|
275
|
+
];
|
|
276
|
+
case 6:
|
|
277
|
+
response = csrRender(options.html);
|
|
278
|
+
_state.label = 7;
|
|
279
|
+
case 7:
|
|
280
|
+
newRes = transformResponse(response, injectServerData(serverData));
|
|
281
|
+
routeInfo = options.routeInfo;
|
|
282
|
+
applyExtendHeaders(newRes, routeInfo);
|
|
154
283
|
return [
|
|
155
284
|
2,
|
|
156
|
-
|
|
285
|
+
newRes
|
|
157
286
|
];
|
|
158
287
|
}
|
|
159
288
|
});
|
|
160
289
|
});
|
|
161
290
|
return _renderHandler.apply(this, arguments);
|
|
162
291
|
}
|
|
163
|
-
function
|
|
164
|
-
|
|
165
|
-
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
166
|
-
try {
|
|
167
|
-
for (var _iterator = sorted[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
168
|
-
var route = _step.value;
|
|
169
|
-
var pathname = getPathname(req);
|
|
170
|
-
if (pathname.startsWith(route.urlPath)) {
|
|
171
|
-
return route;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
} catch (err) {
|
|
175
|
-
_didIteratorError = true;
|
|
176
|
-
_iteratorError = err;
|
|
177
|
-
} finally {
|
|
178
|
-
try {
|
|
179
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
180
|
-
_iterator.return();
|
|
181
|
-
}
|
|
182
|
-
} finally {
|
|
183
|
-
if (_didIteratorError) {
|
|
184
|
-
throw _iteratorError;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
return void 0;
|
|
292
|
+
function getRenderMode(req, framework, isSSR, forceCSR, nodeReq, onFallback) {
|
|
293
|
+
return _getRenderMode.apply(this, arguments);
|
|
189
294
|
}
|
|
190
|
-
function
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
295
|
+
function _getRenderMode() {
|
|
296
|
+
_getRenderMode = _async_to_generator(function(req, framework, isSSR, forceCSR, nodeReq, onFallback) {
|
|
297
|
+
var query, fallbackHeader;
|
|
298
|
+
return _ts_generator(this, function(_state) {
|
|
299
|
+
switch (_state.label) {
|
|
300
|
+
case 0:
|
|
301
|
+
query = parseQuery(req);
|
|
302
|
+
fallbackHeader = "x-".concat(cutNameByHyphen(framework), "-ssr-fallback");
|
|
303
|
+
if (!isSSR)
|
|
304
|
+
return [
|
|
305
|
+
3,
|
|
306
|
+
6
|
|
307
|
+
];
|
|
308
|
+
if (query.__loader) {
|
|
309
|
+
return [
|
|
310
|
+
2,
|
|
311
|
+
"data"
|
|
312
|
+
];
|
|
313
|
+
}
|
|
314
|
+
if (!(forceCSR && (query.csr || req.headers.get(fallbackHeader) || (nodeReq === null || nodeReq === void 0 ? void 0 : nodeReq.headers[fallbackHeader]))))
|
|
315
|
+
return [
|
|
316
|
+
3,
|
|
317
|
+
5
|
|
318
|
+
];
|
|
319
|
+
if (!query.csr)
|
|
320
|
+
return [
|
|
321
|
+
3,
|
|
322
|
+
2
|
|
323
|
+
];
|
|
324
|
+
return [
|
|
325
|
+
4,
|
|
326
|
+
onFallback === null || onFallback === void 0 ? void 0 : onFallback("query")
|
|
327
|
+
];
|
|
328
|
+
case 1:
|
|
329
|
+
_state.sent();
|
|
330
|
+
return [
|
|
331
|
+
3,
|
|
332
|
+
4
|
|
333
|
+
];
|
|
334
|
+
case 2:
|
|
335
|
+
return [
|
|
336
|
+
4,
|
|
337
|
+
onFallback === null || onFallback === void 0 ? void 0 : onFallback("header")
|
|
338
|
+
];
|
|
339
|
+
case 3:
|
|
340
|
+
_state.sent();
|
|
341
|
+
_state.label = 4;
|
|
342
|
+
case 4:
|
|
343
|
+
return [
|
|
344
|
+
2,
|
|
345
|
+
"csr"
|
|
346
|
+
];
|
|
347
|
+
case 5:
|
|
348
|
+
return [
|
|
349
|
+
2,
|
|
350
|
+
"ssr"
|
|
351
|
+
];
|
|
352
|
+
case 6:
|
|
353
|
+
return [
|
|
354
|
+
2,
|
|
355
|
+
"csr"
|
|
356
|
+
];
|
|
357
|
+
case 7:
|
|
358
|
+
return [
|
|
359
|
+
2
|
|
360
|
+
];
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
});
|
|
364
|
+
return _getRenderMode.apply(this, arguments);
|
|
204
365
|
}
|
|
205
366
|
function csrRender(html) {
|
|
206
367
|
return new Response(html, {
|
|
@@ -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, 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, _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, 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;
|
|
32
32
|
entryName = routeInfo.entryName;
|
|
33
33
|
loadableStats = serverManifest.loadableStats || {};
|
|
34
34
|
routeManifest = serverManifest.routeManifest || {};
|
|
@@ -47,7 +47,7 @@ function _ssrRender() {
|
|
|
47
47
|
ssrContext = {
|
|
48
48
|
request: {
|
|
49
49
|
baseUrl: routeInfo.urlPath,
|
|
50
|
-
params
|
|
50
|
+
params,
|
|
51
51
|
pathname: nodeReq ? getPathnameFromNodeReq(nodeReq) : getPathname(request),
|
|
52
52
|
host,
|
|
53
53
|
query,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
|
|
1
2
|
var ERROR_PAGE_TEXT = {
|
|
2
3
|
404: "This page could not be found.",
|
|
3
4
|
500: "Internal Server Error."
|
|
@@ -7,6 +8,19 @@ var createErrorHtml = function(status) {
|
|
|
7
8
|
var title = "".concat(status, ": ").concat(text);
|
|
8
9
|
return '<!DOCTYPE html>\n <html lang="en">\n <head>\n <meta charset="utf-8">\n <meta name="viewport" content="width=device-width">\n <title>'.concat(title, '</title>\n <style>\n html,body {\n margin: 0;\n }\n\n .page-container {\n color: #000;\n background: #fff;\n height: 100vh;\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n </style>\n </head>\n <body>\n <div class="page-container">\n <h1>').concat(status, "</h1>\n <div>").concat(text, "</div>\n </body>\n </html>\n ");
|
|
9
10
|
};
|
|
11
|
+
var ErrorDigest;
|
|
12
|
+
(function(ErrorDigest2) {
|
|
13
|
+
ErrorDigest2["ENOTF"] = "Page could not be found";
|
|
14
|
+
ErrorDigest2["EINTER"] = "Internal server error";
|
|
15
|
+
ErrorDigest2["ERENDER"] = "SSR render failed";
|
|
16
|
+
})(ErrorDigest || (ErrorDigest = {}));
|
|
17
|
+
function onError(logger, digest, error, req) {
|
|
18
|
+
var headers = req === null || req === void 0 ? void 0 : req.headers;
|
|
19
|
+
headers === null || headers === void 0 ? void 0 : headers.delete("cookie");
|
|
20
|
+
logger.error(req ? "Server Error - ".concat(digest, ", error = %s, req.url = %s, req.headers = %o") : "Server Error - ".concat(digest, ", error = %s"), _instanceof(error, Error) ? error.stack || error.message : error, req === null || req === void 0 ? void 0 : req.url, headers);
|
|
21
|
+
}
|
|
10
22
|
export {
|
|
11
|
-
|
|
23
|
+
ErrorDigest,
|
|
24
|
+
createErrorHtml,
|
|
25
|
+
onError
|
|
12
26
|
};
|
package/dist/esm/core/plugin.js
CHANGED
|
@@ -3,6 +3,7 @@ var gather = createParallelWorkflow();
|
|
|
3
3
|
var config = createWaterfall();
|
|
4
4
|
var prepare = createWaterfall();
|
|
5
5
|
var prepareWebServer = createAsyncPipeline();
|
|
6
|
+
var fallback = createParallelWorkflow();
|
|
6
7
|
var prepareApiServer = createAsyncPipeline();
|
|
7
8
|
var onApiChange = createAsyncWaterfall();
|
|
8
9
|
var repack = createWaterfall();
|
|
@@ -32,6 +33,7 @@ var serverHooks = {
|
|
|
32
33
|
gather,
|
|
33
34
|
config,
|
|
34
35
|
prepare,
|
|
36
|
+
fallback,
|
|
35
37
|
prepareWebServer,
|
|
36
38
|
prepareApiServer,
|
|
37
39
|
repack,
|
|
@@ -21,7 +21,7 @@ const bindBFFHandler = async (server, options) => {
|
|
|
21
21
|
await next();
|
|
22
22
|
};
|
|
23
23
|
} else {
|
|
24
|
-
const renderHandler = enableHandleWeb ? await getRenderHandler(options) : null;
|
|
24
|
+
const renderHandler = enableHandleWeb ? await getRenderHandler(options, server) : null;
|
|
25
25
|
handler = await server.runner.prepareApiServer({
|
|
26
26
|
pwd: options.pwd,
|
|
27
27
|
prefix,
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
import path from "path";
|
|
2
|
-
import { LOADABLE_STATS_FILE, MAIN_ENTRY_NAME, ROUTE_MANIFEST_FILE, SERVER_BUNDLE_DIRECTORY } from "@modern-js/utils";
|
|
3
|
-
|
|
2
|
+
import { LOADABLE_STATS_FILE, MAIN_ENTRY_NAME, ROUTE_MANIFEST_FILE, SERVER_BUNDLE_DIRECTORY, fs } from "@modern-js/utils";
|
|
3
|
+
const dynamicImport = (filePath) => {
|
|
4
|
+
try {
|
|
5
|
+
const module = require(filePath);
|
|
6
|
+
return Promise.resolve(module);
|
|
7
|
+
} catch (e) {
|
|
8
|
+
return Promise.reject(e);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
const loadBundle = async (filepath, logger) => {
|
|
12
|
+
if (!await fs.pathExists(filepath)) {
|
|
13
|
+
return void 0;
|
|
14
|
+
}
|
|
15
|
+
return dynamicImport(filepath).catch((e) => {
|
|
16
|
+
logger.error(`Load ${filepath} bundle failed, error = %s`, e instanceof Error ? e.stack || e.message : e);
|
|
17
|
+
return void 0;
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
async function getServerManifest(pwd, routes, logger) {
|
|
4
21
|
const loaderBundles = {};
|
|
5
22
|
const renderBundles = {};
|
|
6
|
-
await Promise.all(routes.map(async (route) => {
|
|
23
|
+
await Promise.all(routes.filter((route) => Boolean(route.bundle)).map(async (route) => {
|
|
7
24
|
const entryName = route.entryName || MAIN_ENTRY_NAME;
|
|
8
|
-
const loaderBundlePath = path.join(pwd, SERVER_BUNDLE_DIRECTORY, `${entryName}-server-loaders.js`);
|
|
9
25
|
const renderBundlePath = path.join(pwd, route.bundle || "");
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return Promise.reject(e);
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
await Promise.allSettled([
|
|
19
|
-
dynamicImport(loaderBundlePath),
|
|
20
|
-
dynamicImport(renderBundlePath)
|
|
21
|
-
]).then((results) => {
|
|
22
|
-
const { status: loaderStatus } = results[0];
|
|
23
|
-
if (loaderStatus === "fulfilled") {
|
|
24
|
-
loaderBundles[entryName] = results[0].value;
|
|
25
|
-
}
|
|
26
|
-
const { status: renderStatus } = results[1];
|
|
27
|
-
if (renderStatus === "fulfilled") {
|
|
28
|
-
renderBundles[entryName] = results[1].value;
|
|
29
|
-
}
|
|
30
|
-
});
|
|
26
|
+
const loaderBundlePath = path.join(pwd, SERVER_BUNDLE_DIRECTORY, `${entryName}-server-loaders.js`);
|
|
27
|
+
const renderBundle = await loadBundle(renderBundlePath, logger);
|
|
28
|
+
const loaderBundle = await loadBundle(loaderBundlePath, logger);
|
|
29
|
+
renderBundle && (renderBundles[entryName] = renderBundle);
|
|
30
|
+
loaderBundle && (loaderBundles[entryName] = loaderBundle);
|
|
31
31
|
}));
|
|
32
32
|
const loadableUri = path.join(pwd, LOADABLE_STATS_FILE);
|
|
33
33
|
const loadableStats = await import(loadableUri).catch((_) => ({}));
|
|
@@ -43,7 +43,8 @@ async function getServerManifest(pwd, routes) {
|
|
|
43
43
|
function injectServerManifest(pwd, routes) {
|
|
44
44
|
return async (c, next) => {
|
|
45
45
|
if (routes && !c.get("serverManifest")) {
|
|
46
|
-
const
|
|
46
|
+
const logger = c.get("logger");
|
|
47
|
+
const serverManifest = await getServerManifest(pwd, routes, logger);
|
|
47
48
|
c.set("serverManifest", serverManifest);
|
|
48
49
|
}
|
|
49
50
|
await next();
|
|
@@ -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
|
};
|
|
@@ -17,13 +17,12 @@ function createCustomMiddlewaresCtx(c, locals) {
|
|
|
17
17
|
var _c_env_node, _c_env_node1;
|
|
18
18
|
const baseContext = createBaseHookContext(c);
|
|
19
19
|
const reporter = c.get("reporter");
|
|
20
|
+
const response = baseContext.response;
|
|
21
|
+
response.locals = locals;
|
|
20
22
|
return {
|
|
21
23
|
...baseContext,
|
|
22
24
|
reporter,
|
|
23
|
-
response
|
|
24
|
-
...baseContext.response,
|
|
25
|
-
locals
|
|
26
|
-
},
|
|
25
|
+
response,
|
|
27
26
|
source: {
|
|
28
27
|
req: (_c_env_node = c.env.node) === null || _c_env_node === void 0 ? void 0 : _c_env_node.req,
|
|
29
28
|
res: (_c_env_node1 = c.env.node) === null || _c_env_node1 === void 0 ? void 0 : _c_env_node1.res
|
|
@@ -25,8 +25,15 @@ function createRenderHandler(render) {
|
|
|
25
25
|
return res;
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
-
async function getRenderHandler(options) {
|
|
28
|
+
async function getRenderHandler(options, serverBase) {
|
|
29
29
|
const { routes, pwd, config } = options;
|
|
30
|
+
const onFallback = async (reason, utils, error) => {
|
|
31
|
+
await (serverBase === null || serverBase === void 0 ? void 0 : serverBase.runner.fallback({
|
|
32
|
+
reason,
|
|
33
|
+
error,
|
|
34
|
+
...utils
|
|
35
|
+
}));
|
|
36
|
+
};
|
|
30
37
|
if (routes && routes.length > 0) {
|
|
31
38
|
var _config_server, _options_config_security;
|
|
32
39
|
const ssrConfig = (_config_server = config.server) === null || _config_server === void 0 ? void 0 : _config_server.ssr;
|
|
@@ -37,7 +44,8 @@ async function getRenderHandler(options) {
|
|
|
37
44
|
staticGenerate: options.staticGenerate,
|
|
38
45
|
metaName: options.metaName || "modern-js",
|
|
39
46
|
forceCSR,
|
|
40
|
-
nonce: (_options_config_security = options.config.security) === null || _options_config_security === void 0 ? void 0 : _options_config_security.nonce
|
|
47
|
+
nonce: (_options_config_security = options.config.security) === null || _options_config_security === void 0 ? void 0 : _options_config_security.nonce,
|
|
48
|
+
onFallback
|
|
41
49
|
});
|
|
42
50
|
return render;
|
|
43
51
|
}
|
|
@@ -54,7 +62,7 @@ async function bindRenderHandler(server, options) {
|
|
|
54
62
|
await ssrCache.loadCacheMod(checkIsProd() ? pwd : void 0);
|
|
55
63
|
}
|
|
56
64
|
const pageRoutes = routes.filter((route) => !route.isApi).sort(sortRoutes);
|
|
57
|
-
const render = await getRenderHandler(options);
|
|
65
|
+
const render = await getRenderHandler(options, server);
|
|
58
66
|
for (const route of pageRoutes) {
|
|
59
67
|
const { urlPath: originUrlPath, entryName } = route;
|
|
60
68
|
const urlPath = originUrlPath.endsWith("/") ? `${originUrlPath}*` : `${originUrlPath}/*`;
|