@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
@@ -5,31 +5,35 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.ModernDevServer = void 0;
7
7
 
8
+ var _http = require("http");
9
+
8
10
  var _path = _interopRequireDefault(require("path"));
9
11
 
12
+ var _https = require("https");
13
+
10
14
  var _utils = require("@modern-js/utils");
11
15
 
12
16
  var _webpackDevMiddleware = _interopRequireDefault(require("webpack-dev-middleware"));
13
17
 
14
- var _mock = require("../dev-tools/mock");
18
+ var _modernServer = require("../modern-server");
15
19
 
16
- var _proxy = require("../libs/proxy");
20
+ var _mock = require("../../dev-tools/mock");
17
21
 
18
- var _socketServer = _interopRequireDefault(require("../dev-tools/socket-server"));
22
+ var _proxy = require("../../libs/proxy");
19
23
 
20
- var _devServerPlugin = _interopRequireDefault(require("../dev-tools/dev-server-plugin"));
24
+ var _socketServer = _interopRequireDefault(require("../../dev-tools/socket-server"));
21
25
 
22
- var _launchEditor = require("../dev-tools/launch-editor");
26
+ var _devServerPlugin = _interopRequireDefault(require("../../dev-tools/dev-server-plugin"));
23
27
 
24
- var _register = require("../dev-tools/babel/register");
28
+ var _launchEditor = require("../../dev-tools/launch-editor");
25
29
 
26
- var reader = _interopRequireWildcard(require("../libs/render/reader"));
30
+ var _register = require("../../dev-tools/babel/register");
27
31
 
28
- var _watcher = _interopRequireDefault(require("../dev-tools/watcher"));
32
+ var reader = _interopRequireWildcard(require("../../libs/render/reader"));
29
33
 
30
- var _modernServer = require("./modern-server");
34
+ var _watcher = _interopRequireDefault(require("../../dev-tools/watcher"));
31
35
 
32
- var _constants = require("../constants");
36
+ var _constants = require("../../constants");
33
37
 
34
38
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
35
39
 
@@ -54,8 +58,8 @@ const DEFAULT_DEV_OPTIONS = {
54
58
  };
55
59
 
