@modern-js/server-core 2.54.6 → 2.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/cjs/adapters/node/plugins/resource.js +1 -1
  2. package/dist/cjs/constants.js +12 -9
  3. package/dist/cjs/index.js +3 -1
  4. package/dist/cjs/plugins/customServer/index.js +5 -5
  5. package/dist/cjs/plugins/index.js +7 -3
  6. package/dist/cjs/plugins/log.js +3 -3
  7. package/dist/cjs/plugins/monitors.js +183 -0
  8. package/dist/cjs/plugins/render/dataHandler.js +3 -2
  9. package/dist/cjs/plugins/render/index.js +6 -4
  10. package/dist/cjs/plugins/render/render.js +32 -15
  11. package/dist/cjs/plugins/render/ssrCache.js +72 -83
  12. package/dist/cjs/plugins/render/ssrRender.js +40 -145
  13. package/dist/cjs/types/requestHandler.js +16 -0
  14. package/dist/cjs/utils/error.js +3 -3
  15. package/dist/cjs/utils/transformStream.js +1 -1
  16. package/dist/esm/adapters/node/plugins/resource.js +1 -1
  17. package/dist/esm/constants.js +10 -8
  18. package/dist/esm/index.js +1 -0
  19. package/dist/esm/plugins/customServer/index.js +8 -8
  20. package/dist/esm/plugins/index.js +4 -2
  21. package/dist/esm/plugins/log.js +4 -4
  22. package/dist/esm/plugins/monitors.js +261 -0
  23. package/dist/esm/plugins/render/dataHandler.js +4 -3
  24. package/dist/esm/plugins/render/index.js +6 -4
  25. package/dist/esm/plugins/render/render.js +51 -24
  26. package/dist/esm/plugins/render/ssrCache.js +101 -131
  27. package/dist/esm/plugins/render/ssrRender.js +55 -175
  28. package/dist/esm/types/requestHandler.js +0 -0
  29. package/dist/esm/utils/error.js +3 -3
  30. package/dist/esm/utils/transformStream.js +16 -2
  31. package/dist/esm-node/adapters/node/plugins/resource.js +1 -1
  32. package/dist/esm-node/constants.js +10 -8
  33. package/dist/esm-node/index.js +1 -0
  34. package/dist/esm-node/plugins/customServer/index.js +6 -6
  35. package/dist/esm-node/plugins/index.js +4 -2
  36. package/dist/esm-node/plugins/log.js +3 -3
  37. package/dist/esm-node/plugins/monitors.js +156 -0
  38. package/dist/esm-node/plugins/render/dataHandler.js +3 -2
  39. package/dist/esm-node/plugins/render/index.js +5 -3
  40. package/dist/esm-node/plugins/render/render.js +33 -16
  41. package/dist/esm-node/plugins/render/ssrCache.js +73 -74
  42. package/dist/esm-node/plugins/render/ssrRender.js +43 -137
  43. package/dist/esm-node/types/requestHandler.js +0 -0
  44. package/dist/esm-node/utils/error.js +3 -3
  45. package/dist/esm-node/utils/transformStream.js +1 -1
  46. package/dist/types/constants.d.ts +2 -1
  47. package/dist/types/index.d.ts +1 -0
  48. package/dist/types/plugins/index.d.ts +1 -1
  49. package/dist/types/plugins/monitors.d.ts +6 -0
  50. package/dist/types/plugins/render/dataHandler.d.ts +1 -1
  51. package/dist/types/plugins/render/render.d.ts +3 -2
  52. package/dist/types/plugins/render/ssrCache.d.ts +7 -11
  53. package/dist/types/plugins/render/ssrRender.d.ts +10 -10
  54. package/dist/types/types/config/html.d.ts +11 -0
  55. package/dist/types/types/config/output.d.ts +8 -0
  56. package/dist/types/types/render.d.ts +7 -4
  57. package/dist/types/types/requestHandler.d.ts +41 -0
  58. package/dist/types/types/server.d.ts +13 -4
  59. package/dist/types/utils/error.d.ts +2 -2
  60. package/dist/types/utils/transformStream.d.ts +1 -1
  61. package/package.json +7 -8
  62. package/dist/cjs/plugins/monitor.js +0 -87
  63. package/dist/cjs/plugins/render/serverTiming.js +0 -40
  64. package/dist/esm/plugins/monitor.js +0 -120
  65. package/dist/esm/plugins/render/serverTiming.js +0 -21
  66. package/dist/esm-node/plugins/monitor.js +0 -62
  67. package/dist/esm-node/plugins/render/serverTiming.js +0 -16
  68. package/dist/types/plugins/monitor.d.ts +0 -9
  69. package/dist/types/plugins/render/serverTiming.d.ts +0 -7
