@modern-js/prod-server 2.48.5 → 2.49.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 (174) hide show
  1. package/README.md +20 -16
  2. package/dist/cjs/{libs/route/route.js → error.js} +16 -17
  3. package/dist/cjs/index.js +18 -24
  4. package/dist/cjs/init.js +71 -0
  5. package/dist/cjs/{type.js → types.js} +2 -2
  6. package/dist/esm/error.js +15 -0
  7. package/dist/esm/index.js +53 -19
  8. package/dist/esm/init.js +73 -0
  9. package/dist/esm-node/error.js +14 -0
  10. package/dist/esm-node/index.js +16 -17
  11. package/dist/esm-node/init.js +47 -0
  12. package/dist/types/error.d.ts +6 -0
  13. package/dist/types/index.d.ts +8 -11
  14. package/dist/types/init.d.ts +4 -0
  15. package/dist/types/types.d.ts +14 -0
  16. package/package.json +23 -64
  17. package/dist/cjs/constants.js +0 -72
  18. package/dist/cjs/libs/context/context.js +0 -236
  19. package/dist/cjs/libs/context/index.js +0 -31
  20. package/dist/cjs/libs/hook-api/afterRenderForStream.js +0 -34
  21. package/dist/cjs/libs/hook-api/base.js +0 -96
  22. package/dist/cjs/libs/hook-api/index.js +0 -85
  23. package/dist/cjs/libs/hook-api/index.worker.js +0 -116
  24. package/dist/cjs/libs/hook-api/route.js +0 -44
  25. package/dist/cjs/libs/hook-api/template.js +0 -72
  26. package/dist/cjs/libs/hook-api/templateForStream.js +0 -52
  27. package/dist/cjs/libs/loadConfig.js +0 -70
  28. package/dist/cjs/libs/metrics.js +0 -33
  29. package/dist/cjs/libs/preload/flushServerHeader.js +0 -49
  30. package/dist/cjs/libs/preload/index.js +0 -24
  31. package/dist/cjs/libs/preload/parseLinks.js +0 -124
  32. package/dist/cjs/libs/preload/shouldFlushServerHeader.js +0 -52
  33. package/dist/cjs/libs/preload/transformLinks2String.js +0 -150
  34. package/dist/cjs/libs/proxy.js +0 -99
  35. package/dist/cjs/libs/render/index.js +0 -109
  36. package/dist/cjs/libs/render/measure.js +0 -74
  37. package/dist/cjs/libs/render/ssr.js +0 -130
  38. package/dist/cjs/libs/render/ssrCache/cacheMod.js +0 -51
  39. package/dist/cjs/libs/render/ssrCache/index.js +0 -90
  40. package/dist/cjs/libs/render/ssrCache/manager.js +0 -120
  41. package/dist/cjs/libs/render/static.js +0 -72
  42. package/dist/cjs/libs/render/type.js +0 -33
  43. package/dist/cjs/libs/render/utils.js +0 -41
  44. package/dist/cjs/libs/reporter.js +0 -39
  45. package/dist/cjs/libs/route/index.js +0 -83
  46. package/dist/cjs/libs/route/matcher.js +0 -113
  47. package/dist/cjs/libs/serveFile.js +0 -84
  48. package/dist/cjs/libs/serverTiming.js +0 -41
  49. package/dist/cjs/renderHtml.js +0 -65
  50. package/dist/cjs/server/index.js +0 -223
  51. package/dist/cjs/server/modernServer.js +0 -522
  52. package/dist/cjs/server/modernServerSplit.js +0 -67
  53. package/dist/cjs/utils.js +0 -164
  54. package/dist/cjs/workerServer.js +0 -260
  55. package/dist/esm/constants.js +0 -43
  56. package/dist/esm/libs/context/context.js +0 -260
  57. package/dist/esm/libs/context/index.js +0 -8
  58. package/dist/esm/libs/hook-api/afterRenderForStream.js +0 -33
  59. package/dist/esm/libs/hook-api/base.js +0 -73
  60. package/dist/esm/libs/hook-api/index.js +0 -55
  61. package/dist/esm/libs/hook-api/index.worker.js +0 -99
  62. package/dist/esm/libs/hook-api/route.js +0 -26
  63. package/dist/esm/libs/hook-api/template.js +0 -56
  64. package/dist/esm/libs/hook-api/templateForStream.js +0 -35
  65. package/dist/esm/libs/loadConfig.js +0 -36
  66. package/dist/esm/libs/metrics.js +0 -9
  67. package/dist/esm/libs/preload/flushServerHeader.js +0 -50
  68. package/dist/esm/libs/preload/index.js +0 -2
  69. package/dist/esm/libs/preload/parseLinks.js +0 -172
  70. package/dist/esm/libs/preload/shouldFlushServerHeader.js +0 -27
  71. package/dist/esm/libs/preload/transformLinks2String.js +0 -140
  72. package/dist/esm/libs/proxy.js +0 -160
  73. package/dist/esm/libs/render/index.js +0 -175
  74. package/dist/esm/libs/render/measure.js +0 -69
  75. package/dist/esm/libs/render/ssr.js +0 -133
  76. package/dist/esm/libs/render/ssrCache/cacheMod.js +0 -25
  77. package/dist/esm/libs/render/ssrCache/index.js +0 -170
  78. package/dist/esm/libs/render/ssrCache/manager.js +0 -178
  79. package/dist/esm/libs/render/static.js +0 -100
  80. package/dist/esm/libs/render/type.js +0 -9
  81. package/dist/esm/libs/render/utils.js +0 -16
  82. package/dist/esm/libs/reporter.js +0 -15
  83. package/dist/esm/libs/route/index.js +0 -82
  84. package/dist/esm/libs/route/matcher.js +0 -92
  85. package/dist/esm/libs/route/route.js +0 -17
  86. package/dist/esm/libs/serveFile.js +0 -68
  87. package/dist/esm/libs/serverTiming.js +0 -22
  88. package/dist/esm/renderHtml.js +0 -133
  89. package/dist/esm/server/index.js +0 -350
  90. package/dist/esm/server/modernServer.js +0 -884
  91. package/dist/esm/server/modernServerSplit.js +0 -113
  92. package/dist/esm/utils.js +0 -103
  93. package/dist/esm/workerServer.js +0 -352
  94. package/dist/esm-node/constants.js +0 -43
  95. package/dist/esm-node/libs/context/context.js +0 -202
  96. package/dist/esm-node/libs/context/index.js +0 -6
  97. package/dist/esm-node/libs/hook-api/afterRenderForStream.js +0 -10
  98. package/dist/esm-node/libs/hook-api/base.js +0 -61
  99. package/dist/esm-node/libs/hook-api/index.js +0 -57
  100. package/dist/esm-node/libs/hook-api/index.worker.js +0 -89
  101. package/dist/esm-node/libs/hook-api/route.js +0 -20
  102. package/dist/esm-node/libs/hook-api/template.js +0 -47
  103. package/dist/esm-node/libs/hook-api/templateForStream.js +0 -28
  104. package/dist/esm-node/libs/loadConfig.js +0 -34
  105. package/dist/esm-node/libs/metrics.js +0 -9
  106. package/dist/esm-node/libs/preload/flushServerHeader.js +0 -25
  107. package/dist/esm-node/libs/preload/index.js +0 -2
  108. package/dist/esm-node/libs/preload/parseLinks.js +0 -90
  109. package/dist/esm-node/libs/preload/shouldFlushServerHeader.js +0 -27
  110. package/dist/esm-node/libs/preload/transformLinks2String.js +0 -126
  111. package/dist/esm-node/libs/proxy.js +0 -74
  112. package/dist/esm-node/libs/render/index.js +0 -75
  113. package/dist/esm-node/libs/render/measure.js +0 -49
  114. package/dist/esm-node/libs/render/ssr.js +0 -96
  115. package/dist/esm-node/libs/render/ssrCache/cacheMod.js +0 -17
  116. package/dist/esm-node/libs/render/ssrCache/index.js +0 -66
  117. package/dist/esm-node/libs/render/ssrCache/manager.js +0 -96
  118. package/dist/esm-node/libs/render/static.js +0 -38
  119. package/dist/esm-node/libs/render/type.js +0 -9
  120. package/dist/esm-node/libs/render/utils.js +0 -16
  121. package/dist/esm-node/libs/reporter.js +0 -15
  122. package/dist/esm-node/libs/route/index.js +0 -58
  123. package/dist/esm-node/libs/route/matcher.js +0 -89
  124. package/dist/esm-node/libs/route/route.js +0 -16
  125. package/dist/esm-node/libs/serveFile.js +0 -49
  126. package/dist/esm-node/libs/serverTiming.js +0 -17
  127. package/dist/esm-node/renderHtml.js +0 -73
  128. package/dist/esm-node/server/index.js +0 -189
  129. package/dist/esm-node/server/modernServer.js +0 -488
  130. package/dist/esm-node/server/modernServerSplit.js +0 -43
  131. package/dist/esm-node/utils.js +0 -132
  132. package/dist/esm-node/workerServer.js +0 -235
  133. package/dist/types/constants.d.ts +0 -30
  134. package/dist/types/libs/context/context.d.ts +0 -62
  135. package/dist/types/libs/context/index.d.ts +0 -7
  136. package/dist/types/libs/hook-api/afterRenderForStream.d.ts +0 -4
  137. package/dist/types/libs/hook-api/base.d.ts +0 -53
  138. package/dist/types/libs/hook-api/index.d.ts +0 -6
  139. package/dist/types/libs/hook-api/index.worker.d.ts +0 -19
  140. package/dist/types/libs/hook-api/route.d.ts +0 -9
  141. package/dist/types/libs/hook-api/template.d.ts +0 -22
  142. package/dist/types/libs/hook-api/templateForStream.d.ts +0 -8
  143. package/dist/types/libs/loadConfig.d.ts +0 -13
  144. package/dist/types/libs/metrics.d.ts +0 -3
  145. package/dist/types/libs/preload/flushServerHeader.d.ts +0 -14
  146. package/dist/types/libs/preload/index.d.ts +0 -2
  147. package/dist/types/libs/preload/parseLinks.d.ts +0 -13
  148. package/dist/types/libs/preload/shouldFlushServerHeader.d.ts +0 -3
  149. package/dist/types/libs/preload/transformLinks2String.d.ts +0 -3
  150. package/dist/types/libs/proxy.d.ts +0 -13
  151. package/dist/types/libs/render/index.d.ts +0 -21
  152. package/dist/types/libs/render/measure.d.ts +0 -10
  153. package/dist/types/libs/render/ssr.d.ts +0 -12
  154. package/dist/types/libs/render/ssrCache/cacheMod.d.ts +0 -8
  155. package/dist/types/libs/render/ssrCache/index.d.ts +0 -6
  156. package/dist/types/libs/render/ssrCache/manager.d.ts +0 -20
  157. package/dist/types/libs/render/static.d.ts +0 -3
  158. package/dist/types/libs/render/type.d.ts +0 -36
  159. package/dist/types/libs/render/utils.d.ts +0 -5
  160. package/dist/types/libs/reporter.d.ts +0 -2
  161. package/dist/types/libs/route/index.d.ts +0 -15
  162. package/dist/types/libs/route/matcher.d.ts +0 -15
  163. package/dist/types/libs/route/route.d.ts +0 -14
  164. package/dist/types/libs/serveFile.d.ts +0 -9
  165. package/dist/types/libs/serverTiming.d.ts +0 -13
  166. package/dist/types/renderHtml.d.ts +0 -23
  167. package/dist/types/server/index.d.ts +0 -55
  168. package/dist/types/server/modernServer.d.ts +0 -71
  169. package/dist/types/server/modernServerSplit.d.ts +0 -2
  170. package/dist/types/type.d.ts +0 -78
  171. package/dist/types/utils.d.ts +0 -24
  172. package/dist/types/workerServer.d.ts +0 -59
  173. /package/dist/esm/{type.js → types.js} +0 -0
  174. /package/dist/esm-node/{type.js → types.js} +0 -0
