@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.
- package/CHANGELOG.md +34 -0
- package/dist/js/modern/libs/context/context.js +21 -22
- package/dist/js/modern/libs/hook-api/route.js +8 -3
- package/dist/js/modern/libs/hook-api/template.js +4 -1
- package/dist/js/modern/libs/metrics.js +2 -2
- package/dist/js/modern/libs/proxy.js +2 -2
- package/dist/js/modern/libs/render/cache/page-caches/lru.js +6 -2
- package/dist/js/modern/libs/render/cache/spr.js +7 -4
- package/dist/js/modern/libs/render/measure.js +59 -0
- package/dist/js/modern/libs/render/reader.js +4 -1
- package/dist/js/modern/libs/render/ssr.js +5 -2
- package/dist/js/modern/libs/route/index.js +6 -2
- package/dist/js/modern/libs/route/matcher.js +10 -4
- package/dist/js/modern/libs/route/route.js +20 -9
- package/dist/js/modern/server/index.js +16 -8
- package/dist/js/modern/server/modern-server-split.js +4 -4
- package/dist/js/modern/server/modern-server.js +61 -33
- package/dist/js/modern/utils.js +0 -9
- package/dist/js/node/libs/context/context.js +21 -23
- package/dist/js/node/libs/hook-api/route.js +8 -3
- package/dist/js/node/libs/hook-api/template.js +5 -1
- package/dist/js/node/libs/metrics.js +2 -2
- package/dist/js/node/libs/proxy.js +2 -2
- package/dist/js/node/libs/render/cache/page-caches/lru.js +6 -2
- package/dist/js/node/libs/render/cache/spr.js +6 -6
- package/dist/js/node/libs/render/measure.js +71 -0
- package/dist/js/node/libs/render/reader.js +4 -1
- package/dist/js/node/libs/render/ssr.js +6 -2
- package/dist/js/node/libs/route/index.js +6 -2
- package/dist/js/node/libs/route/matcher.js +10 -4
- package/dist/js/node/libs/route/route.js +20 -9
- package/dist/js/node/server/index.js +15 -7
- package/dist/js/node/server/modern-server-split.js +4 -4
- package/dist/js/node/server/modern-server.js +61 -33
- package/dist/js/node/utils.js +1 -13
- package/dist/types/libs/context/context.d.ts +3 -8
- package/dist/types/libs/render/measure.d.ts +10 -0
- package/dist/types/server/modern-server.d.ts +2 -2
- package/dist/types/utils.d.ts +0 -1
- package/package.json +30 -9
- package/.eslintrc.js +0 -8
- package/dist/js/styles/tsconfig.json +0 -12
- package/jest.config.js +0 -8
- package/modern.config.js +0 -2
- package/src/constants.ts +0 -31
- package/src/index.ts +0 -19
- package/src/libs/context/context.ts +0 -183
- package/src/libs/context/index.ts +0 -7
- package/src/libs/hook-api/route.ts +0 -42
- package/src/libs/hook-api/template.ts +0 -53
- package/src/libs/loadConfig.ts +0 -59
- package/src/libs/metrics.ts +0 -15
- package/src/libs/proxy.ts +0 -44
- package/src/libs/render/cache/__tests__/cache.fun.test.ts +0 -94
- package/src/libs/render/cache/__tests__/cache.test.ts +0 -240
- package/src/libs/render/cache/__tests__/cacheable.ts +0 -44
- package/src/libs/render/cache/__tests__/error-configuration.ts +0 -34
- package/src/libs/render/cache/__tests__/matched-cache.ts +0 -88
- package/src/libs/render/cache/index.ts +0 -73
- package/src/libs/render/cache/page-caches/index.ts +0 -11
- package/src/libs/render/cache/page-caches/lru.ts +0 -38
- package/src/libs/render/cache/spr.ts +0 -300
- package/src/libs/render/cache/type.ts +0 -59
- package/src/libs/render/cache/util.ts +0 -94
- package/src/libs/render/index.ts +0 -79
- package/src/libs/render/modern/browser-list.ts +0 -7
- package/src/libs/render/modern/index.ts +0 -41
- package/src/libs/render/modern/module.d.ts +0 -4
- package/src/libs/render/reader.ts +0 -119
- package/src/libs/render/ssr.ts +0 -66
- package/src/libs/render/static.ts +0 -52
- package/src/libs/render/type.ts +0 -38
- package/src/libs/route/index.ts +0 -76
- package/src/libs/route/matcher.ts +0 -108
- package/src/libs/route/route.ts +0 -34
- package/src/libs/serve-file.ts +0 -34
- package/src/server/index.ts +0 -227
- package/src/server/modern-server-split.ts +0 -93
- package/src/server/modern-server.ts +0 -620
- package/src/tsconfig.json +0 -12
- package/src/type.ts +0 -95
- package/src/utils.ts +0 -125
- 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
|
|
18
|
-
|
|
19
|
-
this
|
|
20
|
-
|
|
21
|
-
this
|
|
22
|
-
|
|
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
|
|
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
|
-
|
|
167
|
-
|
|
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
|
|
4
|
-
|
|
5
|
-
this
|
|
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
|
|
16
|
+
_defineProperty(this, "content", void 0);
|
|
17
|
+
|
|
15
18
|
this.content = content;
|
|
16
19
|
}
|
|
17
20
|
|
|
@@ -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
|
|
14
|
-
const middlewares =
|
|
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
|
|
5
|
-
|
|
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
|
|
19
|
-
|
|
20
|
+
_defineProperty(this, "cache", void 0);
|
|
21
|
+
|
|
22
|
+
_defineProperty(this, "cacheOptions", void 0);
|
|
20
23
|
|
|
21
|
-
this
|
|
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
|
|
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:
|
|
32
|
-
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
|
|
5
|
-
|
|
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
|
|
10
|
-
|
|
11
|
-
this
|
|
12
|
-
|
|
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
|
|
6
|
-
|
|
7
|
-
this
|
|
8
|
-
|
|
9
|
-
this
|
|
10
|
-
|
|
11
|
-
this
|
|
12
|
-
|
|
13
|
-
this
|
|
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 {
|
|
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
|
|
17
|
-
|
|
18
|
-
this
|
|
19
|
-
|
|
20
|
-
this
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
13
|
+
async setupBeforeProdMiddleware() {
|
|
14
14
|
if (this.runMode === RUN_MODE.FULL) {
|
|
15
|
-
await super.
|
|
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
|
|
36
|
+
async setupBeforeProdMiddleware() {
|
|
37
37
|
if (this.runMode === RUN_MODE.FULL) {
|
|
38
|
-
await super.
|
|
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
|
|
49
|
-
|
|
50
|
-
this
|
|
51
|
-
|
|
52
|
-
this
|
|
53
|
-
|
|
54
|
-
this
|
|
55
|
-
|
|
56
|
-
this
|
|
57
|
-
|
|
58
|
-
this
|
|
59
|
-
|
|
60
|
-
this
|
|
61
|
-
|
|
62
|
-
this
|
|
63
|
-
|
|
64
|
-
this
|
|
65
|
-
|
|
66
|
-
this
|
|
67
|
-
|
|
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.
|
|
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
|
|
298
|
+
async setupBeforeProdMiddleware() {
|
|
280
299
|
const {
|
|
281
300
|
conf,
|
|
282
301
|
runner
|
|
283
302
|
} = this;
|
|
284
|
-
const preMiddleware = await runner.
|
|
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
|
|
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 =
|
|
529
|
-
req.metrics =
|
|
530
|
-
|
|
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,
|
|
586
|
+
} = route; // check entryName, avoid matched '/' route
|
|
559
587
|
|
|
560
588
|
if (entryName === status.toString() || entryName === '_error') {
|
|
561
589
|
try {
|
package/dist/js/modern/utils.js
CHANGED
|
@@ -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) => {
|