@modern-js/server 1.1.3 → 1.1.5-beta.1

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 (67) hide show
  1. package/CHANGELOG.md +19 -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/index.js +6 -2
  11. package/dist/js/modern/libs/render/ssr.js +3 -2
  12. package/dist/js/modern/libs/route/route.js +1 -1
  13. package/dist/js/modern/server/dev-server/dev-server-split.js +2 -6
  14. package/dist/js/modern/server/dev-server/dev-server.js +11 -2
  15. package/dist/js/modern/server/dev-server/index.js +1 -1
  16. package/dist/js/modern/server/index.js +17 -15
  17. package/dist/js/modern/server/modern-server-split.js +55 -6
  18. package/dist/js/modern/server/modern-server.js +96 -56
  19. package/dist/js/modern/utils.js +9 -1
  20. package/dist/js/node/dev-tools/babel/register.js +2 -2
  21. package/dist/js/node/dev-tools/mock/getMockData.js +2 -2
  22. package/dist/js/node/libs/context/context.js +15 -7
  23. package/dist/js/node/libs/context/index.js +2 -2
  24. package/dist/js/node/libs/{measure.js → metrics.js} +3 -3
  25. package/dist/js/node/libs/proxy.js +2 -2
  26. package/dist/js/node/libs/render/cache/__tests__/cache.test.js +2 -2
  27. package/dist/js/node/libs/render/cache/index.js +2 -2
  28. package/dist/js/node/libs/render/index.js +6 -2
  29. package/dist/js/node/libs/render/ssr.js +3 -2
  30. package/dist/js/node/libs/route/route.js +1 -1
  31. package/dist/js/node/server/dev-server/dev-server-split.js +5 -9
  32. package/dist/js/node/server/dev-server/dev-server.js +11 -2
  33. package/dist/js/node/server/dev-server/index.js +4 -4
  34. package/dist/js/node/server/index.js +16 -14
  35. package/dist/js/node/server/modern-server-split.js +61 -9
  36. package/dist/js/node/server/modern-server.js +97 -57
  37. package/dist/js/node/utils.js +12 -2
  38. package/dist/types/libs/context/context.d.ts +5 -5
  39. package/dist/types/libs/context/index.d.ts +3 -3
  40. package/dist/types/libs/metrics.d.ts +3 -0
  41. package/dist/types/libs/render/index.d.ts +10 -1
  42. package/dist/types/libs/render/ssr.d.ts +2 -1
  43. package/dist/types/libs/render/type.d.ts +2 -21
  44. package/dist/types/libs/route/route.d.ts +2 -10
  45. package/dist/types/server/dev-server/dev-server-split.d.ts +3 -4
  46. package/dist/types/server/dev-server/index.d.ts +1 -1
  47. package/dist/types/server/modern-server-split.d.ts +15 -5
  48. package/dist/types/server/modern-server.d.ts +14 -7
  49. package/dist/types/type.d.ts +11 -5
  50. package/dist/types/utils.d.ts +2 -1
  51. package/package.json +5 -5
  52. package/src/libs/context/context.ts +12 -8
  53. package/src/libs/context/index.ts +3 -3
  54. package/src/libs/{measure.ts → metrics.ts} +3 -3
  55. package/src/libs/render/index.ts +21 -11
  56. package/src/libs/render/ssr.ts +5 -1
  57. package/src/libs/render/type.ts +3 -16
  58. package/src/libs/route/route.ts +4 -20
  59. package/src/server/dev-server/dev-server-split.ts +3 -7
  60. package/src/server/dev-server/dev-server.ts +14 -12
  61. package/src/server/dev-server/index.ts +1 -1
  62. package/src/server/index.ts +21 -14
  63. package/src/server/modern-server-split.ts +59 -7
  64. package/src/server/modern-server.ts +109 -64
  65. package/src/type.ts +12 -5
  66. package/src/utils.ts +14 -0
  67. 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,6 +131,9 @@ 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(() => {
@@ -139,9 +144,6 @@ class Server {
139
144
  }));
140
145
  });
141
146
 
142
- (_options$plugins = options.plugins) === null || _options$plugins === void 0 ? void 0 : _options$plugins.forEach(p => {
143
- _serverPlugin.serverManager.usePlugin(p);
144
- });
145
147
  return _serverPlugin.serverManager.init({});
146
148
  }
147
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
 
@@ -268,6 +257,11 @@ class ModernServer {
268
257
  const apiExtension = (0, _utils2.mergeExtension)(pluginAPIExt);
269
258
  this.frameAPIHandler = await this.prepareAPIHandler(mode, apiExtension);
270
259
  }
260
+ } // Todo
261
+
262
+
263
+ async proxy() {
264
+ return null;
271
265
  }
272
266
  /* —————————————————————— function will be overwrite —————————————————————— */
273
267
 
@@ -309,34 +303,59 @@ class ModernServer {
309
303
  return routes;
310
304
  }
311
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
+
312
326
  async preServerInit() {
313
327
  const {
314
- conf
328
+ conf,
329
+ runner
315
330
  } = this;
316
- const preMiddleware = await this.runner.preServerInit(conf);
331
+ const preMiddleware = await runner.preServerInit(conf);
317
332
  preMiddleware.flat().forEach(mid => {
318
333
  this.addHandler(mid);
319
334
  });
320
335
  }
321
336
 
