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