@modern-js/server 0.0.0-plugins-202111301002 → 0.0.0-runtime-2021112193858

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 (87) hide show
  1. package/CHANGELOG.md +59 -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/hook-api/route.js +37 -0
  7. package/dist/js/modern/libs/{hook-api.js → hook-api/template.js} +0 -0
  8. package/dist/js/modern/libs/{measure.js → metrics.js} +2 -2
  9. package/dist/js/modern/libs/proxy.js +2 -2
  10. package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +2 -2
  11. package/dist/js/modern/libs/render/cache/index.js +2 -2
  12. package/dist/js/modern/libs/render/ssr.js +1 -1
  13. package/dist/js/modern/libs/route/index.js +4 -0
  14. package/dist/js/modern/libs/route/matcher.js +4 -0
  15. package/dist/js/modern/libs/route/route.js +1 -1
  16. package/dist/js/modern/server/dev-server/dev-server-split.js +28 -0
  17. package/dist/js/modern/server/{dev-server.js → dev-server/dev-server.js} +41 -22
  18. package/dist/js/modern/server/dev-server/index.js +2 -0
  19. package/dist/js/modern/server/index.js +65 -63
  20. package/dist/js/modern/server/modern-server-split.js +81 -0
  21. package/dist/js/modern/server/modern-server.js +121 -70
  22. package/dist/js/modern/utils.js +11 -3
  23. package/dist/js/node/dev-tools/babel/register.js +2 -2
  24. package/dist/js/node/dev-tools/mock/getMockData.js +2 -2
  25. package/dist/js/node/libs/context/context.js +15 -7
  26. package/dist/js/node/libs/context/index.js +2 -2
  27. package/dist/js/node/libs/hook-api/route.js +46 -0
  28. package/dist/js/node/libs/{hook-api.js → hook-api/template.js} +0 -0
  29. package/dist/js/node/libs/{measure.js → metrics.js} +3 -3
  30. package/dist/js/node/libs/proxy.js +2 -2
  31. package/dist/js/node/libs/render/cache/__tests__/cache.test.js +2 -2
  32. package/dist/js/node/libs/render/cache/index.js +2 -2
  33. package/dist/js/node/libs/render/ssr.js +1 -1
  34. package/dist/js/node/libs/route/index.js +4 -0
  35. package/dist/js/node/libs/route/matcher.js +4 -0
  36. package/dist/js/node/libs/route/route.js +1 -1
  37. package/dist/js/node/server/dev-server/dev-server-split.js +41 -0
  38. package/dist/js/node/server/{dev-server.js → dev-server/dev-server.js} +42 -21
  39. package/dist/js/node/server/dev-server/index.js +27 -0
  40. package/dist/js/node/server/index.js +72 -64
  41. package/dist/js/node/server/modern-server-split.js +97 -0
  42. package/dist/js/node/server/modern-server.js +124 -71
  43. package/dist/js/node/utils.js +14 -4
  44. package/dist/types/libs/context/context.d.ts +5 -5
  45. package/dist/types/libs/context/index.d.ts +3 -3
  46. package/dist/types/libs/hook-api/route.d.ts +13 -0
  47. package/dist/types/libs/{hook-api.d.ts → hook-api/template.d.ts} +0 -0
  48. package/dist/types/libs/metrics.d.ts +3 -0
  49. package/dist/types/libs/render/type.d.ts +2 -2
  50. package/dist/types/libs/route/index.d.ts +1 -0
  51. package/dist/types/libs/route/matcher.d.ts +1 -0
  52. package/dist/types/libs/route/route.d.ts +2 -10
  53. package/dist/types/server/dev-server/dev-server-split.d.ts +15 -0
  54. package/dist/types/server/{dev-server.d.ts → dev-server/dev-server.d.ts} +6 -5
  55. package/dist/types/server/dev-server/index.d.ts +2 -0
  56. package/dist/types/server/index.d.ts +3 -1
  57. package/dist/types/server/modern-server-split.d.ts +26 -0
  58. package/dist/types/server/modern-server.d.ts +20 -12
  59. package/dist/types/type.d.ts +9 -4
  60. package/dist/types/utils.d.ts +3 -2
  61. package/package.json +18 -20
  62. package/src/libs/context/context.ts +12 -8
  63. package/src/libs/context/index.ts +3 -3
  64. package/src/libs/hook-api/route.ts +38 -0
  65. package/src/libs/{hook-api.ts → hook-api/template.ts} +0 -0
  66. package/src/libs/{measure.ts → metrics.ts} +3 -3
  67. package/src/libs/render/ssr.ts +1 -1
  68. package/src/libs/render/type.ts +2 -2
  69. package/src/libs/route/index.ts +4 -0
  70. package/src/libs/route/matcher.ts +4 -0
  71. package/src/libs/route/route.ts +4 -20
  72. package/src/server/{web-server.ts → dev-server/dev-server-split.ts} +12 -14
  73. package/src/server/{dev-server.ts → dev-server/dev-server.ts} +62 -33
  74. package/src/server/dev-server/index.ts +2 -0
  75. package/src/server/index.ts +81 -48
  76. package/src/server/modern-server-split.ts +97 -0
  77. package/src/server/modern-server.ts +140 -90
  78. package/src/type.ts +9 -4
  79. package/src/utils.ts +16 -2
  80. package/dist/js/modern/server/api-server.js +0 -36
  81. package/dist/js/modern/server/web-server.js +0 -30
  82. package/dist/js/node/server/api-server.js +0 -50
  83. package/dist/js/node/server/web-server.js +0 -44
  84. package/dist/types/libs/measure.d.ts +0 -3
  85. package/dist/types/server/api-server.d.ts +0 -17
  86. package/dist/types/server/web-server.d.ts +0 -15
  87. package/src/server/api-server.ts +0 -47
