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