@modern-js/prod-server 1.1.2 → 1.1.5

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 (83) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/js/modern/libs/context/context.js +21 -22
  3. package/dist/js/modern/libs/hook-api/route.js +8 -3
  4. package/dist/js/modern/libs/hook-api/template.js +4 -1
  5. package/dist/js/modern/libs/metrics.js +2 -2
  6. package/dist/js/modern/libs/proxy.js +2 -2
  7. package/dist/js/modern/libs/render/cache/page-caches/lru.js +6 -2
  8. package/dist/js/modern/libs/render/cache/spr.js +7 -4
  9. package/dist/js/modern/libs/render/measure.js +59 -0
  10. package/dist/js/modern/libs/render/reader.js +4 -1
  11. package/dist/js/modern/libs/render/ssr.js +5 -2
  12. package/dist/js/modern/libs/route/index.js +6 -2
  13. package/dist/js/modern/libs/route/matcher.js +10 -4
  14. package/dist/js/modern/libs/route/route.js +20 -9
  15. package/dist/js/modern/server/index.js +16 -8
  16. package/dist/js/modern/server/modern-server-split.js +4 -4
  17. package/dist/js/modern/server/modern-server.js +61 -33
  18. package/dist/js/modern/utils.js +0 -9
  19. package/dist/js/node/libs/context/context.js +21 -23
  20. package/dist/js/node/libs/hook-api/route.js +8 -3
  21. package/dist/js/node/libs/hook-api/template.js +5 -1
  22. package/dist/js/node/libs/metrics.js +2 -2
  23. package/dist/js/node/libs/proxy.js +2 -2
  24. package/dist/js/node/libs/render/cache/page-caches/lru.js +6 -2
  25. package/dist/js/node/libs/render/cache/spr.js +6 -6
  26. package/dist/js/node/libs/render/measure.js +71 -0
  27. package/dist/js/node/libs/render/reader.js +4 -1
  28. package/dist/js/node/libs/render/ssr.js +6 -2
  29. package/dist/js/node/libs/route/index.js +6 -2
  30. package/dist/js/node/libs/route/matcher.js +10 -4
  31. package/dist/js/node/libs/route/route.js +20 -9
  32. package/dist/js/node/server/index.js +15 -7
  33. package/dist/js/node/server/modern-server-split.js +4 -4
  34. package/dist/js/node/server/modern-server.js +61 -33
  35. package/dist/js/node/utils.js +1 -13
  36. package/dist/types/libs/context/context.d.ts +3 -8
  37. package/dist/types/libs/render/measure.d.ts +10 -0
  38. package/dist/types/server/modern-server.d.ts +2 -2
  39. package/dist/types/utils.d.ts +0 -1
  40. package/package.json +30 -9
  41. package/.eslintrc.js +0 -8
  42. package/dist/js/styles/tsconfig.json +0 -12
  43. package/jest.config.js +0 -8
  44. package/modern.config.js +0 -2
  45. package/src/constants.ts +0 -31
  46. package/src/index.ts +0 -19
  47. package/src/libs/context/context.ts +0 -183
  48. package/src/libs/context/index.ts +0 -7
  49. package/src/libs/hook-api/route.ts +0 -42
  50. package/src/libs/hook-api/template.ts +0 -53
  51. package/src/libs/loadConfig.ts +0 -59
  52. package/src/libs/metrics.ts +0 -15
  53. package/src/libs/proxy.ts +0 -44
  54. package/src/libs/render/cache/__tests__/cache.fun.test.ts +0 -94
  55. package/src/libs/render/cache/__tests__/cache.test.ts +0 -240
  56. package/src/libs/render/cache/__tests__/cacheable.ts +0 -44
  57. package/src/libs/render/cache/__tests__/error-configuration.ts +0 -34
  58. package/src/libs/render/cache/__tests__/matched-cache.ts +0 -88
  59. package/src/libs/render/cache/index.ts +0 -73
  60. package/src/libs/render/cache/page-caches/index.ts +0 -11
  61. package/src/libs/render/cache/page-caches/lru.ts +0 -38
  62. package/src/libs/render/cache/spr.ts +0 -300
  63. package/src/libs/render/cache/type.ts +0 -59
  64. package/src/libs/render/cache/util.ts +0 -94
  65. package/src/libs/render/index.ts +0 -79
  66. package/src/libs/render/modern/browser-list.ts +0 -7
  67. package/src/libs/render/modern/index.ts +0 -41
  68. package/src/libs/render/modern/module.d.ts +0 -4
  69. package/src/libs/render/reader.ts +0 -119
  70. package/src/libs/render/ssr.ts +0 -66
  71. package/src/libs/render/static.ts +0 -52
  72. package/src/libs/render/type.ts +0 -38
  73. package/src/libs/route/index.ts +0 -76
  74. package/src/libs/route/matcher.ts +0 -108
  75. package/src/libs/route/route.ts +0 -34
  76. package/src/libs/serve-file.ts +0 -34
  77. package/src/server/index.ts +0 -227
  78. package/src/server/modern-server-split.ts +0 -93
  79. package/src/server/modern-server.ts +0 -620
  80. package/src/tsconfig.json +0 -12
  81. package/src/type.ts +0 -95
  82. package/src/utils.ts +0 -125
  83. package/tsconfig.json +0 -11
