@modern-js/prod-server 1.1.0 → 1.1.3

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 (73) hide show
  1. package/.eslintrc.js +8 -0
  2. package/CHANGELOG.md +47 -0
  3. package/dist/js/modern/libs/context/context.js +10 -17
  4. package/dist/js/modern/libs/loadConfig.js +1 -7
  5. package/dist/js/modern/libs/metrics.js +2 -2
  6. package/dist/js/modern/libs/render/cache/spr.js +1 -1
  7. package/dist/js/modern/libs/render/index.js +1 -2
  8. package/dist/js/modern/libs/render/measure.js +59 -0
  9. package/dist/js/modern/libs/render/ssr.js +6 -4
  10. package/dist/js/modern/libs/render/static.js +1 -1
  11. package/dist/js/modern/server/index.js +4 -2
  12. package/dist/js/modern/server/modern-server-split.js +4 -4
  13. package/dist/js/modern/server/modern-server.js +8 -9
  14. package/dist/js/modern/utils.js +0 -9
  15. package/dist/js/node/libs/context/context.js +10 -18
  16. package/dist/js/node/libs/loadConfig.js +1 -8
  17. package/dist/js/node/libs/metrics.js +2 -2
  18. package/dist/js/node/libs/render/cache/spr.js +2 -2
  19. package/dist/js/node/libs/render/index.js +1 -3
  20. package/dist/js/node/libs/render/measure.js +71 -0
  21. package/dist/js/node/libs/render/ssr.js +7 -5
  22. package/dist/js/node/libs/render/static.js +3 -3
  23. package/dist/js/node/server/index.js +3 -1
  24. package/dist/js/node/server/modern-server-split.js +4 -4
  25. package/dist/js/node/server/modern-server.js +9 -11
  26. package/dist/js/node/utils.js +1 -13
  27. package/dist/types/libs/context/context.d.ts +3 -8
  28. package/dist/types/libs/render/measure.d.ts +10 -0
  29. package/dist/types/server/modern-server.d.ts +1 -1
  30. package/dist/types/utils.d.ts +0 -1
  31. package/package.json +5 -9
  32. package/src/libs/context/context.ts +13 -18
  33. package/src/libs/loadConfig.ts +1 -7
  34. package/src/libs/metrics.ts +2 -2
  35. package/src/libs/render/cache/spr.ts +1 -1
  36. package/src/libs/render/index.ts +1 -2
  37. package/src/libs/render/measure.ts +66 -0
  38. package/src/libs/render/ssr.ts +6 -4
  39. package/src/libs/render/static.ts +1 -1
  40. package/src/server/index.ts +7 -2
  41. package/src/server/modern-server-split.ts +4 -4
  42. package/src/server/modern-server.ts +8 -9
  43. package/src/utils.ts +0 -9
  44. package/tests/.eslintrc.js +0 -6
  45. package/tests/context.test.ts +0 -52
  46. package/tests/fixtures/hosting-files/static/index.js +0 -1
  47. package/tests/fixtures/pure/modern.config.js +0 -5
  48. package/tests/fixtures/pure/package.json +0 -21
  49. package/tests/fixtures/pure/src/App.css +0 -119
  50. package/tests/fixtures/pure/src/App.tsx +0 -43
  51. package/tests/fixtures/pure/test-dist/bundles/main.js +0 -5
  52. package/tests/fixtures/pure/test-dist/html/main/index.html +0 -36
  53. package/tests/fixtures/pure/test-dist/route.json +0 -31
  54. package/tests/fixtures/pure/tsconfig.json +0 -12
  55. package/tests/fixtures/reader/index.ts +0 -3
  56. package/tests/fixtures/route-spec/dynamic.json +0 -13
  57. package/tests/fixtures/route-spec/index.json +0 -29
  58. package/tests/fixtures/ssr/bundle-error.js +0 -3
  59. package/tests/fixtures/ssr/bundle.js +0 -5
  60. package/tests/fixtures/ssr/tpl.html +0 -11
  61. package/tests/fixtures/static-dir/bar.html +0 -11
  62. package/tests/fixtures/static-dir/baz/index.html +0 -11
  63. package/tests/fixtures/static-dir/foo/index.html +0 -11
  64. package/tests/helper.ts +0 -8
  65. package/tests/hook.test.ts +0 -44
  66. package/tests/loadConfig.test.ts +0 -65
  67. package/tests/middleware.test.ts +0 -179
  68. package/tests/render.test.ts +0 -206
  69. package/tests/route.test.ts +0 -77
  70. package/tests/server.test.ts +0 -288
  71. package/tests/spr.test.ts +0 -38
  72. package/tests/tsconfig.json +0 -12
  73. package/tests/utils.test.ts +0 -106