@@ -0,0 +1,81 @@
1
+ import { ModernServer } from "./modern-server";
2
+ export class ModernSSRServer extends ModernServer {
3
+ // Todo should not invoke any route hook in modernSSRServer
4
+ async warmupSSRBundle() {// empty
5
+ }
6
+
7
+ verifyMatch(context, matched) {
8
+ if (matched.generate().isApi) {
9
+ this.render404(context);
10
+ }
11
+ }
12
+
13
+ prepareAPIHandler(_m, _) {
14
+ return null;
15
+ }
16
+
17
+ async prepareWebHandler(extension) {
18
+ return super.prepareWebHandler(extension);
19
+ } // protected filterRoutes(routes: ModernRouteInterface[]) {
20
+ // return routes.filter(route => route.entryName);
21
+ // }
22
+
23
+
24
+ async preServerInit() {// empty
25
+ }
26
+
27
+ }
28
+ export class ModernAPIServer extends ModernServer {
29
+ async emitRouteHook(_, _input) {// empty
30
+ }
31
+
32
+ async warmupSSRBundle() {// empty
33
+ }
34
+
35
+ prepareWebHandler(_) {
36
+ return null;
37
+ }
38
+
39
+ async prepareAPIHandler(mode, extension) {
40
+ return super.prepareAPIHandler(mode, extension);
41
+ }
42
+
43
+ filterRoutes(routes) {
44
+ return routes.filter(route => route.isApi);
45
+ }
46
+
47
+ async preServerInit() {// empty
48
+ }
49
+
50
+ }
51
+ export class ModernWebServer extends ModernServer {
52
+ async warmupSSRBundle() {// empty
53
+ }
54
+
55
+ async handleAPI(context) {
56
+ const {
57
+ proxyTarget
58
+ } = this;
59
+
60
+ if (!(proxyTarget !== null && proxyTarget !== void 0 && proxyTarget.api)) {
61
+ this.proxy();
62
+ } else {
63
+ this.render404(context);
64
+ }
65
+ }
66
+
67
+ async handleWeb(context, route) {
68
+ const {
69
+ proxyTarget
70
+ } = this;
71
+
72
+ if (route.isSSR && proxyTarget !== null && proxyTarget !== void 0 && proxyTarget.ssr) {
73
+ return this.proxy();
74
+ } else {
75
+ // if no proxyTarget but access web server, degradation to csr
76
+ route.isSSR = false;
77
+ return super.handleWeb(context, route);
78
+ }
79
+ }
80
+
81
+ }
@@ -1,8 +1,8 @@
1
1
  const _excluded = ["getMiddlewares"];