package/CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # @modern-js/prod-server
2
2
 
3
+ ## 1.1.5
4
+
5
+ ### Patch Changes
6
+
7
+ - d32f35134: chore: add modern/jest/eslint/ts config files to .npmignore
8
+ - 86fe5a657: support handle server context init error
9
+ - Updated dependencies [d32f35134]
10
+ - Updated dependencies [6ae4a34ae]
11
+ - Updated dependencies [b80229c79]
12
+ - Updated dependencies [948cc4436]
13
+ - @modern-js/server-core@1.3.5
14
+ - @modern-js/utils@1.7.3
15
+
16
+ ## 1.1.4
17
+
18
+ ### Patch Changes
19
+
20
+ - 69a728375: fix: remove exports.jsnext:source after publish
21
+ - Updated dependencies [cd7346b0d]
22
+ - Updated dependencies [69a728375]
23
+ - @modern-js/utils@1.7.2
24
+ - @modern-js/server-core@1.3.4
25
+
26
+ ## 1.1.3
27
+
28
+ ### Patch Changes
29
+
30
+ - a4c5fe78: fix test case
31
+ - 6fa74d5f: add internal metrics and logger
32
+ - Updated dependencies [0ee4bb4e]
33
+ - Updated dependencies [6fa74d5f]
34
+ - @modern-js/utils@1.7.0
35
+ - @modern-js/server-core@1.3.3
36
+
3
37
  ## 1.1.2
4
38
 
5
39
  ### Patch Changes
@@ -1,6 +1,7 @@
1
+ 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; }
2
+
1
3
  import { URL } from 'url';
2
4
  import qs from 'querystring';