56
60
  class ModernDevServer extends _modernServer.ModernServer {
57
- constructor(options, runner) {
58
- super(options, runner); // set webpack compiler
61
+ constructor(options) {
62
+ super(options); // set webpack compiler
59
63
 
60
64
  this.devProxyHandler = null;
61
65
  this.mockHandler = null;
@@ -67,18 +71,18 @@ class ModernDevServer extends _modernServer.ModernServer {
67
71
  this.compiler = options.compiler; // set dev server options, like webpack-dev-server
68
72
 
69
73
  this.dev = typeof options.dev === 'boolean' ? DEFAULT_DEV_OPTIONS : options.dev;
74
+ (0, _register.enableRegister)(this.pwd, this.conf);
70
75
  } // Complete the preparation of services
71
76
 
72
77
 
73
- async init() {
78
+ async init(runner) {
74
79
  var _conf$tools, _conf$tools$devServer;
75
80
 
76
81
  const {
77
82
  conf,
78
83
  pwd,
79
84
  compiler
80
- } = this;
81
- (0, _register.enableRegister)(pwd, conf); // mock handler
85
+ } = this; // mock handler
82
86
 
83
87
  this.mockHandler = (0, _mock.createMockHandler)({
84
88
  pwd
@@ -113,7 +117,7 @@ class ModernDevServer extends _modernServer.ModernServer {
113
117
  this.addHandler(devMiddlewareHandler);
114
118
  }
115
119
 
116
- await super.init(); // watch mock/ server/ api/ dir file change
120
+ await super.init(runner); // watch mock/ server/ api/ dir file change
117
121
 
118
122
  this.startWatcher();
119
123
  }
@@ -124,6 +128,7 @@ class ModernDevServer extends _modernServer.ModernServer {
124
128
  this.cleanSSRCache(); // reset static file
125
129
 
126
130
  reader.updateFile();
131
+ this.runner.reset();
127
132
  }
128
133
 
129
134
  onListening(app) {
@@ -140,6 +145,24 @@ class ModernDevServer extends _modernServer.ModernServer {
140
145
  resolve();
141
146
  });
142
147
  });
148
+ }
149
+
150
+ async createHTTPServer(handler) {
151
+ const {
152
+ dev
153
+ } = this;
154
+ const devHttpsOption = typeof dev === 'object' && dev.https;
155
+
156
+ if (devHttpsOption) {
157
+ const {
158
+ genHttpsOptions
159
+ } = require("../../dev-tools/https");
160
+
161
+ const httpsOptions = await genHttpsOptions(devHttpsOption);
162
+ return (0, _https.createServer)(httpsOptions, handler);
163
+ } else {
164
+ return (0, _http.createServer)(handler);
165
+ }
143
166
  } // set up plugin to each compiler
144
167
  // register hooks for each compilation, update socket stats if recompiled
145
168
  // start dev middleware
@@ -234,18 +257,16 @@ class ModernDevServer extends _modernServer.ModernServer {
234
257
  pwd
235
258
  } = this;
236
259
  const {
237
- mock,
238
- server,
239
- api,
240
- shared
260
+ mock
241
261
  } = _constants.AGGRED_DIR;
242
- const defaultWatched = [`${pwd}/${mock}/**/*`, `${pwd}/${server}/**/*`, `${pwd}/${api}/**/*`, `${pwd}/${shared}/**/*`];
262
+ const defaultWatched = [`${pwd}/${mock}/**/*`, `${pwd}/${_utils.SERVER_DIR}/**/*`, `${pwd}/${_utils.API_DIR}/!(typings)/**`, `${pwd}/${_utils.SHARED_DIR}/**/*`];
243
263
  const watcher = new _watcher.default();
244
264
  watcher.createDepTree(); // 监听文件变动,如果有变动则给 client,也就是 start 启动的插件发消息
245
265
 
246
266
  watcher.listen(defaultWatched, filepath => {
247
267
  watcher.updateDepTree();
248
268
  watcher.cleanDepCache(filepath);
269
+ this.runner.reset();
249
270
 
250
271
  if (filepath.startsWith(`${pwd}/${mock}`)) {
251
272
  this.mockHandler = (0, _mock.createMockHandler)({
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ModernAPIDevServer", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _devServerSplit.ModernAPIDevServer;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "ModernDevServer", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _devServer.ModernDevServer;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "ModernSSRDevServer", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _devServerSplit.ModernSSRDevServer;
22
+ }
23
+ });
24
+
25
+ var _devServerSplit = require("./dev-server-split");
26
+
27
+ var _devServer = require("./dev-server");
@@ -5,30 +5,35 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.Server = void 0;
7
7
 
8
- var _http = require("http");
9
-
10
- var _https = require("https");
8
+ var _path = _interopRequireDefault(require("path"));
11
9
 
12
10
  var _serverPlugin = require("@modern-js/server-plugin");
13
11
 
14
12
  var _utils = require("@modern-js/utils");
15
13
 
14
+ var _core = require("@modern-js/core");
15
+
16
16
  var _modernServer = require("./modern-server");
17
17
 
18
+ var _modernServerSplit = require("./modern-server-split");
19
+
18
20
  var _measure = require("../libs/measure");
19
21
 
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
+ 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; }
25
+
26
+ 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; }
27
+
28
+ 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; }
29
+
20
30
  class Server {
21
31
  constructor(options) {
22
- var _options$plugins;
23
-
24
32
  this.options = void 0;
25
33
  this.server = void 0;
26
34
  this.app = void 0;
27
35
  this.runner = void 0;
28
36
  this.options = options;
29
- (_options$plugins = options.plugins) === null || _options$plugins === void 0 ? void 0 : _options$plugins.forEach(p => {
30
- _serverPlugin.serverManager.usePlugin(p);
31
- });
32
37
  }
33
38
 
34
39
  getRequestHandler() {
@@ -46,40 +51,20 @@ class Server {
46
51
  const {
47
52
  options
48
53
  } = this;
49
- this.runner = await _serverPlugin.serverManager.init({});
50
- const {
51
- logger,
52
- measure
53
- } = await this.runner.create({
54
- loggerOptions: options.logger,
55
- measureOptions: options.measure
56
- }, {
57
- onLast: () => ({})
58
- });
59
- options.logger = options.logger || logger || _utils.logger;
60
- options.measure = options.measure || measure || _measure.measure;
54
+ options.logger = options.logger || _utils.logger;
55
+ options.measure = options.measure || _measure.measure; // initialize server
61
56
 
62
57
  if (options.dev) {
63
- this.server = this.createDevServer(); // check if https is configured when start dev server
64
-
65
- const devHttpsOption = typeof options.dev === 'object' && options.dev.https;
66
-
67
- if (devHttpsOption) {
68
- const {
69
- genHttpsOptions
70
- } = require("../dev-tools/https");
71
-
72
- const httpsOptions = await genHttpsOptions(devHttpsOption);
73
- this.app = (0, _https.createServer)(httpsOptions, this.getRequestHandler());
74
- } else {
75
- this.app = (0, _http.createServer)(this.getRequestHandler());
76
- }
58
+ this.server = this.createDevServer();
77
59
  } else {
78
60
  this.server = this.createProdServer();
79
- this.app = (0, _http.createServer)(this.getRequestHandler());
80
- }
61
+ } // check if https is configured when start dev server
62
+
63
+
64
+ this.app = await this.server.createHTTPServer(this.getRequestHandler());
65
+ this.runner = await this.createHookRunner(); // runner can only be used after server init
81
66
 
82
- await this.server.init();
67
+ await this.server.init(this.runner);
83
68
  return this;
84
69
  }
85
70
 
@@ -110,19 +95,13 @@ class Server {
110
95
  } = this;
111
96
 
112
97
  if (options.apiOnly) {
113
- const {
114
- APIModernServer
115
- } = require("./api-server");
116
-
117
- return new APIModernServer(options, this.runner);
98
+ return new _modernServerSplit.ModernAPIServer(options);
99
+ } else if (options.ssrOnly) {
100
+ return new _modernServerSplit.ModernSSRServer(options);
118
101
  } else if (options.webOnly) {
119
- const {
120
- WebModernServer
121
- } = require("./web-server");
122
-
123
- return new WebModernServer(options, this.runner);
102
+ return new _modernServerSplit.ModernWebServer(options);
124
103
  } else {
125
- return new _modernServer.ModernServer(options, this.runner);
104
+ return new _modernServer.ModernServer(options);
126
105
  }
127
106
  }
128
107
 
@@ -131,25 +110,54 @@ class Server {
131
110
  options
132
111
  } = this;
133
112
 
113
+ const {
114
+ ModernAPIDevServer,
115
+ ModernSSRDevServer,
116
+ ModernDevServer
117
+ } = require("./dev-server");
118
+
134
119
  if (options.apiOnly) {
135
- const {
136
- APIModernDevServer
137
- } = require("./api-server");
120
+ return new ModernAPIDevServer(options);
121
+ } else if (options.ssrOnly) {
122
+ return new ModernSSRDevServer(options);
123
+ } else {
124
+ return new ModernDevServer(options);
125
+ }
126
+ }
138
127
 
