@modern-js/prod-server 2.21.0 → 2.22.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 (78) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/cjs/constants.js +15 -5
  3. package/dist/cjs/index.js +12 -4
  4. package/dist/cjs/libs/context/context.js +4 -2
  5. package/dist/cjs/libs/context/index.js +6 -2
  6. package/dist/cjs/libs/hook-api/base.js +88 -0
  7. package/dist/cjs/libs/hook-api/index.js +17 -79
  8. package/dist/cjs/libs/hook-api/index.worker.js +109 -0
  9. package/dist/cjs/libs/hook-api/route.js +3 -1
  10. package/dist/cjs/libs/hook-api/template.js +6 -26
  11. package/dist/cjs/libs/hook-api/templateForStream.js +35 -0
  12. package/dist/cjs/libs/loadConfig.js +9 -3
  13. package/dist/cjs/libs/logger.js +6 -2
  14. package/dist/cjs/libs/metrics.js +3 -1
  15. package/dist/cjs/libs/proxy.js +6 -2
  16. package/dist/cjs/libs/render/cache/__tests__/cacheable.js +3 -1
  17. package/dist/cjs/libs/render/cache/__tests__/error-configuration.js +3 -1
  18. package/dist/cjs/libs/render/cache/__tests__/matched-cache.js +3 -1
  19. package/dist/cjs/libs/render/cache/index.js +3 -1
  20. package/dist/cjs/libs/render/cache/page-caches/index.js +3 -1
  21. package/dist/cjs/libs/render/cache/page-caches/lru.js +3 -1
  22. package/dist/cjs/libs/render/cache/spr.js +6 -2
  23. package/dist/cjs/libs/render/cache/util.js +24 -8
  24. package/dist/cjs/libs/render/index.js +3 -4
  25. package/dist/cjs/libs/render/measure.js +6 -2
  26. package/dist/cjs/libs/render/reader.js +32 -19
  27. package/dist/cjs/libs/render/ssr.js +3 -1
  28. package/dist/cjs/libs/render/static.js +3 -1
  29. package/dist/cjs/libs/render/type.js +3 -1
  30. package/dist/cjs/libs/render/utils.js +8 -3
  31. package/dist/cjs/libs/route/index.js +6 -2
  32. package/dist/cjs/libs/route/matcher.js +3 -1
  33. package/dist/cjs/libs/route/route.js +3 -1
  34. package/dist/cjs/libs/serveFile.js +6 -2
  35. package/dist/cjs/renderHtml.js +75 -0
  36. package/dist/cjs/server/index.js +9 -3
  37. package/dist/cjs/server/modernServer.js +21 -16
  38. package/dist/cjs/server/modernServerSplit.js +3 -1
  39. package/dist/cjs/utils.js +27 -9
  40. package/dist/cjs/workerServer.js +95 -11
  41. package/dist/esm/libs/context/context.js +1 -1
  42. package/dist/esm/libs/hook-api/base.js +104 -0
  43. package/dist/esm/libs/hook-api/index.js +5 -109
  44. package/dist/esm/libs/hook-api/index.worker.js +105 -0
  45. package/dist/esm/libs/hook-api/template.js +1 -28
  46. package/dist/esm/libs/hook-api/templateForStream.js +28 -0
  47. package/dist/esm/libs/render/index.js +1 -4
  48. package/dist/esm/libs/render/reader.js +26 -26
  49. package/dist/esm/libs/render/utils.js +2 -1
  50. package/dist/esm/renderHtml.js +141 -0
  51. package/dist/esm/server/index.js +11 -1
  52. package/dist/esm/server/modernServer.js +45 -37
  53. package/dist/esm/workerServer.js +103 -10
  54. package/dist/esm-node/libs/context/context.js +1 -1
  55. package/dist/esm-node/libs/hook-api/base.js +68 -0
  56. package/dist/esm-node/libs/hook-api/index.js +5 -74
  57. package/dist/esm-node/libs/hook-api/index.worker.js +84 -0
  58. package/dist/esm-node/libs/hook-api/template.js +1 -25
  59. package/dist/esm-node/libs/hook-api/templateForStream.js +25 -0
  60. package/dist/esm-node/libs/render/index.js +1 -4
  61. package/dist/esm-node/libs/render/reader.js +14 -11
  62. package/dist/esm-node/libs/render/utils.js +2 -1
  63. package/dist/esm-node/renderHtml.js +71 -0
  64. package/dist/esm-node/server/index.js +6 -2
  65. package/dist/esm-node/server/modernServer.js +18 -15
  66. package/dist/esm-node/workerServer.js +89 -9
  67. package/dist/types/libs/context/context.d.ts +1 -1
  68. package/dist/types/libs/hook-api/base.d.ts +53 -0
  69. package/dist/types/libs/hook-api/index.worker.d.ts +18 -0
  70. package/dist/types/libs/hook-api/template.d.ts +11 -14
  71. package/dist/types/libs/hook-api/templateForStream.d.ts +13 -0
  72. package/dist/types/libs/render/reader.d.ts +4 -2
  73. package/dist/types/renderHtml.d.ts +21 -0
  74. package/dist/types/server/index.d.ts +5 -1
  75. package/dist/types/server/modernServer.d.ts +4 -3
  76. package/dist/types/utils.d.ts +1 -1
  77. package/dist/types/workerServer.d.ts +19 -8
  78. package/package.json +21 -7
