@modern-js/server 1.1.3-beta.1 → 1.1.5-beta.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 (69) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/js/modern/dev-tools/babel/register.js +2 -2
  3. package/dist/js/modern/dev-tools/mock/getMockData.js +2 -2
  4. package/dist/js/modern/libs/context/context.js +15 -7
  5. package/dist/js/modern/libs/context/index.js +2 -2
  6. package/dist/js/modern/libs/{measure.js → metrics.js} +2 -2
  7. package/dist/js/modern/libs/proxy.js +2 -2
  8. package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +2 -2
  9. package/dist/js/modern/libs/render/cache/index.js +2 -2
  10. package/dist/js/modern/libs/render/cache/type.js +0 -1
  11. package/dist/js/modern/libs/render/index.js +6 -2
  12. package/dist/js/modern/libs/render/ssr.js +3 -2
  13. package/dist/js/modern/libs/route/route.js +1 -1
  14. package/dist/js/modern/server/dev-server/dev-server-split.js +2 -6
  15. package/dist/js/modern/server/dev-server/dev-server.js +12 -3
  16. package/dist/js/modern/server/dev-server/index.js +1 -1
  17. package/dist/js/modern/server/index.js +19 -16
  18. package/dist/js/modern/server/modern-server-split.js +55 -6
  19. package/dist/js/modern/server/modern-server.js +92 -58
  20. package/dist/js/modern/type.js +0 -1
  21. package/dist/js/modern/utils.js +9 -1
  22. package/dist/js/node/dev-tools/babel/register.js +2 -2
  23. package/dist/js/node/dev-tools/mock/getMockData.js +2 -2
  24. package/dist/js/node/libs/context/context.js +15 -7
  25. package/dist/js/node/libs/context/index.js +2 -2
  26. package/dist/js/node/libs/{measure.js → metrics.js} +3 -3
  27. package/dist/js/node/libs/proxy.js +2 -2
  28. package/dist/js/node/libs/render/cache/__tests__/cache.test.js +2 -2
  29. package/dist/js/node/libs/render/cache/index.js +2 -2
  30. package/dist/js/node/libs/render/index.js +6 -2
  31. package/dist/js/node/libs/render/ssr.js +3 -2
  32. package/dist/js/node/libs/route/route.js +1 -1
  33. package/dist/js/node/server/dev-server/dev-server-split.js +5 -9
  34. package/dist/js/node/server/dev-server/dev-server.js +12 -3
  35. package/dist/js/node/server/dev-server/index.js +4 -4
  36. package/dist/js/node/server/index.js +18 -14
  37. package/dist/js/node/server/modern-server-split.js +61 -9
  38. package/dist/js/node/server/modern-server.js +93 -59
  39. package/dist/js/node/utils.js +12 -2
  40. package/dist/types/libs/context/context.d.ts +5 -5
  41. package/dist/types/libs/context/index.d.ts +3 -3
  42. package/dist/types/libs/metrics.d.ts +3 -0
  43. package/dist/types/libs/render/index.d.ts +10 -1
  44. package/dist/types/libs/render/ssr.d.ts +2 -1
  45. package/dist/types/libs/render/type.d.ts +2 -21
  46. package/dist/types/libs/route/route.d.ts +2 -10
  47. package/dist/types/server/dev-server/dev-server-split.d.ts +3 -4
  48. package/dist/types/server/dev-server/index.d.ts +1 -1
  49. package/dist/types/server/modern-server-split.d.ts +15 -5
  50. package/dist/types/server/modern-server.d.ts +14 -7
  51. package/dist/types/type.d.ts +11 -5
  52. package/dist/types/utils.d.ts +2 -1
  53. package/package.json +7 -7
  54. package/src/libs/context/context.ts +12 -8
  55. package/src/libs/context/index.ts +3 -3
  56. package/src/libs/{measure.ts → metrics.ts} +3 -3
  57. package/src/libs/render/index.ts +21 -11
  58. package/src/libs/render/ssr.ts +5 -1
  59. package/src/libs/render/type.ts +3 -16
  60. package/src/libs/route/route.ts +4 -20
  61. package/src/server/dev-server/dev-server-split.ts +3 -7
  62. package/src/server/dev-server/dev-server.ts +15 -13
  63. package/src/server/dev-server/index.ts +1 -1
  64. package/src/server/index.ts +24 -14
  65. package/src/server/modern-server-split.ts +59 -7
  66. package/src/server/modern-server.ts +105 -67
  67. package/src/type.ts +12 -5
  68. package/src/utils.ts +14 -0
  69. package/dist/types/libs/measure.d.ts +0 -3