@@ -1,884 +0,0 @@
1
- import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
- import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
3
- import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
4
- import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
5
- import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
6
- import { createServer } from "http";
7
- import path from "path";
8
- import { fs, isProd, isPromise, isWebOnly, mime, ROUTE_SPEC_FILE } from "@modern-js/utils";
9
- import { time } from "@modern-js/runtime-utils/time";
10
- import { RouteMatchManager } from "../libs/route";
11
- import { createRenderHandler } from "../libs/render";
12
- import { createStaticFileHandler, faviconFallbackHandler } from "../libs/serveFile";
13
- import { createErrorDocument, createMiddlewareCollecter, getStaticReg, mergeExtension, noop, debug, isRedirect } from "../utils";
14
- import { createProxyHandler } from "../libs/proxy";
15
- import { createContext } from "../libs/context";
16
- import { AGGRED_DIR, ERROR_DIGEST, ERROR_PAGE_TEXT, RUN_MODE, ServerReportTimings } from "../constants";
17
- import { createAfterMatchContext, createAfterRenderContext, createMiddlewareContext } from "../libs/hook-api";
18
- import { cacheMod } from "../libs/render/ssrCache/cacheMod";
19
- var SERVER_DIR = "./server";
20
- var ModernServer = /* @__PURE__ */ function() {
21
- "use strict";
22
- function ModernServer2(param) {
23
- var pwd = param.pwd, config = param.config, routes = param.routes, staticGenerate = param.staticGenerate, logger = param.logger, metrics = param.metrics, runMode = param.runMode, proxyTarget = param.proxyTarget, appContext = param.appContext;
24
- _class_call_check(this, ModernServer2);
25
- this.handlers = [];
26
- this.loaderHandler = null;
27
- this.frameWebHandler = null;
28
- this.frameAPIHandler = null;
29
- require("ignore-styles");
30
- this.pwd = pwd;
31
- this.distDir = path.resolve(pwd, config.output.path || "dist");
32
- this.workDir = this.distDir;
33
- this.conf = config;
34
- debug("server conf", this.conf);
35
- this.logger = logger;
36
- this.metrics = metrics;
37
- this.router = new RouteMatchManager();
38
- this.presetRoutes = routes;
39
- this.proxyTarget = proxyTarget;
40
- this.staticGenerate = staticGenerate || false;
41
- this.runMode = runMode || RUN_MODE.FULL;
42
- this.metaName = appContext === null || appContext === void 0 ? void 0 : appContext.metaName;
43
- }
44
- var _proto = ModernServer2.prototype;
45
- _proto.onInit = function onInit(runner, app) {
46
- var _this = this;
47
- return _async_to_generator(function() {
48
- var _conf_bff, _this_conf_output, distDir, conf, _createProxyHandler, handlers, handleUpgrade, usageRoutes;
49
- return _ts_generator(this, function(_state) {
50
- switch (_state.label) {
51
- case 0:
52
- _this.runner = runner;
53
- distDir = _this.distDir, conf = _this.conf;
54
- debug("final server conf", _this.conf);
55
- if ((_conf_bff = conf.bff) === null || _conf_bff === void 0 ? void 0 : _conf_bff.proxy) {
56
- _createProxyHandler = createProxyHandler(conf.bff.proxy), handlers = _createProxyHandler.handlers, handleUpgrade = _createProxyHandler.handleUpgrade;
57
- app && handleUpgrade(app);
58
- handlers.forEach(function(handler) {
59
- _this.addHandler(handler);
60
- });
61
- }
62
- usageRoutes = _this.filterRoutes(_this.getRoutes());
63
- _this.router.reset(usageRoutes);
64
- _this.warmupSSRBundle();
65
- cacheMod.loadServerCacheMod(isProd() ? distDir : _this.pwd);
66
- return [
67
- 4,
68
- _this.prepareFrameHandler()
69
- ];
70
- case 1:
71
- _state.sent();
72
- return [
73
- 4,
74
- _this.prepareLoaderHandler(usageRoutes, distDir)
75
- ];
76
- case 2:
77
- _state.sent();
78
- _this.routeRenderHandler = _this.getRenderHandler();
79
- return [
80
- 4,
81
- _this.setupBeforeProdMiddleware()
82
- ];
83
- case 3:
84
- _state.sent();
85
- _this.addHandler(_this.setupStaticMiddleware((_this_conf_output = _this.conf.output) === null || _this_conf_output === void 0 ? void 0 : _this_conf_output.assetPrefix));
86
- _this.addHandler(faviconFallbackHandler);
87
- _this.addHandler(_this.routeHandler.bind(_this));
88
- _this.compose();
89
- return [
90
- 2
91
- ];
92
- }
93
- });
94
- })();
95
- };
96
- _proto.getRenderHandler = function getRenderHandler() {
97
- var _this_conf_server, _conf_security;
98
- var _this = this, distDir = _this.distDir, staticGenerate = _this.staticGenerate, conf = _this.conf, metaName = _this.metaName;
99
- var ssrConfig = (_this_conf_server = this.conf.server) === null || _this_conf_server === void 0 ? void 0 : _this_conf_server.ssr;
100
- var forceCSR = typeof ssrConfig === "object" ? ssrConfig.forceCSR : false;
101
- return createRenderHandler({
102
- distDir,
103
- staticGenerate,
104
- forceCSR,
105
- conf: this.conf,
106
- nonce: (_conf_security = conf.security) === null || _conf_security === void 0 ? void 0 : _conf_security.nonce,
107
- metaName
108
- });
109
- };
110
- _proto.onRepack = function onRepack(_) {
111
- };
112
- _proto.getRequestHandler = function getRequestHandler() {
113
- return this.requestHandler.bind(this);
114
- };
115
- _proto.render = function render(req, res, url) {
116
- var _this = this;
117
- return _async_to_generator(function() {
118
- var context, matched, route, result;
119
- return _ts_generator(this, function(_state) {
120
- switch (_state.label) {
121
- case 0:
122
- req.logger = req.logger || _this.logger;
123
- req.metrics = req.metrics || _this.metrics;
124
- context = createContext(req, res, {
125
- metaName: _this.metaName
126
- });
127
- matched = _this.router.match(url || context.path);
128
- if (!matched) {
129
- return [
130
- 2,
131
- null
132
- ];
133
- }
134
- res.statusCode = 200;
135
- route = matched.generate(context.url);
136
- return [
137
- 4,
138
- _this.handleWeb(context, route)
139
- ];
140
- case 1:
141
- result = _state.sent();
142
- if (!result) {
143
- return [
144
- 2,
145
- null
146
- ];
147
- }
148
- if (result.contentStream) {
149
- return [
150
- 2,
151
- result.contentStream
152
- ];
153
- }
154
- return [
155
- 2,
156
- result.content.toString()
157
- ];
158
- }
159
- });
160
- })();
161
- };
162
- _proto.createHTTPServer = function createHTTPServer(handler) {
163
- return _async_to_generator(function() {
164
- return _ts_generator(this, function(_state) {
165
- return [
166
- 2,
167
- createServer(handler)
168
- ];
169
- });
170
- })();
171
- };
172
- _proto.onServerChange = function onServerChange(param) {
173
- var filepath = param.filepath;
174
- var _this = this;
175
- return _async_to_generator(function() {
176
- var pwd, api, server, apiPath, serverPath, onlyApi, onlyWeb;
177
- return _ts_generator(this, function(_state) {
178
- switch (_state.label) {
179
- case 0:
180
- pwd = _this.pwd;
181
- api = AGGRED_DIR.api, server = AGGRED_DIR.server;
182
- apiPath = path.normalize(path.join(pwd, api));
183
- serverPath = path.normalize(path.join(pwd, server));
184
- onlyApi = filepath.startsWith(apiPath);
185
- onlyWeb = filepath.startsWith(serverPath);
186
- return [
187
- 4,
188
- _this.prepareFrameHandler({
189
- onlyWeb,
190
- onlyApi
191
- })
192
- ];
193
- case 1:
194
- _state.sent();
195
- return [
196
- 2
197
- ];
198
- }
199
- });
200
- })();
201
- };
202
- _proto.getRoutes = function getRoutes() {
203
- if (this.presetRoutes) {
204
- return this.presetRoutes;
205
- }
206
- var file = path.join(this.distDir, ROUTE_SPEC_FILE);
207
- if (fs.existsSync(file)) {
208
- var content = fs.readJSONSync(file);
209
- return content.routes;
210
- }
211
- return [];
212
- };
213
- _proto.addHandler = function addHandler(handler) {
214
- this.handlers.push(handler);
215
- };
216
- _proto.render404 = function render404(context) {
217
- context.error(ERROR_DIGEST.ENOTF, "404 Not Found");
218
- this.renderErrorPage(context, 404);
219
- };
220
- _proto.prepareLoaderHandler = function prepareLoaderHandler(specs, distDir) {
221
- var _this = this;
222
- return _async_to_generator(function() {
223
- var runner, handler;
224
- return _ts_generator(this, function(_state) {
225
- switch (_state.label) {
226
- case 0:
227
- runner = _this.runner;
228
- return [
229
- 4,
230
- runner.prepareLoaderHandler({
231
- serverRoutes: specs,
232
- distDir
233
- }, {
234
- onLast: function() {
235
- return null;
236
- }
237
- })
238
- ];
239
- case 1:
240
- handler = _state.sent();
241
- _this.loaderHandler = handler;
242
- return [
243
- 2
244
- ];
245
- }
246
- });
247
- })();
248
- };
249
- _proto.prepareFrameHandler = function prepareFrameHandler(options) {
250
- var _this = this;
251
- return _async_to_generator(function() {
252
- var workDir, runner, _ref, onlyApi, onlyWeb, _createMiddlewareCollecter, getMiddlewares, collector, _getMiddlewares, pluginAPIExt, pluginWebExt, serverDir, webExtension, apiExtension;
253
- return _ts_generator(this, function(_state) {
254
- switch (_state.label) {
255
- case 0:
256
- workDir = _this.workDir, runner = _this.runner;
257
- _ref = options || {}, onlyApi = _ref.onlyApi, onlyWeb = _ref.onlyWeb;
258
- _createMiddlewareCollecter = createMiddlewareCollecter(), getMiddlewares = _createMiddlewareCollecter.getMiddlewares, collector = _object_without_properties(_createMiddlewareCollecter, [
259
- "getMiddlewares"
260
- ]);
261
- return [
262
- 4,
263
- runner.gather(collector)
264
- ];
265
- case 1:
266
- _state.sent();
267
- _getMiddlewares = getMiddlewares(), pluginAPIExt = _getMiddlewares.api, pluginWebExt = _getMiddlewares.web;
268
- serverDir = path.join(workDir, SERVER_DIR);
269
- return [
270
- 4,
271
- fs.pathExists(path.join(serverDir))
272
- ];
273
- case 2:
274
- if (!(_state.sent() && !onlyApi))
275
- return [
276
- 3,
277
- 4
278
- ];
279
- webExtension = mergeExtension(pluginWebExt);
280
- return [
281
- 4,
282
- _this.prepareWebHandler(webExtension)
283
- ];
284
- case 3:
285
- _this.frameWebHandler = _state.sent();
286
- _state.label = 4;
287
- case 4:
288
- if (!!onlyWeb)
289
- return [
290
- 3,
291
- 6
292
- ];
293
- apiExtension = mergeExtension(pluginAPIExt);
294
- return [
295
- 4,
296
- _this.prepareAPIHandler(apiExtension)
297
- ];
298
- case 5:
299
- _this.frameAPIHandler = _state.sent();
300
- _state.label = 6;
301
- case 6:
302
- return [
303
- 2
304
- ];
305
- }
306
- });
307
- })();
308
- };
309
- _proto.prepareWebHandler = function prepareWebHandler(extension) {
310
- var _this = this;
311
- return _async_to_generator(function() {
312
- var workDir, runner, handler;
313
- return _ts_generator(this, function(_state) {
314
- switch (_state.label) {
315
- case 0:
316
- workDir = _this.workDir, runner = _this.runner;
317
- return [
318
- 4,
319
- runner.prepareWebServer({
320
- pwd: workDir,
321
- config: extension
322
- }, {
323
- onLast: function() {
324
- return null;
325
- }
326
- })
327
- ];
328
- case 1:
329
- handler = _state.sent();
330
- return [
331
- 2,
332
- handler
333
- ];
334
- }
335
- });
336
- })();
337
- };
338
- _proto.prepareAPIHandler = function prepareAPIHandler(extension) {
339
- var _this = this;
340
- return _async_to_generator(function() {
341
- var workDir, runner, conf, bff, prefix, webOnly;
342
- return _ts_generator(this, function(_state) {
343
- switch (_state.label) {
344
- case 0:
345
- workDir = _this.workDir, runner = _this.runner, conf = _this.conf;
346
- bff = conf.bff;
347
- prefix = (bff === null || bff === void 0 ? void 0 : bff.prefix) || "/api";
348
- return [
349
- 4,
350
- isWebOnly()
351
- ];
352
- case 1:
353
- webOnly = _state.sent();
354
- if (webOnly && process.env.NODE_ENV === "development") {
355
- return [
356
- 2,
357
- function(req, res) {
358
- res.setHeader("Content-Type", "text/plain");
359
- res.end(JSON.stringify(""));
360
- }
361
- ];
362
- }
363
- return [
364
- 2,
365
- runner.prepareApiServer({
366
- pwd: workDir,
367
- config: extension,
368
- prefix: Array.isArray(prefix) ? prefix[0] : prefix,
369
- httpMethodDecider: bff === null || bff === void 0 ? void 0 : bff.httpMethodDecider,
370
- render: _this.render.bind(_this)
371
- }, {
372
- onLast: function() {
373
- return null;
374
- }
375
- })
376
- ];
377
- }
378
- });
379
- })();
380
- };
381
- _proto.filterRoutes = function filterRoutes(routes) {
382
- return routes;
383
- };
384
- _proto.setupBeforeProdMiddleware = function setupBeforeProdMiddleware() {
385
- var _this = this;
386
- return _async_to_generator(function() {
387
- var conf, runner, preMiddleware;
388
- return _ts_generator(this, function(_state) {
389
- switch (_state.label) {
390
- case 0:
391
- conf = _this.conf, runner = _this.runner;
392
- return [
393
- 4,
394
- runner.beforeProdServer(conf)
395
- ];
396
- case 1:
397
- preMiddleware = _state.sent();
398
- preMiddleware.flat().forEach(function(mid) {
399
- _this.addHandler(mid);
400
- });
401
- return [
402
- 2
403
- ];
404
- }
405
- });
406
- })();
407
- };
408
- _proto.setupStaticMiddleware = function setupStaticMiddleware(prefix) {
409
- var staticPathRegExp = getStaticReg(this.conf.output, this.conf.html, prefix);
410
- return createStaticFileHandler([
411
- {
412
- path: staticPathRegExp,
413
- target: this.distDir
414
- }
415
- ], prefix);
416
- };
417
- _proto.handleAPI = function handleAPI(context) {
418
- var _this = this;
419
- return _async_to_generator(function() {
420
- var req, res;
421
- return _ts_generator(this, function(_state) {
422
- switch (_state.label) {
423
- case 0:
424
- req = context.req, res = context.res;
425
- if (!_this.frameAPIHandler) {
426
- throw new Error("can not found api handler");
427
- }
428
- return [
429
- 4,
430
- _this.frameAPIHandler(req, res)
431
- ];
432
- case 1:
433
- _state.sent();
434
- return [
435
- 2
436
- ];
437
- }
438
- });
439
- })();
440
- };
441
- _proto.handleWeb = function handleWeb(context, route) {
442
- var _this = this;
443
- return _async_to_generator(function() {
444
- var res, renderResult;
445
- return _ts_generator(this, function(_state) {
446
- switch (_state.label) {
447
- case 0:
448
- res = context.res;
449
- if (!_this.loaderHandler)
450
- return [
451
- 3,
452
- 2
453
- ];
454
- return [
455
- 4,
456
- _this.loaderHandler(context)
457
- ];
458
- case 1:
459
- _state.sent();
460
- if (_this.isSend(res)) {
461
- return [
462
- 2,
463
- null
464
- ];
465
- }
466
- _state.label = 2;
467
- case 2:
468
- context.setParams(route.params);
469
- context.setServerData("router", {
470
- baseUrl: route.urlPath,
471
- params: route.params
472
- });
473
- if (route.responseHeaders) {
474
- Object.keys(route.responseHeaders).forEach(function(key) {
475
- var value = route.responseHeaders[key];
476
- if (value) {
477
- context.res.setHeader(key, value);
478
- }
479
- });
480
- }
481
- return [
482
- 4,
483
- _this.routeRenderHandler({
484
- ctx: context,
485
- route,
486
- runner: _this.runner
487
- })
488
- ];
489
- case 3:
490
- renderResult = _state.sent();
491
- if (!renderResult) {
492
- _this.render404(context);
493
- return [
494
- 2,
495
- null
496
- ];
497
- }
498
- if (renderResult.redirect) {
499
- _this.redirect(res, renderResult.content, renderResult.statusCode);
500
- return [
501
- 2,
502
- null
503
- ];
504
- }
505
- if (_this.isSend(res)) {
506
- return [
507
- 2,
508
- null
509
- ];
510
- }
511
- res.set("content-type", renderResult.contentType);
512
- return [
513
- 2,
514
- renderResult
515
- ];
516
- }
517
- });
518
- })();
519
- };
520
- _proto.proxy = function proxy() {
521
- return _async_to_generator(function() {
522
- return _ts_generator(this, function(_state) {
523
- return [
524
- 2,
525
- null
526
- ];
527
- });
528
- })();
529
- };
530
- _proto.warmupSSRBundle = function warmupSSRBundle() {
531
- var distDir = this.distDir;
532
- var bundles = this.router.getBundles();
533
- bundles.forEach(function(bundle) {
534
- var filepath = path.join(distDir, bundle);
535
- if (fs.existsSync(filepath)) {
536
- require(filepath);
537
- }
538
- });
539
- };
540
- _proto.createContext = function createContext1(req, res) {
541
- var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
542
- return createContext(req, res, options);
543
- };
544
- _proto.routeHandler = function routeHandler(context) {
545
- var _this = this;
546
- return _async_to_generator(function() {
547
- var res, reporter, matched, end, route, afterMatchContext, end1, cost, _afterMatchContext_router, current, url, status, matched1, middlewareContext, end2, cost1, renderResult, responseStream, headers, name, value, response, afterRenderContext, end3, cost2;
548
- return _ts_generator(this, function(_state) {
549
- switch (_state.label) {
550
- case 0:
551
- res = context.res, reporter = context.reporter;
552
- matched = _this.router.match(context.path);
553
- if (!matched) {
554
- _this.render404(context);
555
- return [
556
- 2
557
- ];
558
- }
559
- return [
560
- 4,
561
- reporter.init({
562
- match: matched
563
- })
564
- ];
565
- case 1:
566
- _state.sent();
567
- end = time();
568
- res.on("finish", function() {
569
- var cost3 = end();
570
- reporter.reportTiming(ServerReportTimings.SERVER_HANDLE_REQUEST, cost3);
571
- });
572
- route = matched.generate(context.url);
573
- if (!route.isApi)
574
- return [
575
- 3,
576
- 3
577
- ];
578
- return [
579
- 4,
580
- _this.handleAPI(context)
581
- ];
582
- case 2:
583
- _state.sent();
584
- return [
585
- 2
586
- ];
587
- case 3:
588
- if (!(route.entryName && _this.runMode === RUN_MODE.FULL))
589
- return [
590
- 3,
591
- 5
592
- ];
593
- afterMatchContext = createAfterMatchContext(context, route.entryName);
594
- end1 = time();
595
- return [
596
- 4,
597
- _this.runner.afterMatch(afterMatchContext, {
598
- onLast: noop
599
- })
600
- ];
601
- case 4:
602
- _state.sent();
603
- cost = end1();
604
- cost && reporter.reportTiming(ServerReportTimings.SERVER_HOOK_AFTER_MATCH, cost);
605
- if (_this.isSend(res)) {
606
- return [
607
- 2
608
- ];
609
- }
610
- _afterMatchContext_router = afterMatchContext.router, current = _afterMatchContext_router.current, url = _afterMatchContext_router.url, status = _afterMatchContext_router.status;
611
- if (url) {
612
- _this.redirect(res, url, status);
613
- return [
614
- 2
615
- ];
616
- }
617
- if (route.entryName !== current) {
618
- matched1 = _this.router.matchEntry(current);
619
- if (!matched1) {
620
- _this.render404(context);
621
- return [
622
- 2
623
- ];
624
- }
625
- route = matched1.generate(context.url);
626
- }
627
- _state.label = 5;
628
- case 5:
629
- if (!_this.frameWebHandler)
630
- return [
631
- 3,
632
- 7
633
- ];
634
- res.locals = res.locals || {};
635
- middlewareContext = createMiddlewareContext(context);
636
- end2 = time();
637
- return [
638
- 4,
639
- _this.frameWebHandler(middlewareContext)
640
- ];
641
- case 6:
642
- _state.sent();
643
- cost1 = end2();
644
- cost1 && reporter.reportTiming(ServerReportTimings.SERVER_MIDDLEWARE, cost1);
645
- res.locals = _object_spread({}, res.locals, middlewareContext.response.locals);
646
- if (_this.isSend(res)) {
647
- return [
648
- 2
649
- ];
650
- }
651
- _state.label = 7;
652
- case 7:
653
- return [
654
- 4,
655
- _this.handleWeb(context, route)
656
- ];
657
- case 8:
658
- renderResult = _state.sent();
659
- if (!renderResult) {
660
- return [
661
- 2
662
- ];
663
- }
664
- responseStream = renderResult.contentStream, headers = renderResult.headers;
665
- if (headers) {
666
- for (var name2 in headers) {
667
- value = headers[name2];
668
- res.setHeader(name2, value);
669
- }
670
- }
671
- response = renderResult.content;
672
- if (route.entryName && responseStream) {
673
- responseStream.pipe(res);
674
- return [
675
- 2
676
- ];
677
- }
678
- if (!(route.entryName && _this.runMode === RUN_MODE.FULL))
679
- return [
680
- 3,
681
- 10
682
- ];
683
- afterRenderContext = createAfterRenderContext(context, route, response.toString());
684
- end3 = time();
685
- return [
686
- 4,
687
- _this.runner.afterRender(afterRenderContext, {
688
- onLast: noop
689
- })
690
- ];
691
- case 9:
692
- _state.sent();
693
- cost2 = end3();
694
- cost2 && reporter.reportTiming(ServerReportTimings.SERVER_HOOK_AFTER_RENDER, cost2);
695
- if (_this.isSend(res)) {
696
- return [
697
- 2
698
- ];
699
- }
700
- response = afterRenderContext.template.get();
701
- _state.label = 10;
702
- case 10:
703
- res.end(response);
704
- return [
705
- 2
706
- ];
707
- }
708
- });
709
- })();
710
- };
711
- _proto.isSend = function isSend(res) {
712
- if (res.modernFlushedHeaders) {
713
- if (res.writableFinished) {
714
- return true;
715
- }
716
- } else if (res.headersSent) {
717
- return true;
718
- }
719
- if (res.getHeader("Location") && isRedirect(res.statusCode)) {
720
- res.end();
721
- return true;
722
- }
723
- return false;
724
- };
725
- _proto.compose = function compose() {
726
- var _this = this;
727
- var handlers = this.handlers;
728
- if (!Array.isArray(handlers)) {
729
- throw new TypeError("Middleware stack must be an array!");
730
- }
731
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
732
- try {
733
- for (var _iterator = handlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
734
- var fn = _step.value;
735
- if (typeof fn !== "function") {
736
- throw new TypeError("Middleware must be composed of functions!");
737
- }
738
- }
739
- } catch (err) {
740
- _didIteratorError = true;
741
- _iteratorError = err;
742
- } finally {
743
- try {
744
- if (!_iteratorNormalCompletion && _iterator.return != null) {
745
- _iterator.return();
746
- }
747
- } finally {
748
- if (_didIteratorError) {
749
- throw _iteratorError;
750
- }
751
- }
752
- }
753
- this._handler = function(context, next) {
754
- var i = 0;
755
- var dispatch = function(error) {
756
- if (error) {
757
- return _this.onError(context, error);
758
- }
759
- var handler = handlers[i++];
760
- if (!handler) {
761
- return next();
762
- }
763
- try {
764
- var result = handler(context, dispatch);
765
- if (isPromise(result)) {
766
- return result.catch(onError);
767
- }
768
- } catch (e) {
769
- return onError(e);
770
- }
771
- };
772
- var onError = function(err) {
773
- _this.onError(context, err);
774
- };
775
- return dispatch();
776
- };
777
- };
778
- _proto.requestHandler = function requestHandler(req, res) {
779
- var next = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : function() {
780
- };
781
- res.statusCode = 200;
782
- req.logger = req.logger || this.logger;
783
- req.metrics = req.metrics || this.metrics;
784
- var context;
785
- try {
786
- context = this.createContext(req, res, {
787
- metaName: this.metaName
788
- });
789
- } catch (e) {
790
- this.logger.error(e);
791
- res.statusCode = 500;
792
- res.setHeader("content-type", mime.contentType("html"));
793
- return res.end(createErrorDocument(500, ERROR_PAGE_TEXT[500]));
794
- }
795
- try {
796
- return this._handler(context, next);
797
- } catch (err) {
798
- return this.onError(context, err);
799
- }
800
- };
801
- _proto.redirect = function redirect(res, url) {
802
- var status = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 302;
803
- res.set("Location", url);
804
- res.statusCode = status;
805
- res.end();
806
- };
807
- _proto.onError = function onError(context, err) {
808
- context.error(ERROR_DIGEST.EINTER, err);
809
- this.renderErrorPage(context, 500);
810
- };
811
- _proto.renderErrorPage = function renderErrorPage(context, status) {
812
- var _this = this;
813
- return _async_to_generator(function() {
814
- var res, statusPage, customErrorPage, matched, route, entryName, file, e, text;
815
- return _ts_generator(this, function(_state) {
816
- switch (_state.label) {
817
- case 0:
818
- res = context.res;
819
- context.status = status;
820
- res.set("content-type", mime.contentType("html"));
821
- statusPage = "/".concat(status);
822
- customErrorPage = "/_error";
823
- matched = _this.router.match(statusPage) || _this.router.match(customErrorPage);
824
- if (!matched)
825
- return [
826
- 3,
827
- 4
828
- ];
829
- route = matched.generate(context.url);
830
- entryName = route.entryName;
831
- if (!(entryName === status.toString() || entryName === "_error"))
832
- return [
833
- 3,
834
- 4
835
- ];
836
- _state.label = 1;
837
- case 1:
838
- _state.trys.push([
839
- 1,
840
- 3,
841
- ,
842
- 4
843
- ]);
844
- return [
845
- 4,
846
- _this.routeRenderHandler({
847
- route,
848
- ctx: context,
849
- runner: _this.runner
850
- })
851
- ];
852
- case 2:
853
- file = _state.sent();
854
- if (file) {
855
- context.res.end(file.content);
856
- return [
857
- 2
858
- ];
859
- }
860
- return [
861
- 3,
862
- 4
863
- ];
864
- case 3:
865
- e = _state.sent();
866
- return [
867
- 3,
868
- 4
869
- ];
870
- case 4:
871
- text = ERROR_PAGE_TEXT[status] || ERROR_PAGE_TEXT[500];
872
- context.res.end(createErrorDocument(status, text));
873
- return [
874
- 2
875
- ];
876
- }
877
- });
878
- })();
879
- };
880
- return ModernServer2;
881
- }();
882
- export {
883
- ModernServer
884
- };