2
2
 
3
- 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; }
3
+ 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; }
4
4
 
5
- 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; }
5
+ 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; }
6
6
 
7
7
  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; }
8
8
 
@@ -11,10 +11,11 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
11
11
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
12
12
 
13
13
  /* eslint-disable max-lines */
14
+ import { createServer } from 'http';
14
15
  import util from 'util';
15
16
  import path from 'path';
16
17
  import { fs, ROUTE_SPEC_FILE } from '@modern-js/utils';
17
- import { gather, createMiddlewareCollecter } from '@modern-js/server-utils';
18
+ import { createMiddlewareCollecter } from '@modern-js/server-utils';
18
19
  import mime from 'mime-types';
19
20
  import axios from 'axios';
20
21
  import { RouteMatchManager } from "../libs/route";
@@ -25,7 +26,8 @@ import * as reader from "../libs/render/reader";
25
26
  import { createProxyHandler } from "../libs/proxy";
26
27
  import { createContext } from "../libs/context";
27
28
  import { AGGRED_DIR, ApiServerMode, ERROR_DIGEST, ERROR_PAGE_TEXT } from "../constants";
28
- import { createTemplateAPI } from "../libs/hook-api";
29
+ import { createTemplateAPI } from "../libs/hook-api/template";
30
+ import { createRouteAPI } from "../libs/hook-api/route";
29
31
  const API_DIR = './api';
30
32
  const SERVER_DIR = './server';
