@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.
Files changed (67) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/js/modern/dev-tools/babel/register.js +2 -2
  3. package/dist/js/modern/dev-tools/mock/getMockData.js +2 -2
  4. package/dist/js/modern/libs/hook-api/route.js +37 -0
  5. package/dist/js/modern/libs/{hook-api.js → hook-api/template.js} +0 -0
  6. package/dist/js/modern/libs/proxy.js +2 -2
  7. package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +2 -2
  8. package/dist/js/modern/libs/render/cache/index.js +2 -2
  9. package/dist/js/modern/libs/render/cache/type.js +0 -1
  10. package/dist/js/modern/libs/route/index.js +4 -0
  11. package/dist/js/modern/libs/route/matcher.js +4 -0
  12. package/dist/js/modern/server/dev-server/dev-server-split.js +28 -0
  13. package/dist/js/modern/server/{dev-server.js → dev-server/dev-server.js} +41 -22
  14. package/dist/js/modern/server/dev-server/index.js +2 -0
  15. package/dist/js/modern/server/index.js +64 -62
  16. package/dist/js/modern/server/modern-server-split.js +81 -0
  17. package/dist/js/modern/server/modern-server.js +117 -59
  18. package/dist/js/modern/type.js +0 -1
  19. package/dist/js/modern/utils.js +11 -3
  20. package/dist/js/node/dev-tools/babel/register.js +2 -2
  21. package/dist/js/node/dev-tools/mock/getMockData.js +2 -2
  22. package/dist/js/node/libs/hook-api/route.js +46 -0
  23. package/dist/js/node/libs/{hook-api.js → hook-api/template.js} +0 -0
  24. package/dist/js/node/libs/proxy.js +2 -2
  25. package/dist/js/node/libs/render/cache/__tests__/cache.test.js +2 -2
  26. package/dist/js/node/libs/render/cache/index.js +2 -2
  27. package/dist/js/node/libs/route/index.js +4 -0
  28. package/dist/js/node/libs/route/matcher.js +4 -0
  29. package/dist/js/node/server/dev-server/dev-server-split.js +41 -0
  30. package/dist/js/node/server/{dev-server.js → dev-server/dev-server.js} +42 -21
  31. package/dist/js/node/server/dev-server/index.js +27 -0
  32. package/dist/js/node/server/index.js +71 -63
  33. package/dist/js/node/server/modern-server-split.js +97 -0
  34. package/dist/js/node/server/modern-server.js +120 -60
  35. package/dist/js/node/utils.js +14 -4
  36. package/dist/types/libs/hook-api/route.d.ts +13 -0
  37. package/dist/types/libs/{hook-api.d.ts → hook-api/template.d.ts} +0 -0
  38. package/dist/types/libs/route/index.d.ts +1 -0
  39. package/dist/types/libs/route/matcher.d.ts +1 -0
  40. package/dist/types/server/dev-server/dev-server-split.d.ts +15 -0
  41. package/dist/types/server/{dev-server.d.ts → dev-server/dev-server.d.ts} +6 -5
  42. package/dist/types/server/dev-server/index.d.ts +2 -0
  43. package/dist/types/server/index.d.ts +3 -1
  44. package/dist/types/server/modern-server-split.d.ts +26 -0
  45. package/dist/types/server/modern-server.d.ts +19 -11
  46. package/dist/types/type.d.ts +5 -0
  47. package/dist/types/utils.d.ts +3 -2
  48. package/package.json +12 -11
  49. package/src/libs/hook-api/route.ts +38 -0
  50. package/src/libs/{hook-api.ts → hook-api/template.ts} +0 -0
  51. package/src/libs/route/index.ts +4 -0
  52. package/src/libs/route/matcher.ts +4 -0
  53. package/src/server/{web-server.ts → dev-server/dev-server-split.ts} +12 -14
  54. package/src/server/{dev-server.ts → dev-server/dev-server.ts} +62 -33
  55. package/src/server/dev-server/index.ts +2 -0
  56. package/src/server/index.ts +80 -47
  57. package/src/server/modern-server-split.ts +97 -0
  58. package/src/server/modern-server.ts +135 -81
  59. package/src/type.ts +5 -0
  60. package/src/utils.ts +16 -2
  61. package/dist/js/modern/server/api-server.js +0 -36
  62. package/dist/js/modern/server/web-server.js +0 -30
  63. package/dist/js/node/server/api-server.js +0 -50
  64. package/dist/js/node/server/web-server.js +0 -44
  65. package/dist/types/server/api-server.d.ts +0 -17
  66. package/dist/types/server/web-server.d.ts +0 -15
  67. 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); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
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] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
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); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
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] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
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);
@@ -1,6 +1,6 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
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] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
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); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
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] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
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); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
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] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
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,2 +1 @@
1
- export {};
2
1
  export {};
@@ -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;
@@ -57,6 +57,10 @@ export class RouteMatcher {
57
57
 
58
58
  return false;
59
59
  }
60
+ }
61
+
62
+ matchEntry(entryName) {
63
+ return this.spec.entryName === entryName;
60
64
  } // compiler urlPath to regexp if necessary
61
65
 
62
66
 
@@ -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 { HMR_SOCK_PATH } from '@modern-js/utils';
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 { createMockHandler } from "../dev-tools/mock";
5
- import { createProxyHandler } from "../libs/proxy";
6
- import SocketServer from "../dev-tools/socket-server";
7
- import DevServerPlugin from "../dev-tools/dev-server-plugin";
8
- import { createLaunchEditorHandler } from "../dev-tools/launch-editor";
9
- import { enableRegister } from "../dev-tools/babel/register";
10
- import * as reader from "../libs/render/reader";
11
- import Watcher from "../dev-tools/watcher";
12
- import { ModernServer } from "./modern-server";
13
- import { AGGRED_DIR } from "../constants";
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, runner) {
31
- super(options, runner); // set webpack compiler
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}/${server}/**/*`, `${pwd}/${api}/**/*`, `${pwd}/${shared}/**/*`];
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({
@@ -0,0 +1,2 @@
1
+ export { ModernAPIDevServer, ModernSSRDevServer } from "./dev-server-split";
2
+ export { ModernDevServer } from "./dev-server";
@@ -1,21 +1,23 @@
1
- import { createServer } from 'http';
2
- import { createServer as createHttpsServer } from 'https';
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
- this.runner = await serverManager.init({});
37
- const {
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(); // check if https is configured when start dev server
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
- this.app = createServer(this.getRequestHandler());
67
- }
45
+ } // check if https is configured when start dev server
68
46
 
69
- await this.server.init();
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
- const {
101
- APIModernServer
102
- } = require("./api-server");
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
- const {
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, this.runner);
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
- const {
123
- APIModernDevServer
124
- } = require("./api-server");
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
- return new APIModernDevServer(options, this.runner);
127
- } else if (options.webOnly) {
128
- const {
129
- WebModernDevServer
130
- } = require("./web-server");
112
+ async createHookRunner() {
113
+ var _options$plugins;
131
114
 
132
- return new WebModernDevServer(options, this.runner);
133
- } else {
134
- const {
135
- ModernDevServer
136
- } = require("./dev-server");
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
- return new ModernDevServer(options, this.runner);
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
+ }