@modern-js/server 1.1.2 → 1.1.4-rc.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 +46 -0
- package/dist/js/modern/dev-tools/babel/register.js +2 -2
- package/dist/js/modern/dev-tools/mock/getMockData.js +2 -2
- package/dist/js/modern/libs/hook-api/route.js +37 -0
- package/dist/js/modern/libs/{hook-api.js → hook-api/template.js} +0 -0
- package/dist/js/modern/libs/proxy.js +2 -2
- package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +2 -2
- package/dist/js/modern/libs/render/cache/index.js +2 -2
- package/dist/js/modern/libs/render/cache/type.js +0 -1
- package/dist/js/modern/libs/route/index.js +4 -0
- package/dist/js/modern/libs/route/matcher.js +4 -0
- package/dist/js/modern/server/dev-server/dev-server-split.js +28 -0
- package/dist/js/modern/server/{dev-server.js → dev-server/dev-server.js} +41 -22
- package/dist/js/modern/server/dev-server/index.js +2 -0
- package/dist/js/modern/server/index.js +64 -62
- package/dist/js/modern/server/modern-server-split.js +81 -0
- package/dist/js/modern/server/modern-server.js +117 -59
- package/dist/js/modern/type.js +0 -1
- package/dist/js/modern/utils.js +11 -3
- package/dist/js/node/dev-tools/babel/register.js +2 -2
- package/dist/js/node/dev-tools/mock/getMockData.js +2 -2
- package/dist/js/node/libs/hook-api/route.js +46 -0
- package/dist/js/node/libs/{hook-api.js → hook-api/template.js} +0 -0
- package/dist/js/node/libs/proxy.js +2 -2
- package/dist/js/node/libs/render/cache/__tests__/cache.test.js +2 -2
- package/dist/js/node/libs/render/cache/index.js +2 -2
- package/dist/js/node/libs/route/index.js +4 -0
- package/dist/js/node/libs/route/matcher.js +4 -0
- package/dist/js/node/server/dev-server/dev-server-split.js +41 -0
- package/dist/js/node/server/{dev-server.js → dev-server/dev-server.js} +42 -21
- package/dist/js/node/server/dev-server/index.js +27 -0
- package/dist/js/node/server/index.js +71 -63
- package/dist/js/node/server/modern-server-split.js +97 -0
- package/dist/js/node/server/modern-server.js +120 -60
- package/dist/js/node/utils.js +14 -4
- package/dist/types/libs/hook-api/route.d.ts +13 -0
- package/dist/types/libs/{hook-api.d.ts → hook-api/template.d.ts} +0 -0
- package/dist/types/libs/route/index.d.ts +1 -0
- package/dist/types/libs/route/matcher.d.ts +1 -0
- package/dist/types/server/dev-server/dev-server-split.d.ts +15 -0
- package/dist/types/server/{dev-server.d.ts → dev-server/dev-server.d.ts} +6 -5
- package/dist/types/server/dev-server/index.d.ts +2 -0
- package/dist/types/server/index.d.ts +3 -1
- package/dist/types/server/modern-server-split.d.ts +26 -0
- package/dist/types/server/modern-server.d.ts +19 -11
- package/dist/types/type.d.ts +5 -0
- package/dist/types/utils.d.ts +3 -2
- package/package.json +12 -11
- package/src/libs/hook-api/route.ts +38 -0
- package/src/libs/{hook-api.ts → hook-api/template.ts} +0 -0
- package/src/libs/route/index.ts +4 -0
- package/src/libs/route/matcher.ts +4 -0
- package/src/server/{web-server.ts → dev-server/dev-server-split.ts} +12 -14
- package/src/server/{dev-server.ts → dev-server/dev-server.ts} +62 -33
- package/src/server/dev-server/index.ts +2 -0
- package/src/server/index.ts +80 -47
- package/src/server/modern-server-split.ts +97 -0
- package/src/server/modern-server.ts +135 -81
- package/src/type.ts +5 -0
- package/src/utils.ts +16 -2
- package/dist/js/modern/server/api-server.js +0 -36
- package/dist/js/modern/server/web-server.js +0 -30
- package/dist/js/node/server/api-server.js +0 -50
- package/dist/js/node/server/web-server.js +0 -44
- package/dist/types/server/api-server.d.ts +0 -17
- package/dist/types/server/web-server.d.ts +0 -15
- package/src/server/api-server.ts +0 -47
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,51 @@
|
|
|
1
1
|
# @modern-js/server
|
|
2
2
|
|
|
3
|
+
## 1.1.4-rc.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- d73ff455: support multi process product
|
|
8
|
+
- d73ff455: support multi process product
|
|
9
|
+
- d73ff455: support multi process product
|
|
10
|
+
- d73ff455: support multi process product
|
|
11
|
+
- d73ff455: support multi process product
|
|
12
|
+
- Updated dependencies [d927bc83]
|
|
13
|
+
- Updated dependencies [d73ff455]
|
|
14
|
+
- Updated dependencies [9c1ab865]
|
|
15
|
+
- Updated dependencies [d73ff455]
|
|
16
|
+
- Updated dependencies [d73ff455]
|
|
17
|
+
- Updated dependencies [d73ff455]
|
|
18
|
+
- Updated dependencies [d73ff455]
|
|
19
|
+
- @modern-js/utils@1.1.4-rc.0
|
|
20
|
+
- @modern-js/core@1.1.4-rc.0
|
|
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
|
|
25
|
+
|
|
26
|
+
## 1.1.3
|
|
27
|
+
|
|
28
|
+
### Patch Changes
|
|
29
|
+
|
|
30
|
+
- 085a6a58: refactor server plugin
|
|
31
|
+
- 085a6a58: refactor server plugin
|
|
32
|
+
- 085a6a58: refactor server conifg
|
|
33
|
+
- 085a6a58: support server runtime
|
|
34
|
+
- 085a6a58: feat: refactor server plugin
|
|
35
|
+
- Updated dependencies [085a6a58]
|
|
36
|
+
- Updated dependencies [085a6a58]
|
|
37
|
+
- Updated dependencies [085a6a58]
|
|
38
|
+
- Updated dependencies [d280ea33]
|
|
39
|
+
- Updated dependencies [d4fcc73a]
|
|
40
|
+
- Updated dependencies [085a6a58]
|
|
41
|
+
- Updated dependencies [ed1f6b12]
|
|
42
|
+
- Updated dependencies [a5ebbb00]
|
|
43
|
+
- Updated dependencies [085a6a58]
|
|
44
|
+
- @modern-js/core@1.1.3
|
|
45
|
+
- @modern-js/server-plugin@1.1.2
|
|
46
|
+
- @modern-js/server-utils@1.1.2
|
|
47
|
+
- @modern-js/utils@1.1.3
|
|
48
|
+
|
|
3
49
|
## 1.1.2
|
|
4
50
|
|
|
5
51
|
### Patch Changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
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
2
|
|
|
3
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
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
4
|
|
|
5
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
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
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
2
|
|
|
3
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
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
4
|
|
|
5
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
6
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
class RouteAPI {
|
|
2
|
+
constructor(matched, router) {
|
|
3
|
+
this.router = void 0;
|
|
4
|
+
this.current = void 0;
|
|
5
|
+
this.current = matched;
|
|
6
|
+
this.router = router;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
cur() {
|
|
10
|
+
return this.current.generate();
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
get(entryName) {
|
|
14
|
+
const {
|
|
15
|
+
router
|
|
16
|
+
} = this;
|
|
17
|
+
const matched = router.matchEntry(entryName);
|
|
18
|
+
return matched ? matched.generate() : null;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
use(entryName) {
|
|
22
|
+
const {
|
|
23
|
+
router
|
|
24
|
+
} = this;
|
|
25
|
+
const matched = router.matchEntry(entryName);
|
|
26
|
+
|
|
27
|
+
if (matched) {
|
|
28
|
+
this.current = matched;
|
|
29
|
+
return true;
|
|
30
|
+
} else {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export const createRouteAPI = (matched, router) => new RouteAPI(matched, router);
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
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
2
|
|
|
3
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
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
4
|
|
|
5
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
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
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
2
|
|
|
3
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
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
4
|
|
|
5
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
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
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
2
|
|
|
3
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
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
4
|
|
|
5
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
6
|
|
|
@@ -56,6 +56,10 @@ export class RouteMatchManager {
|
|
|
56
56
|
return best;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
matchEntry(entryname) {
|
|
60
|
+
return this.matchers.find(matcher => matcher.matchEntry(entryname));
|
|
61
|
+
}
|
|
62
|
+
|
|
59
63
|
getBundles() {
|
|
60
64
|
const bundles = this.specs.filter(route => route.isSSR).map(route => route.bundle);
|
|
61
65
|
return bundles;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ModernDevServer } from "./dev-server";
|
|
2
|
+
export class ModernSSRDevServer extends ModernDevServer {
|
|
3
|
+
prepareAPIHandler(_m, _) {
|
|
4
|
+
return null;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
async prepareWebHandler(extension) {
|
|
8
|
+
return super.prepareWebHandler(extension);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
filterRoutes(routes) {
|
|
12
|
+
return routes.filter(route => route.entryName);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
export class ModernAPIDevServer extends ModernDevServer {
|
|
17
|
+
async prepareAPIHandler(mode, extension) {
|
|
18
|
+
return super.prepareAPIHandler(mode, extension);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
filterRoutes(routes) {
|
|
22
|
+
return routes.filter(route => route.isApi);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async preServerInit() {// noop
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
+
import { createServer } from 'http';
|
|
1
2
|
import path from 'path';
|
|
2
|
-
import {
|
|
3
|
+
import { createServer as createHttpsServer } from 'https';
|
|
4
|
+
import { API_DIR, HMR_SOCK_PATH, SERVER_DIR, SHARED_DIR } from '@modern-js/utils';
|
|
3
5
|
import webpackDevMiddleware from 'webpack-dev-middleware';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import { AGGRED_DIR } from "
|
|
6
|
+
import { ModernServer } from "../modern-server";
|
|
7
|
+
import { createMockHandler } from "../../dev-tools/mock";
|
|
8
|
+
import { createProxyHandler } from "../../libs/proxy";
|
|
9
|
+
import SocketServer from "../../dev-tools/socket-server";
|
|
10
|
+
import DevServerPlugin from "../../dev-tools/dev-server-plugin";
|
|
11
|
+
import { createLaunchEditorHandler } from "../../dev-tools/launch-editor";
|
|
12
|
+
import { enableRegister } from "../../dev-tools/babel/register";
|
|
13
|
+
import * as reader from "../../libs/render/reader";
|
|
14
|
+
import Watcher from "../../dev-tools/watcher";
|
|
15
|
+
import { AGGRED_DIR } from "../../constants";
|
|
14
16
|
const DEFAULT_DEV_OPTIONS = {
|
|
15
17
|
client: {
|
|
16
18
|
port: '8080',
|
|
@@ -27,8 +29,8 @@ const DEFAULT_DEV_OPTIONS = {
|
|
|
27
29
|
liveReload: true
|
|
28
30
|
};
|
|
29
31
|
export class ModernDevServer extends ModernServer {
|
|
30
|
-
constructor(options
|
|
31
|
-
super(options
|
|
32
|
+
constructor(options) {
|
|
33
|
+
super(options); // set webpack compiler
|
|
32
34
|
|
|
33
35
|
this.devProxyHandler = null;
|
|
34
36
|
this.mockHandler = null;
|
|
@@ -40,18 +42,18 @@ export class ModernDevServer extends ModernServer {
|
|
|
40
42
|
this.compiler = options.compiler; // set dev server options, like webpack-dev-server
|
|
41
43
|
|
|
42
44
|
this.dev = typeof options.dev === 'boolean' ? DEFAULT_DEV_OPTIONS : options.dev;
|
|
45
|
+
enableRegister(this.pwd, this.conf);
|
|
43
46
|
} // Complete the preparation of services
|
|
44
47
|
|
|
45
48
|
|
|
46
|
-
async init() {
|
|
49
|
+
async init(runner) {
|
|
47
50
|
var _conf$tools, _conf$tools$devServer;
|
|
48
51
|
|
|
49
52
|
const {
|
|
50
53
|
conf,
|
|
51
54
|
pwd,
|
|
52
55
|
compiler
|
|
53
|
-
} = this;
|
|
54
|
-
enableRegister(pwd, conf); // mock handler
|
|
56
|
+
} = this; // mock handler
|
|
55
57
|
|
|
56
58
|
this.mockHandler = createMockHandler({
|
|
57
59
|
pwd
|
|
@@ -86,7 +88,7 @@ export class ModernDevServer extends ModernServer {
|
|
|
86
88
|
this.addHandler(devMiddlewareHandler);
|
|
87
89
|
}
|
|
88
90
|
|
|
89
|
-
await super.init(); // watch mock/ server/ api/ dir file change
|
|
91
|
+
await super.init(runner); // watch mock/ server/ api/ dir file change
|
|
90
92
|
|
|
91
93
|
this.startWatcher();
|
|
92
94
|
}
|
|
@@ -97,6 +99,7 @@ export class ModernDevServer extends ModernServer {
|
|
|
97
99
|
this.cleanSSRCache(); // reset static file
|
|
98
100
|
|
|
99
101
|
reader.updateFile();
|
|
102
|
+
this.runner.reset();
|
|
100
103
|
}
|
|
101
104
|
|
|
102
105
|
onListening(app) {
|
|
@@ -113,6 +116,24 @@ export class ModernDevServer extends ModernServer {
|
|
|
113
116
|
resolve();
|
|
114
117
|
});
|
|
115
118
|
});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
async createHTTPServer(handler) {
|
|
122
|
+
const {
|
|
123
|
+
dev
|
|
124
|
+
} = this;
|
|
125
|
+
const devHttpsOption = typeof dev === 'object' && dev.https;
|
|
126
|
+
|
|
127
|
+
if (devHttpsOption) {
|
|
128
|
+
const {
|
|
129
|
+
genHttpsOptions
|
|
130
|
+
} = require("../../dev-tools/https");
|
|
131
|
+
|
|
132
|
+
const httpsOptions = await genHttpsOptions(devHttpsOption);
|
|
133
|
+
return createHttpsServer(httpsOptions, handler);
|
|
134
|
+
} else {
|
|
135
|
+
return createServer(handler);
|
|
136
|
+
}
|
|
116
137
|
} // set up plugin to each compiler
|
|
117
138
|
// register hooks for each compilation, update socket stats if recompiled
|
|
118
139
|
// start dev middleware
|
|
@@ -207,18 +228,16 @@ export class ModernDevServer extends ModernServer {
|
|
|
207
228
|
pwd
|
|
208
229
|
} = this;
|
|
209
230
|
const {
|
|
210
|
-
mock
|
|
211
|
-
server,
|
|
212
|
-
api,
|
|
213
|
-
shared
|
|
231
|
+
mock
|
|
214
232
|
} = AGGRED_DIR;
|
|
215
|
-
const defaultWatched = [`${pwd}/${mock}/**/*`, `${pwd}/${
|
|
233
|
+
const defaultWatched = [`${pwd}/${mock}/**/*`, `${pwd}/${SERVER_DIR}/**/*`, `${pwd}/${API_DIR}/!(typings)/**`, `${pwd}/${SHARED_DIR}/**/*`];
|
|
216
234
|
const watcher = new Watcher();
|
|
217
235
|
watcher.createDepTree(); // 监听文件变动,如果有变动则给 client,也就是 start 启动的插件发消息
|
|
218
236
|
|
|
219
237
|
watcher.listen(defaultWatched, filepath => {
|
|
220
238
|
watcher.updateDepTree();
|
|
221
239
|
watcher.cleanDepCache(filepath);
|
|
240
|
+
this.runner.reset();
|
|
222
241
|
|
|
223
242
|
if (filepath.startsWith(`${pwd}/${mock}`)) {
|
|
224
243
|
this.mockHandler = createMockHandler({
|
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
+
import path from 'path';
|
|
3
8
|
import { serverManager } from '@modern-js/server-plugin';
|
|
4
9
|
import { logger as defaultLogger } from '@modern-js/utils';
|
|
10
|
+
import { AppContext, initAppContext, initAppDir, loadUserConfig, ConfigContext } from '@modern-js/core';
|
|
5
11
|
import { ModernServer } from "./modern-server";
|
|
12
|
+
import { ModernAPIServer, ModernSSRServer, ModernWebServer } from "./modern-server-split";
|
|
6
13
|
import { measure as defaultMeasure } from "../libs/measure";
|
|
7
14
|
export class Server {
|
|
8
15
|
constructor(options) {
|
|
9
|
-
var _options$plugins;
|
|
10
|
-
|
|
11
16
|
this.options = void 0;
|
|
12
17
|
this.server = void 0;
|
|
13
18
|
this.app = void 0;
|
|
14
19
|
this.runner = void 0;
|
|
15
20
|
this.options = options;
|
|
16
|
-
(_options$plugins = options.plugins) === null || _options$plugins === void 0 ? void 0 : _options$plugins.forEach(p => {
|
|
17
|
-
serverManager.usePlugin(p);
|
|
18
|
-
});
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
getRequestHandler() {
|
|
@@ -33,40 +35,20 @@ export class Server {
|
|
|
33
35
|
const {
|
|
34
36
|
options
|
|
35
37
|
} = this;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
logger,
|
|
39
|
-
measure
|
|
40
|
-
} = await this.runner.create({
|
|
41
|
-
loggerOptions: options.logger,
|
|
42
|
-
measureOptions: options.measure
|
|
43
|
-
}, {
|
|
44
|
-
onLast: () => ({})
|
|
45
|
-
});
|
|
46
|
-
options.logger = options.logger || logger || defaultLogger;
|
|
47
|
-
options.measure = options.measure || measure || defaultMeasure;
|
|
38
|
+
options.logger = options.logger || defaultLogger;
|
|
39
|
+
options.measure = options.measure || defaultMeasure; // initialize server
|
|
48
40
|
|
|
49
41
|
if (options.dev) {
|
|
50
|
-
this.server = this.createDevServer();
|
|
51
|
-
|
|
52
|
-
const devHttpsOption = typeof options.dev === 'object' && options.dev.https;
|
|
53
|
-
|
|
54
|
-
if (devHttpsOption) {
|
|
55
|
-
const {
|
|
56
|
-
genHttpsOptions
|
|
57
|
-
} = require("../dev-tools/https");
|
|
58
|
-
|
|
59
|
-
const httpsOptions = await genHttpsOptions(devHttpsOption);
|
|
60
|
-
this.app = createHttpsServer(httpsOptions, this.getRequestHandler());
|
|
61
|
-
} else {
|
|
62
|
-
this.app = createServer(this.getRequestHandler());
|
|
63
|
-
}
|
|
42
|
+
this.server = this.createDevServer();
|
|
64
43
|
} else {
|
|
65
44
|
this.server = this.createProdServer();
|
|
66
|
-
|
|
67
|
-
}
|
|
45
|
+
} // check if https is configured when start dev server
|
|
68
46
|
|
|
69
|
-
|
|
47
|
+
|
|
48
|
+
this.app = await this.server.createHTTPServer(this.getRequestHandler());
|
|
49
|
+
this.runner = await this.createHookRunner(); // runner can only be used after server init
|
|
50
|
+
|
|
51
|
+
await this.server.init(this.runner);
|
|
70
52
|
return this;
|
|
71
53
|
}
|
|
72
54
|
|
|
@@ -97,19 +79,13 @@ export class Server {
|
|
|
97
79
|
} = this;
|
|
98
80
|
|
|
99
81
|
if (options.apiOnly) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
return new APIModernServer(options, this.runner);
|
|
82
|
+
return new ModernAPIServer(options);
|
|
83
|
+
} else if (options.ssrOnly) {
|
|
84
|
+
return new ModernSSRServer(options);
|
|
105
85
|
} else if (options.webOnly) {
|
|
106
|
-
|
|
107
|
-
WebModernServer
|
|
108
|
-
} = require("./web-server");
|
|
109
|
-
|
|
110
|
-
return new WebModernServer(options, this.runner);
|
|
86
|
+
return new ModernWebServer(options);
|
|
111
87
|
} else {
|
|
112
|
-
return new ModernServer(options
|
|
88
|
+
return new ModernServer(options);
|
|
113
89
|
}
|
|
114
90
|
}
|
|
115
91
|
|
|
@@ -118,25 +94,51 @@ export class Server {
|
|
|
118
94
|
options
|
|
119
95
|
} = this;
|
|
120
96
|
|
|
97
|
+
const {
|
|
98
|
+
ModernAPIDevServer,
|
|
99
|
+
ModernSSRDevServer,
|
|
100
|
+
ModernDevServer
|
|
101
|
+
} = require("./dev-server");
|
|
102
|
+
|
|
121
103
|
if (options.apiOnly) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
104
|
+
return new ModernAPIDevServer(options);
|
|
105
|
+
} else if (options.ssrOnly) {
|
|
106
|
+
return new ModernSSRDevServer(options);
|
|
107
|
+
} else {
|
|
108
|
+
return new ModernDevServer(options);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
125
111
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
const {
|
|
129
|
-
WebModernDevServer
|
|
130
|
-
} = require("./web-server");
|
|
112
|
+
async createHookRunner() {
|
|
113
|
+
var _options$plugins;
|
|
131
114
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
115
|
+
const {
|
|
116
|
+
options
|
|
117
|
+
} = this;
|
|
118
|
+
(_options$plugins = options.plugins) === null || _options$plugins === void 0 ? void 0 : _options$plugins.forEach(p => {
|
|
119
|
+
serverManager.usePlugin(p);
|
|
120
|
+
});
|
|
121
|
+
const appContext = await this.initAppContext();
|
|
122
|
+
serverManager.run(() => {
|
|
123
|
+
ConfigContext.set(this.options.config);
|
|
124
|
+
AppContext.set(_objectSpread(_objectSpread({}, appContext), {}, {
|
|
125
|
+
distDirectory: path.join(options.pwd, options.config.output.path || 'dist')
|
|
126
|
+
}));
|
|
127
|
+
});
|
|
128
|
+
return serverManager.init({});
|
|
129
|
+
}
|
|
137
130
|
|
|
138
|
-
|
|
139
|
-
|
|
131
|
+
async initAppContext() {
|
|
132
|
+
var _this$options$plugins;
|
|
133
|
+
|
|
134
|
+
const appDirectory = await initAppDir();
|
|
135
|
+
const loaded = await loadUserConfig(appDirectory);
|
|
136
|
+
const plugins = (_this$options$plugins = this.options.plugins) === null || _this$options$plugins === void 0 ? void 0 : _this$options$plugins.map(p => ({
|
|
137
|
+
server: p,
|
|
138
|
+
cli: undefined
|
|
139
|
+
}));
|
|
140
|
+
const appContext = initAppContext(appDirectory, plugins || [], loaded.filePath);
|
|
141
|
+
return appContext;
|
|
140
142
|
}
|
|
141
143
|
|
|
142
144
|
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { ModernServer } from "./modern-server";
|
|
2
|
+
export class ModernSSRServer extends ModernServer {
|
|
3
|
+
// Todo should not invoke any route hook in modernSSRServer
|
|
4
|
+
async warmupSSRBundle() {// empty
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
verifyMatch(context, matched) {
|
|
8
|
+
if (matched.generate().isApi) {
|
|
9
|
+
this.render404(context);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
prepareAPIHandler(_m, _) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async prepareWebHandler(extension) {
|
|
18
|
+
return super.prepareWebHandler(extension);
|
|
19
|
+
} // protected filterRoutes(routes: ModernRouteInterface[]) {
|
|
20
|
+
// return routes.filter(route => route.entryName);
|
|
21
|
+
// }
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
async preServerInit() {// empty
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
export class ModernAPIServer extends ModernServer {
|
|
29
|
+
async emitRouteHook(_, _input) {// empty
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async warmupSSRBundle() {// empty
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
prepareWebHandler(_) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async prepareAPIHandler(mode, extension) {
|
|
40
|
+
return super.prepareAPIHandler(mode, extension);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
filterRoutes(routes) {
|
|
44
|
+
return routes.filter(route => route.isApi);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async preServerInit() {// empty
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
export class ModernWebServer extends ModernServer {
|
|
52
|
+
async warmupSSRBundle() {// empty
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async handleAPI(context) {
|
|
56
|
+
const {
|
|
57
|
+
proxyTarget
|
|
58
|
+
} = this;
|
|
59
|
+
|
|
60
|
+
if (!(proxyTarget !== null && proxyTarget !== void 0 && proxyTarget.api)) {
|
|
61
|
+
this.proxy();
|
|
62
|
+
} else {
|
|
63
|
+
this.render404(context);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
async handleWeb(context, route) {
|
|
68
|
+
const {
|
|
69
|
+
proxyTarget
|
|
70
|
+
} = this;
|
|
71
|
+
|
|
72
|
+
if (route.isSSR && proxyTarget !== null && proxyTarget !== void 0 && proxyTarget.ssr) {
|
|
73
|
+
return this.proxy();
|
|
74
|
+
} else {
|
|
75
|
+
// if no proxyTarget but access web server, degradation to csr
|
|
76
|
+
route.isSSR = false;
|
|
77
|
+
return super.handleWeb(context, route);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
}
|