31
33
  export class ModernServer {
@@ -39,8 +41,9 @@ export class ModernServer {
39
41
  routes,
40
42
  staticGenerate,
41
43
  logger,
42
- measure
43
- }, runner) {
44
+ metrics,
45
+ proxyTarget
46
+ }) {
44
47
  this.pwd = void 0;
45
48
  this.distDir = void 0;
46
49
  this.workDir = void 0;
@@ -48,9 +51,10 @@ export class ModernServer {
48
51
  this.conf = void 0;
49
52
  this.handlers = [];
50
53
  this.presetRoutes = void 0;
51
- this.logger = void 0;
52
- this.measure = void 0;
53
54
  this.runner = void 0;
55
+ this.logger = void 0;
56
+ this.metrics = void 0;
57
+ this.proxyTarget = void 0;
54
58
  this.isDev = false;
55
59
  this.staticFileHandler = void 0;
56
60
  this.routeRenderHandler = void 0;
@@ -64,14 +68,14 @@ export class ModernServer {
64
68
 
65
69
  this.isDev = Boolean(dev);
66
70
  this.pwd = pwd;
67
- this.distDir = path.join(pwd, config.output.path || '');
71
+ this.distDir = path.join(pwd, config.output.path || 'dist');
68
72
  this.workDir = this.isDev ? pwd : this.distDir;
69
73
  this.conf = config;
70
- this.runner = runner;
71
74
  this.logger = logger;
72
- this.measure = measure;
75
+ this.metrics = metrics;
73
76
  this.router = new RouteMatchManager();
74
77
  this.presetRoutes = routes;
78
+ this.proxyTarget = proxyTarget;
75
79
 
76
80
  if (staticGenerate) {
77
81
  this.staticGenerate = staticGenerate;
@@ -86,9 +90,10 @@ export class ModernServer {
86
90
  } // server prepare
87
91
 
88
92
 
89
- async init() {
93
+ async init(runner) {
90
94
  var _conf$bff;
91
95
 
96
+ this.runner = runner;
92
97
  const {
93
98
  distDir,
94
99
  isDev,
@@ -153,19 +158,10 @@ export class ModernServer {
153
158
 
154
159
  close() {
155
160
  reader.close();
156
- } // warmup ssr function
157
-
158
-
159
- warmupSSRBundle() {
160
- const {
161
- distDir
162
- } = this;
163
- const bundles = this.router.getBundles();
164
- bundles.forEach(bundle => {
165
- const filepath = path.join(distDir, bundle); // if error, just throw and let process die
161
+ }
166
162
 
167
- require(filepath);
168
- });
163
+ async createHTTPServer(handler) {
164
+ return createServer(handler);
169
165
  } // read route spec from route.json
170
166
 
171
167
 
@@ -199,20 +195,8 @@ export class ModernServer {
199
195
  async prepareFrameHandler() {
200
196
  const {
201
197
  workDir,
202
- runner,
203
- conf
204
- } = this; // inner tool, gather user inject
205
-
206
- let userAPIExt = [];
207
- let userWebExt = [];
208
-
209
- if (!conf.server.disableUserExtension) {
210
- ({
211
- api: userAPIExt,
212
- web: userWebExt
213
- } = gather(workDir));
214
- } // server hook, gather plugin inject
215
-
198
+ runner
199
+ } = this; // server hook, gather plugin inject
216
200
 
217
201
  const _createMiddlewareColl = createMiddlewareCollecter(),
218
202
  {
@@ -229,16 +213,21 @@ export class ModernServer {
229
213
  const serverDir = path.join(workDir, SERVER_DIR); // get api or web server handler from server-framework plugin
230
214
 
231
215
  if (await fs.pathExists(path.join(serverDir))) {
232
- const webExtension = mergeExtension(pluginWebExt, userWebExt);
216
+ const webExtension = mergeExtension(pluginWebExt);
233
217
  this.frameWebHandler = await this.prepareWebHandler(webExtension);
234
218
  }
235
219
 
236
220
  if (fs.existsSync(apiDir)) {
237
221
  const mode = fs.existsSync(path.join(apiDir, AGGRED_DIR.lambda)) ? ApiServerMode.frame : ApiServerMode.func; // if use lambda/, mean framework style of writing, then discard user extension
238
222
 
239
- const apiExtension = mergeExtension(pluginAPIExt, mode === ApiServerMode.frame ? [] : userAPIExt);
223
+ const apiExtension = mergeExtension(pluginAPIExt);
240
224
  this.frameAPIHandler = await this.prepareAPIHandler(mode, apiExtension);
241
225
  }
226
+ } // Todo
227
+
228
+
229
+ async proxy() {
230
+ return null;
242
231
  }
243
232
  /* —————————————————————— function will be overwrite —————————————————————— */
244
233
 
@@ -270,7 +259,7 @@ export class ModernServer {
270
259
  pwd: workDir,
271
260
  mode,
272
261
  config: extension,
273
- prefix
262
+ prefix: Array.isArray(prefix) ? prefix[0] : prefix
274
263
  }, {
275
264
  onLast: () => null
276
265
  });
@@ -280,34 +269,54 @@ export class ModernServer {
280
269
  return routes;
281
270
  }
282
271
 
272
+ async emitRouteHook(eventName, input) {
273
+ return this.runner[eventName](input, {
274
+ onLast: noop
275
+ });
276
+ } // warmup ssr function
277
+
278
+
279
+ warmupSSRBundle() {
280
+ const {
281
+ distDir
282
+ } = this;
283
+ const bundles = this.router.getBundles();
284
+ bundles.forEach(bundle => {
285
+ const filepath = path.join(distDir, bundle); // if error, just throw and let process die
286
+
287
+ require(filepath);
288
+ });
289
+ }
290
+
283
291
  async preServerInit() {
284
292
  const {
285
- conf
293
+ conf,
294
+ runner
286
295
  } = this;
287
- const preMiddleware = await this.runner.preServerInit(conf);
288
- preMiddleware.forEach(mid => {
296
+ const preMiddleware = await runner.preServerInit(conf);
297
+ preMiddleware.flat().forEach(mid => {
289
298
  this.addHandler(mid);
290
299
  });
291
300
  }
292
301
 
293
- prepareFavicons(favicon, faviconByEntries) {
294
- const faviconNames = [];
302
+ async handleAPI(context) {
303
+ const {
304
+ req,
305
+ res
306
+ } = context;
295
307
 
296
- if (favicon) {
297
- faviconNames.push(favicon.substring(favicon.lastIndexOf('/') + 1));
308
+ if (!this.frameAPIHandler) {
309
+ throw new Error('can not found api hanlder');
298
310
  }
299
311
 
300
- if (faviconByEntries) {
301
- Object.keys(faviconByEntries).forEach(f => {
302
- const curFavicon = faviconByEntries[f];
312
+ await this.frameAPIHandler(req, res);
313
+ }
303
314
 
304
- if (curFavicon) {
305
- faviconNames.push(curFavicon.substring(curFavicon.lastIndexOf('/') + 1));
306
- }
307
- });
308
- }
315
+ async handleWeb(context, route) {
316
+ return this.routeRenderHandler(context, route);
317
+ }
309
318
 
310
- return faviconNames;
319
+ verifyMatch(_c, _m) {// empty
311
320
  }
312
321
  /* —————————————————————— private function —————————————————————— */
313
322
  // handler route.json, include api / csr / ssr
@@ -318,25 +327,43 @@ export class ModernServer {
318
327
  const {
319
328
  req,
320
329
  res
321
- } = context; // match routes in the route spec
330
+ } = context;
331
+ await this.emitRouteHook('beforeMatch', {
332
+ context
333
+ }); // match routes in the route spec
322
334
 
323
335
  const matched = this.router.match(context.url);
324
336
 
325
337
  if (!matched) {
326
338
  this.render404(context);
327
339
  return;
340
+ } else {
341
+ this.verifyMatch(context, matched);
328
342
  }
329
343
 
330
- const route = matched.generate();
331
- const params = matched.parseURLParams(context.url);
344
+ if (res.headersSent) {
345
+ return;
346
+ }
347
+
348
+ const routeAPI = createRouteAPI(matched, this.router);
349
+ await this.emitRouteHook('afterMatch', {
350
+ context,
351
+ routeAPI
352
+ });
353
+
354
+ if (res.headersSent) {
355
+ return;
356
+ }
357
+
358
+ const {
359
+ current
360
+ } = routeAPI;
361
+ const route = current.generate();
362
+ const params = current.parseURLParams(context.url);
332
363
  context.setParams(params); // route is api service
333
364
 
334
365
  if (route.isApi) {
335
- if (!this.frameAPIHandler) {
336
- throw new Error('can not found api hanlder');
337
- }
338
-
339
- await this.frameAPIHandler(req, res);
366
+ this.handleAPI(context);
340
367
  return;
341
368
  }
342
369
 
@@ -349,7 +376,13 @@ export class ModernServer {
349
376
  return;
350
377
  }
351
378
 
352
- const file = await this.routeRenderHandler(context, route);
379
+ if (route.entryName) {
380
+ await this.emitRouteHook('beforeRender', {
381
+ context
382
+ });
383
+ }
384
+
385
+ const file = await this.handleWeb(context, route);
353
386
 
354
387
  if (!file) {
355
388
  this.render404(context);
@@ -367,11 +400,9 @@ export class ModernServer {
367
400
 
368
401
  if (route.entryName) {
369
402
  const templateAPI = createTemplateAPI(file.content.toString());
370
- await this.runner.afterRender({
403
+ await this.emitRouteHook('afterRender', {
371
404
  context,
372
405
  templateAPI
373
- }, {
374
- onLast: noop
375
406
  });
376
407
  await this.injectMicroFE(context, templateAPI);
377
408
  response = templateAPI.get();
@@ -491,7 +522,7 @@ export class ModernServer {
491
522
  res.statusCode = 200;
492
523
  const context = createContext(req, res, {
493
524
  logger: this.logger,
494
- measure: this.measure
525
+ metrics: this.metrics
495
526
  });
496
527
 
497
528
  try {
@@ -539,5 +570,25 @@ export class ModernServer {
539
570
  res.end(createErrorDocument(status, text));
540
571
  }
541
572
 
573
+ prepareFavicons(favicon, faviconByEntries) {
574
+ const faviconNames = [];
575
+
576
+ if (favicon) {
577
+ faviconNames.push(favicon.substring(favicon.lastIndexOf('/') + 1));
578
+ }
579
+
580
+ if (faviconByEntries) {
581
+ Object.keys(faviconByEntries).forEach(f => {
582
+ const curFavicon = faviconByEntries[f];
583
+
584
+ if (curFavicon) {
585
+ faviconNames.push(curFavicon.substring(curFavicon.lastIndexOf('/') + 1));
586
+ }
587
+ });
588
+ }
589
+
590
+ return faviconNames;
591
+ }
592
+
542
593
  }
543
594
  /* eslint-enable max-lines */
@@ -1,7 +1,7 @@
1
- export const mergeExtension = (users, plugins) => {
1
+ export const mergeExtension = users => {
2
2
  const output = [];
3
3
  return {
4
- middleware: output.concat(users).concat(plugins)
4
+ middleware: output.concat(users)
5
5
  };
6
6
  };
7
7
  export const toMessage = (dig, e) => {
@@ -47,4 +47,12 @@ export const createErrorDocument = (status, text) => {
47
47
  </body>
48
48
  </html>
49
49
  `;
50
- };
50
+ }; // This can live anywhere in your codebase:
51
+
52
+ export function applyMixins(derivedCtor, constructors) {
53
+ constructors.forEach(baseCtor => {
54
+ Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
55
+ Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name) || Object.create(null));
56
+ });
57
+ });
58
+ }
@@ -11,9 +11,9 @@ var _serverUtils = require("@modern-js/server-utils");
11
11
 
12
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
13
 
14
- 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; }
14
+ 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; }
15
15
 
16
- 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; }
16
+ 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; }
17
17
 
18
18
  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; }
19
19
 
@@ -7,9 +7,9 @@ exports.default = void 0;
7
7
 
8
8
  var _utils = require("@modern-js/utils");
9
9
 
10
- 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; }
10
+ 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; }
11
11
 
12
- 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; }
12
+ 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; }
13
13
 
14
14
  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; }
15
15
 
@@ -27,17 +27,29 @@ class ModernServerContext {
27
27
  */
28
28
  constructor(req, res, {
29
29
  logger,
30
- measure
30
+ metrics
31
31
  }) {
32
32
  this.req = void 0;
33
33
  this.res = void 0;
34
34
  this.params = {};
35
35
  this.logger = void 0;
36
- this.measure = void 0;
36
+ this.metrics = void 0;
37
37
  this.req = req;
38
38
  this.res = res;
39
39
  this.logger = logger;
40
- this.measure = measure;
40
+ this.metrics = metrics;
41
+ this.bind();
42
+ }
43
+
44
+ bind() {
45
+ const {
46
+ req,
47
+ res
48
+ } = this;
49
+
50
+ req.get = key => this.getReqHeader(key);
51
+
52
+ res.set = (key, value) => this.res.setHeader(key, value);
41
53
  }
42
54
 
43
55
  setParams(params) {
@@ -66,10 +78,6 @@ class ModernServerContext {
66
78
  return this.req.headers;
67
79
  }
68
80
 
69
- set headers(val) {
70
- this.req.headers = val;
71
- }
72
-
73
81
  get method() {
74
82
  return this.req.method;
75
83
  }
@@ -15,10 +15,10 @@ var _context = require("./context");
15
15
 
16
16
  const createContext = (req, res, {
17
17
  logger,
18
- measure
18
+ metrics
19
19
  }) => new _context.ModernServerContext(req, res, {
20
20
  logger,
21
- measure
21
+ metrics
22
22
  });
23
23
 
24
24
  exports.createContext = createContext;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createRouteAPI = void 0;
7
+
8
+ class RouteAPI {
9
+ constructor(matched, router) {
10
+ this.router = void 0;
11
+ this.current = void 0;
12
+ this.current = matched;
13
+ this.router = router;
14
+ }
15
+
16
+ cur() {
17
+ return this.current.generate();
18
+ }
19
+
20
+ get(entryName) {
21
+ const {
22
+ router
23
+ } = this;
24
+ const matched = router.matchEntry(entryName);
25
+ return matched ? matched.generate() : null;
26
+ }
27
+
28
+ use(entryName) {
29
+ const {
30
+ router
31
+ } = this;
32
+ const matched = router.matchEntry(entryName);
33
+
34
+ if (matched) {
35
+ this.current = matched;
36
+ return true;
37
+ } else {
38
+ return false;
39
+ }
40
+ }
41
+
42
+ }
43
+
44
+ const createRouteAPI = (matched, router) => new RouteAPI(matched, router);
45
+
46
+ exports.createRouteAPI = createRouteAPI;
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.measure = void 0;
7
- const measure = {
6
+ exports.metrics = void 0;
7
+ const metrics = {
8
8
  gauges() {// no impl
9
9
  },
10
10
 
@@ -15,4 +15,4 @@ const measure = {
15
15
  }
16
16
 
17
17
  };
18
- exports.measure = measure;
18
+ exports.metrics = metrics;
@@ -7,9 +7,9 @@ exports.createProxyHandler = void 0;
7
7
 
8
8
  var _httpProxyMiddleware = require("http-proxy-middleware");
9
9
 
10
- 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; }
10
+ 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; }
11
11
 
12
- 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; }
12
+ 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; }
13
13
 
14
14
  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; }
15
15
 
@@ -8,9 +8,9 @@ var _cacheable = require("./cacheable");
8
8
 
9
9
  var _matchedCache = require("./matched-cache");
10
10
 
11
- 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; }
11
+ 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; }
12
12
 
13
- 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; }
13
+ 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; }
14
14
 
15
15
  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; }
16
16
 
@@ -11,9 +11,9 @@ var _util = require("./util");
11
11
 
12
12
  var _constants = require("../../../constants");
13
13
 
14
- 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; }
14
+ 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; }
15
15
 
16
- 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; }
16
+ 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; }
17
17
 
18
18
  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; }
19
19
 
@@ -40,7 +40,7 @@ const render = async (ctx, renderOptions) => {
40
40
  distDir,
41
41
  staticGenerate,
42
42
  logger: ctx.logger,
43
- measure: ctx.measure
43
+ metrics: ctx.metrics
44
44
  };
45
45
 
46
46
  const serverRender = require(bundleJS)[_utils.SERVER_RENDER_FUNCTION_NAME];
@@ -64,6 +64,10 @@ class RouteMatchManager {
64
64
  return best;
65
65
  }
66
66
 
67
+ matchEntry(entryname) {
68
+ return this.matchers.find(matcher => matcher.matchEntry(entryname));
69
+ }
70
+
67
71
  getBundles() {
68
72
  const bundles = this.specs.filter(route => route.isSSR).map(route => route.bundle);
69
73
  return bundles;