@modern-js/server-core 2.65.1 → 2.65.2
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/plugins/customServer/context.js +0 -2
- package/dist/cjs/plugins/customServer/index.js +2 -12
- package/dist/cjs/plugins/default.js +4 -2
- package/dist/cjs/plugins/index.js +2 -2
- package/dist/cjs/plugins/monitors.js +30 -15
- package/dist/cjs/plugins/render/dataHandler.js +2 -1
- package/dist/cjs/plugins/render/index.js +4 -10
- package/dist/cjs/plugins/render/render.js +1 -0
- package/dist/cjs/plugins/render/ssrRender.js +2 -1
- package/dist/cjs/plugins/route.js +65 -0
- package/dist/esm/plugins/customServer/context.js +0 -2
- package/dist/esm/plugins/customServer/index.js +4 -29
- package/dist/esm/plugins/default.js +5 -3
- package/dist/esm/plugins/index.js +2 -2
- package/dist/esm/plugins/monitors.js +46 -22
- package/dist/esm/plugins/render/dataHandler.js +3 -2
- package/dist/esm/plugins/render/index.js +6 -12
- package/dist/esm/plugins/render/render.js +1 -0
- package/dist/esm/plugins/render/ssrRender.js +3 -2
- package/dist/esm/plugins/route.js +92 -0
- package/dist/esm-node/plugins/customServer/context.js +0 -2
- package/dist/esm-node/plugins/customServer/index.js +1 -10
- package/dist/esm-node/plugins/default.js +5 -3
- package/dist/esm-node/plugins/index.js +2 -2
- package/dist/esm-node/plugins/monitors.js +28 -13
- package/dist/esm-node/plugins/render/dataHandler.js +2 -1
- package/dist/esm-node/plugins/render/index.js +6 -12
- package/dist/esm-node/plugins/render/render.js +1 -0
- package/dist/esm-node/plugins/render/ssrRender.js +2 -1
- package/dist/esm-node/plugins/route.js +41 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/plugins/customServer/index.d.ts +0 -3
- package/dist/types/plugins/index.d.ts +1 -1
- package/dist/types/plugins/monitors.d.ts +2 -2
- package/dist/types/plugins/render/dataHandler.d.ts +1 -1
- package/dist/types/plugins/render/ssrRender.d.ts +3 -2
- package/dist/types/plugins/route.d.ts +2 -0
- package/dist/types/types/render.d.ts +1 -1
- package/dist/types/types/requestHandler.d.ts +2 -1
- package/dist/types/types/server.d.ts +5 -4
- package/package.json +7 -7
|
@@ -42,12 +42,10 @@ async function getAfterRenderCtx(c, baseHookCtx, route) {
|
|
|
42
42
|
function createCustomMiddlewaresCtx(c, locals, resArgs) {
|
|
43
43
|
var _c_env_node, _c_env_node1;
|
|
44
44
|
const baseContext = (0, import_base.createBaseHookContext)(c, resArgs);
|
|
45
|
-
const reporter = c.get("reporter");
|
|
46
45
|
const response = baseContext.response;
|
|
47
46
|
response.locals = locals;
|
|
48
47
|
return {
|
|
49
48
|
...baseContext,
|
|
50
|
-
reporter,
|
|
51
49
|
response,
|
|
52
50
|
source: {
|
|
53
51
|
req: (_c_env_node = c.env.node) === null || _c_env_node === void 0 ? void 0 : _c_env_node.req,
|
|
@@ -19,8 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
var customServer_exports = {};
|
|
20
20
|
__export(customServer_exports, {
|
|
21
21
|
CustomServer: () => CustomServer,
|
|
22
|
-
getServerMidFromUnstableMid: () => getServerMidFromUnstableMid
|
|
23
|
-
injectRoute: () => injectRoute
|
|
22
|
+
getServerMidFromUnstableMid: () => getServerMidFromUnstableMid
|
|
24
23
|
});
|
|
25
24
|
module.exports = __toCommonJS(customServer_exports);
|
|
26
25
|
var import_time = require("@modern-js/runtime-utils/time");
|
|
@@ -213,17 +212,8 @@ async function createMiddlewareContextFromHono(c) {
|
|
|
213
212
|
redirect: c.redirect.bind(c)
|
|
214
213
|
};
|
|
215
214
|
}
|
|
216
|
-
function injectRoute(route) {
|
|
217
|
-
return async (c, next) => {
|
|
218
|
-
if (route && !c.get("route")) {
|
|
219
|
-
c.set("route", route);
|
|
220
|
-
}
|
|
221
|
-
await next();
|
|
222
|
-
};
|
|
223
|
-
}
|
|
224
215
|
// Annotate the CommonJS export names for ESM import in node:
|
|
225
216
|
0 && (module.exports = {
|
|
226
217
|
CustomServer,
|
|
227
|
-
getServerMidFromUnstableMid
|
|
228
|
-
injectRoute
|
|
218
|
+
getServerMidFromUnstableMid
|
|
229
219
|
});
|
|
@@ -25,6 +25,7 @@ var import_log = require("./log");
|
|
|
25
25
|
var import_monitors = require("./monitors");
|
|
26
26
|
var import_processedBy = require("./processedBy");
|
|
27
27
|
var import_render = require("./render");
|
|
28
|
+
var import_route = require("./route");
|
|
28
29
|
function createSilenceLogger() {
|
|
29
30
|
return new Proxy({}, {
|
|
30
31
|
get: () => {
|
|
@@ -38,9 +39,10 @@ function createDefaultPlugins(options = {}) {
|
|
|
38
39
|
(0, import_log.logPlugin)(),
|
|
39
40
|
(0, import_monitors.initMonitorsPlugin)(),
|
|
40
41
|
(0, import_render.injectRenderHandlerPlugin)(options),
|
|
41
|
-
(0, import_monitors.
|
|
42
|
+
(0, import_monitors.injectloggerPlugin)(options.logger ? options.logger : createSilenceLogger()),
|
|
42
43
|
(0, import_monitors.injectServerTiming)(),
|
|
43
|
-
(0, import_processedBy.processedByPlugin)()
|
|
44
|
+
(0, import_processedBy.processedByPlugin)(),
|
|
45
|
+
(0, import_route.injectRoutePlugin)()
|
|
44
46
|
];
|
|
45
47
|
return plugins;
|
|
46
48
|
}
|
|
@@ -23,7 +23,7 @@ __export(plugins_exports, {
|
|
|
23
23
|
getRenderHandler: () => import_render.getRenderHandler,
|
|
24
24
|
injectRenderHandlerPlugin: () => import_render.injectRenderHandlerPlugin,
|
|
25
25
|
injectServerTiming: () => import_monitors.injectServerTiming,
|
|
26
|
-
|
|
26
|
+
injectloggerPlugin: () => import_monitors.injectloggerPlugin,
|
|
27
27
|
logPlugin: () => import_log.logPlugin,
|
|
28
28
|
processedByPlugin: () => import_processedBy.processedByPlugin,
|
|
29
29
|
renderPlugin: () => import_render.renderPlugin
|
|
@@ -42,7 +42,7 @@ var import_default = require("./default");
|
|
|
42
42
|
getRenderHandler,
|
|
43
43
|
injectRenderHandlerPlugin,
|
|
44
44
|
injectServerTiming,
|
|
45
|
-
|
|
45
|
+
injectloggerPlugin,
|
|
46
46
|
logPlugin,
|
|
47
47
|
processedByPlugin,
|
|
48
48
|
renderPlugin
|
|
@@ -19,9 +19,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
var monitors_exports = {};
|
|
20
20
|
__export(monitors_exports, {
|
|
21
21
|
initMonitorsPlugin: () => initMonitorsPlugin,
|
|
22
|
-
initReporter: () => initReporter,
|
|
23
22
|
injectServerTiming: () => injectServerTiming,
|
|
24
|
-
|
|
23
|
+
injectloggerPlugin: () => injectloggerPlugin,
|
|
24
|
+
requestLatencyMiddleware: () => requestLatencyMiddleware
|
|
25
25
|
});
|
|
26
26
|
module.exports = __toCommonJS(monitors_exports);
|
|
27
27
|
var import_time = require("@modern-js/runtime-utils/time");
|
|
@@ -55,13 +55,27 @@ function createMonitors() {
|
|
|
55
55
|
info(message, ...args) {
|
|
56
56
|
log("info", message, args);
|
|
57
57
|
},
|
|
58
|
-
|
|
58
|
+
trace(message, ...args) {
|
|
59
|
+
log("trace", message, args);
|
|
60
|
+
},
|
|
61
|
+
timing(name, dur, desc, ...args) {
|
|
59
62
|
const event = {
|
|
60
63
|
type: "timing",
|
|
61
64
|
payload: {
|
|
62
65
|
name,
|
|
63
66
|
dur,
|
|
64
|
-
desc
|
|
67
|
+
desc,
|
|
68
|
+
args
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
coreMonitors.forEach((monitor) => monitor(event));
|
|
72
|
+
},
|
|
73
|
+
counter(name, ...args) {
|
|
74
|
+
const event = {
|
|
75
|
+
type: "counter",
|
|
76
|
+
payload: {
|
|
77
|
+
name,
|
|
78
|
+
args
|
|
65
79
|
}
|
|
66
80
|
};
|
|
67
81
|
coreMonitors.forEach((monitor) => monitor(event));
|
|
@@ -90,7 +104,7 @@ const initMonitorsPlugin = () => ({
|
|
|
90
104
|
};
|
|
91
105
|
}
|
|
92
106
|
});
|
|
93
|
-
const
|
|
107
|
+
const injectloggerPlugin = (inputLogger) => ({
|
|
94
108
|
name: "@modern-js/inject-logger",
|
|
95
109
|
setup(api) {
|
|
96
110
|
const logger = inputLogger || console;
|
|
@@ -107,7 +121,11 @@ const injectloggerPluigin = (inputLogger) => ({
|
|
|
107
121
|
const loggerMonitor = (event) => {
|
|
108
122
|
if (event.type === "log") {
|
|
109
123
|
const { level, message, args } = event.payload;
|
|
110
|
-
|
|
124
|
+
if (level === "trace") {
|
|
125
|
+
logger.info(message, ...args || []);
|
|
126
|
+
} else {
|
|
127
|
+
logger[level](message, ...args || []);
|
|
128
|
+
}
|
|
111
129
|
}
|
|
112
130
|
if (event.type === "timing") {
|
|
113
131
|
const { name, dur, desc } = event.payload;
|
|
@@ -159,26 +177,23 @@ const injectServerTiming = () => ({
|
|
|
159
177
|
};
|
|
160
178
|
}
|
|
161
179
|
});
|
|
162
|
-
function
|
|
180
|
+
function requestLatencyMiddleware() {
|
|
163
181
|
return async (c, next) => {
|
|
164
|
-
const
|
|
165
|
-
if (!
|
|
182
|
+
const monitors = c.get("monitors");
|
|
183
|
+
if (!monitors) {
|
|
166
184
|
await next();
|
|
167
185
|
return;
|
|
168
186
|
}
|
|
169
|
-
await reporter.init({
|
|
170
|
-
entryName
|
|
171
|
-
});
|
|
172
187
|
const getCost = (0, import_time.time)();
|
|
173
188
|
await next();
|
|
174
189
|
const cost = getCost();
|
|
175
|
-
|
|
190
|
+
monitors.timing(import_constants.ServerTimings.SERVER_HANDLE_REQUEST, cost);
|
|
176
191
|
};
|
|
177
192
|
}
|
|
178
193
|
// Annotate the CommonJS export names for ESM import in node:
|
|
179
194
|
0 && (module.exports = {
|
|
180
195
|
initMonitorsPlugin,
|
|
181
|
-
initReporter,
|
|
182
196
|
injectServerTiming,
|
|
183
|
-
|
|
197
|
+
injectloggerPlugin,
|
|
198
|
+
requestLatencyMiddleware
|
|
184
199
|
});
|
|
@@ -22,7 +22,7 @@ __export(dataHandler_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(dataHandler_exports);
|
|
24
24
|
var import_constants = require("@modern-js/utils/universal/constants");
|
|
25
|
-
const dataHandler = async (request, { routeInfo, serverRoutes, reporter, onError, onTiming, serverManifest, loaderContext }) => {
|
|
25
|
+
const dataHandler = async (request, { routeInfo, serverRoutes, reporter, monitors, onError, onTiming, serverManifest, loaderContext }) => {
|
|
26
26
|
var _serverManifest_loaderBundles;
|
|
27
27
|
const serverLoaderModule = serverManifest === null || serverManifest === void 0 ? void 0 : (_serverManifest_loaderBundles = serverManifest.loaderBundles) === null || _serverManifest_loaderBundles === void 0 ? void 0 : _serverManifest_loaderBundles[routeInfo.entryName || import_constants.MAIN_ENTRY_NAME];
|
|
28
28
|
if (!serverLoaderModule) {
|
|
@@ -34,6 +34,7 @@ const dataHandler = async (request, { routeInfo, serverRoutes, reporter, onError
|
|
|
34
34
|
serverRoutes,
|
|
35
35
|
context: {
|
|
36
36
|
reporter,
|
|
37
|
+
monitors,
|
|
37
38
|
loaderContext
|
|
38
39
|
},
|
|
39
40
|
onTiming,
|
|
@@ -43,20 +43,14 @@ const renderPlugin = () => ({
|
|
|
43
43
|
const customServer = new import_customServer.CustomServer(runner, serverBase, pwd);
|
|
44
44
|
const serverMiddleware = ((_config_render = config.render) === null || _config_render === void 0 ? void 0 : _config_render.middleware) && (0, import_customServer.getServerMidFromUnstableMid)(config.render.middleware);
|
|
45
45
|
const pageRoutes = getPageRoutes(routes);
|
|
46
|
+
middlewares.push({
|
|
47
|
+
name: "page-latency",
|
|
48
|
+
handler: (0, import_monitors.requestLatencyMiddleware)()
|
|
49
|
+
});
|
|
46
50
|
for (const route of pageRoutes) {
|
|
47
51
|
const { urlPath: originUrlPath, entryName = import_constants.MAIN_ENTRY_NAME } = route;
|
|
48
52
|
const urlPath = originUrlPath.endsWith("/") ? `${originUrlPath}*` : `${originUrlPath}/*`;
|
|
49
|
-
middlewares.push({
|
|
50
|
-
name: "init-reporter",
|
|
51
|
-
handler: (0, import_monitors.initReporter)(entryName)
|
|
52
|
-
});
|
|
53
53
|
const customServerHookMiddleware = customServer.getHookMiddleware(entryName, routes);
|
|
54
|
-
middlewares.push({
|
|
55
|
-
name: "inject-route-info",
|
|
56
|
-
handler: (0, import_customServer.injectRoute)({
|
|
57
|
-
entryName
|
|
58
|
-
})
|
|
59
|
-
});
|
|
60
54
|
middlewares.push({
|
|
61
55
|
name: "custom-server-hook",
|
|
62
56
|
path: urlPath,
|
|
@@ -26,7 +26,7 @@ var import_constants2 = require("../../constants");
|
|
|
26
26
|
var import_utils = require("../../utils");
|
|
27
27
|
var import_ssrCache = require("./ssrCache");
|
|
28
28
|
const SERVER_RUNTIME_ENTRY = "requestHandler";
|
|
29
|
-
async function ssrRender(request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, cacheConfig, logger, metrics, onError, onTiming }) {
|
|
29
|
+
async function ssrRender(request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, monitors, cacheConfig, logger, metrics, onError, onTiming }) {
|
|
30
30
|
var _serverManifest_renderBundles;
|
|
31
31
|
const { entryName } = routeInfo;
|
|
32
32
|
const loadableStats = serverManifest.loadableStats || {};
|
|
@@ -64,6 +64,7 @@ async function ssrRender(request, { routeInfo, html, config: userConfig, staticG
|
|
|
64
64
|
staticGenerate,
|
|
65
65
|
logger,
|
|
66
66
|
metrics,
|
|
67
|
+
monitors,
|
|
67
68
|
onError,
|
|
68
69
|
onTiming
|
|
69
70
|
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var route_exports = {};
|
|
20
|
+
__export(route_exports, {
|
|
21
|
+
injectRoutePlugin: () => injectRoutePlugin
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(route_exports);
|
|
24
|
+
var import_constants = require("@modern-js/utils/universal/constants");
|
|
25
|
+
var import_utils = require("../utils");
|
|
26
|
+
function injectRoute(route) {
|
|
27
|
+
return async (c, next) => {
|
|
28
|
+
if (route && !c.get("route")) {
|
|
29
|
+
c.set("route", route);
|
|
30
|
+
}
|
|
31
|
+
await next();
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function getPageRoutes(routes) {
|
|
35
|
+
return routes.filter((route) => !route.isApi).sort(import_utils.sortRoutes);
|
|
36
|
+
}
|
|
37
|
+
const injectRoutePlugin = () => ({
|
|
38
|
+
name: "@modern-js/plugin-inject-route",
|
|
39
|
+
setup(api) {
|
|
40
|
+
return {
|
|
41
|
+
async prepare() {
|
|
42
|
+
const { middlewares, routes } = api.useAppContext();
|
|
43
|
+
if (!routes) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const pageRoutes = getPageRoutes(routes);
|
|
47
|
+
for (const route of pageRoutes) {
|
|
48
|
+
const { urlPath: originUrlPath, entryName = import_constants.MAIN_ENTRY_NAME } = route;
|
|
49
|
+
const urlPath = originUrlPath.endsWith("/") ? `${originUrlPath}*` : `${originUrlPath}/*`;
|
|
50
|
+
middlewares.push({
|
|
51
|
+
name: "inject-route-info",
|
|
52
|
+
path: urlPath,
|
|
53
|
+
handler: injectRoute({
|
|
54
|
+
entryName
|
|
55
|
+
})
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
63
|
+
0 && (module.exports = {
|
|
64
|
+
injectRoutePlugin
|
|
65
|
+
});
|
|
@@ -40,11 +40,9 @@ function _getAfterRenderCtx() {
|
|
|
40
40
|
function createCustomMiddlewaresCtx(c, locals, resArgs) {
|
|
41
41
|
var _c_env_node, _c_env_node1;
|
|
42
42
|
var baseContext = createBaseHookContext(c, resArgs);
|
|
43
|
-
var reporter = c.get("reporter");
|
|
44
43
|
var response = baseContext.response;
|
|
45
44
|
response.locals = locals;
|
|
46
45
|
return _object_spread_props(_object_spread({}, baseContext), {
|
|
47
|
-
reporter,
|
|
48
46
|
response,
|
|
49
47
|
source: {
|
|
50
48
|
req: (_c_env_node = c.env.node) === null || _c_env_node === void 0 ? void 0 : _c_env_node.req,
|
|
@@ -286,7 +286,9 @@ function createMiddlewareContextFromHono(c) {
|
|
|
286
286
|
return _createMiddlewareContextFromHono.apply(this, arguments);
|
|
287
287
|
}
|
|
288
288
|
function _createMiddlewareContextFromHono() {
|
|
289
|
-
_createMiddlewareContextFromHono =
|
|
289
|
+
_createMiddlewareContextFromHono = // TODO: maybe we need use hono ctx directly
|
|
290
|
+
// TODO: after we use hono ctx, we should use `c.get('monitors')` to get monitors
|
|
291
|
+
_async_to_generator(function(c) {
|
|
290
292
|
var loaderContext, rawRequest, method, streamModulePath, createReadableStreamFromReadable, init;
|
|
291
293
|
return _ts_generator(this, function(_state) {
|
|
292
294
|
switch (_state.label) {
|
|
@@ -355,34 +357,7 @@ function _createMiddlewareContextFromHono() {
|
|
|
355
357
|
});
|
|
356
358
|
return _createMiddlewareContextFromHono.apply(this, arguments);
|
|
357
359
|
}
|
|
358
|
-
function injectRoute(route) {
|
|
359
|
-
return function() {
|
|
360
|
-
var _ref = _async_to_generator(function(c, next) {
|
|
361
|
-
return _ts_generator(this, function(_state) {
|
|
362
|
-
switch (_state.label) {
|
|
363
|
-
case 0:
|
|
364
|
-
if (route && !c.get("route")) {
|
|
365
|
-
c.set("route", route);
|
|
366
|
-
}
|
|
367
|
-
return [
|
|
368
|
-
4,
|
|
369
|
-
next()
|
|
370
|
-
];
|
|
371
|
-
case 1:
|
|
372
|
-
_state.sent();
|
|
373
|
-
return [
|
|
374
|
-
2
|
|
375
|
-
];
|
|
376
|
-
}
|
|
377
|
-
});
|
|
378
|
-
});
|
|
379
|
-
return function(c, next) {
|
|
380
|
-
return _ref.apply(this, arguments);
|
|
381
|
-
};
|
|
382
|
-
}();
|
|
383
|
-
}
|
|
384
360
|
export {
|
|
385
361
|
CustomServer,
|
|
386
|
-
getServerMidFromUnstableMid
|
|
387
|
-
injectRoute
|
|
362
|
+
getServerMidFromUnstableMid
|
|
388
363
|
};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { logPlugin } from "./log";
|
|
2
|
-
import { initMonitorsPlugin, injectServerTiming,
|
|
2
|
+
import { initMonitorsPlugin, injectServerTiming, injectloggerPlugin } from "./monitors";
|
|
3
3
|
import { processedByPlugin } from "./processedBy";
|
|
4
4
|
import { injectRenderHandlerPlugin } from "./render";
|
|
5
|
+
import { injectRoutePlugin } from "./route";
|
|
5
6
|
function createSilenceLogger() {
|
|
6
7
|
return new Proxy({}, {
|
|
7
8
|
get: function() {
|
|
@@ -16,9 +17,10 @@ function createDefaultPlugins() {
|
|
|
16
17
|
logPlugin(),
|
|
17
18
|
initMonitorsPlugin(),
|
|
18
19
|
injectRenderHandlerPlugin(options),
|
|
19
|
-
|
|
20
|
+
injectloggerPlugin(options.logger ? options.logger : createSilenceLogger()),
|
|
20
21
|
injectServerTiming(),
|
|
21
|
-
processedByPlugin()
|
|
22
|
+
processedByPlugin(),
|
|
23
|
+
injectRoutePlugin()
|
|
22
24
|
];
|
|
23
25
|
return plugins;
|
|
24
26
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { renderPlugin, injectRenderHandlerPlugin, getRenderHandler } from "./render";
|
|
2
2
|
import { faviconPlugin } from "./favicon";
|
|
3
|
-
import { injectServerTiming,
|
|
3
|
+
import { injectServerTiming, injectloggerPlugin } from "./monitors";
|
|
4
4
|
import { processedByPlugin } from "./processedBy";
|
|
5
5
|
import { logPlugin } from "./log";
|
|
6
6
|
import { createDefaultPlugins } from "./default";
|
|
@@ -10,7 +10,7 @@ export {
|
|
|
10
10
|
getRenderHandler,
|
|
11
11
|
injectRenderHandlerPlugin,
|
|
12
12
|
injectServerTiming,
|
|
13
|
-
|
|
13
|
+
injectloggerPlugin,
|
|
14
14
|
logPlugin,
|
|
15
15
|
processedByPlugin,
|
|
16
16
|
renderPlugin
|
|
@@ -46,13 +46,38 @@ function createMonitors() {
|
|
|
46
46
|
}
|
|
47
47
|
log("info", message, args);
|
|
48
48
|
},
|
|
49
|
+
trace: function trace(message) {
|
|
50
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
51
|
+
args[_key - 1] = arguments[_key];
|
|
52
|
+
}
|
|
53
|
+
log("trace", message, args);
|
|
54
|
+
},
|
|
49
55
|
timing: function timing(name, dur, desc) {
|
|
56
|
+
for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
|
|
57
|
+
args[_key - 3] = arguments[_key];
|
|
58
|
+
}
|
|
50
59
|
var event = {
|
|
51
60
|
type: "timing",
|
|
52
61
|
payload: {
|
|
53
62
|
name,
|
|
54
63
|
dur,
|
|
55
|
-
desc
|
|
64
|
+
desc,
|
|
65
|
+
args
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
coreMonitors.forEach(function(monitor) {
|
|
69
|
+
return monitor(event);
|
|
70
|
+
});
|
|
71
|
+
},
|
|
72
|
+
counter: function counter(name) {
|
|
73
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
74
|
+
args[_key - 1] = arguments[_key];
|
|
75
|
+
}
|
|
76
|
+
var event = {
|
|
77
|
+
type: "counter",
|
|
78
|
+
payload: {
|
|
79
|
+
name,
|
|
80
|
+
args
|
|
56
81
|
}
|
|
57
82
|
};
|
|
58
83
|
coreMonitors.forEach(function(monitor) {
|
|
@@ -96,7 +121,7 @@ var initMonitorsPlugin = function() {
|
|
|
96
121
|
}
|
|
97
122
|
};
|
|
98
123
|
};
|
|
99
|
-
var
|
|
124
|
+
var injectloggerPlugin = function(inputLogger) {
|
|
100
125
|
return {
|
|
101
126
|
name: "@modern-js/inject-logger",
|
|
102
127
|
setup: function setup(api) {
|
|
@@ -116,11 +141,18 @@ var injectloggerPluigin = function(inputLogger) {
|
|
|
116
141
|
pathname = c.req.path;
|
|
117
142
|
loggerMonitor = function(event) {
|
|
118
143
|
if (event.type === "log") {
|
|
119
|
-
var _logger;
|
|
120
144
|
var _event_payload = event.payload, level = _event_payload.level, message = _event_payload.message, args = _event_payload.args;
|
|
121
|
-
(
|
|
122
|
-
|
|
123
|
-
|
|
145
|
+
if (level === "trace") {
|
|
146
|
+
var _logger;
|
|
147
|
+
(_logger = logger).info.apply(_logger, [
|
|
148
|
+
message
|
|
149
|
+
].concat(_to_consumable_array(args || [])));
|
|
150
|
+
} else {
|
|
151
|
+
var _logger1;
|
|
152
|
+
(_logger1 = logger)[level].apply(_logger1, [
|
|
153
|
+
message
|
|
154
|
+
].concat(_to_consumable_array(args || [])));
|
|
155
|
+
}
|
|
124
156
|
}
|
|
125
157
|
if (event.type === "timing") {
|
|
126
158
|
var _event_payload1 = event.payload, name = _event_payload1.name, dur = _event_payload1.dur, desc = _event_payload1.desc;
|
|
@@ -202,15 +234,15 @@ var injectServerTiming = function() {
|
|
|
202
234
|
}
|
|
203
235
|
};
|
|
204
236
|
};
|
|
205
|
-
function
|
|
237
|
+
function requestLatencyMiddleware() {
|
|
206
238
|
return function() {
|
|
207
239
|
var _ref = _async_to_generator(function(c, next) {
|
|
208
|
-
var
|
|
240
|
+
var monitors, getCost, cost;
|
|
209
241
|
return _ts_generator(this, function(_state) {
|
|
210
242
|
switch (_state.label) {
|
|
211
243
|
case 0:
|
|
212
|
-
|
|
213
|
-
if (!!
|
|
244
|
+
monitors = c.get("monitors");
|
|
245
|
+
if (!!monitors)
|
|
214
246
|
return [
|
|
215
247
|
3,
|
|
216
248
|
2
|
|
@@ -225,23 +257,15 @@ function initReporter(entryName) {
|
|
|
225
257
|
2
|
|
226
258
|
];
|
|
227
259
|
case 2:
|
|
228
|
-
return [
|
|
229
|
-
4,
|
|
230
|
-
reporter.init({
|
|
231
|
-
entryName
|
|
232
|
-
})
|
|
233
|
-
];
|
|
234
|
-
case 3:
|
|
235
|
-
_state.sent();
|
|
236
260
|
getCost = time();
|
|
237
261
|
return [
|
|
238
262
|
4,
|
|
239
263
|
next()
|
|
240
264
|
];
|
|
241
|
-
case
|
|
265
|
+
case 3:
|
|
242
266
|
_state.sent();
|
|
243
267
|
cost = getCost();
|
|
244
|
-
|
|
268
|
+
monitors.timing(ServerTimings.SERVER_HANDLE_REQUEST, cost);
|
|
245
269
|
return [
|
|
246
270
|
2
|
|
247
271
|
];
|
|
@@ -255,7 +279,7 @@ function initReporter(entryName) {
|
|
|
255
279
|
}
|
|
256
280
|
export {
|
|
257
281
|
initMonitorsPlugin,
|
|
258
|
-
initReporter,
|
|
259
282
|
injectServerTiming,
|
|
260
|
-
|
|
283
|
+
injectloggerPlugin,
|
|
284
|
+
requestLatencyMiddleware
|
|
261
285
|
};
|
|
@@ -3,11 +3,11 @@ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
|
3
3
|
import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
4
4
|
var dataHandler = function() {
|
|
5
5
|
var _ref = _async_to_generator(function(request, param) {
|
|
6
|
-
var routeInfo, serverRoutes, reporter, onError, onTiming, serverManifest, loaderContext, _serverManifest_loaderBundles, serverLoaderModule, routes, handleRequest, response;
|
|
6
|
+
var routeInfo, serverRoutes, reporter, monitors, onError, onTiming, serverManifest, loaderContext, _serverManifest_loaderBundles, serverLoaderModule, routes, handleRequest, response;
|
|
7
7
|
return _ts_generator(this, function(_state) {
|
|
8
8
|
switch (_state.label) {
|
|
9
9
|
case 0:
|
|
10
|
-
routeInfo = param.routeInfo, serverRoutes = param.serverRoutes, reporter = param.reporter, onError = param.onError, onTiming = param.onTiming, serverManifest = param.serverManifest, loaderContext = param.loaderContext;
|
|
10
|
+
routeInfo = param.routeInfo, serverRoutes = param.serverRoutes, reporter = param.reporter, monitors = param.monitors, onError = param.onError, onTiming = param.onTiming, serverManifest = param.serverManifest, loaderContext = param.loaderContext;
|
|
11
11
|
serverLoaderModule = serverManifest === null || serverManifest === void 0 ? void 0 : (_serverManifest_loaderBundles = serverManifest.loaderBundles) === null || _serverManifest_loaderBundles === void 0 ? void 0 : _serverManifest_loaderBundles[routeInfo.entryName || MAIN_ENTRY_NAME];
|
|
12
12
|
if (!serverLoaderModule) {
|
|
13
13
|
return [
|
|
@@ -22,6 +22,7 @@ var dataHandler = function() {
|
|
|
22
22
|
serverRoutes,
|
|
23
23
|
context: {
|
|
24
24
|
reporter,
|
|
25
|
+
monitors,
|
|
25
26
|
loaderContext
|
|
26
27
|
},
|
|
27
28
|
onTiming,
|
|
@@ -3,8 +3,8 @@ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
|
3
3
|
import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
4
4
|
import { getLoaderCtx } from "../../helper";
|
|
5
5
|
import { sortRoutes } from "../../utils";
|
|
6
|
-
import { CustomServer, getServerMidFromUnstableMid
|
|
7
|
-
import {
|
|
6
|
+
import { CustomServer, getServerMidFromUnstableMid } from "../customServer";
|
|
7
|
+
import { requestLatencyMiddleware } from "../monitors";
|
|
8
8
|
export * from "./inject";
|
|
9
9
|
var renderPlugin = function() {
|
|
10
10
|
return {
|
|
@@ -28,6 +28,10 @@ var renderPlugin = function() {
|
|
|
28
28
|
customServer = new CustomServer(runner, serverBase, pwd);
|
|
29
29
|
serverMiddleware = ((_config_render = config.render) === null || _config_render === void 0 ? void 0 : _config_render.middleware) && getServerMidFromUnstableMid(config.render.middleware);
|
|
30
30
|
pageRoutes = getPageRoutes(routes);
|
|
31
|
+
middlewares.push({
|
|
32
|
+
name: "page-latency",
|
|
33
|
+
handler: requestLatencyMiddleware()
|
|
34
|
+
});
|
|
31
35
|
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
32
36
|
_state.label = 1;
|
|
33
37
|
case 1:
|
|
@@ -48,17 +52,7 @@ var renderPlugin = function() {
|
|
|
48
52
|
route = _step.value;
|
|
49
53
|
originUrlPath = route.urlPath, _route_entryName = route.entryName, entryName = _route_entryName === void 0 ? MAIN_ENTRY_NAME : _route_entryName;
|
|
50
54
|
urlPath = originUrlPath.endsWith("/") ? "".concat(originUrlPath, "*") : "".concat(originUrlPath, "/*");
|
|
51
|
-
middlewares.push({
|
|
52
|
-
name: "init-reporter",
|
|
53
|
-
handler: initReporter(entryName)
|
|
54
|
-
});
|
|
55
55
|
customServerHookMiddleware = customServer.getHookMiddleware(entryName, routes);
|
|
56
|
-
middlewares.push({
|
|
57
|
-
name: "inject-route-info",
|
|
58
|
-
handler: injectRoute({
|
|
59
|
-
entryName
|
|
60
|
-
})
|
|
61
|
-
});
|
|
62
56
|
middlewares.push({
|
|
63
57
|
name: "custom-server-hook",
|
|
64
58
|
path: urlPath,
|
|
@@ -11,11 +11,11 @@ function ssrRender(request, _) {
|
|
|
11
11
|
}
|
|
12
12
|
function _ssrRender() {
|
|
13
13
|
_ssrRender = _async_to_generator(function(request, param) {
|
|
14
|
-
var routeInfo, html, userConfig, staticGenerate, nodeReq, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, cacheConfig, logger, metrics, onError, onTiming, _serverManifest_renderBundles, entryName, loadableStats, routeManifest, headers, key, renderBundle, requestHandler, config, requestHandlerOptions, cacheControl, response;
|
|
14
|
+
var routeInfo, html, userConfig, staticGenerate, nodeReq, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, monitors, cacheConfig, logger, metrics, onError, onTiming, _serverManifest_renderBundles, entryName, loadableStats, routeManifest, headers, key, renderBundle, requestHandler, config, requestHandlerOptions, cacheControl, response;
|
|
15
15
|
return _ts_generator(this, function(_state) {
|
|
16
16
|
switch (_state.label) {
|
|
17
17
|
case 0:
|
|
18
|
-
routeInfo = param.routeInfo, html = param.html, userConfig = param.config, staticGenerate = param.staticGenerate, nodeReq = param.nodeReq, serverManifest = param.serverManifest, rscSSRManifest = param.rscSSRManifest, rscClientManifest = param.rscClientManifest, rscServerManifest = param.rscServerManifest, locals = param.locals, params = param.params, loaderContext = param.loaderContext, reporter = param.reporter, cacheConfig = param.cacheConfig, logger = param.logger, metrics = param.metrics, onError = param.onError, onTiming = param.onTiming;
|
|
18
|
+
routeInfo = param.routeInfo, html = param.html, userConfig = param.config, staticGenerate = param.staticGenerate, nodeReq = param.nodeReq, serverManifest = param.serverManifest, rscSSRManifest = param.rscSSRManifest, rscClientManifest = param.rscClientManifest, rscServerManifest = param.rscServerManifest, locals = param.locals, params = param.params, loaderContext = param.loaderContext, reporter = param.reporter, monitors = param.monitors, cacheConfig = param.cacheConfig, logger = param.logger, metrics = param.metrics, onError = param.onError, onTiming = param.onTiming;
|
|
19
19
|
entryName = routeInfo.entryName;
|
|
20
20
|
loadableStats = serverManifest.loadableStats || {};
|
|
21
21
|
routeManifest = serverManifest.routeManifest || {};
|
|
@@ -57,6 +57,7 @@ function _ssrRender() {
|
|
|
57
57
|
staticGenerate,
|
|
58
58
|
logger,
|
|
59
59
|
metrics,
|
|
60
|
+
monitors,
|
|
60
61
|
onError,
|
|
61
62
|
onTiming
|
|
62
63
|
};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
2
|
+
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
3
|
+
import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
4
|
+
import { sortRoutes } from "../utils";
|
|
5
|
+
function injectRoute(route) {
|
|
6
|
+
return function() {
|
|
7
|
+
var _ref = _async_to_generator(function(c, next) {
|
|
8
|
+
return _ts_generator(this, function(_state) {
|
|
9
|
+
switch (_state.label) {
|
|
10
|
+
case 0:
|
|
11
|
+
if (route && !c.get("route")) {
|
|
12
|
+
c.set("route", route);
|
|
13
|
+
}
|
|
14
|
+
return [
|
|
15
|
+
4,
|
|
16
|
+
next()
|
|
17
|
+
];
|
|
18
|
+
case 1:
|
|
19
|
+
_state.sent();
|
|
20
|
+
return [
|
|
21
|
+
2
|
|
22
|
+
];
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
return function(c, next) {
|
|
27
|
+
return _ref.apply(this, arguments);
|
|
28
|
+
};
|
|
29
|
+
}();
|
|
30
|
+
}
|
|
31
|
+
function getPageRoutes(routes) {
|
|
32
|
+
return routes.filter(function(route) {
|
|
33
|
+
return !route.isApi;
|
|
34
|
+
}).sort(sortRoutes);
|
|
35
|
+
}
|
|
36
|
+
var injectRoutePlugin = function() {
|
|
37
|
+
return {
|
|
38
|
+
name: "@modern-js/plugin-inject-route",
|
|
39
|
+
setup: function setup(api) {
|
|
40
|
+
return {
|
|
41
|
+
prepare: function prepare() {
|
|
42
|
+
return _async_to_generator(function() {
|
|
43
|
+
var _api_useAppContext, middlewares, routes, pageRoutes, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, route, originUrlPath, _route_entryName, entryName, urlPath;
|
|
44
|
+
return _ts_generator(this, function(_state) {
|
|
45
|
+
_api_useAppContext = api.useAppContext(), middlewares = _api_useAppContext.middlewares, routes = _api_useAppContext.routes;
|
|
46
|
+
if (!routes) {
|
|
47
|
+
return [
|
|
48
|
+
2
|
|
49
|
+
];
|
|
50
|
+
}
|
|
51
|
+
pageRoutes = getPageRoutes(routes);
|
|
52
|
+
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
53
|
+
try {
|
|
54
|
+
for (_iterator = pageRoutes[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
55
|
+
route = _step.value;
|
|
56
|
+
originUrlPath = route.urlPath, _route_entryName = route.entryName, entryName = _route_entryName === void 0 ? MAIN_ENTRY_NAME : _route_entryName;
|
|
57
|
+
urlPath = originUrlPath.endsWith("/") ? "".concat(originUrlPath, "*") : "".concat(originUrlPath, "/*");
|
|
58
|
+
middlewares.push({
|
|
59
|
+
name: "inject-route-info",
|
|
60
|
+
path: urlPath,
|
|
61
|
+
handler: injectRoute({
|
|
62
|
+
entryName
|
|
63
|
+
})
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
} catch (err) {
|
|
67
|
+
_didIteratorError = true;
|
|
68
|
+
_iteratorError = err;
|
|
69
|
+
} finally {
|
|
70
|
+
try {
|
|
71
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
72
|
+
_iterator.return();
|
|
73
|
+
}
|
|
74
|
+
} finally {
|
|
75
|
+
if (_didIteratorError) {
|
|
76
|
+
throw _iteratorError;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return [
|
|
81
|
+
2
|
|
82
|
+
];
|
|
83
|
+
});
|
|
84
|
+
})();
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
export {
|
|
91
|
+
injectRoutePlugin
|
|
92
|
+
};
|
|
@@ -16,12 +16,10 @@ async function getAfterRenderCtx(c, baseHookCtx, route) {
|
|
|
16
16
|
function createCustomMiddlewaresCtx(c, locals, resArgs) {
|
|
17
17
|
var _c_env_node, _c_env_node1;
|
|
18
18
|
const baseContext = createBaseHookContext(c, resArgs);
|
|
19
|
-
const reporter = c.get("reporter");
|
|
20
19
|
const response = baseContext.response;
|
|
21
20
|
response.locals = locals;
|
|
22
21
|
return {
|
|
23
22
|
...baseContext,
|
|
24
|
-
reporter,
|
|
25
23
|
response,
|
|
26
24
|
source: {
|
|
27
25
|
req: (_c_env_node = c.env.node) === null || _c_env_node === void 0 ? void 0 : _c_env_node.req,
|
|
@@ -188,16 +188,7 @@ async function createMiddlewareContextFromHono(c) {
|
|
|
188
188
|
redirect: c.redirect.bind(c)
|
|
189
189
|
};
|
|
190
190
|
}
|
|
191
|
-
function injectRoute(route) {
|
|
192
|
-
return async (c, next) => {
|
|
193
|
-
if (route && !c.get("route")) {
|
|
194
|
-
c.set("route", route);
|
|
195
|
-
}
|
|
196
|
-
await next();
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
191
|
export {
|
|
200
192
|
CustomServer,
|
|
201
|
-
getServerMidFromUnstableMid
|
|
202
|
-
injectRoute
|
|
193
|
+
getServerMidFromUnstableMid
|
|
203
194
|
};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { logPlugin } from "./log";
|
|
2
|
-
import { initMonitorsPlugin, injectServerTiming,
|
|
2
|
+
import { initMonitorsPlugin, injectServerTiming, injectloggerPlugin } from "./monitors";
|
|
3
3
|
import { processedByPlugin } from "./processedBy";
|
|
4
4
|
import { injectRenderHandlerPlugin } from "./render";
|
|
5
|
+
import { injectRoutePlugin } from "./route";
|
|
5
6
|
function createSilenceLogger() {
|
|
6
7
|
return new Proxy({}, {
|
|
7
8
|
get: () => {
|
|
@@ -15,9 +16,10 @@ function createDefaultPlugins(options = {}) {
|
|
|
15
16
|
logPlugin(),
|
|
16
17
|
initMonitorsPlugin(),
|
|
17
18
|
injectRenderHandlerPlugin(options),
|
|
18
|
-
|
|
19
|
+
injectloggerPlugin(options.logger ? options.logger : createSilenceLogger()),
|
|
19
20
|
injectServerTiming(),
|
|
20
|
-
processedByPlugin()
|
|
21
|
+
processedByPlugin(),
|
|
22
|
+
injectRoutePlugin()
|
|
21
23
|
];
|
|
22
24
|
return plugins;
|
|
23
25
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { renderPlugin, injectRenderHandlerPlugin, getRenderHandler } from "./render";
|
|
2
2
|
import { faviconPlugin } from "./favicon";
|
|
3
|
-
import { injectServerTiming,
|
|
3
|
+
import { injectServerTiming, injectloggerPlugin } from "./monitors";
|
|
4
4
|
import { processedByPlugin } from "./processedBy";
|
|
5
5
|
import { logPlugin } from "./log";
|
|
6
6
|
import { createDefaultPlugins } from "./default";
|
|
@@ -10,7 +10,7 @@ export {
|
|
|
10
10
|
getRenderHandler,
|
|
11
11
|
injectRenderHandlerPlugin,
|
|
12
12
|
injectServerTiming,
|
|
13
|
-
|
|
13
|
+
injectloggerPlugin,
|
|
14
14
|
logPlugin,
|
|
15
15
|
processedByPlugin,
|
|
16
16
|
renderPlugin
|
|
@@ -29,13 +29,27 @@ function createMonitors() {
|
|
|
29
29
|
info(message, ...args) {
|
|
30
30
|
log("info", message, args);
|
|
31
31
|
},
|
|
32
|
-
|
|
32
|
+
trace(message, ...args) {
|
|
33
|
+
log("trace", message, args);
|
|
34
|
+
},
|
|
35
|
+
timing(name, dur, desc, ...args) {
|
|
33
36
|
const event = {
|
|
34
37
|
type: "timing",
|
|
35
38
|
payload: {
|
|
36
39
|
name,
|
|
37
40
|
dur,
|
|
38
|
-
desc
|
|
41
|
+
desc,
|
|
42
|
+
args
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
coreMonitors.forEach((monitor) => monitor(event));
|
|
46
|
+
},
|
|
47
|
+
counter(name, ...args) {
|
|
48
|
+
const event = {
|
|
49
|
+
type: "counter",
|
|
50
|
+
payload: {
|
|
51
|
+
name,
|
|
52
|
+
args
|
|
39
53
|
}
|
|
40
54
|
};
|
|
41
55
|
coreMonitors.forEach((monitor) => monitor(event));
|
|
@@ -64,7 +78,7 @@ const initMonitorsPlugin = () => ({
|
|
|
64
78
|
};
|
|
65
79
|
}
|
|
66
80
|
});
|
|
67
|
-
const
|
|
81
|
+
const injectloggerPlugin = (inputLogger) => ({
|
|
68
82
|
name: "@modern-js/inject-logger",
|
|
69
83
|
setup(api) {
|
|
70
84
|
const logger = inputLogger || console;
|
|
@@ -81,7 +95,11 @@ const injectloggerPluigin = (inputLogger) => ({
|
|
|
81
95
|
const loggerMonitor = (event) => {
|
|
82
96
|
if (event.type === "log") {
|
|
83
97
|
const { level, message, args } = event.payload;
|
|
84
|
-
|
|
98
|
+
if (level === "trace") {
|
|
99
|
+
logger.info(message, ...args || []);
|
|
100
|
+
} else {
|
|
101
|
+
logger[level](message, ...args || []);
|
|
102
|
+
}
|
|
85
103
|
}
|
|
86
104
|
if (event.type === "timing") {
|
|
87
105
|
const { name, dur, desc } = event.payload;
|
|
@@ -133,25 +151,22 @@ const injectServerTiming = () => ({
|
|
|
133
151
|
};
|
|
134
152
|
}
|
|
135
153
|
});
|
|
136
|
-
function
|
|
154
|
+
function requestLatencyMiddleware() {
|
|
137
155
|
return async (c, next) => {
|
|
138
|
-
const
|
|
139
|
-
if (!
|
|
156
|
+
const monitors = c.get("monitors");
|
|
157
|
+
if (!monitors) {
|
|
140
158
|
await next();
|
|
141
159
|
return;
|
|
142
160
|
}
|
|
143
|
-
await reporter.init({
|
|
144
|
-
entryName
|
|
145
|
-
});
|
|
146
161
|
const getCost = time();
|
|
147
162
|
await next();
|
|
148
163
|
const cost = getCost();
|
|
149
|
-
|
|
164
|
+
monitors.timing(ServerTimings.SERVER_HANDLE_REQUEST, cost);
|
|
150
165
|
};
|
|
151
166
|
}
|
|
152
167
|
export {
|
|
153
168
|
initMonitorsPlugin,
|
|
154
|
-
initReporter,
|
|
155
169
|
injectServerTiming,
|
|
156
|
-
|
|
170
|
+
injectloggerPlugin,
|
|
171
|
+
requestLatencyMiddleware
|
|
157
172
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
2
|
-
const dataHandler = async (request, { routeInfo, serverRoutes, reporter, onError, onTiming, serverManifest, loaderContext }) => {
|
|
2
|
+
const dataHandler = async (request, { routeInfo, serverRoutes, reporter, monitors, onError, onTiming, serverManifest, loaderContext }) => {
|
|
3
3
|
var _serverManifest_loaderBundles;
|
|
4
4
|
const serverLoaderModule = serverManifest === null || serverManifest === void 0 ? void 0 : (_serverManifest_loaderBundles = serverManifest.loaderBundles) === null || _serverManifest_loaderBundles === void 0 ? void 0 : _serverManifest_loaderBundles[routeInfo.entryName || MAIN_ENTRY_NAME];
|
|
5
5
|
if (!serverLoaderModule) {
|
|
@@ -11,6 +11,7 @@ const dataHandler = async (request, { routeInfo, serverRoutes, reporter, onError
|
|
|
11
11
|
serverRoutes,
|
|
12
12
|
context: {
|
|
13
13
|
reporter,
|
|
14
|
+
monitors,
|
|
14
15
|
loaderContext
|
|
15
16
|
},
|
|
16
17
|
onTiming,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
2
2
|
import { getLoaderCtx } from "../../helper";
|
|
3
3
|
import { sortRoutes } from "../../utils";
|
|
4
|
-
import { CustomServer, getServerMidFromUnstableMid
|
|
5
|
-
import {
|
|
4
|
+
import { CustomServer, getServerMidFromUnstableMid } from "../customServer";
|
|
5
|
+
import { requestLatencyMiddleware } from "../monitors";
|
|
6
6
|
export * from "./inject";
|
|
7
7
|
const renderPlugin = () => ({
|
|
8
8
|
name: "@modern-js/plugin-render",
|
|
@@ -19,20 +19,14 @@ const renderPlugin = () => ({
|
|
|
19
19
|
const customServer = new CustomServer(runner, serverBase, pwd);
|
|
20
20
|
const serverMiddleware = ((_config_render = config.render) === null || _config_render === void 0 ? void 0 : _config_render.middleware) && getServerMidFromUnstableMid(config.render.middleware);
|
|
21
21
|
const pageRoutes = getPageRoutes(routes);
|
|
22
|
+
middlewares.push({
|
|
23
|
+
name: "page-latency",
|
|
24
|
+
handler: requestLatencyMiddleware()
|
|
25
|
+
});
|
|
22
26
|
for (const route of pageRoutes) {
|
|
23
27
|
const { urlPath: originUrlPath, entryName = MAIN_ENTRY_NAME } = route;
|
|
24
28
|
const urlPath = originUrlPath.endsWith("/") ? `${originUrlPath}*` : `${originUrlPath}/*`;
|
|
25
|
-
middlewares.push({
|
|
26
|
-
name: "init-reporter",
|
|
27
|
-
handler: initReporter(entryName)
|
|
28
|
-
});
|
|
29
29
|
const customServerHookMiddleware = customServer.getHookMiddleware(entryName, routes);
|
|
30
|
-
middlewares.push({
|
|
31
|
-
name: "inject-route-info",
|
|
32
|
-
handler: injectRoute({
|
|
33
|
-
entryName
|
|
34
|
-
})
|
|
35
|
-
});
|
|
36
30
|
middlewares.push({
|
|
37
31
|
name: "custom-server-hook",
|
|
38
32
|
path: urlPath,
|
|
@@ -3,7 +3,7 @@ import { X_MODERNJS_RENDER } from "../../constants";
|
|
|
3
3
|
import { getPathname, parseHeaders } from "../../utils";
|
|
4
4
|
import { getCacheResult, matchCacheControl } from "./ssrCache";
|
|
5
5
|
const SERVER_RUNTIME_ENTRY = "requestHandler";
|
|
6
|
-
async function ssrRender(request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, cacheConfig, logger, metrics, onError, onTiming }) {
|
|
6
|
+
async function ssrRender(request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, monitors, cacheConfig, logger, metrics, onError, onTiming }) {
|
|
7
7
|
var _serverManifest_renderBundles;
|
|
8
8
|
const { entryName } = routeInfo;
|
|
9
9
|
const loadableStats = serverManifest.loadableStats || {};
|
|
@@ -41,6 +41,7 @@ async function ssrRender(request, { routeInfo, html, config: userConfig, staticG
|
|
|
41
41
|
staticGenerate,
|
|
42
42
|
logger,
|
|
43
43
|
metrics,
|
|
44
|
+
monitors,
|
|
44
45
|
onError,
|
|
45
46
|
onTiming
|
|
46
47
|
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
2
|
+
import { sortRoutes } from "../utils";
|
|
3
|
+
function injectRoute(route) {
|
|
4
|
+
return async (c, next) => {
|
|
5
|
+
if (route && !c.get("route")) {
|
|
6
|
+
c.set("route", route);
|
|
7
|
+
}
|
|
8
|
+
await next();
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function getPageRoutes(routes) {
|
|
12
|
+
return routes.filter((route) => !route.isApi).sort(sortRoutes);
|
|
13
|
+
}
|
|
14
|
+
const injectRoutePlugin = () => ({
|
|
15
|
+
name: "@modern-js/plugin-inject-route",
|
|
16
|
+
setup(api) {
|
|
17
|
+
return {
|
|
18
|
+
async prepare() {
|
|
19
|
+
const { middlewares, routes } = api.useAppContext();
|
|
20
|
+
if (!routes) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const pageRoutes = getPageRoutes(routes);
|
|
24
|
+
for (const route of pageRoutes) {
|
|
25
|
+
const { urlPath: originUrlPath, entryName = MAIN_ENTRY_NAME } = route;
|
|
26
|
+
const urlPath = originUrlPath.endsWith("/") ? `${originUrlPath}*` : `${originUrlPath}/*`;
|
|
27
|
+
middlewares.push({
|
|
28
|
+
name: "inject-route-info",
|
|
29
|
+
path: urlPath,
|
|
30
|
+
handler: injectRoute({
|
|
31
|
+
entryName
|
|
32
|
+
})
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
export {
|
|
40
|
+
injectRoutePlugin
|
|
41
|
+
};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export { AGGRED_DIR } from './constants';
|
|
|
3
3
|
export type { ServerBase, ServerBaseOptions } from './serverBase';
|
|
4
4
|
export { createServerBase } from './serverBase';
|
|
5
5
|
export { PluginManager, type PluginManagerOptions } from './pluginManager';
|
|
6
|
-
export type { Middleware, Context, Next, HonoRequest as InternalRequest, ServerEnv, ServerManifest, } from './types';
|
|
6
|
+
export type { Middleware, Context, Next, HonoRequest as InternalRequest, ServerEnv, ServerManifest, ServerLoaderBundle, } from './types';
|
|
7
7
|
export { getLoaderCtx } from './helper';
|
|
8
8
|
export * from './plugins';
|
|
9
9
|
export * from './types/plugin';
|
|
@@ -11,6 +11,3 @@ export declare class CustomServer {
|
|
|
11
11
|
getServerMiddleware(renderMiddlewares?: Middleware<ServerNodeEnv & ServerEnv>[]): Promise<Middleware<ServerNodeEnv & ServerEnv> | Array<Middleware<ServerNodeEnv & ServerEnv>> | undefined>;
|
|
12
12
|
}
|
|
13
13
|
export declare function getServerMidFromUnstableMid(serverMiddleware: UnstableMiddleware[]): Array<Middleware<ServerNodeEnv & ServerEnv>>;
|
|
14
|
-
export declare function injectRoute(route: {
|
|
15
|
-
entryName: string;
|
|
16
|
-
}): Middleware<ServerEnv>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { renderPlugin, injectRenderHandlerPlugin, type InjectRenderHandlerOptions, getRenderHandler, } from './render';
|
|
2
2
|
export { faviconPlugin } from './favicon';
|
|
3
|
-
export { injectServerTiming,
|
|
3
|
+
export { injectServerTiming, injectloggerPlugin } from './monitors';
|
|
4
4
|
export { processedByPlugin } from './processedBy';
|
|
5
5
|
export { logPlugin } from './log';
|
|
6
6
|
export { createDefaultPlugins, type CreateDefaultPluginsOptions, } from './default';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Logger } from '@modern-js/types';
|
|
2
2
|
import type { Context, Next, ServerEnv, ServerPlugin } from '../types';
|
|
3
3
|
export declare const initMonitorsPlugin: () => ServerPlugin;
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const injectloggerPlugin: (inputLogger?: Logger) => ServerPlugin;
|
|
5
5
|
export declare const injectServerTiming: () => ServerPlugin;
|
|
6
|
-
export declare function
|
|
6
|
+
export declare function requestLatencyMiddleware(): (c: Context<ServerEnv>, next: Next) => Promise<void>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ServerRoute } from '@modern-js/types';
|
|
2
2
|
import type { SSRRenderOptions } from './ssrRender';
|
|
3
|
-
export declare const dataHandler: (request: Request, { routeInfo, serverRoutes, reporter, onError, onTiming, serverManifest, loaderContext, }: SSRRenderOptions & {
|
|
3
|
+
export declare const dataHandler: (request: Request, { routeInfo, serverRoutes, reporter, monitors, onError, onTiming, serverManifest, loaderContext, }: SSRRenderOptions & {
|
|
4
4
|
serverRoutes: ServerRoute[];
|
|
5
5
|
}) => Promise<Response | void>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import type { IncomingMessage } from 'http';
|
|
3
3
|
import type { Logger, Metrics, Reporter, ServerRoute } from '@modern-js/types';
|
|
4
|
-
import type { ClientManifest as RscClientManifest, SSRManifest as RscSSRManifest, ServerManifest as RscServerManifest } from '@modern-js/types/server';
|
|
4
|
+
import type { Monitors, ClientManifest as RscClientManifest, SSRManifest as RscSSRManifest, ServerManifest as RscServerManifest } from '@modern-js/types/server';
|
|
5
5
|
import type { CacheConfig, ServerManifest, UserConfig } from '../../types';
|
|
6
6
|
import type { OnError, OnTiming, Params } from '../../types/requestHandler';
|
|
7
7
|
export interface SSRRenderOptions {
|
|
@@ -23,7 +23,8 @@ export interface SSRRenderOptions {
|
|
|
23
23
|
locals?: Record<string, any>;
|
|
24
24
|
cacheConfig?: CacheConfig;
|
|
25
25
|
nodeReq?: IncomingMessage;
|
|
26
|
+
monitors: Monitors;
|
|
26
27
|
onError: OnError;
|
|
27
28
|
onTiming: OnTiming;
|
|
28
29
|
}
|
|
29
|
-
export declare function ssrRender(request: Request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, cacheConfig, logger, metrics, onError, onTiming, }: SSRRenderOptions): Promise<Response>;
|
|
30
|
+
export declare function ssrRender(request: Request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, monitors, cacheConfig, logger, metrics, onError, onTiming, }: SSRRenderOptions): Promise<Response>;
|
|
@@ -3,6 +3,7 @@ import type { IncomingMessage } from 'node:http';
|
|
|
3
3
|
import type { Logger, Metrics, Monitors, Reporter, ClientManifest as RscClientManifest, SSRManifest as RscSSRManifest, ServerManifest as RscServerManifest } from '@modern-js/types';
|
|
4
4
|
import type { ServerManifest } from './server';
|
|
5
5
|
export interface RenderOptions {
|
|
6
|
+
monitors: Monitors;
|
|
6
7
|
loaderContext?: Map<string, unknown>;
|
|
7
8
|
/** ssr render html templates */
|
|
8
9
|
templates: Record<string, string>;
|
|
@@ -18,7 +19,6 @@ export interface RenderOptions {
|
|
|
18
19
|
matchPathname?: string;
|
|
19
20
|
/** For compat rewrite MPA, while not modify request */
|
|
20
21
|
matchEntryName?: string;
|
|
21
|
-
monitors?: Monitors;
|
|
22
22
|
serverManifest: ServerManifest;
|
|
23
23
|
rscServerManifest?: RscServerManifest;
|
|
24
24
|
rscClientManifest?: RscClientManifest;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Logger, Metrics, Reporter, ServerRoute } from '@modern-js/types';
|
|
2
|
-
import type { ClientManifest as RscClientManifest, SSRManifest as RscSSRManifest, ServerManifest as RscServerManifest } from '@modern-js/types/server';
|
|
2
|
+
import type { Monitors, ClientManifest as RscClientManifest, SSRManifest as RscSSRManifest, ServerManifest as RscServerManifest } from '@modern-js/types/server';
|
|
3
3
|
import type { ServerUserConfig, SourceUserConfig } from './config';
|
|
4
4
|
export type Resource = {
|
|
5
5
|
loadableStats: Record<string, any>;
|
|
@@ -43,6 +43,7 @@ export type RequestHandlerOptions = {
|
|
|
43
43
|
logger: Logger;
|
|
44
44
|
/** @deprecated */
|
|
45
45
|
metrics?: Metrics;
|
|
46
|
+
monitors: Monitors;
|
|
46
47
|
onError: OnError;
|
|
47
48
|
onTiming: OnTiming;
|
|
48
49
|
};
|
|
@@ -2,13 +2,14 @@ import type { Logger, Metrics, Monitors, NestedRoute, Reporter, ServerRoute } fr
|
|
|
2
2
|
import type { ClientManifest as RscClientManifest, SSRManifest as RscSSRManifest, ServerManifest as RscServerManifest } from '@modern-js/types/server';
|
|
3
3
|
import type { RequestHandler as BundleRequestHandler, OnError, OnTiming } from './requestHandler';
|
|
4
4
|
export type RequestHandler = (request: Request, ...args: any[]) => Response | Promise<Response>;
|
|
5
|
-
type ServerLoaderBundle = {
|
|
5
|
+
export type ServerLoaderBundle = {
|
|
6
6
|
routes: NestedRoute[];
|
|
7
7
|
handleRequest: (options: {
|
|
8
8
|
request: Request;
|
|
9
9
|
serverRoutes: ServerRoute[];
|
|
10
10
|
routes: NestedRoute[];
|
|
11
11
|
context: {
|
|
12
|
+
monitors: Monitors;
|
|
12
13
|
reporter?: Reporter;
|
|
13
14
|
loaderContext?: Map<string, unknown>;
|
|
14
15
|
};
|
|
@@ -33,11 +34,11 @@ export type ServerManifest = {
|
|
|
33
34
|
nestedRoutesJson?: Record<string, any>;
|
|
34
35
|
};
|
|
35
36
|
type ServerVariables = {
|
|
36
|
-
/** @deprecated
|
|
37
|
+
/** @deprecated */
|
|
37
38
|
logger: Logger;
|
|
38
|
-
/** @deprecated
|
|
39
|
+
/** @deprecated */
|
|
39
40
|
reporter?: Reporter;
|
|
40
|
-
/** @deprecated
|
|
41
|
+
/** @deprecated */
|
|
41
42
|
metrics?: Metrics;
|
|
42
43
|
monitors: Monitors;
|
|
43
44
|
serverManifest?: ServerManifest;
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"modern",
|
|
16
16
|
"modern.js"
|
|
17
17
|
],
|
|
18
|
-
"version": "2.65.
|
|
18
|
+
"version": "2.65.2",
|
|
19
19
|
"jsnext:source": "./src/index.ts",
|
|
20
20
|
"types": "./dist/types/index.d.ts",
|
|
21
21
|
"main": "./dist/cjs/index.js",
|
|
@@ -53,9 +53,9 @@
|
|
|
53
53
|
"flatted": "^3.2.9",
|
|
54
54
|
"hono": "^3.12.2",
|
|
55
55
|
"ts-deepmerge": "7.0.2",
|
|
56
|
-
"@modern-js/plugin": "2.65.
|
|
57
|
-
"@modern-js/runtime-utils": "2.65.
|
|
58
|
-
"@modern-js/utils": "2.65.
|
|
56
|
+
"@modern-js/plugin": "2.65.2",
|
|
57
|
+
"@modern-js/runtime-utils": "2.65.2",
|
|
58
|
+
"@modern-js/utils": "2.65.2"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@types/jest": "^29",
|
|
@@ -65,9 +65,9 @@
|
|
|
65
65
|
"jest": "^29",
|
|
66
66
|
"ts-jest": "^29.1.0",
|
|
67
67
|
"typescript": "^5",
|
|
68
|
-
"@modern-js/types": "2.65.
|
|
69
|
-
"@scripts/
|
|
70
|
-
"@scripts/
|
|
68
|
+
"@modern-js/types": "2.65.2",
|
|
69
|
+
"@scripts/jest-config": "2.65.2",
|
|
70
|
+
"@scripts/build": "2.65.2"
|
|
71
71
|
},
|
|
72
72
|
"sideEffects": false,
|
|
73
73
|
"publishConfig": {
|