package/.eslintrc.js ADDED
@@ -0,0 +1,8 @@
1
+ module.exports = {
2
+ root: true,
3
+ extends: ['@modern-js'],
4
+ parserOptions: {
5
+ tsconfigRootDir: __dirname,
6
+ project: ['./tsconfig.json'],
7
+ },
8
+ };
package/CHANGELOG.md CHANGED
@@ -1,5 +1,52 @@
1
1
  # @modern-js/prod-server
2
2
 
3
+ ## 1.1.3
4
+
5
+ ### Patch Changes
6
+
7
+ - a4c5fe78: fix test case
8
+ - 6fa74d5f: add internal metrics and logger
9
+ - Updated dependencies [0ee4bb4e]
10
+ - Updated dependencies [6fa74d5f]
11
+ - @modern-js/utils@1.7.0
12
+ - @modern-js/server-core@1.3.3
13
+
14
+ ## 1.1.2
15
+
16
+ ### Patch Changes
17
+
18
+ - a0499e4f: fix: throw error in server config
19
+ - 592edabc: feat: prebundle url-join,mime-types,json5,fast-glob,globby,ora,inquirer
20
+ - 895fa0ff: chore: using "workspace:\*" in devDependencies
21
+ - Updated dependencies [2d155c4c]
22
+ - Updated dependencies [123e432d]
23
+ - Updated dependencies [e5a9b26d]
24
+ - Updated dependencies [0b26b93b]
25
+ - Updated dependencies [123e432d]
26
+ - Updated dependencies [f9f66ef9]
27
+ - Updated dependencies [592edabc]
28
+ - Updated dependencies [895fa0ff]
29
+ - Updated dependencies [3578913e]
30
+ - Updated dependencies [1c3beab3]
31
+ - @modern-js/utils@1.6.0
32
+ - @modern-js/server-core@1.3.2
33
+
34
+ ## 1.1.1
35
+
36
+ ### Patch Changes
37
+
38
+ - 6cffe99d: chore:
39
+ remove react eslint rules for `modern-js` rule set.
40
+ add .eslintrc for each package to speed up linting
41
+ - 04ae5262: chore: bump @modern-js/utils to v1.4.1 in dependencies
42
+ - 60f7d8bf: feat: add tests dir to npmignore
43
+ - Updated dependencies [b8599d09]
44
+ - Updated dependencies [04ae5262]
45
+ - Updated dependencies [60f7d8bf]
46
+ - Updated dependencies [3bf4f8b0]
47
+ - @modern-js/utils@1.5.0
48
+ - @modern-js/server-core@1.3.1
49
+
3
50
  ## 1.1.0
4
51
 
5
52
  ### Minor Changes
@@ -1,6 +1,5 @@
1
1
  import { URL } from 'url';
2
2
  import qs from 'querystring';
3
- import { toMessage } from "../../utils";
4
3
  export class ModernServerContext {
5
4
  /**
6
5
  * http request
@@ -13,17 +12,21 @@ export class ModernServerContext {
13
12
  /**
14
13
  * url params
15
14
  */
15
+ get logger() {
16
+ return this.req.logger;
17
+ }
18
+
19
+ get metrics() {
20
+ return this.req.metrics;
21
+ }
22
+
16
23
  constructor(req, res) {
17
24
  this.req = void 0;
18
25
  this.res = void 0;
19
26
  this.params = {};
20
- this.logger = void 0;
21
- this.metrics = void 0;
22
27
  this.serverData = void 0;
23
28
  this.req = req;
24
29
  this.res = res;
25
- this.logger = req.logger;
26
- this.metrics = req.metrics;
27
30
  this.serverData = {};
28
31
  this.bind();
29
32
  }
@@ -163,18 +166,8 @@ export class ModernServerContext {
163
166
  return this.res.writableEnded;
164
167
  }
165
168
 
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);
169
+ error(dig, e = '') {
170
+ 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
171
  }