322
- prepareFavicons(favicon, faviconByEntries) {
323
- const faviconNames = [];
337
+ async handleAPI(context) {
338
+ const {
339
+ req,
340
+ res
341
+ } = context;
324
342
 
325
- if (favicon) {
326
- faviconNames.push(favicon.substring(favicon.lastIndexOf('/') + 1));
343
+ if (!this.frameAPIHandler) {
344
+ throw new Error('can not found api hanlder');
327
345
  }
328
346
 
329
- if (faviconByEntries) {
330
- Object.keys(faviconByEntries).forEach(f => {
331
- const curFavicon = faviconByEntries[f];
347
+ await this.frameAPIHandler(req, res);
348
+ }
332
349
 
333
- if (curFavicon) {
334
- faviconNames.push(curFavicon.substring(curFavicon.lastIndexOf('/') + 1));
335
- }
336
- });
337
- }
350
+ async handleWeb(context, route) {
351
+ return this.routeRenderHandler({
352
+ ctx: context,
353
+ route,
354
+ runner: this.runner
355
+ });
356
+ }
338
357
 
339
- return faviconNames;
358
+ verifyMatch(_c, _m) {// empty
340
359
  }
341
360
  /* —————————————————————— private function —————————————————————— */
342
361
  // handler route.json, include api / csr / ssr
@@ -348,10 +367,8 @@ class ModernServer {
348
367
  req,
349
368
  res
350
369
  } = context;
351
- await this.runner.beforeMatch({
370
+ await this.emitRouteHook('beforeMatch', {
352
371
  context
353
- }, {
354
- onLast: _utils2.noop
355
372
  }); // match routes in the route spec
356
373
 
357
374
  const matched = this.router.match(context.url);
@@ -359,14 +376,18 @@ class ModernServer {
359
376
  if (!matched) {
360
377
  this.render404(context);
361
378
  return;
379
+ } else {
380
+ this.verifyMatch(context, matched);
381
+ }
382
+
383
+ if (res.headersSent) {
384
+ return;
362
385
  }
363
386
 
364
387
  const routeAPI = (0, _route2.createRouteAPI)(matched, this.router);
365
- await this.runner.afterMatch({
388
+ await this.emitRouteHook('afterMatch', {
366
389
  context,
367
390
  routeAPI
368
- }, {
369
- onLast: _utils2.noop
370
391
  });
371
392
 
372
393
  if (res.headersSent) {
@@ -381,11 +402,7 @@ class ModernServer {
381
402
  context.setParams(params); // route is api service
382
403
 
383
404
  if (route.isApi) {
384
- if (!this.frameAPIHandler) {
385
- throw new Error('can not found api hanlder');
386
- }
387
-
388
- await this.frameAPIHandler(req, res);
405
+ this.handleAPI(context);
389
406
  return;
390
407
  }
391
408
 
@@ -398,12 +415,13 @@ class ModernServer {
398
415
  return;
399
416
  }
400
417
 
401
- await this.runner.beforeRender({
402
- context
403
- }, {
404
- onLast: _utils2.noop
405
- });
406
- 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);
407
425
 
408
426
  if (!file) {
409
427
  this.render404(context);
@@ -421,11 +439,9 @@ class ModernServer {
421
439
 
422
440
  if (route.entryName) {
423
441
  const templateAPI = (0, _template.createTemplateAPI)(file.content.toString());
424
- await this.runner.afterRender({
442
+ await this.emitRouteHook('afterRender', {
425
443
  context,
426
444
  templateAPI
427
- }, {
428
- onLast: _utils2.noop
429
445
  });
430
446
  await this.injectMicroFE(context, templateAPI);
431
447
  response = templateAPI.get();
@@ -545,7 +561,7 @@ class ModernServer {
545
561
  res.statusCode = 200;
546
562
  const context = (0, _context.createContext)(req, res, {
547
563
  logger: this.logger,
548
- measure: this.measure
564
+ metrics: this.metrics
549
565
  });
550
566
 
551
567
  try {
@@ -578,7 +594,11 @@ class ModernServer {
578
594
 
579
595
  if (entryName === status.toString() || entryName === '_error') {
580
596
  try {
581
- const file = await this.routeRenderHandler(context, route);
597
+ const file = await this.routeRenderHandler({
598
+ route,
599
+ ctx: context,
600
+ runner: this.runner
601
+ });
582
602
 
583
603
  if (file) {
584
604
  context.res.end(file.content);
@@ -593,6 +613,26 @@ class ModernServer {
593
613
  res.end((0, _utils2.createErrorDocument)(status, text));
594
614
  }
595
615
 
616
+ prepareFavicons(favicon, faviconByEntries) {
617
+ const faviconNames = [];
618
+
619
+ if (favicon) {
620
+ faviconNames.push(favicon.substring(favicon.lastIndexOf('/') + 1));
621
+ }
622
+
623
+ if (faviconByEntries) {
624
+ Object.keys(faviconByEntries).forEach(f => {
625
+ const curFavicon = faviconByEntries[f];
626
+
627
+ if (curFavicon) {
628
+ faviconNames.push(curFavicon.substring(curFavicon.lastIndexOf('/') + 1));
629
+ }
630
+ });
631
+ }
632
+
633
+ return faviconNames;
634
+ }
635
+
596
636
  }
597
637
  /* eslint-enable max-lines */
598
638
 
@@ -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';