139
- return new APIModernDevServer(options, this.runner);
140
- } else if (options.webOnly) {
141
- const {
142
- WebModernDevServer
143
- } = require("./web-server");
128
+ async createHookRunner() {
129
+ var _options$plugins;
144
130
 
145
- return new WebModernDevServer(options, this.runner);
146
- } else {
147
- const {
148
- ModernDevServer
149
- } = require("./dev-server");
131
+ const {
132
+ options
133
+ } = this;
134
+ (_options$plugins = options.plugins) === null || _options$plugins === void 0 ? void 0 : _options$plugins.forEach(p => {
135
+ _serverPlugin.serverManager.usePlugin(p);
136
+ });
137
+ const appContext = await this.initAppContext();
150
138
 
151
- return new ModernDevServer(options, this.runner);
152
- }
139
+ _serverPlugin.serverManager.run(() => {
140
+ _core.ConfigContext.set(this.options.config);
141
+
142
+ _core.AppContext.set(_objectSpread(_objectSpread({}, appContext), {}, {
143
+ distDirectory: _path.default.join(options.pwd, options.config.output.path || 'dist')
144
+ }));
145
+ });
146
+
147
+ return _serverPlugin.serverManager.init({});
148
+ }
149
+
150
+ async initAppContext() {
151
+ var _this$options$plugins;
152
+
153
+ const appDirectory = await (0, _core.initAppDir)();
154
+ const loaded = await (0, _core.loadUserConfig)(appDirectory);
155
+ const plugins = (_this$options$plugins = this.options.plugins) === null || _this$options$plugins === void 0 ? void 0 : _this$options$plugins.map(p => ({
156
+ server: p,
157
+ cli: undefined
158
+ }));
159
+ const appContext = (0, _core.initAppContext)(appDirectory, plugins || [], loaded.filePath);
160
+ return appContext;
153
161
  }