179
172
 
180
173
  }
@@ -7,19 +7,13 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
7
7
  import * as path from 'path';
8
8
  import { compatRequire, fs, DEFAULT_SERVER_CONFIG } from '@modern-js/utils';
9
9
  import mergeDeep from 'merge-deep';
10
- import { debug } from "../utils";
11
10
  export const getServerConfigPath = (distDirectory, serverConfigFile = DEFAULT_SERVER_CONFIG) => {
12
11
  const serverConfigPath = path.join(distDirectory, serverConfigFile);
13
12
  return `${serverConfigPath}.js`;
14
13
  };
15
14
  export const requireConfig = serverConfigPath => {
16
15
  if (fs.pathExistsSync(serverConfigPath)) {
17
- try {
18
- return compatRequire(serverConfigPath);
19
- } catch (error) {
20
- debug(error);
21
- return {};
22
- }
16
+ return compatRequire(serverConfigPath);
23
17
  }
24
18
 
25
19
  return {};
@@ -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
  };
@@ -3,7 +3,7 @@
3
3
  /* eslint-disable no-lone-blocks */
4
4
  import crypto from 'crypto';
5
5
  import LRUCache from 'lru-cache';
6
- import mime from 'mime-types';
6
+ import { mime } from '@modern-js/utils';
7
7
  import { cacheAddition, connectFactor, fname, maybeSync, namespaceHash, valueFactory, withCoalescedInvoke } from "./util";
8
8
  import { createPageCaches } from "./page-caches";
9
9
  const MAX_CACHE_EACH_REQ = Number(process.env.ROUTE_CACHE_LIMIT) || 10;
@@ -1,6 +1,5 @@
1
1
  import path from 'path';
2
- import { fs } from '@modern-js/utils';
3
- import mime from 'mime-types';
2
+ import { fs, mime } from '@modern-js/utils';
4
3
  import { ERROR_DIGEST } from "../../constants";
5
4
  import { handleDirectory } from "./static";
6
5
  import { readFile } from "./reader";
@@ -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,8 +1,8 @@
1
1
  import path from 'path';
2
- import { SERVER_RENDER_FUNCTION_NAME } from '@modern-js/utils';
3
- import mime from 'mime-types';
2
+ import { mime, SERVER_RENDER_FUNCTION_NAME } from '@modern-js/utils';
4
3
  import cookie from 'cookie';
5
4
  import cache from "./cache";
