@modern-js/prod-server 2.40.0 → 2.42.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 (62) hide show
  1. package/dist/cjs/libs/hook-api/index.js +2 -1
  2. package/dist/cjs/libs/hook-api/index.worker.js +2 -1
  3. package/dist/cjs/server/modernServer.js +1 -1
  4. package/dist/cjs/workerServer.js +34 -10
  5. package/dist/esm/libs/hook-api/index.js +2 -1
  6. package/dist/esm/libs/hook-api/index.worker.js +2 -1
  7. package/dist/esm/server/modernServer.js +1 -1
  8. package/dist/esm/workerServer.js +75 -13
  9. package/dist/esm-node/libs/hook-api/index.js +2 -1
  10. package/dist/esm-node/libs/hook-api/index.worker.js +2 -1
  11. package/dist/esm-node/server/modernServer.js +1 -1
  12. package/dist/esm-node/workerServer.js +34 -10
  13. package/dist/types/constants.d.ts +20 -20
  14. package/dist/types/index.d.ts +1 -1
  15. package/dist/types/libs/context/context.d.ts +50 -50
  16. package/dist/types/libs/context/index.d.ts +1 -1
  17. package/dist/types/libs/hook-api/base.d.ts +43 -43
  18. package/dist/types/libs/hook-api/index.d.ts +3 -3
  19. package/dist/types/libs/hook-api/index.worker.d.ts +13 -13
  20. package/dist/types/libs/hook-api/route.d.ts +8 -8
  21. package/dist/types/libs/hook-api/template.d.ts +18 -18
  22. package/dist/types/libs/hook-api/templateForStream.d.ts +6 -11
  23. package/dist/types/libs/loadConfig.d.ts +5 -9
  24. package/dist/types/libs/metrics.d.ts +1 -1
  25. package/dist/types/libs/preload/flushServerHeader.d.ts +6 -12
  26. package/dist/types/libs/preload/index.d.ts +1 -1
  27. package/dist/types/libs/preload/parseLinks.d.ts +9 -13
  28. package/dist/types/libs/preload/shouldFlushServerHeader.d.ts +1 -1
  29. package/dist/types/libs/preload/transformLinks2String.d.ts +1 -1
  30. package/dist/types/libs/proxy.d.ts +3 -3
  31. package/dist/types/libs/render/cache/__tests__/cache.fun.test.d.ts +1 -1
  32. package/dist/types/libs/render/cache/__tests__/cache.test.d.ts +1 -1
  33. package/dist/types/libs/render/cache/__tests__/cacheable.d.ts +58 -58
  34. package/dist/types/libs/render/cache/__tests__/error-configuration.d.ts +23 -23
  35. package/dist/types/libs/render/cache/__tests__/matched-cache.d.ts +101 -101
  36. package/dist/types/libs/render/cache/index.d.ts +1 -1
  37. package/dist/types/libs/render/cache/page-caches/index.d.ts +1 -1
  38. package/dist/types/libs/render/cache/page-caches/lru.d.ts +12 -12
  39. package/dist/types/libs/render/cache/spr.d.ts +16 -16
  40. package/dist/types/libs/render/cache/type.d.ts +33 -33
  41. package/dist/types/libs/render/cache/util.d.ts +3 -3
  42. package/dist/types/libs/render/index.d.ts +11 -11
  43. package/dist/types/libs/render/measure.d.ts +6 -6
  44. package/dist/types/libs/render/reader.d.ts +13 -13
  45. package/dist/types/libs/render/ssr.d.ts +9 -9
  46. package/dist/types/libs/render/static.d.ts +1 -1
  47. package/dist/types/libs/render/type.d.ts +18 -18
  48. package/dist/types/libs/render/utils.d.ts +1 -1
  49. package/dist/types/libs/reporter.d.ts +1 -1
  50. package/dist/types/libs/route/index.d.ts +10 -10
  51. package/dist/types/libs/route/matcher.d.ts +12 -12
  52. package/dist/types/libs/route/route.d.ts +11 -11
  53. package/dist/types/libs/serveFile.d.ts +3 -3
  54. package/dist/types/libs/serverTiming.d.ts +8 -8
  55. package/dist/types/renderHtml.d.ts +15 -15
  56. package/dist/types/server/index.d.ts +46 -48
  57. package/dist/types/server/modernServer.d.ts +57 -69
  58. package/dist/types/server/modernServerSplit.d.ts +1 -1
  59. package/dist/types/type.d.ts +48 -48
  60. package/dist/types/utils.d.ts +8 -8
  61. package/dist/types/workerServer.d.ts +45 -44
  62. package/package.json +14 -14