154
162
 
155
163
  }
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ModernWebServer = exports.ModernSSRServer = exports.ModernAPIServer = void 0;
7
+
8
+ var _modernServer = require("./modern-server");
9
+
10
+ class ModernSSRServer extends _modernServer.ModernServer {
11
+ // Todo should not invoke any route hook in modernSSRServer
12
+ async warmupSSRBundle() {// empty
13
+ }
14
+
15
+ verifyMatch(context, matched) {
16
+ if (matched.generate().isApi) {
17
+ this.render404(context);
18
+ }
19
+ }
20
+
21
+ prepareAPIHandler(_m, _) {
22
+ return null;
23
+ }
24
+
25
+ async prepareWebHandler(extension) {
26
+ return super.prepareWebHandler(extension);
27
+ } // protected filterRoutes(routes: ModernRouteInterface[]) {
28
+ // return routes.filter(route => route.entryName);
29
+ // }
30
+
31
+
32
+ async preServerInit() {// empty
33
+ }
34
+
35
+ }
36
+
37
+ exports.ModernSSRServer = ModernSSRServer;
38
+
39
+ class ModernAPIServer extends _modernServer.ModernServer {
40
+ async emitRouteHook(_, _input) {// empty
41
+ }
42
+
43
+ async warmupSSRBundle() {// empty
44
+ }
45
+
46
+ prepareWebHandler(_) {
47
+ return null;
48
+ }
49
+
50
+ async prepareAPIHandler(mode, extension) {
51
+ return super.prepareAPIHandler(mode, extension);
52
+ }
53
+
54
+ filterRoutes(routes) {
55
+ return routes.filter(route => route.isApi);
56
+ }
57
+
58
+ async preServerInit() {// empty
59
+ }
60
+
61
+ }
62
+
63
+ exports.ModernAPIServer = ModernAPIServer;
64
+
65
+ class ModernWebServer extends _modernServer.ModernServer {
66
+ async warmupSSRBundle() {// empty
67
+ }
68
+
69
+ async handleAPI(context) {
70
+ const {
71
+ proxyTarget
72
+ } = this;
73
+
74
+ if (!(proxyTarget !== null && proxyTarget !== void 0 && proxyTarget.api)) {
75
+ this.proxy();
76
+ } else {
77
+ this.render404(context);
78
+ }
79
+ }
80
+
81
+ async handleWeb(context, route) {
82
+ const {
83
+ proxyTarget
84
+ } = this;
85
+
86
+ if (route.isSSR && proxyTarget !== null && proxyTarget !== void 0 && proxyTarget.ssr) {
87
+ return this.proxy();
88
+ } else {
89
+ // if no proxyTarget but access web server, degradation to csr
90
+ route.isSSR = false;
91
+ return super.handleWeb(context, route);
92
+ }
93
+ }
94
+
95
+ }
96
+
97
+ exports.ModernWebServer = ModernWebServer;