@modern-js/server 1.1.4-rc.0 → 1.2.0
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 +23 -7
- package/dist/js/modern/libs/context/context.js +15 -7
- package/dist/js/modern/libs/context/index.js +2 -2
- package/dist/js/modern/libs/{measure.js → metrics.js} +2 -2
- package/dist/js/modern/libs/render/ssr.js +1 -1
- package/dist/js/modern/libs/route/route.js +1 -1
- package/dist/js/modern/server/dev-server/dev-server.js +11 -2
- package/dist/js/modern/server/index.js +2 -2
- package/dist/js/modern/server/modern-server.js +4 -4
- package/dist/js/node/libs/context/context.js +15 -7
- package/dist/js/node/libs/context/index.js +2 -2
- package/dist/js/node/libs/{measure.js → metrics.js} +3 -3
- package/dist/js/node/libs/render/ssr.js +1 -1
- package/dist/js/node/libs/route/route.js +1 -1
- package/dist/js/node/server/dev-server/dev-server.js +11 -2
- package/dist/js/node/server/index.js +2 -2
- package/dist/js/node/server/modern-server.js +4 -4
- package/dist/types/libs/context/context.d.ts +5 -5
- package/dist/types/libs/context/index.d.ts +3 -3
- package/dist/types/libs/metrics.d.ts +3 -0
- package/dist/types/libs/render/type.d.ts +2 -2
- package/dist/types/libs/route/route.d.ts +2 -10
- package/dist/types/server/modern-server.d.ts +3 -3
- package/dist/types/type.d.ts +6 -5
- package/package.json +9 -9
- package/src/libs/context/context.ts +12 -8
- package/src/libs/context/index.ts +3 -3
- package/src/libs/{measure.ts → metrics.ts} +3 -3
- package/src/libs/render/ssr.ts +1 -1
- package/src/libs/render/type.ts +2 -2
- package/src/libs/route/route.ts +4 -20
- package/src/server/dev-server/dev-server.ts +8 -2
- package/src/server/index.ts +2 -2
- package/src/server/modern-server.ts +5 -5
- package/src/type.ts +7 -5
- package/dist/types/libs/measure.d.ts +0 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
# @modern-js/server
|
|
2
2
|
|
|
3
|
-
## 1.
|
|
3
|
+
## 1.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 5a4c557e: feat: support bff test
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- e04914ce: add route types, fix metrics types
|
|
12
|
+
- e04914ce: add route types, fix metrics types
|
|
13
|
+
- Updated dependencies [90eeb72c]
|
|
14
|
+
- Updated dependencies [e04914ce]
|
|
15
|
+
- Updated dependencies [5a4c557e]
|
|
16
|
+
- Updated dependencies [e04914ce]
|
|
17
|
+
- Updated dependencies [ca7dcb32]
|
|
18
|
+
- Updated dependencies [ecb344dc]
|
|
19
|
+
- @modern-js/core@1.2.0
|
|
20
|
+
- @modern-js/server-plugin@1.1.3
|
|
21
|
+
- @modern-js/utils@1.1.5
|
|
22
|
+
|
|
23
|
+
## 1.1.4
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
|
6
26
|
|
|
@@ -16,12 +36,8 @@
|
|
|
16
36
|
- Updated dependencies [d73ff455]
|
|
17
37
|
- Updated dependencies [d73ff455]
|
|
18
38
|
- Updated dependencies [d73ff455]
|
|
19
|
-
- @modern-js/utils@1.1.4
|
|
20
|
-
- @modern-js/core@1.1.4
|
|
21
|
-
- @modern-js/bff-utils@1.1.2-rc.0
|
|
22
|
-
- @modern-js/hmr-client@1.1.2-rc.0
|
|
23
|
-
- @modern-js/server-utils@1.1.3-rc.0
|
|
24
|
-
- @modern-js/server-plugin@1.1.2
|
|
39
|
+
- @modern-js/utils@1.1.4
|
|
40
|
+
- @modern-js/core@1.1.4
|
|
25
41
|
|
|
26
42
|
## 1.1.3
|
|
27
43
|
|
|
@@ -15,17 +15,29 @@ export class ModernServerContext {
|
|
|
15
15
|
*/
|
|
16
16
|
constructor(req, res, {
|
|
17
17
|
logger,
|
|
18
|
-
|
|
18
|
+
metrics
|
|
19
19
|
}) {
|
|
20
20
|
this.req = void 0;
|
|
21
21
|
this.res = void 0;
|
|
22
22
|
this.params = {};
|
|
23
23
|
this.logger = void 0;
|
|
24
|
-
this.
|
|
24
|
+
this.metrics = void 0;
|
|
25
25
|
this.req = req;
|
|
26
26
|
this.res = res;
|
|
27
27
|
this.logger = logger;
|
|
28
|
-
this.
|
|
28
|
+
this.metrics = metrics;
|
|
29
|
+
this.bind();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
bind() {
|
|
33
|
+
const {
|
|
34
|
+
req,
|
|
35
|
+
res
|
|
36
|
+
} = this;
|
|
37
|
+
|
|
38
|
+
req.get = key => this.getReqHeader(key);
|
|
39
|
+
|
|
40
|
+
res.set = (key, value) => this.res.setHeader(key, value);
|
|
29
41
|
}
|
|
30
42
|
|
|
31
43
|
setParams(params) {
|
|
@@ -54,10 +66,6 @@ export class ModernServerContext {
|
|
|
54
66
|
return this.req.headers;
|
|
55
67
|
}
|
|
56
68
|
|
|
57
|
-
set headers(val) {
|
|
58
|
-
this.req.headers = val;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
69
|
get method() {
|
|
62
70
|
return this.req.method;
|
|
63
71
|
}
|
|
@@ -10,7 +10,7 @@ export class ModernRoute {
|
|
|
10
10
|
this.isSSR = void 0;
|
|
11
11
|
this.isSPA = void 0;
|
|
12
12
|
this.enableModernMode = void 0;
|
|
13
|
-
this.entryName = routeSpec.entryName;
|
|
13
|
+
this.entryName = routeSpec.entryName || '';
|
|
14
14
|
this.urlPath = routeSpec.urlPath;
|
|
15
15
|
this.entryPath = routeSpec.entryPath || '';
|
|
16
16
|
this.isSSR = routeSpec.isSSR || false;
|
|
@@ -1,3 +1,9 @@
|
|
|
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
|
+
|
|
1
7
|
import { createServer } from 'http';
|
|
2
8
|
import path from 'path';
|
|
3
9
|
import { createServer as createHttpsServer } from 'https';
|
|
@@ -25,6 +31,7 @@ const DEFAULT_DEV_OPTIONS = {
|
|
|
25
31
|
dev: {
|
|
26
32
|
writeToDisk: true
|
|
27
33
|
},
|
|
34
|
+
watch: true,
|
|
28
35
|
hot: true,
|
|
29
36
|
liveReload: true
|
|
30
37
|
};
|
|
@@ -41,7 +48,7 @@ export class ModernDevServer extends ModernServer {
|
|
|
41
48
|
this.devMiddleware = void 0;
|
|
42
49
|
this.compiler = options.compiler; // set dev server options, like webpack-dev-server
|
|
43
50
|
|
|
44
|
-
this.dev = typeof options.dev === 'boolean' ? DEFAULT_DEV_OPTIONS : options.dev;
|
|
51
|
+
this.dev = typeof options.dev === 'boolean' ? DEFAULT_DEV_OPTIONS : _objectSpread(_objectSpread({}, DEFAULT_DEV_OPTIONS), options.dev);
|
|
45
52
|
enableRegister(this.pwd, this.conf);
|
|
46
53
|
} // Complete the preparation of services
|
|
47
54
|
|
|
@@ -90,7 +97,9 @@ export class ModernDevServer extends ModernServer {
|
|
|
90
97
|
|
|
91
98
|
await super.init(runner); // watch mock/ server/ api/ dir file change
|
|
92
99
|
|
|
93
|
-
this.
|
|
100
|
+
if (this.dev.watch) {
|
|
101
|
+
this.startWatcher();
|
|
102
|
+
}
|
|
94
103
|
}
|
|
95
104
|
|
|
96
105
|
ready(options = {}) {
|
|
@@ -10,7 +10,7 @@ import { logger as defaultLogger } from '@modern-js/utils';
|
|
|
10
10
|
import { AppContext, initAppContext, initAppDir, loadUserConfig, ConfigContext } from '@modern-js/core';
|
|
11
11
|
import { ModernServer } from "./modern-server";
|
|
12
12
|
import { ModernAPIServer, ModernSSRServer, ModernWebServer } from "./modern-server-split";
|
|
13
|
-
import {
|
|
13
|
+
import { metrics as defaultMetrics } from "../libs/metrics";
|
|
14
14
|
export class Server {
|
|
15
15
|
constructor(options) {
|
|
16
16
|
this.options = void 0;
|
|
@@ -36,7 +36,7 @@ export class Server {
|
|
|
36
36
|
options
|
|
37
37
|
} = this;
|
|
38
38
|
options.logger = options.logger || defaultLogger;
|
|
39
|
-
options.
|
|
39
|
+
options.metrics = options.metrics || defaultMetrics; // initialize server
|
|
40
40
|
|
|
41
41
|
if (options.dev) {
|
|
42
42
|
this.server = this.createDevServer();
|
|
@@ -41,7 +41,7 @@ export class ModernServer {
|
|
|
41
41
|
routes,
|
|
42
42
|
staticGenerate,
|
|
43
43
|
logger,
|
|
44
|
-
|
|
44
|
+
metrics,
|
|
45
45
|
proxyTarget
|
|
46
46
|
}) {
|
|
47
47
|
this.pwd = void 0;
|
|
@@ -53,7 +53,7 @@ export class ModernServer {
|
|
|
53
53
|
this.presetRoutes = void 0;
|
|
54
54
|
this.runner = void 0;
|
|
55
55
|
this.logger = void 0;
|
|
56
|
-
this.
|
|
56
|
+
this.metrics = void 0;
|
|
57
57
|
this.proxyTarget = void 0;
|
|
58
58
|
this.isDev = false;
|
|
59
59
|
this.staticFileHandler = void 0;
|
|
@@ -72,7 +72,7 @@ export class ModernServer {
|
|
|
72
72
|
this.workDir = this.isDev ? pwd : this.distDir;
|
|
73
73
|
this.conf = config;
|
|
74
74
|
this.logger = logger;
|
|
75
|
-
this.
|
|
75
|
+
this.metrics = metrics;
|
|
76
76
|
this.router = new RouteMatchManager();
|
|
77
77
|
this.presetRoutes = routes;
|
|
78
78
|
this.proxyTarget = proxyTarget;
|
|
@@ -522,7 +522,7 @@ export class ModernServer {
|
|
|
522
522
|
res.statusCode = 200;
|
|
523
523
|
const context = createContext(req, res, {
|
|
524
524
|
logger: this.logger,
|
|
525
|
-
|
|
525
|
+
metrics: this.metrics
|
|
526
526
|
});
|
|
527
527
|
|
|
528
528
|
try {
|
|
@@ -27,17 +27,29 @@ class ModernServerContext {
|
|
|
27
27
|
*/
|
|
28
28
|
constructor(req, res, {
|
|
29
29
|
logger,
|
|
30
|
-
|
|
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.
|
|
36
|
+
this.metrics = void 0;
|
|
37
37
|
this.req = req;
|
|
38
38
|
this.res = res;
|
|
39
39
|
this.logger = logger;
|
|
40
|
-
this.
|
|
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
|
-
|
|
18
|
+
metrics
|
|
19
19
|
}) => new _context.ModernServerContext(req, res, {
|
|
20
20
|
logger,
|
|
21
|
-
|
|
21
|
+
metrics
|
|
22
22
|
});
|
|
23
23
|
|
|
24
24
|
exports.createContext = createContext;
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
const
|
|
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.
|
|
18
|
+
exports.metrics = metrics;
|
|
@@ -17,7 +17,7 @@ class ModernRoute {
|
|
|
17
17
|
this.isSSR = void 0;
|
|
18
18
|
this.isSPA = void 0;
|
|
19
19
|
this.enableModernMode = void 0;
|
|
20
|
-
this.entryName = routeSpec.entryName;
|
|
20
|
+
this.entryName = routeSpec.entryName || '';
|
|
21
21
|
this.urlPath = routeSpec.urlPath;
|
|
22
22
|
this.entryPath = routeSpec.entryPath || '';
|
|
23
23
|
this.isSSR = routeSpec.isSSR || false;
|
|
@@ -41,6 +41,12 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
41
41
|
|
|
42
42
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
43
43
|
|
|
44
|
+
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; }
|
|
45
|
+
|
|
46
|
+
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; }
|
|
47
|
+
|
|
48
|
+
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; }
|
|
49
|
+
|
|
44
50
|
const DEFAULT_DEV_OPTIONS = {
|
|
45
51
|
client: {
|
|
46
52
|
port: '8080',
|
|
@@ -53,6 +59,7 @@ const DEFAULT_DEV_OPTIONS = {
|
|
|
53
59
|
dev: {
|
|
54
60
|
writeToDisk: true
|
|
55
61
|
},
|
|
62
|
+
watch: true,
|
|
56
63
|
hot: true,
|
|
57
64
|
liveReload: true
|
|
58
65
|
};
|
|
@@ -70,7 +77,7 @@ class ModernDevServer extends _modernServer.ModernServer {
|
|
|
70
77
|
this.devMiddleware = void 0;
|
|
71
78
|
this.compiler = options.compiler; // set dev server options, like webpack-dev-server
|
|
72
79
|
|
|
73
|
-
this.dev = typeof options.dev === 'boolean' ? DEFAULT_DEV_OPTIONS : options.dev;
|
|
80
|
+
this.dev = typeof options.dev === 'boolean' ? DEFAULT_DEV_OPTIONS : _objectSpread(_objectSpread({}, DEFAULT_DEV_OPTIONS), options.dev);
|
|
74
81
|
(0, _register.enableRegister)(this.pwd, this.conf);
|
|
75
82
|
} // Complete the preparation of services
|
|
76
83
|
|
|
@@ -119,7 +126,9 @@ class ModernDevServer extends _modernServer.ModernServer {
|
|
|
119
126
|
|
|
120
127
|
await super.init(runner); // watch mock/ server/ api/ dir file change
|
|
121
128
|
|
|
122
|
-
this.
|
|
129
|
+
if (this.dev.watch) {
|
|
130
|
+
this.startWatcher();
|
|
131
|
+
}
|
|
123
132
|
}
|
|
124
133
|
|
|
125
134
|
ready(options = {}) {
|
|
@@ -17,7 +17,7 @@ var _modernServer = require("./modern-server");
|
|
|
17
17
|
|
|
18
18
|
var _modernServerSplit = require("./modern-server-split");
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _metrics = require("../libs/metrics");
|
|
21
21
|
|
|
22
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
23
|
|
|
@@ -52,7 +52,7 @@ class Server {
|
|
|
52
52
|
options
|
|
53
53
|
} = this;
|
|
54
54
|
options.logger = options.logger || _utils.logger;
|
|
55
|
-
options.
|
|
55
|
+
options.metrics = options.metrics || _metrics.metrics; // initialize server
|
|
56
56
|
|
|
57
57
|
if (options.dev) {
|
|
58
58
|
this.server = this.createDevServer();
|
|
@@ -71,7 +71,7 @@ class ModernServer {
|
|
|
71
71
|
routes,
|
|
72
72
|
staticGenerate,
|
|
73
73
|
logger,
|
|
74
|
-
|
|
74
|
+
metrics,
|
|
75
75
|
proxyTarget
|
|
76
76
|
}) {
|
|
77
77
|
this.pwd = void 0;
|
|
@@ -83,7 +83,7 @@ class ModernServer {
|
|
|
83
83
|
this.presetRoutes = void 0;
|
|
84
84
|
this.runner = void 0;
|
|
85
85
|
this.logger = void 0;
|
|
86
|
-
this.
|
|
86
|
+
this.metrics = void 0;
|
|
87
87
|
this.proxyTarget = void 0;
|
|
88
88
|
this.isDev = false;
|
|
89
89
|
this.staticFileHandler = void 0;
|
|
@@ -102,7 +102,7 @@ class ModernServer {
|
|
|
102
102
|
this.workDir = this.isDev ? pwd : this.distDir;
|
|
103
103
|
this.conf = config;
|
|
104
104
|
this.logger = logger;
|
|
105
|
-
this.
|
|
105
|
+
this.metrics = metrics;
|
|
106
106
|
this.router = new _route.RouteMatchManager();
|
|
107
107
|
this.presetRoutes = routes;
|
|
108
108
|
this.proxyTarget = proxyTarget;
|
|
@@ -557,7 +557,7 @@ class ModernServer {
|
|
|
557
557
|
res.statusCode = 200;
|
|
558
558
|
const context = (0, _context.createContext)(req, res, {
|
|
559
559
|
logger: this.logger,
|
|
560
|
-
|
|
560
|
+
metrics: this.metrics
|
|
561
561
|
});
|
|
562
562
|
|
|
563
563
|
try {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { IncomingMessage, ServerResponse } from 'http';
|
|
3
3
|
import { URL } from 'url';
|
|
4
4
|
import qs from 'querystring';
|
|
5
|
-
import type { ModernServerContext as ModernServerContextInterface,
|
|
5
|
+
import type { ModernServerContext as ModernServerContextInterface, Metrics, Logger } from '@modern-js/types/server';
|
|
6
6
|
export declare class ModernServerContext implements ModernServerContextInterface {
|
|
7
7
|
/**
|
|
8
8
|
* http request
|
|
@@ -19,18 +19,18 @@ export declare class ModernServerContext implements ModernServerContextInterface
|
|
|
19
19
|
|
|
20
20
|
params: Record<string, string>;
|
|
21
21
|
logger: Logger;
|
|
22
|
-
|
|
22
|
+
metrics?: Metrics;
|
|
23
23
|
constructor(req: IncomingMessage, res: ServerResponse, {
|
|
24
24
|
logger,
|
|
25
|
-
|
|
25
|
+
metrics
|
|
26
26
|
}: {
|
|
27
27
|
logger: Logger;
|
|
28
|
-
|
|
28
|
+
metrics: Metrics;
|
|
29
29
|
});
|
|
30
|
+
private bind;
|
|
30
31
|
setParams(params: Record<string, string>): void;
|
|
31
32
|
getReqHeader(key: string): string | string[];
|
|
32
33
|
get headers(): import("http").IncomingHttpHeaders;
|
|
33
|
-
set headers(val: import("http").IncomingHttpHeaders);
|
|
34
34
|
get method(): string;
|
|
35
35
|
get url(): string;
|
|
36
36
|
set url(val: string);
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { IncomingMessage, ServerResponse } from 'http';
|
|
2
|
-
import {
|
|
2
|
+
import { Metrics, Logger } from '../../type';
|
|
3
3
|
import { ModernServerContext } from './context';
|
|
4
4
|
export declare const createContext: (req: IncomingMessage, res: ServerResponse, {
|
|
5
5
|
logger,
|
|
6
|
-
|
|
6
|
+
metrics
|
|
7
7
|
}: {
|
|
8
8
|
logger: Logger;
|
|
9
|
-
|
|
9
|
+
metrics: Metrics;
|
|
10
10
|
}) => ModernServerContext;
|
|
11
11
|
export { ModernServerContext };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="react" />
|
|
3
3
|
import { IncomingHttpHeaders } from 'http';
|
|
4
|
-
import {
|
|
4
|
+
import { Metrics, Logger } from '../../type';
|
|
5
5
|
declare type MetaKeyMap = {
|
|
6
6
|
header?: string[];
|
|
7
7
|
query?: string[];
|
|
@@ -40,7 +40,7 @@ export declare type SSRServerContext = {
|
|
|
40
40
|
template: string;
|
|
41
41
|
entryName: string;
|
|
42
42
|
logger: Logger;
|
|
43
|
-
|
|
43
|
+
metrics?: Metrics;
|
|
44
44
|
loadableManifest?: string;
|
|
45
45
|
cacheConfig?: CacheConfig;
|
|
46
46
|
staticGenerate?: boolean;
|
|
@@ -1,13 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
urlPath: string;
|
|
4
|
-
entryPath?: string;
|
|
5
|
-
isSPA?: boolean;
|
|
6
|
-
isSSR?: boolean;
|
|
7
|
-
isApi?: boolean;
|
|
8
|
-
bundle?: string;
|
|
9
|
-
enableModernMode?: boolean;
|
|
10
|
-
}
|
|
1
|
+
import { ServerRoute as ModernRouteInterface } from '@modern-js/types';
|
|
2
|
+
export type { ModernRouteInterface };
|
|
11
3
|
export declare class ModernRoute implements ModernRouteInterface {
|
|
12
4
|
entryName: string;
|
|
13
5
|
urlPath: string;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { IncomingMessage, ServerResponse, Server } from 'http';
|
|
3
3
|
import { Adapter, APIServerStartInput } from '@modern-js/server-plugin';
|
|
4
4
|
import type { NormalizedConfig } from '@modern-js/core';
|
|
5
|
-
import { ModernServerOptions, NextFunction, ServerHookRunner,
|
|
5
|
+
import { ModernServerOptions, NextFunction, ServerHookRunner, Metrics, Logger, ReadyOptions } from "../type.d";
|
|
6
6
|
import { RouteMatchManager, ModernRouteInterface, ModernRoute, RouteMatcher } from "../libs/route";
|
|
7
7
|
import { mergeExtension } from "../utils.d";
|
|
8
8
|
import { ModernServerContext } from "../libs/context";
|
|
@@ -19,7 +19,7 @@ export declare class ModernServer {
|
|
|
19
19
|
protected presetRoutes?: ModernRouteInterface[];
|
|
20
20
|
protected runner: ServerHookRunner;
|
|
21
21
|
protected readonly logger: Logger;
|
|
22
|
-
protected readonly
|
|
22
|
+
protected readonly metrics: Metrics;
|
|
23
23
|
protected readonly proxyTarget: ModernServerOptions['proxyTarget'];
|
|
24
24
|
private readonly isDev;
|
|
25
25
|
private staticFileHandler;
|
|
@@ -36,7 +36,7 @@ export declare class ModernServer {
|
|
|
36
36
|
routes,
|
|
37
37
|
staticGenerate,
|
|
38
38
|
logger,
|
|
39
|
-
|
|
39
|
+
metrics,
|
|
40
40
|
proxyTarget
|
|
41
41
|
}: ModernServerOptions);
|
|
42
42
|
getRequestHandler(): (req: IncomingMessage, res: ServerResponse, next?: () => void) => void;
|
package/dist/types/type.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import type Webpack from 'webpack';
|
|
3
3
|
import { serverManager } from '@modern-js/server-plugin';
|
|
4
4
|
import type { NormalizedConfig } from '@modern-js/core';
|
|
5
|
-
import type {
|
|
5
|
+
import type { Metrics, Logger, NextFunction } from '@modern-js/types/server';
|
|
6
6
|
import { ModernRouteInterface } from './libs/route';
|
|
7
7
|
declare module '@modern-js/core' {
|
|
8
8
|
interface UserConfig {
|
|
@@ -23,6 +23,7 @@ export declare type DevServerOptions = {
|
|
|
23
23
|
dev: {
|
|
24
24
|
writeToDisk: boolean | ((filename: string) => boolean);
|
|
25
25
|
};
|
|
26
|
+
watch: boolean;
|
|
26
27
|
hot: boolean | string;
|
|
27
28
|
liveReload: boolean;
|
|
28
29
|
https?: boolean | {
|
|
@@ -35,15 +36,15 @@ export declare type ModernServerOptions = {
|
|
|
35
36
|
pwd: string;
|
|
36
37
|
config: NormalizedConfig;
|
|
37
38
|
plugins?: any[];
|
|
38
|
-
dev?: boolean | DevServerOptions
|
|
39
|
+
dev?: boolean | Partial<DevServerOptions>;
|
|
39
40
|
compiler?: Webpack.MultiCompiler | Webpack.Compiler;
|
|
40
41
|
routes?: ModernRouteInterface[];
|
|
41
42
|
staticGenerate?: boolean;
|
|
42
43
|
customServer?: boolean;
|
|
43
44
|
loggerOptions?: Record<string, string>;
|
|
44
|
-
|
|
45
|
+
metricsOptions?: Record<string, string>;
|
|
45
46
|
logger?: Logger;
|
|
46
|
-
|
|
47
|
+
metrics?: Metrics;
|
|
47
48
|
apiOnly?: boolean;
|
|
48
49
|
ssrOnly?: boolean;
|
|
49
50
|
webOnly?: boolean;
|
|
@@ -68,4 +69,4 @@ export declare type ServerHookRunner = Then<ReturnType<typeof serverManager.init
|
|
|
68
69
|
export declare type ReadyOptions = {
|
|
69
70
|
routes?: ModernRouteInterface[];
|
|
70
71
|
};
|
|
71
|
-
export type {
|
|
72
|
+
export type { Metrics, Logger, NextFunction };
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"modern",
|
|
12
12
|
"modern.js"
|
|
13
13
|
],
|
|
14
|
-
"version": "1.
|
|
14
|
+
"version": "1.2.0",
|
|
15
15
|
"jsnext:source": "./src/index.ts",
|
|
16
16
|
"types": "./dist/types/index.d.ts",
|
|
17
17
|
"main": "./dist/js/node/index.js",
|
|
@@ -33,12 +33,12 @@
|
|
|
33
33
|
"@babel/preset-typescript": "^7.15.0",
|
|
34
34
|
"@babel/register": "^7.15.3",
|
|
35
35
|
"@babel/runtime": "^7",
|
|
36
|
-
"@modern-js/core": "^1.
|
|
37
|
-
"@modern-js/hmr-client": "^1.1.
|
|
38
|
-
"@modern-js/server-plugin": "^1.1.
|
|
39
|
-
"@modern-js/server-utils": "^1.1.
|
|
40
|
-
"@modern-js/bff-utils": "^1.1.
|
|
41
|
-
"@modern-js/utils": "^1.1.
|
|
36
|
+
"@modern-js/core": "^1.2.0",
|
|
37
|
+
"@modern-js/hmr-client": "^1.1.1",
|
|
38
|
+
"@modern-js/server-plugin": "^1.1.3",
|
|
39
|
+
"@modern-js/server-utils": "^1.1.2",
|
|
40
|
+
"@modern-js/bff-utils": "^1.1.1",
|
|
41
|
+
"@modern-js/utils": "^1.1.5",
|
|
42
42
|
"axios": "^0.21.4",
|
|
43
43
|
"babel-plugin-module-resolver": "^4.1.0",
|
|
44
44
|
"chokidar": "^3.5.2",
|
|
@@ -61,9 +61,9 @@
|
|
|
61
61
|
"ws": "^8.2.0"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
|
-
"@modern-js/module-tools": "^1.1.
|
|
64
|
+
"@modern-js/module-tools": "^1.1.2",
|
|
65
65
|
"@modern-js/plugin-testing": "^1.1.1",
|
|
66
|
-
"@modern-js/types": "^1.1.
|
|
66
|
+
"@modern-js/types": "^1.1.4",
|
|
67
67
|
"@types/jest": "^26",
|
|
68
68
|
"@types/lru-cache": "^5.1.1",
|
|
69
69
|
"@types/mime-types": "^2.1.0",
|
|
@@ -3,7 +3,7 @@ import { URL } from 'url';
|
|
|
3
3
|
import qs from 'querystring';
|
|
4
4
|
import type {
|
|
5
5
|
ModernServerContext as ModernServerContextInterface,
|
|
6
|
-
|
|
6
|
+
Metrics,
|
|
7
7
|
Logger,
|
|
8
8
|
} from '@modern-js/types/server';
|
|
9
9
|
import { toMessage } from '../../utils';
|
|
@@ -26,17 +26,25 @@ export class ModernServerContext implements ModernServerContextInterface {
|
|
|
26
26
|
|
|
27
27
|
public logger: Logger;
|
|
28
28
|
|
|
29
|
-
public
|
|
29
|
+
public metrics?: Metrics;
|
|
30
30
|
|
|
31
31
|
constructor(
|
|
32
32
|
req: IncomingMessage,
|
|
33
33
|
res: ServerResponse,
|
|
34
|
-
{ logger,
|
|
34
|
+
{ logger, metrics }: { logger: Logger; metrics: Metrics },
|
|
35
35
|
) {
|
|
36
36
|
this.req = req;
|
|
37
37
|
this.res = res;
|
|
38
38
|
this.logger = logger;
|
|
39
|
-
this.
|
|
39
|
+
this.metrics = metrics;
|
|
40
|
+
|
|
41
|
+
this.bind();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private bind() {
|
|
45
|
+
const { req, res } = this as any;
|
|
46
|
+
req.get = (key: string) => this.getReqHeader(key);
|
|
47
|
+
res.set = (key: string, value: any) => this.res.setHeader(key, value);
|
|
40
48
|
}
|
|
41
49
|
|
|
42
50
|
public setParams(params: Record<string, string>) {
|
|
@@ -60,10 +68,6 @@ export class ModernServerContext implements ModernServerContextInterface {
|
|
|
60
68
|
return this.req.headers;
|
|
61
69
|
}
|
|
62
70
|
|
|
63
|
-
public set headers(val) {
|
|
64
|
-
this.req.headers = val;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
71
|
public get method(): string {
|
|
68
72
|
return this.req.method!;
|
|
69
73
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { IncomingMessage, ServerResponse } from 'http';
|
|
2
|
-
import {
|
|
2
|
+
import { Metrics, Logger } from '../../type';
|
|
3
3
|
import { ModernServerContext } from './context';
|
|
4
4
|
|
|
5
5
|
export const createContext = (
|
|
6
6
|
req: IncomingMessage,
|
|
7
7
|
res: ServerResponse,
|
|
8
|
-
{ logger,
|
|
9
|
-
) => new ModernServerContext(req, res, { logger,
|
|
8
|
+
{ logger, metrics }: { logger: Logger; metrics: Metrics },
|
|
9
|
+
) => new ModernServerContext(req, res, { logger, metrics });
|
|
10
10
|
|
|
11
11
|
export { ModernServerContext };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Metrics } from '@/type';
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const metrics: Metrics = {
|
|
4
4
|
gauges() {
|
|
5
5
|
// no impl
|
|
6
6
|
},
|
|
@@ -12,4 +12,4 @@ const measure: Measure = {
|
|
|
12
12
|
},
|
|
13
13
|
};
|
|
14
14
|
|
|
15
|
-
export {
|
|
15
|
+
export { metrics };
|
package/src/libs/render/ssr.ts
CHANGED
package/src/libs/render/type.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IncomingHttpHeaders } from 'http';
|
|
2
|
-
import {
|
|
2
|
+
import { Metrics, Logger } from '../../type';
|
|
3
3
|
|
|
4
4
|
type MetaKeyMap = {
|
|
5
5
|
header?: string[];
|
|
@@ -39,7 +39,7 @@ export type SSRServerContext = {
|
|
|
39
39
|
template: string;
|
|
40
40
|
entryName: string;
|
|
41
41
|
logger: Logger;
|
|
42
|
-
|
|
42
|
+
metrics?: Metrics;
|
|
43
43
|
loadableManifest?: string;
|
|
44
44
|
cacheConfig?: CacheConfig;
|
|
45
45
|
staticGenerate?: boolean;
|
package/src/libs/route/route.ts
CHANGED
|
@@ -1,22 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
// the url path for request match
|
|
5
|
-
urlPath: string;
|
|
6
|
-
// the default resource file to response to route
|
|
7
|
-
entryPath?: string;
|
|
8
|
-
// if route is spa page
|
|
9
|
-
isSPA?: boolean;
|
|
10
|
-
// if route is ssr page
|
|
11
|
-
isSSR?: boolean;
|
|
12
|
-
// if route is api service
|
|
13
|
-
isApi?: boolean;
|
|
14
|
-
// ssr js bundle for ssr page
|
|
15
|
-
bundle?: string;
|
|
16
|
-
// if route has modern product
|
|
17
|
-
enableModernMode?: boolean;
|
|
18
|
-
// specialHeader?: SpecialHeader[];
|
|
19
|
-
}
|
|
1
|
+
import { ServerRoute as ModernRouteInterface } from '@modern-js/types';
|
|
2
|
+
|
|
3
|
+
export type { ModernRouteInterface };
|
|
20
4
|
|
|
21
5
|
export class ModernRoute implements ModernRouteInterface {
|
|
22
6
|
public entryName: string;
|
|
@@ -36,7 +20,7 @@ export class ModernRoute implements ModernRouteInterface {
|
|
|
36
20
|
public enableModernMode?: boolean;
|
|
37
21
|
|
|
38
22
|
constructor(routeSpec: ModernRouteInterface) {
|
|
39
|
-
this.entryName = routeSpec.entryName;
|
|
23
|
+
this.entryName = routeSpec.entryName || '';
|
|
40
24
|
this.urlPath = routeSpec.urlPath;
|
|
41
25
|
this.entryPath = routeSpec.entryPath || '';
|
|
42
26
|
this.isSSR = routeSpec.isSSR || false;
|
|
@@ -43,9 +43,11 @@ const DEFAULT_DEV_OPTIONS: DevServerOptions = {
|
|
|
43
43
|
},
|
|
44
44
|
https: false,
|
|
45
45
|
dev: { writeToDisk: true },
|
|
46
|
+
watch: true,
|
|
46
47
|
hot: true,
|
|
47
48
|
liveReload: true,
|
|
48
49
|
};
|
|
50
|
+
|
|
49
51
|
export class ModernDevServer extends ModernServer {
|
|
50
52
|
private devProxyHandler: ReturnType<typeof createProxyHandler> = null;
|
|
51
53
|
|
|
@@ -72,7 +74,9 @@ export class ModernDevServer extends ModernServer {
|
|
|
72
74
|
|
|
73
75
|
// set dev server options, like webpack-dev-server
|
|
74
76
|
this.dev =
|
|
75
|
-
typeof options.dev === 'boolean'
|
|
77
|
+
typeof options.dev === 'boolean'
|
|
78
|
+
? DEFAULT_DEV_OPTIONS
|
|
79
|
+
: { ...DEFAULT_DEV_OPTIONS, ...options.dev };
|
|
76
80
|
|
|
77
81
|
enableRegister(this.pwd, this.conf);
|
|
78
82
|
}
|
|
@@ -120,7 +124,9 @@ export class ModernDevServer extends ModernServer {
|
|
|
120
124
|
await super.init(runner);
|
|
121
125
|
|
|
122
126
|
// watch mock/ server/ api/ dir file change
|
|
123
|
-
this.
|
|
127
|
+
if (this.dev.watch) {
|
|
128
|
+
this.startWatcher();
|
|
129
|
+
}
|
|
124
130
|
}
|
|
125
131
|
|
|
126
132
|
public ready(options: ReadyOptions = {}) {
|
package/src/server/index.ts
CHANGED
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
ModernWebServer,
|
|
19
19
|
} from './modern-server-split';
|
|
20
20
|
import { ModernServerOptions, ServerHookRunner, ReadyOptions } from '@/type';
|
|
21
|
-
import {
|
|
21
|
+
import { metrics as defaultMetrics } from '@/libs/metrics';
|
|
22
22
|
|
|
23
23
|
export class Server {
|
|
24
24
|
public options: ModernServerOptions;
|
|
@@ -48,7 +48,7 @@ export class Server {
|
|
|
48
48
|
const { options } = this;
|
|
49
49
|
|
|
50
50
|
options.logger = options.logger || defaultLogger;
|
|
51
|
-
options.
|
|
51
|
+
options.metrics = options.metrics || defaultMetrics;
|
|
52
52
|
|
|
53
53
|
// initialize server
|
|
54
54
|
if (options.dev) {
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
ModernServerOptions,
|
|
13
13
|
NextFunction,
|
|
14
14
|
ServerHookRunner,
|
|
15
|
-
|
|
15
|
+
Metrics,
|
|
16
16
|
Logger,
|
|
17
17
|
ReadyOptions,
|
|
18
18
|
ConfWithBFF,
|
|
@@ -73,7 +73,7 @@ export class ModernServer {
|
|
|
73
73
|
|
|
74
74
|
protected readonly logger: Logger;
|
|
75
75
|
|
|
76
|
-
protected readonly
|
|
76
|
+
protected readonly metrics: Metrics;
|
|
77
77
|
|
|
78
78
|
protected readonly proxyTarget: ModernServerOptions['proxyTarget'];
|
|
79
79
|
|
|
@@ -100,7 +100,7 @@ export class ModernServer {
|
|
|
100
100
|
routes,
|
|
101
101
|
staticGenerate,
|
|
102
102
|
logger,
|
|
103
|
-
|
|
103
|
+
metrics,
|
|
104
104
|
proxyTarget,
|
|
105
105
|
}: ModernServerOptions) {
|
|
106
106
|
require('ignore-styles');
|
|
@@ -111,7 +111,7 @@ export class ModernServer {
|
|
|
111
111
|
this.workDir = this.isDev ? pwd : this.distDir;
|
|
112
112
|
this.conf = config;
|
|
113
113
|
this.logger = logger!;
|
|
114
|
-
this.
|
|
114
|
+
this.metrics = metrics!;
|
|
115
115
|
this.router = new RouteMatchManager();
|
|
116
116
|
this.presetRoutes = routes;
|
|
117
117
|
this.proxyTarget = proxyTarget;
|
|
@@ -548,7 +548,7 @@ export class ModernServer {
|
|
|
548
548
|
res.statusCode = 200;
|
|
549
549
|
const context: ModernServerContext = createContext(req, res, {
|
|
550
550
|
logger: this.logger,
|
|
551
|
-
|
|
551
|
+
metrics: this.metrics,
|
|
552
552
|
});
|
|
553
553
|
|
|
554
554
|
try {
|
package/src/type.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { Buffer } from 'buffer';
|
|
|
2
2
|
import type Webpack from 'webpack';
|
|
3
3
|
import { serverManager } from '@modern-js/server-plugin';
|
|
4
4
|
import type { NormalizedConfig } from '@modern-js/core';
|
|
5
|
-
import type {
|
|
5
|
+
import type { Metrics, Logger, NextFunction } from '@modern-js/types/server';
|
|
6
6
|
import { ModernRouteInterface } from './libs/route';
|
|
7
7
|
|
|
8
8
|
declare module '@modern-js/core' {
|
|
@@ -26,6 +26,8 @@ export type DevServerOptions = {
|
|
|
26
26
|
dev: {
|
|
27
27
|
writeToDisk: boolean | ((filename: string) => boolean);
|
|
28
28
|
};
|
|
29
|
+
// 是否监听文件变化
|
|
30
|
+
watch: boolean;
|
|
29
31
|
// 是否开启 hot reload
|
|
30
32
|
hot: boolean | string;
|
|
31
33
|
// 是否开启 page reload
|
|
@@ -39,15 +41,15 @@ export type ModernServerOptions = {
|
|
|
39
41
|
pwd: string;
|
|
40
42
|
config: NormalizedConfig;
|
|
41
43
|
plugins?: any[];
|
|
42
|
-
dev?: boolean | DevServerOptions
|
|
44
|
+
dev?: boolean | Partial<DevServerOptions>;
|
|
43
45
|
compiler?: Webpack.MultiCompiler | Webpack.Compiler;
|
|
44
46
|
routes?: ModernRouteInterface[];
|
|
45
47
|
staticGenerate?: boolean;
|
|
46
48
|
customServer?: boolean;
|
|
47
49
|
loggerOptions?: Record<string, string>;
|
|
48
|
-
|
|
50
|
+
metricsOptions?: Record<string, string>;
|
|
49
51
|
logger?: Logger;
|
|
50
|
-
|
|
52
|
+
metrics?: Metrics;
|
|
51
53
|
apiOnly?: boolean;
|
|
52
54
|
ssrOnly?: boolean;
|
|
53
55
|
webOnly?: boolean;
|
|
@@ -76,4 +78,4 @@ export type ServerHookRunner = Then<ReturnType<typeof serverManager.init>>;
|
|
|
76
78
|
|
|
77
79
|
export type ReadyOptions = { routes?: ModernRouteInterface[] };
|
|
78
80
|
|
|
79
|
-
export type {
|
|
81
|
+
export type { Metrics, Logger, NextFunction };
|