@@ -17,13 +17,13 @@ var _modernServer = require("./modern-server");
17
17
 
18
18
  var _modernServerSplit = require("./modern-server-split");
19
19
 
20
- var _measure = require("../libs/measure");
20
+ var _metrics = require("../libs/metrics");
21
21
 
22
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
23
 
24
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
24
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
25
25
 
26
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
26
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
27
27
 
28
28
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29
29
 
@@ -52,7 +52,7 @@ class Server {
52
52
  options
53
53
  } = this;
54
54
  options.logger = options.logger || _utils.logger;
55
- options.measure = options.measure || _measure.measure; // initialize server
55
+ options.metrics = options.metrics || _metrics.metrics; // initialize server
56
56
 
57
57
  if (options.dev) {
58
58
  this.server = this.createDevServer();
@@ -95,9 +95,11 @@ class Server {
95
95
  } = this;
96
96
 
97
97
  if (options.apiOnly) {
98
- return new _modernServerSplit.APIModernServer(options);
98
+ return new _modernServerSplit.ModernAPIServer(options);
99
+ } else if (options.ssrOnly) {
100
+ return new _modernServerSplit.ModernSSRServer(options);
99
101
  } else if (options.webOnly) {
100
- return new _modernServerSplit.WebModernServer(options);
102
+ return new _modernServerSplit.ModernWebServer(options);
101
103
  } else {
102
104
  return new _modernServer.ModernServer(options);
103
105
  }
@@ -109,15 +111,15 @@ class Server {
109
111
  } = this;
110
112
 
111
113
  const {
112
- APIModernDevServer,
113
- WebModernDevServer,
114
+ ModernAPIDevServer,
115
+ ModernSSRDevServer,
114
116
  ModernDevServer
115
117
  } = require("./dev-server");
116
118
 
117
119
  if (options.apiOnly) {
118
- return new APIModernDevServer(options);
119
- } else if (options.webOnly) {
120
- return new WebModernDevServer(options);
120
+ return new ModernAPIDevServer(options);
121
+ } else if (options.ssrOnly) {
122
+ return new ModernSSRDevServer(options);
121
123
  } else {
122
124
  return new ModernDevServer(options);
123
125
  }
@@ -129,17 +131,19 @@ class Server {
129
131
  const {
130
132
  options
131
133
  } = this;
134
+ (_options$plugins = options.plugins) === null || _options$plugins === void 0 ? void 0 : _options$plugins.forEach(p => {
135
+ _serverPlugin.serverManager.usePlugin(p);
136
+ });
132
137
  const appContext = await this.initAppContext();
133
138
 
134
139
  _serverPlugin.serverManager.run(() => {
140
+ _core.ConfigContext.set(this.options.config);
141
+
135
142
  _core.AppContext.set(_objectSpread(_objectSpread({}, appContext), {}, {
136
143
  distDirectory: _path.default.join(options.pwd, options.config.output.path || 'dist')
137
144
  }));
138
145
  });
139
146
 
140
- (_options$plugins = options.plugins) === null || _options$plugins === void 0 ? void 0 : _options$plugins.forEach(p => {
141
- _serverPlugin.serverManager.usePlugin(p);
142
- });
143
147
  return _serverPlugin.serverManager.init({});
144
148
  }
145
149
 
@@ -3,28 +3,46 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.WebModernServer = exports.APIModernServer = void 0;
6
+ exports.ModernWebServer = exports.ModernSSRServer = exports.ModernAPIServer = void 0;
7
7
 
8
8
  var _modernServer = require("./modern-server");
9
9
 
10
- class WebModernServer extends _modernServer.ModernServer {
10
+ class ModernSSRServer extends _modernServer.ModernServer {
11
+ // Todo should not invoke any route hook in modernSSRServer
12
+ async warmupSSRBundle() {// empty
13
+ }
14
+
15
+ verifyMatch(context, matched) {
16
+ if (matched.generate().isApi) {
17
+ this.render404(context);
18
+ }
19
+ }
20
+
11
21
  prepareAPIHandler(_m, _) {
12
22
  return null;
13
23
  }
14
24
 
15
25
  async prepareWebHandler(extension) {
16
26
  return super.prepareWebHandler(extension);
17
- }
27
+ } // protected filterRoutes(routes: ModernRouteInterface[]) {
28
+ // return routes.filter(route => route.entryName);
29
+ // }
18
30
 
19
- filterRoutes(routes) {
20
- return routes.filter(route => route.entryName);
31
+
32
+ async preServerInit() {// empty
21
33
  }
22
34
 
23
35
  }
24
36
 
25
- exports.WebModernServer = WebModernServer;
37
+ exports.ModernSSRServer = ModernSSRServer;
38
+
39
+ class ModernAPIServer extends _modernServer.ModernServer {
40
+ async emitRouteHook(_, _input) {// empty
41
+ }
42
+
43
+ async warmupSSRBundle() {// empty
44
+ }
26
45
 
27
- class APIModernServer extends _modernServer.ModernServer {
28
46
  prepareWebHandler(_) {
29
47
  return null;
30
48
  }
@@ -37,9 +55,43 @@ class APIModernServer extends _modernServer.ModernServer {
37
55
  return routes.filter(route => route.isApi);
38
56
  }
39
57
 
40
- async preServerInit() {// noop
58
+ async preServerInit() {// empty
59
+ }
60
+
61
+ }
62
+
63
+ exports.ModernAPIServer = ModernAPIServer;
64
+
65
+ class ModernWebServer extends _modernServer.ModernServer {
66
+ async warmupSSRBundle() {// empty
67
+ }
68
+
69
+ async handleAPI(context) {
70
+ const {
71
+ proxyTarget
72
+ } = this;
73
+
74
+ if (!(proxyTarget !== null && proxyTarget !== void 0 && proxyTarget.api)) {
75
+ this.proxy();
76
+ } else {
77
+ this.render404(context);
78
+ }
79
+ }
80
+
81
+ async handleWeb(context, route) {
82
+ const {
83
+ proxyTarget
84
+ } = this;
85
+
86
+ if (route.isSSR && proxyTarget !== null && proxyTarget !== void 0 && proxyTarget.ssr) {
87
+ return this.proxy();
88
+ } else {
89
+ // if no proxyTarget but access web server, degradation to csr
90
+ route.isSSR = false;
91
+ return super.handleWeb(context, route);
92
+ }
41
93
  }
42
94
 
43
95
  }
44
96
 
45
- exports.APIModernServer = APIModernServer;
97
+ exports.ModernWebServer = ModernWebServer;
@@ -47,9 +47,9 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
47
47
 
48
48
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
49
49
 
50
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
50
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
51
51
 
52
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
52
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
53
53
 
54
54
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
55
55
 
@@ -71,7 +71,8 @@ class ModernServer {
71
71
  routes,
72
72
  staticGenerate,
73
73
  logger,
74
- measure
74
+ metrics,
75
+ proxyTarget
75
76
  }) {
76
77
  this.pwd = void 0;
77
78
  this.distDir = void 0;
@@ -82,7 +83,8 @@ class ModernServer {
82
83
  this.presetRoutes = void 0;
83
84
  this.runner = void 0;
84
85
  this.logger = void 0;
85
- this.measure = void 0;
86
+ this.metrics = void 0;
87
+ this.proxyTarget = void 0;
86
88
  this.isDev = false;
87
89
  this.staticFileHandler = void 0;
88
90
  this.routeRenderHandler = void 0;
@@ -96,13 +98,14 @@ class ModernServer {
96
98
 
97
99
  this.isDev = Boolean(dev);
98
100
  this.pwd = pwd;
99
- this.distDir = _path.default.join(pwd, config.output.path || '');
101
+ this.distDir = _path.default.join(pwd, config.output.path || 'dist');
100
102
  this.workDir = this.isDev ? pwd : this.distDir;
101
103
  this.conf = config;
102
104
  this.logger = logger;
103
- this.measure = measure;
105
+ this.metrics = metrics;
104
106
  this.router = new _route.RouteMatchManager();
105
107
  this.presetRoutes = routes;
108
+ this.proxyTarget = proxyTarget;
106
109
 
107
110
  if (staticGenerate) {
108
111
  this.staticGenerate = staticGenerate;
@@ -189,20 +192,6 @@ class ModernServer {
189
192
 
190
193
  async createHTTPServer(handler) {
191
194
  return (0, _http.createServer)(handler);
192
- } // warmup ssr function
193
-
194
-
195
- warmupSSRBundle() {
196
- const {
197
- distDir
198
- } = this;
199
- const bundles = this.router.getBundles();
200
- bundles.forEach(bundle => {
201
- const filepath = _path.default.join(distDir, bundle); // if error, just throw and let process die
202
-
203
-
204
- require(filepath);
205
- });
206
195
  } // read route spec from route.json
207
196
 
208
197
 
@@ -266,10 +255,13 @@ class ModernServer {
266
255
  const mode = _utils.fs.existsSync(_path.default.join(apiDir, _constants.AGGRED_DIR.lambda)) ? _constants.ApiServerMode.frame : _constants.ApiServerMode.func; // if use lambda/, mean framework style of writing, then discard user extension
267
256
 
268
257
  const apiExtension = (0, _utils2.mergeExtension)(pluginAPIExt);
269
- this.frameAPIHandler = await this.prepareAPIHandler(mode, _objectSpread(_objectSpread({}, apiExtension), {}, {
270
- modernJsConfig: this.conf
271
- }));
258
+ this.frameAPIHandler = await this.prepareAPIHandler(mode, apiExtension);
272
259
  }
260
+ } // Todo
261
+
262
+
263
+ async proxy() {
264
+ return null;
273
265
  }
274
266
  /* —————————————————————— function will be overwrite —————————————————————— */
275
267
 
@@ -311,34 +303,59 @@ class ModernServer {
311
303
  return routes;
312
304
  }
313
305
 
306
+ async emitRouteHook(eventName, input) {
307
+ return this.runner[eventName](input, {
308
+ onLast: _utils2.noop
309
+ });
310
+ } // warmup ssr function
311
+
312
+
313
+ warmupSSRBundle() {
314
+ const {
315
+ distDir
316
+ } = this;
317
+ const bundles = this.router.getBundles();
318
+ bundles.forEach(bundle => {
319
+ const filepath = _path.default.join(distDir, bundle); // if error, just throw and let process die
320
+
321
+
322
+ require(filepath);
323
+ });
324
+ }
325
+
314
326
  async preServerInit() {
315
327
  const {
316
- conf
328
+ conf,
329
+ runner
317
330
  } = this;
318
- const preMiddleware = await this.runner.preServerInit(conf);
331
+ const preMiddleware = await runner.preServerInit(conf);
319
332
  preMiddleware.flat().forEach(mid => {
320
333
  this.addHandler(mid);
321
334
  });
322
335
  }
323
336
 
324
- prepareFavicons(favicon, faviconByEntries) {
325
- const faviconNames = [];
337
+ async handleAPI(context) {
338
+ const {
339
+ req,
340
+ res
341
+ } = context;
326
342
 
327
- if (favicon) {
328
- faviconNames.push(favicon.substring(favicon.lastIndexOf('/') + 1));
343
+ if (!this.frameAPIHandler) {
344
+ throw new Error('can not found api hanlder');
329
345
  }
330
346
 
331
- if (faviconByEntries) {
332
- Object.keys(faviconByEntries).forEach(f => {
333
- const curFavicon = faviconByEntries[f];
347
+ await this.frameAPIHandler(req, res);
348
+ }
334
349
 
335
- if (curFavicon) {
336
- faviconNames.push(curFavicon.substring(curFavicon.lastIndexOf('/') + 1));
337
- }
338
- });
339
- }
350
+ async handleWeb(context, route) {
351
+ return this.routeRenderHandler({
352
+ ctx: context,
353
+ route,
354
+ runner: this.runner
355
+ });
356
+ }
340
357
 
341
- return faviconNames;
358
+ verifyMatch(_c, _m) {// empty
342
359
  }
343
360
  /* —————————————————————— private function —————————————————————— */
344
361
  // handler route.json, include api / csr / ssr
@@ -350,10 +367,8 @@ class ModernServer {
350
367
  req,
351
368
  res
352
369
  } = context;
353
- await this.runner.beforeMatch({
370
+ await this.emitRouteHook('beforeMatch', {
354
371
  context
355
- }, {
356
- onLast: _utils2.noop
357
372
  }); // match routes in the route spec
358
373
 
359
374
  const matched = this.router.match(context.url);
@@ -361,14 +376,18 @@ class ModernServer {
361
376
  if (!matched) {
362
377
  this.render404(context);
363
378
  return;
379
+ } else {
380
+ this.verifyMatch(context, matched);
381
+ }
382
+
383
+ if (res.headersSent) {
384
+ return;
364
385
  }
365
386
 
366
387
  const routeAPI = (0, _route2.createRouteAPI)(matched, this.router);
367
- await this.runner.afterMatch({
388
+ await this.emitRouteHook('afterMatch', {
368
389
  context,
369
390
  routeAPI
370
- }, {
371
- onLast: _utils2.noop
372
391
  });
373
392
 
374
393
  if (res.headersSent) {
@@ -383,11 +402,7 @@ class ModernServer {
383
402
  context.setParams(params); // route is api service
384
403
 
385
404
  if (route.isApi) {
386
- if (!this.frameAPIHandler) {
387
- throw new Error('can not found api hanlder');
388
- }
389
-
390
- await this.frameAPIHandler(req, res);
405
+ this.handleAPI(context);
391
406
  return;
392
407
  }
393
408
 
@@ -400,12 +415,13 @@ class ModernServer {
400
415
  return;
401
416
  }
402
417
 
403
- await this.runner.beforeRender({
404
- context
405
- }, {
406
- onLast: _utils2.noop
407
- });
408
- const file = await this.routeRenderHandler(context, route);
418
+ if (route.entryName) {
419
+ await this.emitRouteHook('beforeRender', {
420
+ context
421
+ });
422
+ }
423
+
424
+ const file = await this.handleWeb(context, route);
409
425
 
410
426
  if (!file) {
411
427
  this.render404(context);
@@ -423,11 +439,9 @@ class ModernServer {
423
439
 
424
440
  if (route.entryName) {
425
441
  const templateAPI = (0, _template.createTemplateAPI)(file.content.toString());
426
- await this.runner.afterRender({
442
+ await this.emitRouteHook('afterRender', {
427
443
  context,
428
444
  templateAPI
429
- }, {
430
- onLast: _utils2.noop
431
445
  });
432
446
  await this.injectMicroFE(context, templateAPI);
433
447
  response = templateAPI.get();
@@ -547,7 +561,7 @@ class ModernServer {
547
561
  res.statusCode = 200;
548
562
  const context = (0, _context.createContext)(req, res, {
549
563
  logger: this.logger,
550
- measure: this.measure
564
+ metrics: this.metrics
551
565
  });
552
566
 
553
567
  try {
@@ -595,6 +609,26 @@ class ModernServer {
595
609
  res.end((0, _utils2.createErrorDocument)(status, text));
596
610
  }
597
611
 
612
+ prepareFavicons(favicon, faviconByEntries) {
613
+ const faviconNames = [];
614
+
615
+ if (favicon) {
616
+ faviconNames.push(favicon.substring(favicon.lastIndexOf('/') + 1));
617
+ }
618
+
619
+ if (faviconByEntries) {
620
+ Object.keys(faviconByEntries).forEach(f => {
621
+ const curFavicon = faviconByEntries[f];
622
+
623
+ if (curFavicon) {
624
+ faviconNames.push(curFavicon.substring(curFavicon.lastIndexOf('/') + 1));
625
+ }
626
+ });
627
+ }
628
+
629
+ return faviconNames;
630
+ }
631
+
598
632
  }
599
633
  /* eslint-enable max-lines */
600
634
 
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.applyMixins = applyMixins;
6
7
  exports.toMessage = exports.noop = exports.mergeExtension = exports.createErrorDocument = void 0;
7
8
 
8
9
  const mergeExtension = users => {
@@ -63,6 +64,15 @@ const createErrorDocument = (status, text) => {
63
64
  </body>
64
65
  </html>
65
66
  `;
66
- };
67
+ }; // This can live anywhere in your codebase:
68
+
69
+
70
+ exports.createErrorDocument = createErrorDocument;
67
71
 
68
- exports.createErrorDocument = createErrorDocument;
72
+ function applyMixins(derivedCtor, constructors) {
73
+ constructors.forEach(baseCtor => {
74
+ Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
75
+ Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name) || Object.create(null));
76
+ });
77
+ });
78
+ }
@@ -2,7 +2,7 @@
2
2
  import { IncomingMessage, ServerResponse } from 'http';
3
3
  import { URL } from 'url';
4
4
  import qs from 'querystring';
5
- import type { ModernServerContext as ModernServerContextInterface, Measure, Logger } from '@modern-js/types/server';
5
+ import type { ModernServerContext as ModernServerContextInterface, Metrics, Logger } from '@modern-js/types/server';
6
6
  export declare class ModernServerContext implements ModernServerContextInterface {
7
7
  /**
8
8
  * http request
@@ -19,18 +19,18 @@ export declare class ModernServerContext implements ModernServerContextInterface
19
19
 
20
20
  params: Record<string, string>;
21
21
  logger: Logger;
22
- measure?: Measure;
22
+ metrics?: Metrics;
23
23
  constructor(req: IncomingMessage, res: ServerResponse, {
24
24
  logger,
25
- measure
25
+ metrics
26
26
  }: {
27
27
  logger: Logger;
28
- measure: Measure;
28
+ metrics: Metrics;
29
29
  });
30
+ private bind;
30
31
  setParams(params: Record<string, string>): void;
31
32
  getReqHeader(key: string): string | string[];
32
33
  get headers(): import("http").IncomingHttpHeaders;
33
- set headers(val: import("http").IncomingHttpHeaders);
34
34
  get method(): string;
35
35
  get url(): string;
36
36
  set url(val: string);
@@ -1,11 +1,11 @@
1
1
  import { IncomingMessage, ServerResponse } from 'http';
2
- import { Measure, Logger } from '../../type';
2
+ import { Metrics, Logger } from '../../type';
3
3
  import { ModernServerContext } from './context';
4
4
  export declare const createContext: (req: IncomingMessage, res: ServerResponse, {
5
5
  logger,
6
- measure
6
+ metrics
7
7
  }: {
8
8
  logger: Logger;
9
- measure: Measure;
9
+ metrics: Metrics;
10
10
  }) => ModernServerContext;
11
11
  export { ModernServerContext };
@@ -0,0 +1,3 @@
1
+ import { Metrics } from "../type.d";
2
+ declare const metrics: Metrics;
3
+ export { metrics };
@@ -1,10 +1,19 @@
1
1
  import { RenderResult } from '../../type';
2
2
  import { ModernRoute } from '../route';
3
3
  import { ModernServerContext } from '../context';
4
+ import { ServerHookRunner } from "../../type.d";
4
5
  export declare const createRenderHandler: ({
5
6
  distDir,
6
7
  staticGenerate
7
8
  }: {
8
9
  distDir: string;
9
10
  staticGenerate: boolean;
10
- }) => (ctx: ModernServerContext, route: ModernRoute) => Promise<RenderResult | null>;
11
+ }) => ({
12
+ ctx,
13
+ route,
14
+ runner
15
+ }: {
16
+ ctx: ModernServerContext;
17
+ route: ModernRoute;
18
+ runner: ServerHookRunner;
19
+ }) => Promise<RenderResult | null>;
@@ -1,9 +1,10 @@
1
1
  import { ModernServerContext } from '../context';
2
2
  import { RenderResult } from '../../type';
3
+ import { ServerHookRunner } from "../../type.d";
3
4
  export declare const render: (ctx: ModernServerContext, renderOptions: {
4
5
  distDir: string;
5
6
  bundle: string;
6
7
  template: string;
7
8
  entryName: string;
8
9
  staticGenerate: boolean;
9
- }) => Promise<RenderResult>;
10
+ }, runner: ServerHookRunner) => Promise<RenderResult>;
@@ -1,7 +1,5 @@
1
- /// <reference types="node" />
2
1
  /// <reference types="react" />
3
- import { IncomingHttpHeaders } from 'http';
4
- import { Measure, Logger } from '../../type';
2
+ import { BaseSSRServerContext } from '@modern-js/types/server';
5
3
  declare type MetaKeyMap = {
6
4
  header?: string[];
7
5
  query?: string[];
@@ -24,24 +22,7 @@ export declare enum RenderLevel {
24
22
  SERVER_PREFETCH = 1,
25
23
  SERVER_RENDER = 2,
26
24
  }
27
- export declare type SSRServerContext = {
28
- request: {
29
- params: Record<string, string>;
30
- pathname: string;
31
- query: Record<string, string>;
32
- headers: IncomingHttpHeaders;
33
- cookie?: string;
34
- };
35
- redirection: {
36
- url?: string;
37
- status?: number;
38
- };
39
- distDir: string;
40
- template: string;
41
- entryName: string;
42
- logger: Logger;
43
- measure?: Measure;
44
- loadableManifest?: string;
25
+ export declare type SSRServerContext = BaseSSRServerContext & {
45
26
  cacheConfig?: CacheConfig;
46
27
  staticGenerate?: boolean;
47
28
  };
@@ -1,13 +1,5 @@
1
- export interface ModernRouteInterface {
2
- entryName: string;
3
- urlPath: string;
4
- entryPath?: string;
5
- isSPA?: boolean;
6
- isSSR?: boolean;
7
- isApi?: boolean;
8
- bundle?: string;
9
- enableModernMode?: boolean;
10
- }
1
+ import { ServerRoute as ModernRouteInterface } from '@modern-js/types';
2
+ export type { ModernRouteInterface };
11
3
  export declare class ModernRoute implements ModernRouteInterface {
12
4
  entryName: string;
13
5
  urlPath: string;
@@ -3,14 +3,13 @@ import { ModernDevServer } from './dev-server';
3
3
  import { mergeExtension } from "../../utils.d";
4
4
  import { ModernRouteInterface } from "../../libs/route";
5
5
  import { ApiServerMode } from "../../constants.d";
6
- export declare class WebModernDevServer extends ModernDevServer {
6
+ export declare class ModernSSRDevServer extends ModernDevServer {
7
7
  protected prepareAPIHandler(_m: ApiServerMode, _: APIServerStartInput['config']): any;
8
8
  protected prepareWebHandler(extension: ReturnType<typeof mergeExtension>): Promise<import("@modern-js/server-plugin").Adapter>;
9
9
  protected filterRoutes(routes: ModernRouteInterface[]): ModernRouteInterface[];
10
10
  }
11
- export declare class APIModernDevServer extends ModernDevServer {
12
- protected prepareWebHandler(_: ReturnType<typeof mergeExtension>): any;
13
- protected prepareAPIHandler(mode: ApiServerMode, extension: ReturnType<typeof mergeExtension>): Promise<import("@modern-js/server-plugin").Adapter>;
11
+ export declare class ModernAPIDevServer extends ModernDevServer {
12
+ protected prepareAPIHandler(mode: ApiServerMode, extension: APIServerStartInput['config']): Promise<import("@modern-js/server-plugin").Adapter>;
14
13
  protected filterRoutes(routes: ModernRouteInterface[]): ModernRouteInterface[];
15
14
  protected preServerInit(): Promise<void>;
16
15
  }
@@ -1,2 +1,2 @@
1
- export { APIModernDevServer, WebModernDevServer } from './dev-server-split';
1
+ export { ModernAPIDevServer, ModernSSRDevServer } from './dev-server-split';
2
2
  export { ModernDevServer } from './dev-server';