@modern-js/server-core 2.55.0 → 2.56.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/adapters/node/plugins/resource.js +1 -1
- package/dist/cjs/constants.js +12 -9
- package/dist/cjs/plugins/customServer/index.js +35 -8
- package/dist/cjs/plugins/index.js +7 -3
- package/dist/cjs/plugins/log.js +3 -3
- package/dist/cjs/plugins/monitors.js +183 -0
- package/dist/cjs/plugins/render/index.js +5 -3
- package/dist/cjs/plugins/render/render.js +4 -11
- package/dist/cjs/utils/error.js +3 -3
- package/dist/esm/adapters/node/plugins/resource.js +1 -1
- package/dist/esm/constants.js +10 -8
- package/dist/esm/plugins/customServer/index.js +86 -36
- package/dist/esm/plugins/index.js +4 -2
- package/dist/esm/plugins/log.js +4 -4
- package/dist/esm/plugins/monitors.js +261 -0
- package/dist/esm/plugins/render/index.js +5 -3
- package/dist/esm/plugins/render/render.js +5 -12
- package/dist/esm/utils/error.js +3 -3
- package/dist/esm-node/adapters/node/plugins/resource.js +1 -1
- package/dist/esm-node/constants.js +10 -8
- package/dist/esm-node/plugins/customServer/index.js +26 -9
- package/dist/esm-node/plugins/index.js +4 -2
- package/dist/esm-node/plugins/log.js +3 -3
- package/dist/esm-node/plugins/monitors.js +156 -0
- package/dist/esm-node/plugins/render/index.js +4 -2
- package/dist/esm-node/plugins/render/render.js +4 -11
- package/dist/esm-node/utils/error.js +3 -3
- package/dist/types/constants.d.ts +2 -1
- package/dist/types/plugins/index.d.ts +1 -1
- package/dist/types/plugins/monitors.d.ts +6 -0
- package/dist/types/types/render.d.ts +7 -4
- package/dist/types/types/requestHandler.d.ts +0 -2
- package/dist/types/types/server.d.ts +6 -2
- package/dist/types/utils/error.d.ts +2 -2
- package/package.json +7 -7
- package/dist/cjs/plugins/monitor.js +0 -87
- package/dist/cjs/plugins/render/serverTiming.js +0 -42
- package/dist/esm/plugins/monitor.js +0 -120
- package/dist/esm/plugins/render/serverTiming.js +0 -29
- package/dist/esm-node/plugins/monitor.js +0 -62
- package/dist/esm-node/plugins/render/serverTiming.js +0 -18
- package/dist/types/plugins/monitor.d.ts +0 -9
- package/dist/types/plugins/render/serverTiming.d.ts +0 -8
|
@@ -3,7 +3,7 @@ import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
|
|
|
3
3
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
4
4
|
import { time } from "@modern-js/runtime-utils/time";
|
|
5
5
|
import { transformResponse } from "../../utils";
|
|
6
|
-
import {
|
|
6
|
+
import { ServerTimings } from "../../constants";
|
|
7
7
|
import { getLoaderCtx } from "./loader";
|
|
8
8
|
import { getAfterMatchCtx, getAfterRenderCtx, createCustomMiddlewaresCtx, createAfterStreamingRenderContext } from "./context";
|
|
9
9
|
import { createBaseHookContext } from "./base";
|
|
@@ -37,14 +37,14 @@ var CustomServer = /* @__PURE__ */ function() {
|
|
|
37
37
|
var _this = this;
|
|
38
38
|
return function() {
|
|
39
39
|
var _ref = _async_to_generator(function(c, next) {
|
|
40
|
-
var routeInfo,
|
|
40
|
+
var routeInfo, monitors, baseHookCtx, afterMatchCtx, getCost, cost, _afterMatchCtx_router, url, status, current, rewriteRoute, afterStreamingRenderContext, afterRenderCtx, getCost1, cost1, newBody;
|
|
41
41
|
return _ts_generator(this, function(_state) {
|
|
42
42
|
switch (_state.label) {
|
|
43
43
|
case 0:
|
|
44
44
|
routeInfo = routes.find(function(route) {
|
|
45
45
|
return route.entryName === entryName;
|
|
46
46
|
});
|
|
47
|
-
|
|
47
|
+
monitors = c.get("monitors");
|
|
48
48
|
baseHookCtx = createBaseHookContext(c);
|
|
49
49
|
afterMatchCtx = getAfterMatchCtx(entryName, baseHookCtx);
|
|
50
50
|
getCost = time();
|
|
@@ -57,7 +57,7 @@ var CustomServer = /* @__PURE__ */ function() {
|
|
|
57
57
|
case 1:
|
|
58
58
|
_state.sent();
|
|
59
59
|
cost = getCost();
|
|
60
|
-
cost && (
|
|
60
|
+
cost && (monitors === null || monitors === void 0 ? void 0 : monitors.timing(ServerTimings.SERVER_HOOK_AFTER_MATCH, cost));
|
|
61
61
|
_afterMatchCtx_router = afterMatchCtx.router, url = _afterMatchCtx_router.url, status = _afterMatchCtx_router.status;
|
|
62
62
|
if (url) {
|
|
63
63
|
return [
|
|
@@ -137,7 +137,7 @@ var CustomServer = /* @__PURE__ */ function() {
|
|
|
137
137
|
case 5:
|
|
138
138
|
_state.sent();
|
|
139
139
|
cost1 = getCost1();
|
|
140
|
-
cost1 && (
|
|
140
|
+
cost1 && (monitors === null || monitors === void 0 ? void 0 : monitors.timing(ServerTimings.SERVER_HOOK_AFTER_RENDER, cost1));
|
|
141
141
|
if (afterRenderCtx.response.private_overrided) {
|
|
142
142
|
return [
|
|
143
143
|
2,
|
|
@@ -187,11 +187,11 @@ var CustomServer = /* @__PURE__ */ function() {
|
|
|
187
187
|
2,
|
|
188
188
|
function() {
|
|
189
189
|
var _ref = _async_to_generator(function(c, next) {
|
|
190
|
-
var _c_env_node_res, _c_env_node, _c_env,
|
|
190
|
+
var _c_env_node_res, _c_env_node, _c_env, monitors, locals, resArgs, customMiddlewareCtx, getCost, cost;
|
|
191
191
|
return _ts_generator(this, function(_state2) {
|
|
192
192
|
switch (_state2.label) {
|
|
193
193
|
case 0:
|
|
194
|
-
|
|
194
|
+
monitors = c.get("monitors");
|
|
195
195
|
locals = {};
|
|
196
196
|
resArgs = {
|
|
197
197
|
headers: new Headers()
|
|
@@ -205,7 +205,7 @@ var CustomServer = /* @__PURE__ */ function() {
|
|
|
205
205
|
case 1:
|
|
206
206
|
_state2.sent();
|
|
207
207
|
cost = getCost();
|
|
208
|
-
cost && (
|
|
208
|
+
cost && (monitors === null || monitors === void 0 ? void 0 : monitors.timing(ServerTimings.SERVER_MIDDLEWARE, cost));
|
|
209
209
|
c.set("locals", locals);
|
|
210
210
|
if (isRedirect(resArgs.headers, resArgs.status)) {
|
|
211
211
|
return [
|
|
@@ -248,11 +248,19 @@ function getServerMidFromUnstableMid(serverMiddleware) {
|
|
|
248
248
|
var _ref = _async_to_generator(function(c, next) {
|
|
249
249
|
var context;
|
|
250
250
|
return _ts_generator(this, function(_state) {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
251
|
+
switch (_state.label) {
|
|
252
|
+
case 0:
|
|
253
|
+
return [
|
|
254
|
+
4,
|
|
255
|
+
createMiddlewareContextFromHono(c)
|
|
256
|
+
];
|
|
257
|
+
case 1:
|
|
258
|
+
context = _state.sent();
|
|
259
|
+
return [
|
|
260
|
+
2,
|
|
261
|
+
middleware(context, next)
|
|
262
|
+
];
|
|
263
|
+
}
|
|
256
264
|
});
|
|
257
265
|
});
|
|
258
266
|
return function(c, next) {
|
|
@@ -270,29 +278,71 @@ function isRedirect(headers, code) {
|
|
|
270
278
|
].includes(code || 0) || headers.get("Location");
|
|
271
279
|
}
|
|
272
280
|
function createMiddlewareContextFromHono(c) {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
281
|
+
return _createMiddlewareContextFromHono.apply(this, arguments);
|
|
282
|
+
}
|
|
283
|
+
function _createMiddlewareContextFromHono() {
|
|
284
|
+
_createMiddlewareContextFromHono = _async_to_generator(function(c) {
|
|
285
|
+
var loaderContext, rawRequest, method, streamPath, createReadableStreamFromReadable, init;
|
|
286
|
+
return _ts_generator(this, function(_state) {
|
|
287
|
+
switch (_state.label) {
|
|
288
|
+
case 0:
|
|
289
|
+
loaderContext = getLoaderCtx(c);
|
|
290
|
+
rawRequest = c.req.raw;
|
|
291
|
+
method = rawRequest.method.toUpperCase();
|
|
292
|
+
if (!(![
|
|
293
|
+
"GET",
|
|
294
|
+
"HEAD"
|
|
295
|
+
].includes(method) && !rawRequest.body && c.env.node.req))
|
|
296
|
+
return [
|
|
297
|
+
3,
|
|
298
|
+
2
|
|
299
|
+
];
|
|
300
|
+
streamPath = "../../adapters/node/polyfills/stream";
|
|
301
|
+
return [
|
|
302
|
+
4,
|
|
303
|
+
import(streamPath)
|
|
304
|
+
];
|
|
305
|
+
case 1:
|
|
306
|
+
createReadableStreamFromReadable = _state.sent().createReadableStreamFromReadable;
|
|
307
|
+
init = {
|
|
308
|
+
body: createReadableStreamFromReadable(c.env.node.req),
|
|
309
|
+
headers: rawRequest.headers,
|
|
310
|
+
signal: rawRequest.signal,
|
|
311
|
+
method: rawRequest.method
|
|
312
|
+
};
|
|
313
|
+
init.duplex = "half";
|
|
314
|
+
rawRequest = new Request(rawRequest.url, init);
|
|
315
|
+
_state.label = 2;
|
|
316
|
+
case 2:
|
|
317
|
+
return [
|
|
318
|
+
2,
|
|
319
|
+
{
|
|
320
|
+
get request() {
|
|
321
|
+
return rawRequest;
|
|
322
|
+
},
|
|
323
|
+
get response() {
|
|
324
|
+
return c.res;
|
|
325
|
+
},
|
|
326
|
+
set response(newRes) {
|
|
327
|
+
c.res = newRes;
|
|
328
|
+
},
|
|
329
|
+
get: function get(key) {
|
|
330
|
+
return loaderContext.get(key);
|
|
331
|
+
},
|
|
332
|
+
set: function set(key, value) {
|
|
333
|
+
return loaderContext.set(key, value);
|
|
334
|
+
},
|
|
335
|
+
status: c.status.bind(c),
|
|
336
|
+
header: c.header.bind(c),
|
|
337
|
+
body: c.body.bind(c),
|
|
338
|
+
html: c.html.bind(c),
|
|
339
|
+
redirect: c.redirect.bind(c)
|
|
340
|
+
}
|
|
341
|
+
];
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
return _createMiddlewareContextFromHono.apply(this, arguments);
|
|
296
346
|
}
|
|
297
347
|
export {
|
|
298
348
|
CustomServer,
|
|
@@ -3,13 +3,15 @@ import { faviconPlugin } from "./favicon";
|
|
|
3
3
|
import { processedByPlugin } from "./processedBy";
|
|
4
4
|
import { getLoaderCtx } from "./customServer";
|
|
5
5
|
import { logPlugin } from "./log";
|
|
6
|
-
import {
|
|
6
|
+
import { initMonitorsPlugin, injectServerTiming, injectloggerPluigin } from "./monitors";
|
|
7
7
|
export {
|
|
8
8
|
faviconPlugin,
|
|
9
9
|
getLoaderCtx,
|
|
10
10
|
getRenderHandler,
|
|
11
|
+
initMonitorsPlugin,
|
|
12
|
+
injectServerTiming,
|
|
13
|
+
injectloggerPluigin,
|
|
11
14
|
logPlugin,
|
|
12
|
-
monitorPlugin,
|
|
13
15
|
processedByPlugin,
|
|
14
16
|
renderPlugin
|
|
15
17
|
};
|
package/dist/esm/plugins/log.js
CHANGED
|
@@ -41,13 +41,13 @@ function log(fn, prefix, method, path) {
|
|
|
41
41
|
function logHandler() {
|
|
42
42
|
return function() {
|
|
43
43
|
var _logger = _async_to_generator(function(c, next) {
|
|
44
|
-
var method,
|
|
44
|
+
var method, monitors, path, logFn, start;
|
|
45
45
|
return _ts_generator(this, function(_state) {
|
|
46
46
|
switch (_state.label) {
|
|
47
47
|
case 0:
|
|
48
48
|
method = c.req.method;
|
|
49
|
-
|
|
50
|
-
if (!!
|
|
49
|
+
monitors = c.get("monitors");
|
|
50
|
+
if (!!monitors)
|
|
51
51
|
return [
|
|
52
52
|
3,
|
|
53
53
|
2
|
|
@@ -63,7 +63,7 @@ function logHandler() {
|
|
|
63
63
|
];
|
|
64
64
|
case 2:
|
|
65
65
|
path = getPathname(c.req.raw);
|
|
66
|
-
logFn =
|
|
66
|
+
logFn = monitors.debug;
|
|
67
67
|
log(logFn, "<--", method, path);
|
|
68
68
|
start = Date.now();
|
|
69
69
|
return [
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
2
|
+
import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
|
|
3
|
+
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
4
|
+
import { time } from "@modern-js/runtime-utils/time";
|
|
5
|
+
import { SERVER_TIMING, ServerTimings } from "../constants";
|
|
6
|
+
function createMonitors() {
|
|
7
|
+
var coreMonitors = [];
|
|
8
|
+
var log = function(level, message, args) {
|
|
9
|
+
var event = {
|
|
10
|
+
type: "log",
|
|
11
|
+
payload: {
|
|
12
|
+
level,
|
|
13
|
+
message,
|
|
14
|
+
args
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
coreMonitors.forEach(function(monitor) {
|
|
18
|
+
return monitor(event);
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
var mointors = {
|
|
22
|
+
push: function push(monitor) {
|
|
23
|
+
coreMonitors.push(monitor);
|
|
24
|
+
},
|
|
25
|
+
error: function error(message) {
|
|
26
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
27
|
+
args[_key - 1] = arguments[_key];
|
|
28
|
+
}
|
|
29
|
+
log("error", message, args);
|
|
30
|
+
},
|
|
31
|
+
warn: function warn(message) {
|
|
32
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
33
|
+
args[_key - 1] = arguments[_key];
|
|
34
|
+
}
|
|
35
|
+
log("warn", message, args);
|
|
36
|
+
},
|
|
37
|
+
debug: function debug(message) {
|
|
38
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
39
|
+
args[_key - 1] = arguments[_key];
|
|
40
|
+
}
|
|
41
|
+
log("debug", message, args);
|
|
42
|
+
},
|
|
43
|
+
info: function info(message) {
|
|
44
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
45
|
+
args[_key - 1] = arguments[_key];
|
|
46
|
+
}
|
|
47
|
+
log("info", message, args);
|
|
48
|
+
},
|
|
49
|
+
timing: function timing(name, dur, desc) {
|
|
50
|
+
var event = {
|
|
51
|
+
type: "timing",
|
|
52
|
+
payload: {
|
|
53
|
+
name,
|
|
54
|
+
dur,
|
|
55
|
+
desc
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
coreMonitors.forEach(function(monitor) {
|
|
59
|
+
return monitor(event);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
return mointors;
|
|
64
|
+
}
|
|
65
|
+
var initMonitorsPlugin = function() {
|
|
66
|
+
return {
|
|
67
|
+
name: "@modern-js/init-mointor",
|
|
68
|
+
setup: function setup(api) {
|
|
69
|
+
return {
|
|
70
|
+
prepare: function prepare() {
|
|
71
|
+
var middlewares = api.useAppContext().middlewares;
|
|
72
|
+
middlewares.push({
|
|
73
|
+
name: "init-monitor",
|
|
74
|
+
handler: function() {
|
|
75
|
+
var _ref = _async_to_generator(function(c, next) {
|
|
76
|
+
var monitors;
|
|
77
|
+
return _ts_generator(this, function(_state) {
|
|
78
|
+
if (!c.get("monitors")) {
|
|
79
|
+
monitors = createMonitors();
|
|
80
|
+
c.set("monitors", monitors);
|
|
81
|
+
}
|
|
82
|
+
return [
|
|
83
|
+
2,
|
|
84
|
+
next()
|
|
85
|
+
];
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
return function(c, next) {
|
|
89
|
+
return _ref.apply(this, arguments);
|
|
90
|
+
};
|
|
91
|
+
}(),
|
|
92
|
+
order: "pre"
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
var injectloggerPluigin = function(logger) {
|
|
100
|
+
return {
|
|
101
|
+
name: "@modern-js/inject-logger",
|
|
102
|
+
setup: function setup(api) {
|
|
103
|
+
return {
|
|
104
|
+
prepare: function prepare() {
|
|
105
|
+
var middlewares = api.useAppContext().middlewares;
|
|
106
|
+
middlewares.push({
|
|
107
|
+
name: "inject-logger",
|
|
108
|
+
handler: function() {
|
|
109
|
+
var _ref = _async_to_generator(function(c, next) {
|
|
110
|
+
var pathname, loggerMonitor, monitors;
|
|
111
|
+
return _ts_generator(this, function(_state) {
|
|
112
|
+
if (!c.get("logger")) {
|
|
113
|
+
c.set("logger", logger);
|
|
114
|
+
}
|
|
115
|
+
pathname = c.req.path;
|
|
116
|
+
loggerMonitor = function(event) {
|
|
117
|
+
if (event.type === "log") {
|
|
118
|
+
var _logger;
|
|
119
|
+
var _event_payload = event.payload, level = _event_payload.level, message = _event_payload.message, args = _event_payload.args;
|
|
120
|
+
(_logger = logger)[level].apply(_logger, [
|
|
121
|
+
message
|
|
122
|
+
].concat(_to_consumable_array(args || [])));
|
|
123
|
+
}
|
|
124
|
+
if (event.type === "timing") {
|
|
125
|
+
var _event_payload1 = event.payload, name = _event_payload1.name, dur = _event_payload1.dur, desc = _event_payload1.desc;
|
|
126
|
+
if (desc) {
|
|
127
|
+
logger.debug("%s Debug - ".concat(name, ", cost: %s, req.url = %s "), desc, dur, pathname);
|
|
128
|
+
} else {
|
|
129
|
+
logger.debug("Debug - ".concat(name, ", cost: %s, req.url = %s"), dur, pathname);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
monitors = c.get("monitors");
|
|
134
|
+
monitors === null || monitors === void 0 ? void 0 : monitors.push(loggerMonitor);
|
|
135
|
+
return [
|
|
136
|
+
2,
|
|
137
|
+
next()
|
|
138
|
+
];
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
return function(c, next) {
|
|
142
|
+
return _ref.apply(this, arguments);
|
|
143
|
+
};
|
|
144
|
+
}()
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
var injectServerTiming = function() {
|
|
152
|
+
var metaName = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "modern-js";
|
|
153
|
+
return {
|
|
154
|
+
name: "@modern-js/inject-server-timing",
|
|
155
|
+
setup: function setup(api) {
|
|
156
|
+
return {
|
|
157
|
+
prepare: function prepare() {
|
|
158
|
+
var middlewares = api.useAppContext().middlewares;
|
|
159
|
+
middlewares.push({
|
|
160
|
+
name: "inject-server-timing",
|
|
161
|
+
handler: function() {
|
|
162
|
+
var _ref = _async_to_generator(function(c, next) {
|
|
163
|
+
var serverTimings, timingMonitor, monitors;
|
|
164
|
+
return _ts_generator(this, function(_state) {
|
|
165
|
+
switch (_state.label) {
|
|
166
|
+
case 0:
|
|
167
|
+
serverTimings = [];
|
|
168
|
+
timingMonitor = function(event) {
|
|
169
|
+
if (event.type === "timing") {
|
|
170
|
+
serverTimings.push(event.payload);
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
monitors = c.get("monitors");
|
|
174
|
+
monitors === null || monitors === void 0 ? void 0 : monitors.push(timingMonitor);
|
|
175
|
+
return [
|
|
176
|
+
4,
|
|
177
|
+
next()
|
|
178
|
+
];
|
|
179
|
+
case 1:
|
|
180
|
+
_state.sent();
|
|
181
|
+
serverTimings.forEach(function(serverTiming) {
|
|
182
|
+
var name = serverTiming.name, desc = serverTiming.desc, dur = serverTiming.dur;
|
|
183
|
+
var _name = "bd-".concat(metaName, "-").concat(name);
|
|
184
|
+
var value = "".concat(_name, ";").concat(desc ? 'decs="'.concat(desc, '";') : "", " dur=").concat(dur);
|
|
185
|
+
c.header(SERVER_TIMING, value, {
|
|
186
|
+
append: true
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
return [
|
|
190
|
+
2
|
|
191
|
+
];
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
return function(c, next) {
|
|
196
|
+
return _ref.apply(this, arguments);
|
|
197
|
+
};
|
|
198
|
+
}()
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
};
|
|
205
|
+
function initReporter(entryName) {
|
|
206
|
+
return function() {
|
|
207
|
+
var _ref = _async_to_generator(function(c, next) {
|
|
208
|
+
var reporter, getCost, cost;
|
|
209
|
+
return _ts_generator(this, function(_state) {
|
|
210
|
+
switch (_state.label) {
|
|
211
|
+
case 0:
|
|
212
|
+
reporter = c.get("reporter");
|
|
213
|
+
if (!!reporter)
|
|
214
|
+
return [
|
|
215
|
+
3,
|
|
216
|
+
2
|
|
217
|
+
];
|
|
218
|
+
return [
|
|
219
|
+
4,
|
|
220
|
+
next()
|
|
221
|
+
];
|
|
222
|
+
case 1:
|
|
223
|
+
_state.sent();
|
|
224
|
+
return [
|
|
225
|
+
2
|
|
226
|
+
];
|
|
227
|
+
case 2:
|
|
228
|
+
return [
|
|
229
|
+
4,
|
|
230
|
+
reporter.init({
|
|
231
|
+
entryName
|
|
232
|
+
})
|
|
233
|
+
];
|
|
234
|
+
case 3:
|
|
235
|
+
_state.sent();
|
|
236
|
+
getCost = time();
|
|
237
|
+
return [
|
|
238
|
+
4,
|
|
239
|
+
next()
|
|
240
|
+
];
|
|
241
|
+
case 4:
|
|
242
|
+
_state.sent();
|
|
243
|
+
cost = getCost();
|
|
244
|
+
reporter.reportTiming(ServerTimings.SERVER_HANDLE_REQUEST, cost);
|
|
245
|
+
return [
|
|
246
|
+
2
|
|
247
|
+
];
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
return function(c, next) {
|
|
252
|
+
return _ref.apply(this, arguments);
|
|
253
|
+
};
|
|
254
|
+
}();
|
|
255
|
+
}
|
|
256
|
+
export {
|
|
257
|
+
initMonitorsPlugin,
|
|
258
|
+
initReporter,
|
|
259
|
+
injectServerTiming,
|
|
260
|
+
injectloggerPluigin
|
|
261
|
+
};
|
|
@@ -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 { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
4
|
-
import { initReporter } from "../
|
|
4
|
+
import { initReporter } from "../monitors";
|
|
5
5
|
import { sortRoutes } from "../../utils";
|
|
6
6
|
import { getLoaderCtx, CustomServer, getServerMidFromUnstableMid } from "../customServer";
|
|
7
7
|
import { createRender } from "./render";
|
|
@@ -150,12 +150,13 @@ function getPageRoutes(routes) {
|
|
|
150
150
|
function createRenderHandler(render) {
|
|
151
151
|
return function() {
|
|
152
152
|
var _ref = _async_to_generator(function(c, _) {
|
|
153
|
-
var _c_env_node, logger, reporter, templates, serverManifest, locals, metrics, loaderContext, request, nodeReq, res, body, status, headers, headersData;
|
|
153
|
+
var _c_env_node, logger, reporter, monitors, templates, serverManifest, locals, metrics, loaderContext, request, nodeReq, res, body, status, headers, headersData;
|
|
154
154
|
return _ts_generator(this, function(_state) {
|
|
155
155
|
switch (_state.label) {
|
|
156
156
|
case 0:
|
|
157
157
|
logger = c.get("logger");
|
|
158
158
|
reporter = c.get("reporter");
|
|
159
|
+
monitors = c.get("monitors");
|
|
159
160
|
templates = c.get("templates") || {};
|
|
160
161
|
serverManifest = c.get("serverManifest") || {};
|
|
161
162
|
locals = c.get("locals");
|
|
@@ -166,8 +167,9 @@ function createRenderHandler(render) {
|
|
|
166
167
|
return [
|
|
167
168
|
4,
|
|
168
169
|
render(request, {
|
|
169
|
-
logger,
|
|
170
170
|
nodeReq,
|
|
171
|
+
monitors,
|
|
172
|
+
logger,
|
|
171
173
|
reporter,
|
|
172
174
|
templates,
|
|
173
175
|
metrics,
|
|
@@ -12,7 +12,6 @@ import { parseQuery, getPathname, createErrorHtml, sortRoutes, transformResponse
|
|
|
12
12
|
import { REPLACE_REG, X_MODERNJS_RENDER } from "../../constants";
|
|
13
13
|
import { dataHandler } from "./dataHandler";
|
|
14
14
|
import { ssrRender } from "./ssrRender";
|
|
15
|
-
import { ServerTiming } from "./serverTiming";
|
|
16
15
|
var DYNAMIC_ROUTE_REG = /\/:./;
|
|
17
16
|
function getRouter(routes) {
|
|
18
17
|
var dynamicRoutes = [];
|
|
@@ -63,7 +62,6 @@ function getHeadersWithoutCookie(headers) {
|
|
|
63
62
|
delete _headers.cookie;
|
|
64
63
|
return _headers;
|
|
65
64
|
}
|
|
66
|
-
var SERVER_TIMING = "Server-Timing";
|
|
67
65
|
function createRender(_) {
|
|
68
66
|
return _createRender.apply(this, arguments);
|
|
69
67
|
}
|
|
@@ -77,11 +75,11 @@ function _createRender() {
|
|
|
77
75
|
2,
|
|
78
76
|
function() {
|
|
79
77
|
var _ref = _async_to_generator(function(req, param2) {
|
|
80
|
-
var logger,
|
|
78
|
+
var logger, reporter, metrics, monitors, nodeReq, templates, serverManifest, locals, loaderContext, _matchRoute, routeInfo, params, onFallback, html, renderMode, pathname, headerData, onError, onTiming, onBoundError, renderOptions, response, _tmp;
|
|
81
79
|
return _ts_generator(this, function(_state2) {
|
|
82
80
|
switch (_state2.label) {
|
|
83
81
|
case 0:
|
|
84
|
-
logger = param2.logger,
|
|
82
|
+
logger = param2.logger, reporter = param2.reporter, metrics = param2.metrics, monitors = param2.monitors, nodeReq = param2.nodeReq, templates = param2.templates, serverManifest = param2.serverManifest, locals = param2.locals, loaderContext = param2.loaderContext;
|
|
85
83
|
_matchRoute = _sliced_to_array(matchRoute(router, req), 2), routeInfo = _matchRoute[0], params = _matchRoute[1];
|
|
86
84
|
onFallback = function() {
|
|
87
85
|
var _ref2 = _async_to_generator(function(reason, error) {
|
|
@@ -131,20 +129,18 @@ function _createRender() {
|
|
|
131
129
|
renderMode = _state2.sent();
|
|
132
130
|
pathname = getPathname(req);
|
|
133
131
|
headerData = parseHeaders(req);
|
|
134
|
-
serverTimingInstance = new ServerTiming(metaName || "modern");
|
|
135
132
|
onError = function(e) {
|
|
136
|
-
|
|
133
|
+
monitors === null || monitors === void 0 ? void 0 : monitors.error("SSR Error - ".concat(_instanceof(e, Error) ? e.name : e, ", error = %s, req.url = %s, req.headers = %o"), _instanceof(e, Error) ? e.stack || e.message : e, pathname, getHeadersWithoutCookie(headerData));
|
|
137
134
|
};
|
|
138
135
|
onTiming = function(name, dur) {
|
|
139
|
-
|
|
140
|
-
serverTimingInstance.addServeTiming(name, dur);
|
|
136
|
+
monitors === null || monitors === void 0 ? void 0 : monitors.timing(name, dur, "SSR");
|
|
141
137
|
};
|
|
142
138
|
onBoundError = function() {
|
|
143
139
|
var _ref2 = _async_to_generator(function(e) {
|
|
144
140
|
return _ts_generator(this, function(_state3) {
|
|
145
141
|
switch (_state3.label) {
|
|
146
142
|
case 0:
|
|
147
|
-
onErrorFn(ErrorDigest.ERENDER, e,
|
|
143
|
+
onErrorFn(ErrorDigest.ERENDER, e, monitors, req);
|
|
148
144
|
return [
|
|
149
145
|
4,
|
|
150
146
|
onFallback === null || onFallback === void 0 ? void 0 : onFallback("error", e)
|
|
@@ -240,9 +236,6 @@ function _createRender() {
|
|
|
240
236
|
case 8:
|
|
241
237
|
throw new Error("Unknown render mode: ".concat(renderMode));
|
|
242
238
|
case 9:
|
|
243
|
-
serverTimingInstance.headers.forEach(function(value) {
|
|
244
|
-
response.headers.append(SERVER_TIMING, value);
|
|
245
|
-
});
|
|
246
239
|
return [
|
|
247
240
|
2,
|
|
248
241
|
response
|
package/dist/esm/utils/error.js
CHANGED
|
@@ -15,11 +15,11 @@ var ErrorDigest;
|
|
|
15
15
|
ErrorDigest2["EINTER"] = "Internal server error";
|
|
16
16
|
ErrorDigest2["ERENDER"] = "SSR render failed";
|
|
17
17
|
})(ErrorDigest || (ErrorDigest = {}));
|
|
18
|
-
function onError(digest, error,
|
|
18
|
+
function onError(digest, error, monitors, req) {
|
|
19
19
|
var headerData = req && parseHeaders(req);
|
|
20
20
|
headerData && delete headerData.cookie;
|
|
21
|
-
if (
|
|
22
|
-
|
|
21
|
+
if (monitors) {
|
|
22
|
+
monitors.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, headerData);
|
|
23
23
|
} else if (req) {
|
|
24
24
|
console.error("Server Error - ".concat(digest, ", error = ").concat(_instanceof(error, Error) ? error.stack || error.message : error, ", req.url = ").concat(req.url, ", req.headers = ").concat(JSON.stringify(headerData)));
|
|
25
25
|
} else {
|
|
@@ -40,7 +40,7 @@ const loadBundle = async (filepath, logger) => {
|
|
|
40
40
|
return void 0;
|
|
41
41
|
}
|
|
42
42
|
return dynamicImport(filepath).catch((e) => {
|
|
43
|
-
logger.error(`Load ${filepath} bundle failed, error = %s`, e instanceof Error ? e.stack || e.message : e);
|
|
43
|
+
logger === null || logger === void 0 ? void 0 : logger.error(`Load ${filepath} bundle failed, error = %s`, e instanceof Error ? e.stack || e.message : e);
|
|
44
44
|
return void 0;
|
|
45
45
|
});
|
|
46
46
|
};
|
|
@@ -15,19 +15,21 @@ const REPLACE_REG = {
|
|
|
15
15
|
body: "</body>"
|
|
16
16
|
}
|
|
17
17
|
};
|
|
18
|
-
var
|
|
19
|
-
(function(
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
})(
|
|
18
|
+
var ServerTimings;
|
|
19
|
+
(function(ServerTimings2) {
|
|
20
|
+
ServerTimings2["SERVER_HANDLE_REQUEST"] = "server-handle-request";
|
|
21
|
+
ServerTimings2["SERVER_MIDDLEWARE"] = "server-middleware";
|
|
22
|
+
ServerTimings2["SERVER_HOOK_AFTER_RENDER"] = "server-hook-after-render";
|
|
23
|
+
ServerTimings2["SERVER_HOOK_AFTER_MATCH"] = "server-hook-after-match";
|
|
24
|
+
})(ServerTimings || (ServerTimings = {}));
|
|
25
|
+
const SERVER_TIMING = "Server-Timing";
|
|
25
26
|
const X_RENDER_CACHE = "x-render-cache";
|
|
26
27
|
const X_MODERNJS_RENDER = "x-modernjs-render";
|
|
27
28
|
export {
|
|
28
29
|
AGGRED_DIR,
|
|
29
30
|
REPLACE_REG,
|
|
30
|
-
|
|
31
|
+
SERVER_TIMING,
|
|
32
|
+
ServerTimings,
|
|
31
33
|
X_MODERNJS_RENDER,
|
|
32
34
|
X_RENDER_CACHE
|
|
33
35
|
};
|