@@ -43,10 +43,11 @@ const createAfterMatchContext = (context, entryName) => {
43
43
  router: new import_route.RouteAPI(entryName)
44
44
  };
45
45
  };
46
- const createAfterRenderContext = (context, content) => {
46
+ const createAfterRenderContext = (context, route, content) => {
47
47
  const baseContext = base(context);
48
48
  return {
49
49
  ...baseContext,
50
+ route,
50
51
  template: new import_template.TemplateAPI(content)
51
52
  };
52
53
  };
@@ -85,10 +85,11 @@ const createAfterMatchContext = (context, entryName) => {
85
85
  router: new import_route.RouteAPI(entryName)
86
86
  };
87
87
  };
88
- const createAfterRenderContext = (context, content) => {
88
+ const createAfterRenderContext = (context, route, content) => {
89
89
  const baseContext = base(context);
90
90
  return {
91
91
  ...baseContext,
92
+ route,
92
93
  template: new import_template.TemplateAPI(content)
93
94
  };
94
95
  };
@@ -373,7 +373,7 @@ class ModernServer {
373
373
  return;
374
374
  }
375
375
  if (route.entryName && this.runMode === import_constants.RUN_MODE.FULL) {
376
- const afterRenderContext = (0, import_hook_api.createAfterRenderContext)(context, response.toString());
376
+ const afterRenderContext = (0, import_hook_api.createAfterRenderContext)(context, route, response.toString());
377
377
  const end2 = (0, import_time.time)();
378
378
  await this.runner.afterRender(afterRenderContext, {
379
379
  onLast: import_utils2.noop
@@ -24,11 +24,28 @@ __export(workerServer_exports, {
24
24
  module.exports = __toCommonJS(workerServer_exports);
25
25
  var import_define_property = require("@swc/helpers/_/_define_property");
26
26
  var import_plugin = require("@modern-js/plugin");
27
- var import_logger = require("@modern-js/utils/logger");
28
27
  var import_hook_api = require("./libs/hook-api/index.worker");
29
28
  var import_route = require("./libs/route");
30
29
  var import_metrics = require("./libs/metrics");
31
30
  var import_reporter = require("./libs/reporter");
31
+ const createLogger = () => ({
32
+ error(message, ...args) {
33
+ console.error(message, ...args);
34
+ },
35
+ info(message, ...args) {
36
+ console.error(message, ...args);
37
+ },
38
+ warn(message, ...args) {
39
+ console.warn(message, ...args);
40
+ },
41
+ debug(message, ...args) {
42
+ console.debug(message, ...args);
43
+ },
44
+ log(message, ...args) {
45
+ console.log(message, ...args);
46
+ }
47
+ });
48
+ const calcFallback = (metaName) => `x-${metaName.split(/[-_]/)[0]}-ssr-fallback`;
32
49
  class ReturnResponse {
33
50
  /**
34
51
  * Iterate a Object
@@ -91,7 +108,8 @@ const checkIsSent = (context) => {
91
108
  const middlewarePipeline = (0, import_plugin.createAsyncPipeline)();
92
109
  const createHandler = (manifest) => {
93
110
  const routeMgr = new import_route.RouteMatchManager();
94
- const { pages, routes, options: manifestOpts = {} } = manifest;
111
+ const { pages, routes, options: manifestOpts } = manifest;
112
+ const { metaName = "modern-js", forceCSR = false } = manifestOpts || {};
95
113
  routeMgr.reset(routes);
96
114
  return async (options) => {
97
115
  var _page_serverHooks_afterMatch, _page_serverHooks;
@@ -103,14 +121,13 @@ const createHandler = (manifest) => {
103
121
  }
104
122
  const entryName = pageMatch.spec.urlPath;
105
123
  const page = pages[entryName];
106
- if (manifestOpts.forceCSR && url.searchParams.get("csr") === "1") {
124
+ if (forceCSR && url.searchParams.get("csr") === "1") {
107
125
  return createResponse(page.template);
108
126
  }
109
- const logger = (0, import_logger.createLogger)({
110
- level: "warn"
111
- });
127
+ const logger = createLogger();
112
128
  const metrics = import_metrics.metrics;
113
129
  const reporter = import_reporter.defaultReporter;
130
+ const route = pageMatch.generate(url.pathname);
114
131
  const hookContext = createWorkerHookContext(request.url, logger, metrics, reporter);
115
132
  const afterMatchHookContext = (0, import_hook_api.createAfterMatchContext)(hookContext, entryName);
116
133
  page === null || page === void 0 ? void 0 : (_page_serverHooks = page.serverHooks) === null || _page_serverHooks === void 0 ? void 0 : (_page_serverHooks_afterMatch = _page_serverHooks.afterMatch) === null || _page_serverHooks_afterMatch === void 0 ? void 0 : _page_serverHooks_afterMatch.call(_page_serverHooks, afterMatchHookContext, () => void 0);
@@ -125,6 +142,9 @@ const createHandler = (manifest) => {
125
142
  if (checkIsSent(hookContext)) {
126
143
  return new ReturnResponse(hookContext.res.body || "Unkown body", hookContext.res.status, hookContext.res.headers);
127
144
  }
145
+ if (forceCSR && middlewarsHookContext.request.headers[calcFallback(metaName)]) {
146
+ return createResponse(page.template);
147
+ }
128
148
  const responseLike = {
129
149
  headers: {},
130
150
  statusCode: 200,
@@ -158,7 +178,7 @@ const createHandler = (manifest) => {
158
178
  }
159
179
  };
160
180
  const body = await page.serverRender(serverRenderContext);
161
- const afterRenderHookContext = (0, import_hook_api.createAfterRenderContext)(hookContext, body);
181
+ const afterRenderHookContext = (0, import_hook_api.createAfterRenderContext)(hookContext, route, body);
162
182
  (_page_serverHooks2 = page.serverHooks) === null || _page_serverHooks2 === void 0 ? void 0 : (_page_serverHooks_afterRender = _page_serverHooks2.afterRender) === null || _page_serverHooks_afterRender === void 0 ? void 0 : _page_serverHooks_afterRender.call(_page_serverHooks2, afterRenderHookContext, () => void 0);
163
183
  if (checkIsSent(hookContext)) {
164
184
  return new ReturnResponse(hookContext.res.body || "Unkown body", hookContext.res.status, hookContext.res.headers);
@@ -217,6 +237,7 @@ function createWorkerHookContext(url, logger, metrics, reporter) {
217
237
  reporter
218
238
  };
219
239
  }
240
+ let appliedMiddlewares = false;
220
241
  function applyMiddlewares(ctx, middleware) {
221
242
  if (middleware) {
222
243
  const middlewares = (() => {
@@ -228,9 +249,12 @@ function applyMiddlewares(ctx, middleware) {
228
249
  ];
229
250
  }
230
251
  })();
231
- middlewares.forEach((middleware2) => {
232
- middlewarePipeline.use(middleware2);
233
- });
252
+ if (!appliedMiddlewares) {
253
+ middlewares.forEach((middleware2) => {
254
+ middlewarePipeline.use(middleware2);
255
+ });
256
+ appliedMiddlewares = true;
257
+ }
234
258
  middlewarePipeline.run(ctx, {
235
259
  onLast: () => void 0
236
260
  });
@@ -18,9 +18,10 @@ var createAfterMatchContext = function(context, entryName) {
18
18
  router: new RouteAPI(entryName)
19
19
  });
20
20
  };
21
- var createAfterRenderContext = function(context, content) {
21
+ var createAfterRenderContext = function(context, route, content) {
22
22
  var baseContext = base(context);
23
23
  return _object_spread_props(_object_spread({}, baseContext), {
24
+ route,
24
25
  template: new TemplateAPI(content)
25
26
  });
26
27
  };
@@ -82,9 +82,10 @@ var createAfterMatchContext = function(context, entryName) {
82
82
  router: new RouteAPI(entryName)
83
83
  });
84
84
  };
85
- var createAfterRenderContext = function(context, content) {
85
+ var createAfterRenderContext = function(context, route, content) {
86
86
  var baseContext = base(context);
87
87
  return _object_spread_props(_object_spread({}, baseContext), {
88
+ route,
88
89
  template: new TemplateAPI(content)
89
90
  });
90
91
  };
@@ -800,7 +800,7 @@ var ModernServer = /* @__PURE__ */ function() {
800
800
  3,
801
801
  10
802
802
  ];
803
- afterRenderContext = createAfterRenderContext(context, response.toString());
803
+ afterRenderContext = createAfterRenderContext(context, route, response.toString());
804
804
  end3 = time();
805
805
  return [
806
806
  4,
@@ -3,13 +3,65 @@ import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
3
3
  import { _ as _create_class } from "@swc/helpers/_/_create_class";
4
4
  import { _ as _define_property } from "@swc/helpers/_/_define_property";
5
5
  import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
6
+ import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
6
7
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
7
8
  import { createAsyncPipeline } from "@modern-js/plugin";
8
- import { createLogger } from "@modern-js/utils/logger";
9
9
  import { createAfterMatchContext, createAfterRenderContext, createMiddlewareContext } from "./libs/hook-api/index.worker";
10
10
  import { RouteMatchManager } from "./libs/route";
11
11
  import { metrics as defaultMetrics } from "./libs/metrics";
12
12
  import { defaultReporter } from "./libs/reporter";
13
+ var createLogger = function() {
14
+ return {
15
+ error: function error(message) {
16
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
17
+ args[_key - 1] = arguments[_key];
18
+ }
19
+ var _console;
20
+ (_console = console).error.apply(_console, [
21
+ message
22
+ ].concat(_to_consumable_array(args)));
23
+ },
24
+ info: function info(message) {
25
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
26
+ args[_key - 1] = arguments[_key];
27
+ }
28
+ var _console;
29
+ (_console = console).error.apply(_console, [
30
+ message
31
+ ].concat(_to_consumable_array(args)));
32
+ },
33
+ warn: function warn(message) {
34
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
35
+ args[_key - 1] = arguments[_key];
36
+ }
37
+ var _console;
38
+ (_console = console).warn.apply(_console, [
39
+ message
40
+ ].concat(_to_consumable_array(args)));
41
+ },
42
+ debug: function debug(message) {
43
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
44
+ args[_key - 1] = arguments[_key];
45
+ }
46
+ var _console;
47
+ (_console = console).debug.apply(_console, [
48
+ message
49
+ ].concat(_to_consumable_array(args)));
50
+ },
51
+ log: function log(message) {
52
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
53
+ args[_key - 1] = arguments[_key];
54
+ }
55
+ var _console;
56
+ (_console = console).log.apply(_console, [
57
+ message
58
+ ].concat(_to_consumable_array(args)));
59
+ }
60
+ };
61
+ };
62
+ var calcFallback = function(metaName) {
63
+ return "x-".concat(metaName.split(/[-_]/)[0], "-ssr-fallback");
64
+ };
13
65
  var ReturnResponse = /* @__PURE__ */ function() {
14
66
  "use strict";
15
67
  function ReturnResponse2(body, status) {
@@ -88,11 +140,12 @@ var checkIsSent = function(context) {
88
140
  var middlewarePipeline = createAsyncPipeline();
89
141
  var createHandler = function(manifest) {
90
142
  var routeMgr = new RouteMatchManager();
91
- var pages = manifest.pages, routes = manifest.routes, tmp = manifest.options, manifestOpts = tmp === void 0 ? {} : tmp;
143
+ var pages = manifest.pages, routes = manifest.routes, manifestOpts = manifest.options;
144
+ var _ref = manifestOpts || {}, _ref_metaName = _ref.metaName, metaName = _ref_metaName === void 0 ? "modern-js" : _ref_metaName, _ref_forceCSR = _ref.forceCSR, forceCSR = _ref_forceCSR === void 0 ? false : _ref_forceCSR;
92
145
  routeMgr.reset(routes);
93
146
  return function() {
94
- var _ref = _async_to_generator(function(options) {
95
- var _page_serverHooks_afterMatch, _page_serverHooks, request, loadableStats, routeManifest, url, pageMatch, entryName, page, logger, metrics, reporter, hookContext, afterMatchHookContext, _page_serverHooks1, _page_serverHooks_afterRender, _page_serverHooks2, middlewarsHookContext, responseLike, params, baseUrl, serverRenderContext, body, afterRenderHookContext, e;
147
+ var _ref2 = _async_to_generator(function(options) {
148
+ var _page_serverHooks_afterMatch, _page_serverHooks, request, loadableStats, routeManifest, url, pageMatch, entryName, page, logger, metrics, reporter, route, hookContext, afterMatchHookContext, _page_serverHooks1, _page_serverHooks_afterRender, _page_serverHooks2, middlewarsHookContext, responseLike, params, baseUrl, serverRenderContext, body, afterRenderHookContext, e;
96
149
  function createServerRequest(url2, baseUrl2, request2, params2) {
97
150
  var pathname = url2.pathname, host = url2.host, searchParams = url2.searchParams;
98
151
  var rawHeaders = request2.headers;
@@ -125,17 +178,16 @@ var createHandler = function(manifest) {
125
178
  }
126
179
  entryName = pageMatch.spec.urlPath;
127
180
  page = pages[entryName];
128
- if (manifestOpts.forceCSR && url.searchParams.get("csr") === "1") {
181
+ if (forceCSR && url.searchParams.get("csr") === "1") {
129
182
  return [
130
183
  2,
131
184
  createResponse(page.template)
132
185
  ];
133
186
  }
134
- logger = createLogger({
135
- level: "warn"
136
- });
187
+ logger = createLogger();
137
188
  metrics = defaultMetrics;
138
189
  reporter = defaultReporter;
190
+ route = pageMatch.generate(url.pathname);
139
191
  hookContext = createWorkerHookContext(request.url, logger, metrics, reporter);
140
192
  afterMatchHookContext = createAfterMatchContext(hookContext, entryName);
141
193
  page === null || page === void 0 ? void 0 : (_page_serverHooks = page.serverHooks) === null || _page_serverHooks === void 0 ? void 0 : (_page_serverHooks_afterMatch = _page_serverHooks.afterMatch) === null || _page_serverHooks_afterMatch === void 0 ? void 0 : _page_serverHooks_afterMatch.call(_page_serverHooks, afterMatchHookContext, function() {
@@ -168,6 +220,12 @@ var createHandler = function(manifest) {
168
220
  new ReturnResponse(hookContext.res.body || "Unkown body", hookContext.res.status, hookContext.res.headers)
169
221
  ];
170
222
  }
223
+ if (forceCSR && middlewarsHookContext.request.headers[calcFallback(metaName)]) {
224
+ return [
225
+ 2,
226
+ createResponse(page.template)
227
+ ];
228
+ }
171
229
  responseLike = {
172
230
  headers: {},
173
231
  statusCode: 200,
@@ -206,7 +264,7 @@ var createHandler = function(manifest) {
206
264
  ];
207
265
  case 2:
208
266
  body = _state.sent();
209
- afterRenderHookContext = createAfterRenderContext(hookContext, body);
267
+ afterRenderHookContext = createAfterRenderContext(hookContext, route, body);
210
268
  (_page_serverHooks2 = page.serverHooks) === null || _page_serverHooks2 === void 0 ? void 0 : (_page_serverHooks_afterRender = _page_serverHooks2.afterRender) === null || _page_serverHooks_afterRender === void 0 ? void 0 : _page_serverHooks_afterRender.call(_page_serverHooks2, afterRenderHookContext, function() {
211
269
  return void 0;
212
270
  });
@@ -238,7 +296,7 @@ var createHandler = function(manifest) {
238
296
  });
239
297
  });
240
298
  return function(options) {
241
- return _ref.apply(this, arguments);
299
+ return _ref2.apply(this, arguments);
242
300
  };
243
301
  }();
244
302
  };
@@ -267,6 +325,7 @@ function createWorkerHookContext(url, logger, metrics, reporter) {
267
325
  reporter
268
326
  };
269
327
  }
328
+ var appliedMiddlewares = false;
270
329
  function applyMiddlewares(ctx, middleware) {
271
330
  if (middleware) {
272
331
  var middlewares = function() {
@@ -278,9 +337,12 @@ function applyMiddlewares(ctx, middleware) {
278
337
  ];
279
338
  }
280
339
  }();
281
- middlewares.forEach(function(middleware2) {
282
- middlewarePipeline.use(middleware2);
283
- });
340
+ if (!appliedMiddlewares) {
341
+ middlewares.forEach(function(middleware2) {
342
+ middlewarePipeline.use(middleware2);
343
+ });
344
+ appliedMiddlewares = true;
345
+ }
284
346
  middlewarePipeline.run(ctx, {
285
347
  onLast: function() {
286
348
  return void 0;
@@ -17,10 +17,11 @@ const createAfterMatchContext = (context, entryName) => {
17
17
  router: new RouteAPI(entryName)
18
18
  };
19
19
  };
20
- const createAfterRenderContext = (context, content) => {
20
+ const createAfterRenderContext = (context, route, content) => {
21
21
  const baseContext = base(context);
22
22
  return {
23
23
  ...baseContext,
24
+ route,
24
25
  template: new TemplateAPI(content)
25
26
  };
26
27
  };
@@ -59,10 +59,11 @@ const createAfterMatchContext = (context, entryName) => {
59
59
  router: new RouteAPI(entryName)
60
60
  };
61
61
  };
62
- const createAfterRenderContext = (context, content) => {
62
+ const createAfterRenderContext = (context, route, content) => {
63
63
  const baseContext = base(context);
64
64
  return {
65
65
  ...baseContext,
66
+ route,
66
67
  template: new TemplateAPI(content)
67
68
  };
68
69
  };
@@ -340,7 +340,7 @@ class ModernServer {
340
340
  return;
341
341
  }
342
342
  if (route.entryName && this.runMode === RUN_MODE.FULL) {
343
- const afterRenderContext = createAfterRenderContext(context, response.toString());
343
+ const afterRenderContext = createAfterRenderContext(context, route, response.toString());
344
344
  const end2 = time();
345
345
  await this.runner.afterRender(afterRenderContext, {
346
346
  onLast: noop
@@ -1,10 +1,27 @@
1
1
  import { _ as _define_property } from "@swc/helpers/_/_define_property";
2
2
  import { createAsyncPipeline } from "@modern-js/plugin";
3
- import { createLogger } from "@modern-js/utils/logger";
4
3
  import { createAfterMatchContext, createAfterRenderContext, createMiddlewareContext } from "./libs/hook-api/index.worker";
5
4
  import { RouteMatchManager } from "./libs/route";
6
5
  import { metrics as defaultMetrics } from "./libs/metrics";
7
6
  import { defaultReporter } from "./libs/reporter";
7
+ const createLogger = () => ({
8
+ error(message, ...args) {
9
+ console.error(message, ...args);
10
+ },
11
+ info(message, ...args) {
12
+ console.error(message, ...args);
13
+ },
14
+ warn(message, ...args) {
15
+ console.warn(message, ...args);
16
+ },
17
+ debug(message, ...args) {
18
+ console.debug(message, ...args);
19
+ },
20
+ log(message, ...args) {
21
+ console.log(message, ...args);
22
+ }
23
+ });
24
+ const calcFallback = (metaName) => `x-${metaName.split(/[-_]/)[0]}-ssr-fallback`;
8
25
  class ReturnResponse {
9
26
  /**
10
27
  * Iterate a Object
@@ -67,7 +84,8 @@ const checkIsSent = (context) => {
67
84
  const middlewarePipeline = createAsyncPipeline();
68
85
  const createHandler = (manifest) => {
69
86
  const routeMgr = new RouteMatchManager();
70
- const { pages, routes, options: manifestOpts = {} } = manifest;
87
+ const { pages, routes, options: manifestOpts } = manifest;
88
+ const { metaName = "modern-js", forceCSR = false } = manifestOpts || {};
71
89
  routeMgr.reset(routes);
72
90
  return async (options) => {
73
91
  var _page_serverHooks_afterMatch, _page_serverHooks;
@@ -79,14 +97,13 @@ const createHandler = (manifest) => {
79
97
  }
80
98
  const entryName = pageMatch.spec.urlPath;
81
99
  const page = pages[entryName];
82
- if (manifestOpts.forceCSR && url.searchParams.get("csr") === "1") {
100
+ if (forceCSR && url.searchParams.get("csr") === "1") {
83
101
  return createResponse(page.template);
84
102
  }
85
- const logger = createLogger({
86
- level: "warn"
87
- });
103
+ const logger = createLogger();
88
104
  const metrics = defaultMetrics;
89
105
  const reporter = defaultReporter;
106
+ const route = pageMatch.generate(url.pathname);
90
107
  const hookContext = createWorkerHookContext(request.url, logger, metrics, reporter);
91
108
  const afterMatchHookContext = createAfterMatchContext(hookContext, entryName);
92
109
  page === null || page === void 0 ? void 0 : (_page_serverHooks = page.serverHooks) === null || _page_serverHooks === void 0 ? void 0 : (_page_serverHooks_afterMatch = _page_serverHooks.afterMatch) === null || _page_serverHooks_afterMatch === void 0 ? void 0 : _page_serverHooks_afterMatch.call(_page_serverHooks, afterMatchHookContext, () => void 0);
@@ -101,6 +118,9 @@ const createHandler = (manifest) => {
101
118
  if (checkIsSent(hookContext)) {
102
119
  return new ReturnResponse(hookContext.res.body || "Unkown body", hookContext.res.status, hookContext.res.headers);
103
120
  }
121
+ if (forceCSR && middlewarsHookContext.request.headers[calcFallback(metaName)]) {
122
+ return createResponse(page.template);
123
+ }
104
124
  const responseLike = {
105
125
  headers: {},
106
126
  statusCode: 200,
@@ -134,7 +154,7 @@ const createHandler = (manifest) => {
134
154
  }
135
155
  };
136
156
  const body = await page.serverRender(serverRenderContext);
137
- const afterRenderHookContext = createAfterRenderContext(hookContext, body);
157
+ const afterRenderHookContext = createAfterRenderContext(hookContext, route, body);
138
158
  (_page_serverHooks2 = page.serverHooks) === null || _page_serverHooks2 === void 0 ? void 0 : (_page_serverHooks_afterRender = _page_serverHooks2.afterRender) === null || _page_serverHooks_afterRender === void 0 ? void 0 : _page_serverHooks_afterRender.call(_page_serverHooks2, afterRenderHookContext, () => void 0);
139
159
  if (checkIsSent(hookContext)) {
140
160
  return new ReturnResponse(hookContext.res.body || "Unkown body", hookContext.res.status, hookContext.res.headers);
@@ -193,6 +213,7 @@ function createWorkerHookContext(url, logger, metrics, reporter) {
193
213
  reporter
194
214
  };
195
215
  }
216
+ let appliedMiddlewares = false;
196
217
  function applyMiddlewares(ctx, middleware) {
197
218
  if (middleware) {
198
219
  const middlewares = (() => {
@@ -204,9 +225,12 @@ function applyMiddlewares(ctx, middleware) {
204
225
  ];
205
226
  }
206
227
  })();
207
- middlewares.forEach((middleware2) => {
208
- middlewarePipeline.use(middleware2);
209
- });
228
+ if (!appliedMiddlewares) {
229
+ middlewares.forEach((middleware2) => {
230
+ middlewarePipeline.use(middleware2);
231
+ });
232
+ appliedMiddlewares = true;
233
+ }
210
234
  middlewarePipeline.run(ctx, {
211
235
  onLast: () => void 0
212
236
  });
@@ -1,30 +1,30 @@
1
1
  export declare const AGGRED_DIR: {
2
- mock: string;
3
- server: string;
4
- api: string;
5
- shared: string;
6
- lambda: string;
2
+ mock: string;
3
+ server: string;
4
+ api: string;
5
+ shared: string;
6
+ lambda: string;
7
7
  };
8
8
  export declare enum ApiServerMode {
9
- func = "function",
10
- frame = "framework",
9
+ func = "function",
10
+ frame = "framework"
11
11
  }
12
12
  export declare const ERROR_DIGEST: {
13
- INIT: string;
14
- ENOTF: string;
15
- WARMUP: string;
16
- EINTER: string;
17
- ERENDER: string;
18
- EMICROINJ: string;
13
+ INIT: string;
14
+ ENOTF: string;
15
+ WARMUP: string;
16
+ EINTER: string;
17
+ ERENDER: string;
18
+ EMICROINJ: string;
19
19
  };
20
20
  export declare const ERROR_PAGE_TEXT: Record<number, string>;
21
21
  export declare const RUN_MODE: {
22
- FULL: string;
23
- TYPE: string;
22
+ FULL: string;
23
+ TYPE: string;
24
24
  };
25
25
  export declare enum ServerReportTimings {
26
- SERVER_HANDLE_REQUEST = "server-handle-request",
27
- SERVER_MIDDLEWARE = "server-middleware",
28
- SERVER_HOOK_AFTER_RENDER = "server-hook-after-render",
29
- SERVER_HOOK_AFTER_MATCH = "server-hook-after-match",
30
- }
26
+ SERVER_HANDLE_REQUEST = "server-handle-request",
27
+ SERVER_MIDDLEWARE = "server-middleware",
28
+ SERVER_HOOK_AFTER_RENDER = "server-hook-after-render",
29
+ SERVER_HOOK_AFTER_MATCH = "server-hook-after-match"
30
+ }
@@ -8,4 +8,4 @@ export * from './type';
8
8
  export * from './constants';
9
9
  export { createRenderHandler } from './libs/render';
10
10
  declare const _default: (options: ModernServerOptions) => Promise<Server>;
11
- export default _default;
11
+ export default _default;
@@ -1,62 +1,62 @@
1
+ /// <reference path="../../type.d.ts" />
1
2
  /// <reference types="node" />
2
3
  /// <reference types="node" />
3
4
  /// <reference types="node" />
4
5
  /// <reference types="node/http" />
5
- /// <reference types=".dts-temp/x-wr1AtAisepvCMvqMiIW/src/type" />
6
6
  import { IncomingMessage, ServerResponse } from 'http';
7
7
  import qs from 'querystring';
8
8
  import type { ModernServerContext as ModernServerContextInterface, Reporter as ModernServerReporter, ServerTiming as ModernServerTiming } from '@modern-js/types';
9
9
  export type ContextOptions = {
10
- metaName?: string;
11
- etag?: boolean;
10
+ metaName?: string;
11
+ etag?: boolean;
12
12
  };
13
13
  type ResponseBody = string | Buffer;
14
14
  export declare class ModernServerContext implements ModernServerContextInterface {
15
- #private;
16
- /**
17
- * http request
18
- */
19
- req: IncomingMessage;
20
- /**
21
- * http response
22
- */
23
- res: ServerResponse;
24
- /**
25
- * url params
26
- */
27
- params: Record<string, string>;
28
- reporter: ModernServerReporter;
29
- serverTiming: ModernServerTiming;
30
- get logger(): import("@modern-js/types").Logger;
31
- get metrics(): import("@modern-js/types").Metrics;
32
- serverData: Record<string, any>;
33
- private options;
34
- constructor(req: IncomingMessage, res: ServerResponse, options?: ContextOptions);
35
- private get parsedURL();
36
- private bind;
37
- send(body: ResponseBody): void;
38
- setParams(params: Record<string, string>): void;
39
- setServerData(key: string, value: any): void;
40
- getReqHeader(key: string): string | string[];
41
- get fresh(): boolean;
42
- get headers(): import("http").IncomingHttpHeaders;
43
- get method(): string;
44
- get url(): string;
45
- set url(val: string);
46
- get host(): string;
47
- get protocol(): string;
48
- get origin(): string;
49
- get href(): string;
50
- get path(): string;
51
- set path(p: string);
52
- get querystring(): string;
53
- get query(): qs.ParsedUrlQuery;
54
- get status(): number;
55
- set status(statusCode: number);
56
- /**
57
- * 判断链接是否已经关闭
58
- */
59
- resHasHandled(): boolean;
60
- error(dig: string, e?: Error | string): void;
15
+ #private;
16
+ /**
17
+ * http request
18
+ */
19
+ req: IncomingMessage;
20
+ /**
21
+ * http response
22
+ */
23
+ res: ServerResponse;
24
+ /**
25
+ * url params
26
+ */
27
+ params: Record<string, string>;
28
+ reporter: ModernServerReporter;
29
+ serverTiming: ModernServerTiming;
30
+ get logger(): import("@modern-js/types").Logger;
31
+ get metrics(): import("@modern-js/types").Metrics;
32
+ serverData: Record<string, any>;
33
+ private options;
34
+ constructor(req: IncomingMessage, res: ServerResponse, options?: ContextOptions);
35
+ private get parsedURL();
36
+ private bind;
37
+ send(body: ResponseBody): void;
38
+ setParams(params: Record<string, string>): void;
39
+ setServerData(key: string, value: any): void;
40
+ getReqHeader(key: string): string | string[];
41
+ get fresh(): boolean;
42
+ get headers(): import("http").IncomingHttpHeaders;
43
+ get method(): string;
44
+ get url(): string;
45
+ set url(val: string);
46
+ get host(): string;
47
+ get protocol(): string;
48
+ get origin(): string;
49
+ get href(): string;
50
+ get path(): string;
51
+ set path(p: string);
52
+ get querystring(): string;
53
+ get query(): qs.ParsedUrlQuery;
54
+ get status(): number;
55
+ set status(statusCode: number);
56
+ /**
57
+ * 判断链接是否已经关闭
58
+ */
59
+ resHasHandled(): boolean;
60
+ error(dig: string, e?: Error | string): void;
61
61
  }
62
- export {};
62
+ export {};
@@ -2,4 +2,4 @@ import { IncomingMessage, ServerResponse } from 'http';
2
2
  import { ModernServerContext, ContextOptions } from './context';
3
3
  export declare const createContext: (req: IncomingMessage, res: ServerResponse, options?: ContextOptions) => ModernServerContext;
4
4
  export { ModernServerContext };
5
- export type { ContextOptions };
5
+ export type { ContextOptions };