@@ -77,7 +77,7 @@ const loadBundle = async (filepath, logger) => {
77
77
  return void 0;
78
78
  }
79
79
  return dynamicImport(filepath).catch((e) => {
80
- logger.error(`Load ${filepath} bundle failed, error = %s`, e instanceof Error ? e.stack || e.message : e);
80
+ logger === null || logger === void 0 ? void 0 : logger.error(`Load ${filepath} bundle failed, error = %s`, e instanceof Error ? e.stack || e.message : e);
81
81
  return void 0;
82
82
  });
83
83
  };
@@ -20,7 +20,8 @@ var constants_exports = {};
20
20
  __export(constants_exports, {
21
21
  AGGRED_DIR: () => AGGRED_DIR,
22
22
  REPLACE_REG: () => REPLACE_REG,
23
- ServerReportTimings: () => ServerReportTimings,
23
+ SERVER_TIMING: () => SERVER_TIMING,
24
+ ServerTimings: () => ServerTimings,
24
25
  X_MODERNJS_RENDER: () => X_MODERNJS_RENDER,
25
26
  X_RENDER_CACHE: () => X_RENDER_CACHE
26
27
  });
@@ -42,20 +43,22 @@ const REPLACE_REG = {
42
43
  body: "</body>"
43
44
  }
44
45
  };
45
- var ServerReportTimings;
46
- (function(ServerReportTimings2) {
47
- ServerReportTimings2["SERVER_HANDLE_REQUEST"] = "server-handle-request";
48
- ServerReportTimings2["SERVER_MIDDLEWARE"] = "server-middleware";
49
- ServerReportTimings2["SERVER_HOOK_AFTER_RENDER"] = "server-hook-after-render";
50
- ServerReportTimings2["SERVER_HOOK_AFTER_MATCH"] = "server-hook-after-match";
51
- })(ServerReportTimings || (ServerReportTimings = {}));
46
+ var ServerTimings;
47
+ (function(ServerTimings2) {
48
+ ServerTimings2["SERVER_HANDLE_REQUEST"] = "server-handle-request";
49
+ ServerTimings2["SERVER_MIDDLEWARE"] = "server-middleware";
50
+ ServerTimings2["SERVER_HOOK_AFTER_RENDER"] = "server-hook-after-render";
51
+ ServerTimings2["SERVER_HOOK_AFTER_MATCH"] = "server-hook-after-match";
52
+ })(ServerTimings || (ServerTimings = {}));
53
+ const SERVER_TIMING = "Server-Timing";
52
54
  const X_RENDER_CACHE = "x-render-cache";
53
55
  const X_MODERNJS_RENDER = "x-modernjs-render";
54
56
  // Annotate the CommonJS export names for ESM import in node:
55
57
  0 && (module.exports = {
56
58
  AGGRED_DIR,
57
59
  REPLACE_REG,
58
- ServerReportTimings,
60
+ SERVER_TIMING,
61
+ ServerTimings,
59
62
  X_MODERNJS_RENDER,
60
63
  X_RENDER_CACHE
61
64
  });
package/dist/cjs/index.js CHANGED
@@ -36,6 +36,7 @@ __reExport(src_exports, require("./types/plugin"), module.exports);
36
36
  __reExport(src_exports, require("./types/render"), module.exports);
37
37
  __reExport(src_exports, require("@modern-js/plugin"), module.exports);
38
38
  __reExport(src_exports, require("./types/config"), module.exports);
39
+ __reExport(src_exports, require("./types/requestHandler"), module.exports);
39
40
  // Annotate the CommonJS export names for ESM import in node:
40
41
  0 && (module.exports = {
41
42
  AGGRED_DIR,
@@ -48,5 +49,6 @@ __reExport(src_exports, require("./types/config"), module.exports);
48
49
  ...require("./types/plugin"),
49
50
  ...require("./types/render"),
50
51
  ...require("@modern-js/plugin"),
51
- ...require("./types/config")
52
+ ...require("./types/config"),
53
+ ...require("./types/requestHandler")
52
54
  });