5
+ import { createLogger, createMetrics } from "./measure";
6
6
  export const render = async (ctx, renderOptions, runner) => {
7
7
  const {
8
8
  urlPath,
@@ -29,9 +29,11 @@ export const render = async (ctx, renderOptions, runner) => {
29
29
  entryName,
30
30
  distDir,
31
31
  staticGenerate,
32
- logger: ctx.logger,
33
- metrics: ctx.metrics
32
+ logger: undefined,
33
+ metrics: undefined
34
34
  };
35
+ context.logger = createLogger(context, ctx.logger);
36
+ context.metrics = createMetrics(context, ctx.metrics);
35
37
  runner.extendSSRContext(context);
36
38
 
37
39
  const serverRender = require(bundleJS)[SERVER_RENDER_FUNCTION_NAME];
@@ -1,5 +1,5 @@
1
1
  import path from 'path';
2
- import mime from 'mime-types';
2
+ import { mime } from '@modern-js/utils';
3
3
  import { readFile } from "./reader";
4
4
  export async function handleDirectory(ctx, entryPath, urlPath) {
5
5
  const {
@@ -6,7 +6,7 @@ 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";
@@ -19,7 +19,9 @@ export class Server {
19
19
  this.app = void 0;
20
20
  this.runner = void 0;
21
21
  this.serverConfig = void 0;
22
- options.logger = options.logger || defaultLogger;
22
+ options.logger = options.logger || new Logger({
23
+ level: 'warn'
24
+ });
23
25
  options.metrics = options.metrics || defaultMetrics;
24
26
  this.options = options;
25
27
  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
 
@@ -14,10 +14,9 @@ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) r
14
14
  import { createServer } from 'http';
15
15
  import util from 'util';
16
16
  import path from 'path';
17
- import { fs, ROUTE_SPEC_FILE } from '@modern-js/utils';
18
- import mime from 'mime-types';
17
+ import { fs, mime, ROUTE_SPEC_FILE } from '@modern-js/utils';
19
18
  import axios from 'axios';
20
- import clone from 'lodash.clone';
19
+ import { clone } from '@modern-js/utils/lodash';
21
20
  import { RouteMatchManager } from "../libs/route";
22
21
  import { createRenderHandler } from "../libs/render";
23
22
  import { createStaticFileHandler } from "../libs/serve-file";
@@ -129,7 +128,7 @@ export class ModernServer {
129
128
  distDir,
130
129
  staticGenerate
131
130
  });
132
- await this.preServerInit();
131
+ await this.setupBeforeProdMiddleware();
133
132
  this.addHandler(this.staticFileHandler);
134
133
  this.addHandler(this.routeHandler.bind(this)); // compose middlewares to http handler
135
134
 
@@ -194,7 +193,7 @@ export class ModernServer {
194
193
 
195
194
 
196
195
  render404(context) {
197
- context.error(ERROR_DIGEST.ENOTF);
196
+ context.error(ERROR_DIGEST.ENOTF, '404 Not Found');
198
197
  this.renderErrorPage(context, 404);
199
198
  } // gather frame extension and get framework handler
200
199
 
@@ -277,12 +276,12 @@ export class ModernServer {
277
276
  });
278
277
  }
279
278
 
280
- async preServerInit() {
279
+ async setupBeforeProdMiddleware() {
281
280
  const {
282
281
  conf,
283
282
  runner
284
283
  } = this;
285
- const preMiddleware = await runner.preServerInit(conf);
284
+ const preMiddleware = await runner.beforeProdServer(conf);
286
285
  preMiddleware.flat().forEach(mid => {
287
286
  this.addHandler(mid);
288
287
  });
@@ -526,8 +525,8 @@ export class ModernServer {
526
525
  requestHandler(req, res, next = () => {// empty
527
526
  }) {
528
527
  res.statusCode = 200;
529
- req.logger = req.logger || this.logger;
530
- req.metrics = req.metrics || this.metrics;
528
+ req.logger = this.logger;
529
+ req.metrics = this.metrics;
531
530
  const context = createContext(req, res);
532
531
 
533
532
  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) => {
@@ -9,8 +9,6 @@ var _url = require("url");
9
9
 
10
10
  var _querystring = _interopRequireDefault(require("querystring"));
11
11
 
12
- var _utils = require("../../utils");
13
-
14
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
13
 
16
14
  class ModernServerContext {
@@ -25,17 +23,21 @@ class ModernServerContext {
25
23
  /**
26
24
  * url params
27
25
  */
26
+ get logger() {
27
+ return this.req.logger;
28
+ }
29
+
30
+ get metrics() {
31
+ return this.req.metrics;
32
+ }
33
+
28
34
  constructor(req, res) {
29
35
  this.req = void 0;
30
36
  this.res = void 0;
31
37
  this.params = {};
32
- this.logger = void 0;
33
- this.metrics = void 0;
34
38
  this.serverData = void 0;
35
39
  this.req = req;
36
40
  this.res = res;
37
- this.logger = req.logger;
38
- this.metrics = req.metrics;
39
41
  this.serverData = {};
40
42
  this.bind();
41
43
  }
@@ -175,18 +177,8 @@ class ModernServerContext {
175
177
  return this.res.writableEnded;
176
178
  }
177
179
 
178
- logInfo() {
179
- return {
180
- headers: this.headers,
181
- href: this.href,
182
- url: this.url
183
- };
184
- }
185
-
186
- error(dig, err = '') {
187
- const message = (0, _utils.toMessage)(dig, err);
188
- const reqInfo = this.logInfo();
189
- this.logger.error(`${reqInfo.url} - ${message}`, reqInfo);
180
+ error(dig, e = '') {
181
+ 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);
190
182
  }
191
183
 
192
184
  }
@@ -11,8 +11,6 @@ var _utils = require("@modern-js/utils");
11
11
 
12
12
  var _mergeDeep = _interopRequireDefault(require("merge-deep"));
13
13
 
14
- var _utils2 = require("../utils");
15
-
16
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
15
 
18
16
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -34,12 +32,7 @@ exports.getServerConfigPath = getServerConfigPath;
34
32
 
35
33
  const requireConfig = serverConfigPath => {
36
34
  if (_utils.fs.pathExistsSync(serverConfigPath)) {
37
- try {
38
- return (0, _utils.compatRequire)(serverConfigPath);
39
- } catch (error) {
40
- (0, _utils2.debug)(error);
41
- return {};
42
- }
35
+ return (0, _utils.compatRequire)(serverConfigPath);
43
36
  }
44
37
 
45
38
  return {};
@@ -8,10 +8,10 @@ const metrics = {
8
8
  gauges() {// no impl
9
9
  },
10
10
 
11
- counter() {// no impl
11
+ emitCounter() {// no impl
12
12
  },
13
13
 
14
- timer() {// no impl
14
+ emitTimer() {// no impl
15
15
  }
16
16
 
17
17
  };
@@ -10,7 +10,7 @@ var _crypto = _interopRequireDefault(require("crypto"));
10
10
 
11
11
  var _lruCache = _interopRequireDefault(require("lru-cache"));
12
12
 
13
- var _mimeTypes = _interopRequireDefault(require("mime-types"));
13
+ var _utils = require("@modern-js/utils");
14
14
 
15
15
  var _util = require("./util");
16
16
 
@@ -220,7 +220,7 @@ class CacheManager {
220
220
  const isGarbage = limitTime ? Date.now() - limitTime > 0 : false;
221
221
  return {
222
222
  content: html || '',
223
- contentType: _mimeTypes.default.contentType('html'),
223
+ contentType: _utils.mime.contentType('html'),
224
224
  isStale,
225
225
  isGarbage,
226
226
  hash: cacheHash
@@ -9,8 +9,6 @@ var _path = _interopRequireDefault(require("path"));
9
9
 
10
10
  var _utils = require("@modern-js/utils");
11
11
 
12
- var _mimeTypes = _interopRequireDefault(require("mime-types"));
13
-
14
12
  var _constants = require("../../constants");
15
13
 
16
14
  var _static = require("./static");
@@ -84,7 +82,7 @@ const createRenderHandler = ({
84
82
 
85
83
  return {
86
84
  content,
87
- contentType: _mimeTypes.default.contentType(_path.default.extname(templateHTML))
85
+ contentType: _utils.mime.contentType(_path.default.extname(templateHTML))
88
86
  };
89
87
  };
90
88
 
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createMetrics = exports.createLogger = void 0;
7
+
8
+ 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; }
9
+
10
+ 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; }
11
+
12
+ 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; }
13
+
14
+ const createMetrics = (context, metrics) => {
15
+ const {
16
+ entryName: entry,
17
+ request
18
+ } = context;
19
+ const {
20
+ pathname = ''
21
+ } = request || {};
22
+
23
+ const emitTimer = (name, cost, tags = {}) => {
24
+ metrics.emitTimer(name, cost, _objectSpread(_objectSpread({}, tags), {}, {
25
+ pathname,
26
+ entry
27
+ }));
28
+ };
29
+
30
+ const emitCounter = (name, counter, tags = {}) => {
31
+ metrics.emitCounter(name, counter, _objectSpread(_objectSpread({}, tags), {}, {
32
+ pathname,
33
+ entry
34
+ }));
35
+ };
36
+
37
+ return {
38
+ emitTimer,
39
+ emitCounter
40
+ };
41
+ };
42
+
43
+ exports.createMetrics = createMetrics;
44
+
45
+ const createLogger = (serverContext, logger) => {
46
+ const request = serverContext.request || {};
47
+ const {
48
+ headers = {},
49
+ pathname = ''
50
+ } = request;
51
+
52
+ const debug = (message, ...args) => {
53
+ logger.debug(`SSR Debug - ${message}, req.url = %s`, ...args, pathname);
54
+ };
55
+
56
+ const info = (message, ...args) => {
57
+ logger.info(`SSR Info - ${message}, req.url = %s`, ...args, pathname);
58
+ };
59
+
60
+ const error = (message, e) => {
61
+ logger.error(`SSR Error - ${message}, error = %s, req.url = %s, req.headers = %o`, e instanceof Error ? e.stack || e.message : e, pathname, headers);
62
+ };
63
+
64
+ return {
65
+ error,
66
+ info,
67
+ debug
68
+ };
69
+ };
70
+
71
+ exports.createLogger = createLogger;
@@ -9,12 +9,12 @@ var _path = _interopRequireDefault(require("path"));
9
9
 
10
10
  var _utils = require("@modern-js/utils");
11
11
 
12
- var _mimeTypes = _interopRequireDefault(require("mime-types"));
13
-
14
12
  var _cookie = _interopRequireDefault(require("cookie"));
15
13
 
16
14
  var _cache = _interopRequireDefault(require("./cache"));
17
15
 
16
+ var _measure = require("./measure");
17
+
18
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
19
 
20
20
  const render = async (ctx, renderOptions, runner) => {
@@ -45,9 +45,11 @@ const render = async (ctx, renderOptions, runner) => {
45
45
  entryName,
46
46
  distDir,
47
47
  staticGenerate,
48
- logger: ctx.logger,
49
- metrics: ctx.metrics
48
+ logger: undefined,
49
+ metrics: undefined
50
50
  };
51
+ context.logger = (0, _measure.createLogger)(context, ctx.logger);
52
+ context.metrics = (0, _measure.createMetrics)(context, ctx.metrics);
51
53
  runner.extendSSRContext(context);
52
54
 
53
55
  const serverRender = require(bundleJS)[_utils.SERVER_RENDER_FUNCTION_NAME];
@@ -69,7 +71,7 @@ const render = async (ctx, renderOptions, runner) => {
69
71
 
70
72
  return {
71
73
  content: html,
72
- contentType: _mimeTypes.default.contentType('html')
74
+ contentType: _utils.mime.contentType('html')
73
75
  };
74
76
  };
75
77
 
@@ -7,7 +7,7 @@ exports.handleDirectory = handleDirectory;
7
7
 
8
8
  var _path = _interopRequireDefault(require("path"));
9
9
 
10
- var _mimeTypes = _interopRequireDefault(require("mime-types"));
10
+ var _utils = require("@modern-js/utils");
11
11
 
12
12
  var _reader = require("./reader");
13
13
 
@@ -23,7 +23,7 @@ async function handleDirectory(ctx, entryPath, urlPath) {
23
23
 
24
24
  let content = await (0, _reader.readFile)(filepath);
25
25
 
26
- let contentType = _mimeTypes.default.contentType(_path.default.extname(filepath) || ''); // automatic addressing
26
+ let contentType = _utils.mime.contentType(_path.default.extname(filepath) || ''); // automatic addressing
27
27
 
28
28
 
29
29
  if (!content) {
@@ -39,7 +39,7 @@ async function handleDirectory(ctx, entryPath, urlPath) {
39
39
 
40
40
 
41
41
  if (content) {
42
- contentType = _mimeTypes.default.contentType('html');
42
+ contentType = _utils.mime.contentType('html');
43
43
  }
44
44
  }
45
45
 
@@ -35,7 +35,9 @@ class Server {
35
35
  this.app = void 0;
36
36
  this.runner = void 0;
37
37
  this.serverConfig = void 0;
38
- options.logger = options.logger || _utils.logger;
38
+ options.logger = options.logger || new _utils.Logger({
39
+ level: 'warn'
40
+ });
39
41
  options.metrics = options.metrics || _metrics.metrics;
40
42
  this.options = options;
41
43
  this.serverConfig = {};