3
- import { toMessage } from "../../utils";
4
5
  export class ModernServerContext {
5
6
  /**
6
7
  * http request
@@ -13,17 +14,25 @@ export class ModernServerContext {
13
14
  /**
14
15
  * url params
15
16
  */
17
+ get logger() {
18
+ return this.req.logger;
19
+ }
20
+
21
+ get metrics() {
22
+ return this.req.metrics;
23
+ }
24
+
16
25
  constructor(req, res) {
17
- this.req = void 0;
18
- this.res = void 0;
19
- this.params = {};
20
- this.logger = void 0;
21
- this.metrics = void 0;
22
- this.serverData = void 0;
26
+ _defineProperty(this, "req", void 0);
27
+
28
+ _defineProperty(this, "res", void 0);
29
+
30
+ _defineProperty(this, "params", {});
31
+
32
+ _defineProperty(this, "serverData", void 0);
33
+
23
34
  this.req = req;
24
35
  this.res = res;
25
- this.logger = req.logger;
26
- this.metrics = req.metrics;
27
36
  this.serverData = {};
28
37
  this.bind();
29
38
  }
@@ -118,7 +127,7 @@ export class ModernServerContext {
118
127
  }
119
128
 
120
129
  set path(p) {
121
- const url = new URL(this.req.url, this.origin); // this should never happend
130
+ const url = new URL(this.req.url, this.origin); // this should never happened
122
131
 
123
132
  if (!url || !p) {
124
133
  return;
@@ -163,18 +172,8 @@ export class ModernServerContext {
163
172
  return this.res.writableEnded;
164
173
  }
165
174
 
166
- logInfo() {
167
- return {
168
- headers: this.headers,
169
- href: this.href,
170
- url: this.url
171
- };
172
- }
173
-
174
- error(dig, err = '') {
175
- const message = toMessage(dig, err);
176
- const reqInfo = this.logInfo();
177
- this.logger.error(`${reqInfo.url} - ${message}`, reqInfo);
175
+ error(dig, e = '') {
176
+ this.logger.error(`Web Server Error - ${dig}, error = %s, req.url = %s, req.headers = %o`, e instanceof Error ? e.stack || e.message : e, this.path, this.headers);
178
177
  }
179
178
 
180
179
  }
@@ -1,8 +1,13 @@
1
+ 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; }
2
+
1
3
  class RouteAPI {
2
4
  constructor(matched, router, url) {
3
- this.router = void 0;
4
- this.current = void 0;
5
- this.url = void 0;
5
+ _defineProperty(this, "router", void 0);
6
+
7
+ _defineProperty(this, "current", void 0);
8
+
9
+ _defineProperty(this, "url", void 0);
10
+
6
11
  this.current = matched;
7
12
  this.router = router;
8
13
  this.url = url;
@@ -1,3 +1,5 @@
1
+ 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; }
2
+
1
3
  const RegList = {
2
4
  before: {
3
5
  head: '<head>',
@@ -11,7 +13,8 @@ const RegList = {
11
13
 
12
14
  class TemplateAPI {
13
15
  constructor(content) {
14
- this.content = void 0;
16
+ _defineProperty(this, "content", void 0);
17
+
15
18
  this.content = content;
16
19
  }
17
20
 
@@ -2,10 +2,10 @@ const metrics = {
2
2
  gauges() {// no impl
3
3
  },
4
4
 
5
- counter() {// no impl
5
+ emitCounter() {// no impl
6
6
  },
7
7
 
8
- timer() {// no impl
8
+ emitTimer() {// no impl
9
9
  }
10
10
 
11
11
  };
@@ -10,8 +10,8 @@ export const createProxyHandler = proxyOptions => {
10
10
  // or an object in the form of { source: ProxyDetail }
11
11
 
12
12
 
13
- const formatedProxy = formatProxyOptions(proxyOptions);
14
- const middlewares = formatedProxy.map(option => {
13
+ const formattedProxy = formatProxyOptions(proxyOptions);
14
+ const middlewares = formattedProxy.map(option => {
15
15
  const middleware = createProxyMiddleware(option.context, option); // eslint-disable-next-line consistent-return
16
16
 
17
17
  return async (ctx, next) => {
@@ -1,8 +1,12 @@
1
+ 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; }
2
+
1
3
  import LRU from 'lru-cache';
2
4
  export class LRUCaches {
3
5
  constructor(options) {
4
- this.caches = void 0;
5
- this.max = void 0;
6
+ _defineProperty(this, "caches", void 0);
7
+
8
+ _defineProperty(this, "max", void 0);
9
+
6
10
  this.max = options.max;
7
11
  this.caches = new LRU(this.max);
8
12
  }
@@ -1,3 +1,5 @@
1
+ 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; }
2
+
1
3
  /* eslint-disable @typescript-eslint/member-ordering */
2
4
 
3
5
  /* eslint-disable no-lone-blocks */
@@ -15,10 +17,11 @@ const QUERY_HEADER_LEVEL = 3;
15
17
 
16
18
  class CacheManager {
17
19
  constructor(cacheOptions) {
18
- this.cache = void 0;
19
- this.cacheOptions = void 0;
20
+ _defineProperty(this, "cache", void 0);
21
+
22
+ _defineProperty(this, "cacheOptions", void 0);
20
23
 
21
- this.find = (() => {
24
+ _defineProperty(this, "find", (() => {
22
25
  {
23
26
  // eslint-disable-next-line consistent-this,@typescript-eslint/no-this-alias
24
27
  const _this = this;
@@ -63,7 +66,7 @@ class CacheManager {
63
66
 
64
67
  };
65
68
  }
66
- })();
69
+ })());
67
70
 
68
71
  this.cacheOptions = cacheOptions;
69
72
  this.cache = new LRUCache({
@@ -0,0 +1,59 @@
1
+ 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; }
2
+
3
+ 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; }
4
+
5
+ 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; }
6
+
7
+ export const createMetrics = (context, metrics) => {
8
+ const {
9
+ entryName: entry,
10
+ request
11
+ } = context;
12
+ const {
13
+ pathname = ''
14
+ } = request || {};
15
+
16
+ const emitTimer = (name, cost, tags = {}) => {
17
+ metrics.emitTimer(name, cost, _objectSpread(_objectSpread({}, tags), {}, {
18
+ pathname,
19
+ entry
20
+ }));
21
+ };
22
+
23
+ const emitCounter = (name, counter, tags = {}) => {
24
+ metrics.emitCounter(name, counter, _objectSpread(_objectSpread({}, tags), {}, {
25
+ pathname,
26
+ entry
27
+ }));
28
+ };
29
+
30
+ return {
31
+ emitTimer,
32
+ emitCounter
33
+ };
34
+ };
35
+ export const createLogger = (serverContext, logger) => {
36
+ const request = serverContext.request || {};
37
+ const {
38
+ headers = {},
39
+ pathname = ''
40
+ } = request;
41
+
42
+ const debug = (message, ...args) => {
43
+ logger.debug(`SSR Debug - ${message}, req.url = %s`, ...args, pathname);
44
+ };
45
+
46
+ const info = (message, ...args) => {
47
+ logger.info(`SSR Info - ${message}, req.url = %s`, ...args, pathname);
48
+ };
49
+
50
+ const error = (message, e) => {
51
+ logger.error(`SSR Error - ${message}, error = %s, req.url = %s, req.headers = %o`, e instanceof Error ? e.stack || e.message : e, pathname, headers);
52
+ };
53
+
54
+ return {
55
+ error,
56
+ info,
57
+ debug
58
+ };
59
+ };
@@ -1,3 +1,5 @@
1
+ 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; }
2
+
1
3
  import { fs } from '@modern-js/utils';
2
4
  import LRU from 'lru-cache';
3
5
  const Byte = 1;
@@ -17,7 +19,8 @@ const createCacheItem = async (filepath, mtime) => {
17
19
  export class LruReader {
18
20
  // private timer?: NodeJS.Timeout;
19
21
  constructor() {
20
- this.cache = void 0;
22
+ _defineProperty(this, "cache", void 0);
23
+
21
24
  this.cache = new LRU({
22
25
  max: 256 * MB,
23
26
  length: getContentLength,
@@ -2,6 +2,7 @@ import path from 'path';
2
2
  import { mime, SERVER_RENDER_FUNCTION_NAME } from '@modern-js/utils';
3
3
  import cookie from 'cookie';
4
4
  import cache from "./cache";
5
+ import { createLogger, createMetrics } from "./measure";
5
6
  export const render = async (ctx, renderOptions, runner) => {
6
7
  const {
7
8
  urlPath,
@@ -28,9 +29,11 @@ export const render = async (ctx, renderOptions, runner) => {
28
29
  entryName,
29
30
  distDir,
30
31
  staticGenerate,
31
- logger: ctx.logger,
32
- metrics: ctx.metrics
32
+ logger: undefined,
33
+ metrics: undefined
33
34
  };
35
+ context.logger = createLogger(context, ctx.logger);
36
+ context.metrics = createMetrics(context, ctx.metrics);
34
37
  runner.extendSSRContext(context);
35
38
 
36
39
  const serverRender = require(bundleJS)[SERVER_RENDER_FUNCTION_NAME];
@@ -1,8 +1,12 @@
1
+ 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; }
2
+
1
3
  import { RouteMatcher } from "./matcher";
2
4
  export class RouteMatchManager {
3
5
  constructor() {
4
- this.matchers = void 0;
5
- this.specs = [];
6
+ _defineProperty(this, "matchers", void 0);
7
+
8
+ _defineProperty(this, "specs", []);
9
+
6
10
  this.matchers = [];
7
11
  } // get all routes matches pathname
8
12
 
@@ -1,3 +1,5 @@
1
+ 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; }
2
+
1
3
  import { removeTailSlash } from '@modern-js/utils';
2
4
  import { match, pathToRegexp } from 'path-to-regexp';
3
5
  import { toPath } from "../../utils";
@@ -6,10 +8,14 @@ import { ModernRoute } from "./route"; // eslint-disable-next-line no-useless-es
6
8
  const regCharsDetector = /[^a-zA-Z\-_0-9\/\.]/;
7
9
  export class RouteMatcher {
8
10
  constructor(spec) {
9
- this.spec = void 0;
10
- this.urlPath = '';
11
- this.urlMatcher = void 0;
12
- this.urlReg = void 0;
11
+ _defineProperty(this, "spec", void 0);
12
+
13
+ _defineProperty(this, "urlPath", '');
14
+
15
+ _defineProperty(this, "urlMatcher", void 0);
16
+
17
+ _defineProperty(this, "urlReg", void 0);
18
+
13
19
  this.spec = spec;
14
20
  this.setupUrlPath();
15
21
  } // generate modern route object
@@ -1,16 +1,27 @@
1
+ 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; }
2
+
1
3
  export class ModernRoute {
2
4
  constructor(routeSpec) {
3
5
  var _routeSpec$enableMode;
4
6
 
5
- this.entryName = void 0;
6
- this.urlPath = void 0;
7
- this.entryPath = void 0;
8
- this.bundle = void 0;
9
- this.isApi = void 0;
10
- this.isSSR = void 0;
11
- this.isSPA = void 0;
12
- this.enableModernMode = void 0;
13
- this.params = {};
7
+ _defineProperty(this, "entryName", void 0);
8
+
9
+ _defineProperty(this, "urlPath", void 0);
10
+
11
+ _defineProperty(this, "entryPath", void 0);
12
+
13
+ _defineProperty(this, "bundle", void 0);
14
+
15
+ _defineProperty(this, "isApi", void 0);
16
+
17
+ _defineProperty(this, "isSSR", void 0);
18
+
19
+ _defineProperty(this, "isSPA", void 0);
20
+
21
+ _defineProperty(this, "enableModernMode", void 0);
22
+
23
+ _defineProperty(this, "params", {});
24
+
14
25
  this.entryName = routeSpec.entryName || '';
15
26
  this.urlPath = routeSpec.urlPath;
16
27
  this.entryPath = routeSpec.entryPath || '';
@@ -6,20 +6,28 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
6
6
 
7
7
  import path from 'path';
8
8
  import { serverManager, AppContext, ConfigContext, loadPlugins } from '@modern-js/server-core';
9
- import { logger as defaultLogger, SHARED_DIR, OUTPUT_CONFIG_FILE } from '@modern-js/utils';
9
+ import { Logger, SHARED_DIR, OUTPUT_CONFIG_FILE } from '@modern-js/utils';
10
10
  import { metrics as defaultMetrics } from "../libs/metrics";
11
11
  import { loadConfig, getServerConfigPath, requireConfig } from "../libs/loadConfig";
12
12
  import { debug } from "../utils";
13
13
  import { createProdServer } from "./modern-server-split";
14
14
  export class Server {
15
15
  constructor(options) {
16
- this.options = void 0;
17
- this.serverImpl = createProdServer;
18
- this.server = void 0;
19
- this.app = void 0;
20
- this.runner = void 0;
21
- this.serverConfig = void 0;
22
- options.logger = options.logger || defaultLogger;
16
+ _defineProperty(this, "options", void 0);
17
+
18
+ _defineProperty(this, "serverImpl", createProdServer);
19
+
20
+ _defineProperty(this, "server", void 0);
21
+
22
+ _defineProperty(this, "app", void 0);
23
+
24
+ _defineProperty(this, "runner", void 0);
25
+
26
+ _defineProperty(this, "serverConfig", void 0);
27
+
28
+ options.logger = options.logger || new Logger({
29
+ level: 'warn'
30
+ });
23
31
  options.metrics = options.metrics || defaultMetrics;
24
32
  this.options = options;
25
33
  this.serverConfig = {};
@@ -10,9 +10,9 @@ class ModernSSRServer extends ModernServer {
10
10
  return routes.filter(route => route.isSSR);
11
11
  }
12
12
 
13
- async preServerInit() {
13
+ async setupBeforeProdMiddleware() {
14
14
  if (this.runMode === RUN_MODE.FULL) {
15
- await super.preServerInit();
15
+ await super.setupBeforeProdMiddleware();
16
16
  }
17
17
  }
18
18
 
@@ -33,9 +33,9 @@ class ModernAPIServer extends ModernServer {
33
33
  return routes.filter(route => route.isApi);
34
34
  }
35
35
 
36
- async preServerInit() {
36
+ async setupBeforeProdMiddleware() {
37
37
  if (this.runMode === RUN_MODE.FULL) {
38
- await super.preServerInit();
38
+ await super.setupBeforeProdMiddleware();
39
39
  }
40
40
  }
41
41
 
@@ -4,12 +4,12 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
4
4
 
5
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
- 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
-
9
7
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
10
8
 
11
9
  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
10
 
11
+ 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; }
12
+
13
13
  /* eslint-disable max-lines */
14
14
  import { createServer } from 'http';
15
15
  import util from 'util';
@@ -45,26 +45,45 @@ export class ModernServer {
45
45
  }) {
46
46
  var _config$output;
47
47
 
48
- this.pwd = void 0;
49
- this.distDir = void 0;
50
- this.workDir = void 0;
51
- this.router = void 0;
52
- this.conf = void 0;
53
- this.handlers = [];
54
- this.presetRoutes = void 0;
55
- this.runner = void 0;
56
- this.logger = void 0;
57
- this.metrics = void 0;
58
- this.runMode = void 0;
59
- this.reader = reader;
60
- this.proxyTarget = void 0;
61
- this.staticFileHandler = void 0;
62
- this.routeRenderHandler = void 0;
63
- this.frameWebHandler = null;
64
- this.frameAPIHandler = null;
65
- this.proxyHandler = null;
66
- this._handler = void 0;
67
- this.staticGenerate = void 0;
48
+ _defineProperty(this, "pwd", void 0);
49
+
50
+ _defineProperty(this, "distDir", void 0);
51
+
52
+ _defineProperty(this, "workDir", void 0);
53
+
54
+ _defineProperty(this, "router", void 0);
55
+
56
+ _defineProperty(this, "conf", void 0);
57
+
58
+ _defineProperty(this, "handlers", []);
59
+
60
+ _defineProperty(this, "presetRoutes", void 0);
61
+
62
+ _defineProperty(this, "runner", void 0);
63
+
64
+ _defineProperty(this, "logger", void 0);
65
+
66
+ _defineProperty(this, "metrics", void 0);
67
+
68
+ _defineProperty(this, "runMode", void 0);
69
+
70
+ _defineProperty(this, "reader", reader);
71
+
72
+ _defineProperty(this, "proxyTarget", void 0);
73
+
74
+ _defineProperty(this, "staticFileHandler", void 0);
75
+
76
+ _defineProperty(this, "routeRenderHandler", void 0);
77
+
78
+ _defineProperty(this, "frameWebHandler", null);
79
+
80
+ _defineProperty(this, "frameAPIHandler", null);
81
+
82
+ _defineProperty(this, "proxyHandler", null);
83
+
84
+ _defineProperty(this, "_handler", void 0);
85
+
86
+ _defineProperty(this, "staticGenerate", void 0);
68
87
 
69
88
  require('ignore-styles');
70
89
 
@@ -128,7 +147,7 @@ export class ModernServer {
128
147
  distDir,
129
148
  staticGenerate
130
149
  });
131
- await this.preServerInit();
150
+ await this.setupBeforeProdMiddleware();
132
151
  this.addHandler(this.staticFileHandler);
133
152
  this.addHandler(this.routeHandler.bind(this)); // compose middlewares to http handler
134
153
 
@@ -193,7 +212,7 @@ export class ModernServer {
193
212
 
194
213
 
195
214
  render404(context) {
196
- context.error(ERROR_DIGEST.ENOTF);
215
+ context.error(ERROR_DIGEST.ENOTF, '404 Not Found');
197
216
  this.renderErrorPage(context, 404);
198
217
  } // gather frame extension and get framework handler
199
218
 
@@ -276,12 +295,12 @@ export class ModernServer {
276
295
  });
277
296
  }
278
297
 
279
- async preServerInit() {
298
+ async setupBeforeProdMiddleware() {
280
299
  const {
281
300
  conf,
282
301
  runner
283
302
  } = this;
284
- const preMiddleware = await runner.preServerInit(conf);
303
+ const preMiddleware = await runner.beforeProdServer(conf);
285
304
  preMiddleware.flat().forEach(mid => {
286
305
  this.addHandler(mid);
287
306
  });
@@ -294,7 +313,7 @@ export class ModernServer {
294
313
  } = context;
295
314
 
296
315
  if (!this.frameAPIHandler) {
297
- throw new Error('can not found api hanlder');
316
+ throw new Error('can not found api handler');
298
317
  }
299
318
 
300
319
  await this.frameAPIHandler(req, res);
@@ -525,14 +544,23 @@ export class ModernServer {
525
544
  requestHandler(req, res, next = () => {// empty
526
545
  }) {
527
546
  res.statusCode = 200;
528
- req.logger = req.logger || this.logger;
529
- req.metrics = req.metrics || this.metrics;
530
- const context = createContext(req, res);
547
+ req.logger = this.logger;
548
+ req.metrics = this.metrics;
549
+ let context;
550
+
551
+ try {
552
+ context = createContext(req, res);
553
+ } catch (e) {
554
+ this.logger.error(e);
555
+ res.statusCode = 500;
556
+ res.setHeader('content-type', mime.contentType('html'));
557
+ return res.end(createErrorDocument(500, ERROR_PAGE_TEXT[500]));
558
+ }
531
559
 
532
560
  try {
533
- this._handler(context, next);
561
+ return this._handler(context, next);
534
562
  } catch (err) {
535
- this.onError(context, err);
563
+ return this.onError(context, err);
536
564
  }
537
565
  }
538
566
 
@@ -555,7 +583,7 @@ export class ModernServer {
555
583
  const route = matched.generate(context.url);
556
584
  const {
557
585
  entryName
558
- } = route; // check entryName, aviod matched '/' route
586
+ } = route; // check entryName, avoid matched '/' route
559
587
 
560
588
  if (entryName === status.toString() || entryName === '_error') {
561
589
  try {
@@ -7,15 +7,6 @@ export const mergeExtension = users => {
7
7
  middleware: output.concat(users)
8
8
  };
9
9
  };
10
- export const toMessage = (dig, e) => {
11
- const message = e instanceof Error ? e.message : e;
12
-
13
- if (message) {
14
- return `${dig}: ${message}`;
15
- } else {
16
- return dig;
17
- }
18
- };
19
10
  export const noop = () => {// noop
20
11
  };
21
12
  export const createErrorDocument = (status, text) => {