@@ -40,7 +40,7 @@ class CustomServer {
40
40
  getHookMiddleware(entryName, routes) {
41
41
  return async (c, next) => {
42
42
  const routeInfo = routes.find((route) => route.entryName === entryName);
43
- const reporter = c.get("reporter");
43
+ const monitors = c.get("monitors");
44
44
  const baseHookCtx = (0, import_base.createBaseHookContext)(c);
45
45
  const afterMatchCtx = (0, import_context.getAfterMatchCtx)(entryName, baseHookCtx);
46
46
  const getCost = (0, import_time.time)();
@@ -48,7 +48,7 @@ class CustomServer {
48
48
  onLast: noop
49
49
  });
50
50
  const cost = getCost();
51
- cost && (reporter === null || reporter === void 0 ? void 0 : reporter.reportTiming(import_constants.ServerReportTimings.SERVER_HOOK_AFTER_MATCH, cost));
51
+ cost && (monitors === null || monitors === void 0 ? void 0 : monitors.timing(import_constants.ServerTimings.SERVER_HOOK_AFTER_MATCH, cost));
52
52
  const { url, status } = afterMatchCtx.router;
53
53
  if (url) {
54
54
  return c.redirect(url, status);
@@ -88,7 +88,7 @@ class CustomServer {
88
88
  onLast: noop
89
89
  });
90
90
  const cost2 = getCost2();
91
- cost2 && (reporter === null || reporter === void 0 ? void 0 : reporter.reportTiming(import_constants.ServerReportTimings.SERVER_HOOK_AFTER_RENDER, cost2));
91
+ cost2 && (monitors === null || monitors === void 0 ? void 0 : monitors.timing(import_constants.ServerTimings.SERVER_HOOK_AFTER_RENDER, cost2));
92
92
  if (afterRenderCtx.response.private_overrided) {
93
93
  return void 0;
94
94
  }
@@ -107,7 +107,7 @@ class CustomServer {
107
107
  }
108
108
  return async (c, next) => {
109
109
  var _c_env_node_res, _c_env_node, _c_env;
110
- const reporter = c.get("reporter");
110
+ const monitors = c.get("monitors");
111
111
  const locals = {};
112
112
  const resArgs = {
113
113
  headers: new Headers()
@@ -116,7 +116,7 @@ class CustomServer {
116
116
  const getCost = (0, import_time.time)();
117
117
  await serverMiddleware(customMiddlewareCtx);
118
118
  const cost = getCost();
119
- cost && (reporter === null || reporter === void 0 ? void 0 : reporter.reportTiming(import_constants.ServerReportTimings.SERVER_MIDDLEWARE, cost));
119
+ cost && (monitors === null || monitors === void 0 ? void 0 : monitors.timing(import_constants.ServerTimings.SERVER_MIDDLEWARE, cost));
120
120
  c.set("locals", locals);
121
121
  if (isRedirect(resArgs.headers, resArgs.status)) {
122
122
  return c.redirect(resArgs.headers.get("Location") || "", resArgs.status || 302);
@@ -21,8 +21,10 @@ __export(plugins_exports, {
21
21
  faviconPlugin: () => import_favicon.faviconPlugin,
22
22
  getLoaderCtx: () => import_customServer.getLoaderCtx,
23
23
  getRenderHandler: () => import_render.getRenderHandler,
24
+ initMonitorsPlugin: () => import_monitors.initMonitorsPlugin,
25
+ injectServerTiming: () => import_monitors.injectServerTiming,
26
+ injectloggerPluigin: () => import_monitors.injectloggerPluigin,
24
27
  logPlugin: () => import_log.logPlugin,
25
- monitorPlugin: () => import_monitor.monitorPlugin,
26
28
  processedByPlugin: () => import_processedBy.processedByPlugin,
27
29
  renderPlugin: () => import_render.renderPlugin
28
30
  });
@@ -32,14 +34,16 @@ var import_favicon = require("./favicon");
32
34
  var import_processedBy = require("./processedBy");
33
35
  var import_customServer = require("./customServer");
34
36
  var import_log = require("./log");
35
- var import_monitor = require("./monitor");
37
+ var import_monitors = require("./monitors");
36
38
  // Annotate the CommonJS export names for ESM import in node:
37
39
  0 && (module.exports = {
38
40
  faviconPlugin,
39
41
  getLoaderCtx,
40
42
  getRenderHandler,
43
+ initMonitorsPlugin,
44
+ injectServerTiming,
45
+ injectloggerPluigin,
41
46
  logPlugin,
42
- monitorPlugin,
43
47
  processedByPlugin,
44
48
  renderPlugin
45
49
  });
@@ -62,13 +62,13 @@ function log(fn, prefix, method, path, status = 0, elapsed) {
62
62
  function logHandler() {
63
63
  return async function logger(c, next) {
64
64
  const { method } = c.req;
65
- const logger2 = c.get("logger");
66
- if (!logger2) {
65
+ const monitors = c.get("monitors");
66
+ if (!monitors) {
67
67
  await next();
68
68
  return;
69
69
  }
70
70
  const path = (0, import_utils.getPathname)(c.req.raw);
71
- const logFn = logger2.debug;
71
+ const logFn = monitors.debug;
72
72
  log(logFn, "<--", method, path);
73
73
  const start = Date.now();
74
74
  await next();
@@ -0,0 +1,183 @@
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 monitors_exports = {};
20
+ __export(monitors_exports, {
21
+ initMonitorsPlugin: () => initMonitorsPlugin,
22
+ initReporter: () => initReporter,
23
+ injectServerTiming: () => injectServerTiming,
24
+ injectloggerPluigin: () => injectloggerPluigin
25
+ });
26
+ module.exports = __toCommonJS(monitors_exports);
27
+ var import_time = require("@modern-js/runtime-utils/time");
28
+ var import_constants = require("../constants");
29
+ function createMonitors() {
30
+ const coreMonitors = [];
31
+ const log = (level, message, args) => {
32
+ const event = {
33
+ type: "log",
34
+ payload: {
35
+ level,
36
+ message,
37
+ args
38
+ }
39
+ };
40
+ coreMonitors.forEach((monitor) => monitor(event));
41
+ };
42
+ const mointors = {
43
+ push(monitor) {
44
+ coreMonitors.push(monitor);
45
+ },
46
+ error(message, ...args) {
47
+ log("error", message, args);
48
+ },
49
+ warn(message, ...args) {
50
+ log("warn", message, args);
51
+ },
52
+ debug(message, ...args) {
53
+ log("debug", message, args);
54
+ },
55
+ info(message, ...args) {
56
+ log("info", message, args);
57
+ },
58
+ timing(name, dur, desc) {
59
+ const event = {
60
+ type: "timing",
61
+ payload: {
62
+ name,
63
+ dur,
64
+ desc
65
+ }
66
+ };
67
+ coreMonitors.forEach((monitor) => monitor(event));
68
+ }
69
+ };
70
+ return mointors;
71
+ }
72
+ const initMonitorsPlugin = () => ({
73
+ name: "@modern-js/init-mointor",
74
+ setup(api) {
75
+ return {
76
+ prepare() {
77
+ const { middlewares } = api.useAppContext();
78
+ middlewares.push({
79
+ name: "init-monitor",
80
+ handler: async (c, next) => {
81
+ if (!c.get("monitors")) {
82
+ const monitors = createMonitors();
83
+ c.set("monitors", monitors);
84
+ }
85
+ return next();
86
+ },
87
+ order: "pre"
88
+ });
89
+ }
90
+ };
91
+ }
92
+ });
93
+ const injectloggerPluigin = (logger) => ({
94
+ name: "@modern-js/inject-logger",
95
+ setup(api) {
96
+ return {
97
+ prepare() {
98
+ const { middlewares } = api.useAppContext();
99
+ middlewares.push({
100
+ name: "inject-logger",
101
+ handler: async (c, next) => {
102
+ if (!c.get("logger")) {
103
+ c.set("logger", logger);
104
+ }
105
+ const pathname = c.req.path;
106
+ const loggerMonitor = (event) => {
107
+ if (event.type === "log") {
108
+ const { level, message, args } = event.payload;
109
+ logger[level](message, ...args || []);
110
+ }
111
+ if (event.type === "timing") {
112
+ const { name, dur, desc } = event.payload;
113
+ if (desc) {
114
+ logger.debug(`%s Debug - ${name}, cost: %s, req.url = %s `, desc, dur, pathname);
115
+ } else {
116
+ logger.debug(`Debug - ${name}, cost: %s, req.url = %s`, dur, pathname);
117
+ }
118
+ }
119
+ };
120
+ const monitors = c.get("monitors");
121
+ monitors === null || monitors === void 0 ? void 0 : monitors.push(loggerMonitor);
122
+ return next();
123
+ }
124
+ });
125
+ }
126
+ };
127
+ }
128
+ });
129
+ const injectServerTiming = (metaName = "modern-js") => ({
130
+ name: "@modern-js/inject-server-timing",
131
+ setup(api) {
132
+ return {
133
+ prepare() {
134
+ const { middlewares } = api.useAppContext();
135
+ middlewares.push({
136
+ name: "inject-server-timing",
137
+ handler: async (c, next) => {
138
+ const serverTimings = [];
139
+ const timingMonitor = (event) => {
140
+ if (event.type === "timing") {
141
+ serverTimings.push(event.payload);
142
+ }
143
+ };
144
+ const monitors = c.get("monitors");
145
+ monitors === null || monitors === void 0 ? void 0 : monitors.push(timingMonitor);
146
+ await next();
147
+ serverTimings.forEach((serverTiming) => {
148
+ const { name, desc, dur } = serverTiming;
149
+ const _name = `bd-${metaName}-${name}`;
150
+ const value = `${_name};${desc ? `decs="${desc}";` : ""} dur=${dur}`;
151
+ c.header(import_constants.SERVER_TIMING, value, {
152
+ append: true
153
+ });
154
+ });
155
+ }
156
+ });
157
+ }
158
+ };
159
+ }
160
+ });
161
+ function initReporter(entryName) {
162
+ return async (c, next) => {
163
+ const reporter = c.get("reporter");
164
+ if (!reporter) {
165
+ await next();
166
+ return;
167
+ }
168
+ await reporter.init({
169
+ entryName
170
+ });
171
+ const getCost = (0, import_time.time)();
172
+ await next();
173
+ const cost = getCost();
174
+ reporter.reportTiming(import_constants.ServerTimings.SERVER_HANDLE_REQUEST, cost);
175
+ };
176
+ }
177
+ // Annotate the CommonJS export names for ESM import in node:
178
+ 0 && (module.exports = {
179
+ initMonitorsPlugin,
180
+ initReporter,
181
+ injectServerTiming,
182
+ injectloggerPluigin
183
+ });
@@ -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, logger, serverManifest }) => {
25
+ const dataHandler = async (request, { routeInfo, serverRoutes, reporter, onError, onTiming, serverManifest }) => {
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) {
@@ -33,9 +33,10 @@ const dataHandler = async (request, { routeInfo, serverRoutes, reporter, logger,
33
33
  request,
34
34
  serverRoutes,
35
35
  context: {
36
- logger,
37
36
  reporter
38
37
  },
38
+ onTiming,
39
+ onError,
39
40
  routes
40
41
  });
41
42
  return response;
@@ -23,7 +23,7 @@ __export(render_exports, {
23
23
  });
24
24
  module.exports = __toCommonJS(render_exports);
25
25
  var import_constants = require("@modern-js/utils/universal/constants");
26
- var import_monitor = require("../monitor");
26
+ var import_monitors = require("../monitors");
27
27
  var import_utils = require("../../utils");
28
28
  var import_customServer = require("../customServer");
29
29
  var import_render = require("./render");
@@ -56,7 +56,7 @@ const renderPlugin = (options = {}) => ({
56
56
  const urlPath = originUrlPath.endsWith("/") ? `${originUrlPath}*` : `${originUrlPath}/*`;
57
57
  middlewares.push({
58
58
  name: "init-reporter",
59
- handler: (0, import_monitor.initReporter)(entryName || import_constants.MAIN_ENTRY_NAME)
59
+ handler: (0, import_monitors.initReporter)(entryName || import_constants.MAIN_ENTRY_NAME)
60
60
  });
61
61
  const customServerHookMiddleware = customServer.getHookMiddleware(entryName || "main", routes);
62
62
  middlewares.push({
@@ -88,6 +88,7 @@ function createRenderHandler(render) {
88
88
  var _c_env_node;
89
89
  const logger = c.get("logger");
90
90
  const reporter = c.get("reporter");
91
+ const monitors = c.get("monitors");
91
92
  const templates = c.get("templates") || {};
92
93
  const serverManifest = c.get("serverManifest") || {};
93
94
  const locals = c.get("locals");
@@ -96,8 +97,9 @@ function createRenderHandler(render) {
96
97
  const request = c.req.raw;
97
98
  const nodeReq = (_c_env_node = c.env.node) === null || _c_env_node === void 0 ? void 0 : _c_env_node.req;
98
99
  const res = await render(request, {
99
- logger,
100
100
  nodeReq,
101
+ monitors,
102
+ logger,
101
103
  reporter,
102
104
  templates,
103
105
  metrics,
@@ -120,7 +122,7 @@ async function getRenderHandler({ pwd, routes, config, cacheConfig, metaName, st
120
122
  const render = (0, import_render.createRender)({
121
123
  routes,
122
124
  pwd,
123
- // TODO: need static Genrate
125
+ config,
124
126
  staticGenerate,
125
127
  cacheConfig,
126
128
  forceCSR,
@@ -56,9 +56,17 @@ function matchRoute(router, request) {
56
56
  const result = matched[0][0];
57
57
  return result || [];
58
58
  }
59
- async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig, forceCSR, nonce, onFallback: onFallbackFn }) {
59
+ function getHeadersWithoutCookie(headers) {
60
+ const _headers = {
61
+ ...headers,
62
+ cookie: void 0
63
+ };
64
+ delete _headers.cookie;
65
+ return _headers;
66
+ }
67
+ async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig, forceCSR, config, onFallback: onFallbackFn }) {
60
68
  const router = getRouter(routes);
61
- return async (req, { logger, nodeReq, reporter, templates, serverManifest, locals, metrics, loaderContext }) => {
69
+ return async (req, { logger, reporter, metrics, monitors, nodeReq, templates, serverManifest, locals, loaderContext }) => {
62
70
  const [routeInfo, params] = matchRoute(router, req);
63
71
  const onFallback = async (reason, error) => {
64
72
  return onFallbackFn === null || onFallbackFn === void 0 ? void 0 : onFallbackFn(reason, {
@@ -85,8 +93,16 @@ async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig
85
93
  });
86
94
  }
87
95
  const renderMode = await getRenderMode(req, metaName || "modern-js", routeInfo.isSSR, forceCSR, nodeReq, onFallback);
88
- const onError = async (e) => {
89
- (0, import_utils.onError)(import_utils.ErrorDigest.ERENDER, e, logger, req);
96
+ const pathname = (0, import_utils.getPathname)(req);
97
+ const headerData = (0, import_utils.parseHeaders)(req);
98
+ const onError = (e) => {
99
+ monitors === null || monitors === void 0 ? void 0 : monitors.error(`SSR Error - ${e instanceof Error ? e.name : e}, error = %s, req.url = %s, req.headers = %o`, e instanceof Error ? e.stack || e.message : e, pathname, getHeadersWithoutCookie(headerData));
100
+ };
101
+ const onTiming = (name, dur) => {
102
+ monitors === null || monitors === void 0 ? void 0 : monitors.timing(name, dur, "SSR");
103
+ };
104
+ const onBoundError = async (e) => {
105
+ (0, import_utils.onError)(import_utils.ErrorDigest.ERENDER, e, monitors, req);
90
106
  await (onFallback === null || onFallback === void 0 ? void 0 : onFallback("error", e));
91
107
  };
92
108
  const renderOptions = {
@@ -94,32 +110,33 @@ async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig
94
110
  html,
95
111
  routeInfo,
96
112
  staticGenerate: staticGenerate || false,
97
- metaName: metaName || "modern-js",
98
- nonce,
99
- logger,
113
+ config,
100
114
  nodeReq,
101
115
  cacheConfig,
102
116
  reporter,
103
117
  serverRoutes: routes,
104
118
  params,
119
+ logger,
120
+ metrics,
105
121
  locals,
106
122
  serverManifest,
107
- metrics,
108
- loaderContext: loaderContext || /* @__PURE__ */ new Map()
123
+ loaderContext: loaderContext || /* @__PURE__ */ new Map(),
124
+ onError,
125
+ onTiming
109
126
  };
127
+ let response;
110
128
  switch (renderMode) {
111
129
  case "data":
112
- let response = await (0, import_dataHandler.dataHandler)(req, renderOptions);
113
- if (!response) {
114
- response = await renderHandler(req, renderOptions, "ssr", onError);
115
- }
116
- return response;
130
+ response = await (0, import_dataHandler.dataHandler)(req, renderOptions) || await renderHandler(req, renderOptions, "ssr", onBoundError);
131
+ break;
117
132
  case "ssr":
118
133
  case "csr":
119
- return renderHandler(req, renderOptions, renderMode, onError);
134
+ response = await renderHandler(req, renderOptions, renderMode, onBoundError);
135
+ break;
120
136
  default:
121
137
  throw new Error(`Unknown render mode: ${renderMode}`);
122
138
  }
139
+ return response;
123
140
  };
124
141
  }
125
142
  async function renderHandler(request, options, mode, onError) {