@@ -3,7 +3,7 @@ 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 _ts_generator } from "@swc/helpers/_/_ts_generator";
6
- import { fs } from "@modern-js/utils";
6
+ import { fs as extraFS } from "@modern-js/utils";
7
7
  import LRU from "lru-cache";
8
8
  var Byte = 1;
9
9
  var KB = 1024 * Byte;
@@ -12,28 +12,18 @@ var getContentLength = function(cache) {
12
12
  return cache.content.length;
13
13
  };
14
14
  var createCacheItem = function() {
15
- var _ref = _async_to_generator(function(filepath, mtime) {
16
- var content;
15
+ var _ref = _async_to_generator(function(content, mtime) {
17
16
  return _ts_generator(this, function(_state) {
18
- switch (_state.label) {
19
- case 0:
20
- return [
21
- 4,
22
- fs.readFile(filepath)
23
- ];
24
- case 1:
25
- content = _state.sent();
26
- return [
27
- 2,
28
- {
29
- content: content,
30
- mtime: mtime
31
- }
32
- ];
33
- }
17
+ return [
18
+ 2,
19
+ {
20
+ content: content,
21
+ mtime: mtime
22
+ }
23
+ ];
34
24
  });
35
25
  });
36
- return function createCacheItem2(filepath, mtime) {
26
+ return function createCacheItem2(content, mtime) {
37
27
  return _ref.apply(this, arguments);
38
28
  };
39
29
  }();
@@ -42,16 +32,19 @@ export var LruReader = /* @__PURE__ */ function() {
42
32
  function LruReader2() {
43
33
  _class_call_check(this, LruReader2);
44
34
  _define_property(this, "cache", void 0);
35
+ _define_property(this, "fs", void 0);
45
36
  this.cache = new LRU({
46
37
  max: 256 * MB,
47
38
  length: getContentLength,
48
39
  maxAge: 5 * 60 * 5e3
49
40
  });
41
+ this.fs = extraFS;
50
42
  }
51
43
  _create_class(LruReader2, [
52
44
  {
53
45
  key: "init",
54
- value: function init2() {
46
+ value: function init2(fs) {
47
+ this.fs = fs || extraFS;
55
48
  }
56
49
  },
57
50
  {
@@ -64,10 +57,11 @@ export var LruReader = /* @__PURE__ */ function() {
64
57
  value: function read(filepath) {
65
58
  var _this = this;
66
59
  return _async_to_generator(function() {
67
- var content, stat, item;
60
+ var fs, content, stat, content1, item;
68
61
  return _ts_generator(this, function(_state) {
69
62
  switch (_state.label) {
70
63
  case 0:
64
+ fs = _this.fs;
71
65
  if (_this.cache.has(filepath)) {
72
66
  content = _this.cache.get(filepath).content;
73
67
  return [
@@ -98,9 +92,15 @@ export var LruReader = /* @__PURE__ */ function() {
98
92
  }
99
93
  return [
100
94
  4,
101
- createCacheItem(filepath, stat.mtime)
95
+ fs.promises.readFile(filepath)
102
96
  ];
103
97
  case 1:
98
+ content1 = _state.sent();
99
+ return [
100
+ 4,
101
+ createCacheItem(content1, stat.mtime)
102
+ ];
103
+ case 2:
104
104
  item = _state.sent();
105
105
  _this.cache.set(filepath, item);
106
106
  return [
@@ -115,7 +115,7 @@ export var LruReader = /* @__PURE__ */ function() {
115
115
  {
116
116
  key: "update",
117
117
  value: function update() {
118
- var cache = this.cache;
118
+ var _this = this, cache = _this.cache, fs = _this.fs;
119
119
  var files = cache.keys();
120
120
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
121
121
  try {
@@ -181,8 +181,8 @@ export var readFile = function() {
181
181
  export var updateFile = function() {
182
182
  reader.update();
183
183
  };
184
- export var init = function() {
185
- reader.init();
184
+ export var init = function(fs) {
185
+ reader.init(fs);
186
186
  };
187
187
  export var close = function() {
188
188
  reader.close();
@@ -1,4 +1,5 @@
1
- import { TemplateAPI, templateInjectableStream } from "../hook-api/template";
1
+ import { TemplateAPI } from "../hook-api/template";
2
+ import { templateInjectableStream } from "../hook-api/templateForStream";
2
3
  export var injectServerData = function(content, context) {
3
4
  var template = new TemplateAPI(content);
4
5
  template.prependHead('<script type="application/json" id="__MODERN_SERVER_DATA__">'.concat(JSON.stringify(context.serverData), "</script>"));
@@ -0,0 +1,141 @@
1
+ import { _ as _assert_this_initialized } from "@swc/helpers/_/_assert_this_initialized";
2
+ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
3
+ import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
4
+ import { _ as _create_class } from "@swc/helpers/_/_create_class";
5
+ import { _ as _define_property } from "@swc/helpers/_/_define_property";
6
+ import { _ as _inherits } from "@swc/helpers/_/_inherits";
7
+ import { _ as _create_super } from "@swc/helpers/_/_create_super";
8
+ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
9
+ import { OutgoingMessage } from "http";
10
+ import { Readable } from "stream";
11
+ import { Socket } from "net";
12
+ import { Server } from "./server";
13
+ import { isRedirect } from "./utils";
14
+ var IncomingMessageLike = /* @__PURE__ */ function(Readable2) {
15
+ "use strict";
16
+ _inherits(IncomingMessageLike2, Readable2);
17
+ var _super = _create_super(IncomingMessageLike2);
18
+ function IncomingMessageLike2(param) {
19
+ var method = param.method, url = param.url, headers = param.headers;
20
+ _class_call_check(this, IncomingMessageLike2);
21
+ var _this;
22
+ _this = _super.call(this);
23
+ _define_property(_assert_this_initialized(_this), "headers", void 0);
24
+ _define_property(_assert_this_initialized(_this), "method", void 0);
25
+ _define_property(_assert_this_initialized(_this), "url", void 0);
26
+ _define_property(_assert_this_initialized(_this), "socket", void 0);
27
+ _this.socket = new Socket();
28
+ _this.headers = headers || {};
29
+ _this.headers.host = "localhost:8080";
30
+ _this.method = method || "get";
31
+ _this.url = url;
32
+ return _this;
33
+ }
34
+ return IncomingMessageLike2;
35
+ }(Readable);
36
+ var ServerResponseLike = /* @__PURE__ */ function(OutgoingMessage2) {
37
+ "use strict";
38
+ _inherits(ServerResponseLike2, OutgoingMessage2);
39
+ var _super = _create_super(ServerResponseLike2);
40
+ function ServerResponseLike2() {
41
+ _class_call_check(this, ServerResponseLike2);
42
+ var _this;
43
+ _this = _super.call(this);
44
+ _define_property(_assert_this_initialized(_this), "statusCode", void 0);
45
+ _define_property(_assert_this_initialized(_this), "data", void 0);
46
+ _this.statusCode = 200;
47
+ _this.data = [];
48
+ return _this;
49
+ }
50
+ _create_class(ServerResponseLike2, [
51
+ {
52
+ key: "end",
53
+ value: function end(chunk, _encoding, cb) {
54
+ this.data.push(chunk.toString());
55
+ cb && cb();
56
+ this.emit("finish");
57
+ return this;
58
+ }
59
+ }
60
+ ]);
61
+ return ServerResponseLike2;
62
+ }(OutgoingMessage);
63
+ var CustomServer = /* @__PURE__ */ function(Server2) {
64
+ "use strict";
65
+ _inherits(CustomServer2, Server2);
66
+ var _super = _create_super(CustomServer2);
67
+ function CustomServer2() {
68
+ _class_call_check(this, CustomServer2);
69
+ return _super.apply(this, arguments);
70
+ }
71
+ _create_class(CustomServer2, [
72
+ {
73
+ key: "render",
74
+ value: function render(req, res, _url) {
75
+ var _this = this;
76
+ return _async_to_generator(function() {
77
+ var handler;
78
+ return _ts_generator(this, function(_state) {
79
+ handler = _this.getRequestHandler();
80
+ handler(req, res);
81
+ return [
82
+ 2,
83
+ null
84
+ ];
85
+ });
86
+ })();
87
+ }
88
+ }
89
+ ]);
90
+ return CustomServer2;
91
+ }(Server);
92
+ function renderHtml(_) {
93
+ return _renderHtml.apply(this, arguments);
94
+ }
95
+ function _renderHtml() {
96
+ _renderHtml = _async_to_generator(function(param) {
97
+ var url, method, headers, body, serverOptions, req, res, customServer;
98
+ return _ts_generator(this, function(_state) {
99
+ switch (_state.label) {
100
+ case 0:
101
+ url = param.url, method = param.method, headers = param.headers, body = param.body, serverOptions = param.serverOptions;
102
+ req = new IncomingMessageLike({
103
+ method: method,
104
+ url: url,
105
+ headers: headers
106
+ });
107
+ if (body) {
108
+ req.push(body);
109
+ req.push(null);
110
+ }
111
+ res = new ServerResponseLike();
112
+ customServer = new CustomServer(serverOptions);
113
+ return [
114
+ 4,
115
+ customServer.init({
116
+ disableHttpServer: true
117
+ })
118
+ ];
119
+ case 1:
120
+ _state.sent();
121
+ customServer.render(req, res);
122
+ return [
123
+ 2,
124
+ new Promise(function(resolve) {
125
+ res.addListener("finish", function() {
126
+ resolve({
127
+ headers: res.getHeaders(),
128
+ redirected: isRedirect(res.statusCode),
129
+ status: res.statusCode,
130
+ url: url,
131
+ body: res.data.join()
132
+ });
133
+ });
134
+ })
135
+ ];
136
+ }
137
+ });
138
+ });
139
+ return _renderHtml.apply(this, arguments);
140
+ }
141
+ module.exports = renderHtml;
@@ -49,6 +49,9 @@ export var Server = /* @__PURE__ */ function() {
49
49
  * - 执行 server init
50
50
  */
51
51
  function init() {
52
+ var _ref = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {
53
+ disableHttpServer: false
54
+ }, _ref_disableHttpServer = _ref.disableHttpServer, disableHttpServer = _ref_disableHttpServer === void 0 ? false : _ref_disableHttpServer;
52
55
  var _this = this;
53
56
  return _async_to_generator(function() {
54
57
  var options;
@@ -94,17 +97,24 @@ export var Server = /* @__PURE__ */ function() {
94
97
  ];
95
98
  case 6:
96
99
  _state.sent();
100
+ if (!!disableHttpServer)
101
+ return [
102
+ 3,
103
+ 8
104
+ ];
97
105
  return [
98
106
  4,
99
107
  _this.server.createHTTPServer(_this.getRequestHandler())
100
108
  ];
101
109
  case 7:
102
110
  _this.app = _state.sent();
111
+ _state.label = 8;
112
+ case 8:
103
113
  return [
104
114
  4,
105
115
  _this.server.onInit(_this.runner, _this.app)
106
116
  ];
107
- case 8:
117
+ case 9:
108
118
  _state.sent();
109
119
  return [
110
120
  2,
@@ -45,7 +45,7 @@ export var ModernServer = /* @__PURE__ */ function() {
45
45
  _define_property(this, "staticGenerate", void 0);
46
46
  require("ignore-styles");
47
47
  this.pwd = pwd;
48
- this.distDir = path.join(pwd, config.output.path || "dist");
48
+ this.distDir = path.resolve(pwd, config.output.path || "dist");
49
49
  this.workDir = this.distDir;
50
50
  this.conf = config;
51
51
  debug("server conf", this.conf);
@@ -71,6 +71,7 @@ export var ModernServer = /* @__PURE__ */ function() {
71
71
  case 0:
72
72
  _this.runner = runner;
73
73
  distDir = _this.distDir, staticGenerate = _this.staticGenerate, conf = _this.conf;
74
+ _this.initReader();
74
75
  debug("final server conf", _this.conf);
75
76
  _this.proxyHandler = createProxyHandler((_conf_bff = conf.bff) === null || _conf_bff === void 0 ? void 0 : _conf_bff.proxy);
76
77
  if (_this.proxyHandler) {
@@ -78,8 +79,7 @@ export var ModernServer = /* @__PURE__ */ function() {
78
79
  _this.addHandler(handler);
79
80
  });
80
81
  }
81
- _this.reader.init();
82
- app.on("close", function() {
82
+ app === null || app === void 0 ? void 0 : app.on("close", function() {
83
83
  _this.reader.close();
84
84
  });
85
85
  usageRoutes = _this.filterRoutes(_this.getRoutes());
@@ -132,39 +132,6 @@ export var ModernServer = /* @__PURE__ */ function() {
132
132
  }
133
133
  )
134
134
  },
135
- {
136
- key: "onServerChange",
137
- value: function onServerChange(param) {
138
- var filepath = param.filepath;
139
- var _this = this;
140
- return _async_to_generator(function() {
141
- var pwd, api, server, apiPath, serverPath, onlyApi, onlyWeb;
142
- return _ts_generator(this, function(_state) {
143
- switch (_state.label) {
144
- case 0:
145
- pwd = _this.pwd;
146
- api = AGGRED_DIR.api, server = AGGRED_DIR.server;
147
- apiPath = path.normalize(path.join(pwd, api));
148
- serverPath = path.normalize(path.join(pwd, server));
149
- onlyApi = filepath.startsWith(apiPath);
150
- onlyWeb = filepath.startsWith(serverPath);
151
- return [
152
- 4,
153
- _this.prepareFrameHandler({
154
- onlyWeb: onlyWeb,
155
- onlyApi: onlyApi
156
- })
157
- ];
158
- case 1:
159
- _state.sent();
160
- return [
161
- 2
162
- ];
163
- }
164
- });
165
- })();
166
- }
167
- },
168
135
  {
169
136
  key: "getRequestHandler",
170
137
  value: (
@@ -235,9 +202,50 @@ export var ModernServer = /* @__PURE__ */ function() {
235
202
  }
236
203
  },
237
204
  {
238
- key: "getRoutes",
205
+ key: "initReader",
239
206
  value: (
240
207
  /* —————————————————————— function will be overwrite —————————————————————— */
208
+ function initReader() {
209
+ this.reader.init();
210
+ }
211
+ )
212
+ },
213
+ {
214
+ key: "onServerChange",
215
+ value: function onServerChange(param) {
216
+ var filepath = param.filepath;
217
+ var _this = this;
218
+ return _async_to_generator(function() {
219
+ var pwd, api, server, apiPath, serverPath, onlyApi, onlyWeb;
220
+ return _ts_generator(this, function(_state) {
221
+ switch (_state.label) {
222
+ case 0:
223
+ pwd = _this.pwd;
224
+ api = AGGRED_DIR.api, server = AGGRED_DIR.server;
225
+ apiPath = path.normalize(path.join(pwd, api));
226
+ serverPath = path.normalize(path.join(pwd, server));
227
+ onlyApi = filepath.startsWith(apiPath);
228
+ onlyWeb = filepath.startsWith(serverPath);
229
+ return [
230
+ 4,
231
+ _this.prepareFrameHandler({
232
+ onlyWeb: onlyWeb,
233
+ onlyApi: onlyApi
234
+ })
235
+ ];
236
+ case 1:
237
+ _state.sent();
238
+ return [
239
+ 2
240
+ ];
241
+ }
242
+ });
243
+ })();
244
+ }
245
+ },
246
+ {
247
+ key: "getRoutes",
248
+ value: (
241
249
  // get routes info
242
250
  function getRoutes() {
243
251
  if (this.presetRoutes) {
@@ -4,6 +4,8 @@ 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
6
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
7
+ import { createAsyncPipeline } from "@modern-js/plugin";
8
+ import { createAfterMatchContext, createAfterRenderContext, createMiddlewareContext } from "./libs/hook-api/index.worker";
7
9
  import { Logger } from "./libs/logger";
8
10
  import { RouteMatchManager } from "./libs/route";
9
11
  import { metrics as defaultMetrics } from "./libs/metrics";
@@ -65,14 +67,32 @@ export var ReturnResponse = /* @__PURE__ */ function() {
65
67
  return ReturnResponse2;
66
68
  }();
67
69
  var RESPONSE_NOTFOUND = new ReturnResponse("404: Page not found", 404);
70
+ var isRedirect = function(code) {
71
+ return [
72
+ 301,
73
+ 302,
74
+ 307,
75
+ 308
76
+ ].includes(code);
77
+ };
78
+ var checkIsSent = function(context) {
79
+ if (context.res.isSent) {
80
+ return true;
81
+ }
82
+ if (context.res.headers.get("Location") && isRedirect(context.res.status)) {
83
+ return true;
84
+ }
85
+ return false;
86
+ };
87
+ var middlewarePipeline = createAsyncPipeline();
68
88
  export var createHandler = function(manifest) {
69
89
  var routeMgr = new RouteMatchManager();
70
90
  var pages = manifest.pages, routes = manifest.routes;
71
91
  routeMgr.reset(routes);
72
92
  return function() {
73
93
  var _ref = _async_to_generator(function(options) {
74
- var request, loadableStats, routeManifest, url, pageMatch, page, responseLike, params, serverRenderContext, body, e;
75
- function createServerRequest(url2, request2, params2) {
94
+ var _page_serverHooks, _page_serverHooks_afterMatch, request, loadableStats, routeManifest, url, pageMatch, entryName, page, logger, metrics, hookContext, afterMatchHookContext, _page_serverHooks1, _page_serverHooks2, _page_serverHooks_afterRender, middlewarsHookContext, responseLike, params, baseUrl, serverRenderContext, body, afterRenderHookContext, e;
95
+ function createServerRequest(url2, baseUrl2, request2, params2) {
76
96
  var pathname = url2.pathname, host = url2.host, searchParams = url2.searchParams;
77
97
  var rawHeaders = request2.headers;
78
98
  var headers = {};
@@ -81,6 +101,8 @@ export var createHandler = function(manifest) {
81
101
  });
82
102
  var query = Object.fromEntries(searchParams);
83
103
  return {
104
+ url: url2.href,
105
+ baseUrl: baseUrl2,
84
106
  pathname: pathname,
85
107
  host: host,
86
108
  headers: headers,
@@ -100,7 +122,23 @@ export var createHandler = function(manifest) {
100
122
  RESPONSE_NOTFOUND
101
123
  ];
102
124
  }
103
- page = pages[pageMatch.spec.urlPath];
125
+ entryName = pageMatch.spec.urlPath;
126
+ page = pages[entryName];
127
+ logger = new Logger({
128
+ level: "warn"
129
+ });
130
+ metrics = defaultMetrics;
131
+ hookContext = createWorkerHookContext(request.url, logger, metrics);
132
+ afterMatchHookContext = createAfterMatchContext(hookContext, entryName);
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, function() {
134
+ return void 0;
135
+ });
136
+ if (checkIsSent(hookContext)) {
137
+ return [
138
+ 2,
139
+ new ReturnResponse(hookContext.res.body || "Unkown body", hookContext.res.status, hookContext.res.headers)
140
+ ];
141
+ }
104
142
  if (!page.serverRender)
105
143
  return [
106
144
  3,
@@ -114,6 +152,14 @@ export var createHandler = function(manifest) {
114
152
  ,
115
153
  4
116
154
  ]);
155
+ middlewarsHookContext = createMiddlewareContext(hookContext);
156
+ applyMiddlewares(middlewarsHookContext, (_page_serverHooks1 = page.serverHooks) === null || _page_serverHooks1 === void 0 ? void 0 : _page_serverHooks1.middleware);
157
+ if (checkIsSent(hookContext)) {
158
+ return [
159
+ 2,
160
+ new ReturnResponse(hookContext.res.body || "Unkown body", hookContext.res.status, hookContext.res.headers)
161
+ ];
162
+ }
117
163
  responseLike = {
118
164
  headers: {},
119
165
  statusCode: 200,
@@ -126,18 +172,17 @@ export var createHandler = function(manifest) {
126
172
  }
127
173
  };
128
174
  params = pageMatch.parseURLParams(url.pathname) || {};
175
+ baseUrl = pageMatch.urlPath;
129
176
  serverRenderContext = {
130
- request: createServerRequest(url, request, params),
177
+ request: createServerRequest(url, baseUrl, request, params),
131
178
  response: responseLike,
132
179
  loadableStats: loadableStats,
133
180
  routeManifest: routeManifest,
134
181
  redirection: {},
135
182
  template: page.template,
136
183
  entryName: page.entryName,
137
- logger: new Logger({
138
- level: "warn"
139
- }),
140
- metrics: defaultMetrics,
184
+ logger: logger,
185
+ metrics: metrics,
141
186
  // FIXME: pass correctly req & res
142
187
  req: request,
143
188
  res: responseLike
@@ -148,9 +193,19 @@ export var createHandler = function(manifest) {
148
193
  ];
149
194
  case 2:
150
195
  body = _state.sent();
196
+ afterRenderHookContext = createAfterRenderContext(hookContext, body);
197
+ (_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() {
198
+ return void 0;
199
+ });
200
+ if (checkIsSent(hookContext)) {
201
+ return [
202
+ 2,
203
+ new ReturnResponse(hookContext.res.body || "Unkown body", hookContext.res.status, hookContext.res.headers)
204
+ ];
205
+ }
151
206
  return [
152
207
  2,
153
- new ReturnResponse(body, responseLike.statusCode, responseLike.headers)
208
+ new ReturnResponse(afterRenderHookContext.template.get(), responseLike.statusCode, responseLike.headers)
154
209
  ];
155
210
  case 3:
156
211
  e = _state.sent();
@@ -161,7 +216,7 @@ export var createHandler = function(manifest) {
161
216
  createResponse(page.template)
162
217
  ];
163
218
  case 4:
164
- console.warn("Can't not page(".concat(pageMatch.spec.urlPath, ") serverRender"));
219
+ console.warn("Can't not page(".concat(entryName, ") serverRender"));
165
220
  return [
166
221
  2,
167
222
  createResponse(page.template)
@@ -181,3 +236,41 @@ function createResponse(template) {
181
236
  return RESPONSE_NOTFOUND;
182
237
  }
183
238
  }
239
+ function createWorkerHookContext(url, logger, metrics) {
240
+ var _ref = [
241
+ {
242
+ headers: new Headers(),
243
+ body: "",
244
+ status: 200,
245
+ isSent: false
246
+ },
247
+ new Request(url)
248
+ ], res = _ref[0], req = _ref[1];
249
+ return {
250
+ res: res,
251
+ req: req,
252
+ logger: logger,
253
+ metrics: metrics
254
+ };
255
+ }
256
+ function applyMiddlewares(ctx, middleware) {
257
+ if (middleware) {
258
+ var middlewares = function() {
259
+ if (Array.isArray(middleware)) {
260
+ return middleware;
261
+ } else {
262
+ return [
263
+ middleware
264
+ ];
265
+ }
266
+ }();
267
+ middlewares.forEach(function(middleware2) {
268
+ middlewarePipeline.use(middleware2);
269
+ });
270
+ middlewarePipeline.run(ctx, {
271
+ onLast: function() {
272
+ return void 0;
273
+ }
274
+ });
275
+ }
276
+ }
@@ -95,7 +95,7 @@ export class ModernServerContext {
95
95
  if (!host) {
96
96
  host = this.getReqHeader("Host");
97
97
  }
98
- return host.split(/\s*,\s*/, 1)[0] || "";
98
+ return host.split(/\s*,\s*/, 1)[0] || "undefined";
99
99
  }
100
100
  get protocol() {
101
101
  if (this.req.socket.encrypted) {
@@ -0,0 +1,68 @@
1
+ import { _ as _define_property } from "@swc/helpers/_/_define_property";
2
+ import cookie from "cookie";
3
+ export class BaseResponse {
4
+ get(key) {
5
+ return this.res.getHeader(key);
6
+ }
7
+ set(key, value) {
8
+ return this.res.setHeader(key, value);
9
+ }
10
+ status(code) {
11
+ this.res.statusCode = code;
12
+ }
13
+ setCookie(key, value, options) {
14
+ const cookieValue = String(this.res.getHeader("set-cookie") || "");
15
+ const fmt = Array.isArray(cookieValue) ? cookieValue : [
16
+ cookieValue
17
+ ].filter(Boolean);
18
+ fmt.push(cookie.serialize(key, value, options));
19
+ this.res.setHeader("set-cookie", fmt.length === 1 ? fmt[0] : fmt);
20
+ }
21
+ clearCookie() {
22
+ this.res.removeHeader("set-cookie");
23
+ }
24
+ raw(body, options) {
25
+ const { status, headers = {} } = options || {};
26
+ Object.entries(headers).forEach(([key, value]) => {
27
+ this.res.setHeader(key, value);
28
+ });
29
+ if (status) {
30
+ this.res.statusCode = status;
31
+ }
32
+ this.res.end(body);
33
+ }
34
+ constructor(res) {
35
+ _define_property(this, "cookies", void 0);
36
+ _define_property(this, "res", void 0);
37
+ this.res = res;
38
+ this.cookies = {
39
+ set: this.setCookie.bind(this),
40
+ clear: this.clearCookie.bind(this)
41
+ };
42
+ }
43
+ }
44
+ export class BaseRequest {
45
+ getCookie(key) {
46
+ return this._cookie[key];
47
+ }
48
+ constructor(request) {
49
+ _define_property(this, "url", void 0);
50
+ _define_property(this, "host", void 0);
51
+ _define_property(this, "pathname", void 0);
52
+ _define_property(this, "query", void 0);
53
+ _define_property(this, "headers", void 0);
54
+ _define_property(this, "cookie", void 0);
55
+ _define_property(this, "cookies", void 0);
56
+ _define_property(this, "_cookie", void 0);
57
+ this.url = request.url;
58
+ this.host = request.host;
59
+ this.pathname = request.path;
60
+ this.query = request.query;
61
+ this.headers = request.headers;
62
+ this.cookie = request.headers.cookie || "";
63
+ this._cookie = cookie.parse(this.cookie);
64
+ this.cookies = {
65
+ get: this.getCookie.bind(this)
66
+ };
67
+ }
68
+ }