@modern-js/prod-server 2.0.0-beta.0 → 2.0.0-beta.2

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 (113) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/dist/js/modern/constants.js +0 -2
  3. package/dist/js/modern/index.js +0 -1
  4. package/dist/js/modern/libs/context/context.js +10 -56
  5. package/dist/js/modern/libs/hook-api/index.js +0 -31
  6. package/dist/js/modern/libs/hook-api/route.js +0 -8
  7. package/dist/js/modern/libs/hook-api/template.js +0 -16
  8. package/dist/js/modern/libs/loadConfig.js +3 -10
  9. package/dist/js/modern/libs/metrics.js +6 -6
  10. package/dist/js/modern/libs/proxy.js +7 -12
  11. package/dist/js/modern/libs/render/cache/__tests__/cache.fun.test.js +0 -1
  12. package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +0 -9
  13. package/dist/js/modern/libs/render/cache/index.js +8 -16
  14. package/dist/js/modern/libs/render/cache/page-caches/lru.js +0 -10
  15. package/dist/js/modern/libs/render/cache/spr.js +12 -62
  16. package/dist/js/modern/libs/render/cache/util.js +0 -6
  17. package/dist/js/modern/libs/render/index.js +6 -11
  18. package/dist/js/modern/libs/render/measure.js +1 -11
  19. package/dist/js/modern/libs/render/modern/index.js +2 -13
  20. package/dist/js/modern/libs/render/reader.js +13 -24
  21. package/dist/js/modern/libs/render/ssr.js +5 -6
  22. package/dist/js/modern/libs/render/static.js +6 -9
  23. package/dist/js/modern/libs/render/type.js +0 -1
  24. package/dist/js/modern/libs/route/index.js +8 -19
  25. package/dist/js/modern/libs/route/matcher.js +21 -29
  26. package/dist/js/modern/libs/route/route.js +0 -13
  27. package/dist/js/modern/libs/serve-file.js +5 -6
  28. package/dist/js/modern/server/index.js +25 -52
  29. package/dist/js/modern/server/modern-server-split.js +0 -11
  30. package/dist/js/modern/server/modern-server.js +87 -167
  31. package/dist/js/modern/utils.js +12 -27
  32. package/dist/js/modern/worker-server.js +34 -0
  33. package/dist/js/node/constants.js +0 -2
  34. package/dist/js/node/index.js +0 -10
  35. package/dist/js/node/libs/context/context.js +10 -65
  36. package/dist/js/node/libs/context/index.js +0 -3
  37. package/dist/js/node/libs/hook-api/index.js +0 -42
  38. package/dist/js/node/libs/hook-api/route.js +0 -10
  39. package/dist/js/node/libs/hook-api/template.js +0 -22
  40. package/dist/js/node/libs/loadConfig.js +3 -22
  41. package/dist/js/node/libs/metrics.js +6 -6
  42. package/dist/js/node/libs/proxy.js +7 -17
  43. package/dist/js/node/libs/render/cache/__tests__/cache.fun.test.js +0 -5
  44. package/dist/js/node/libs/render/cache/__tests__/cache.test.js +0 -12
  45. package/dist/js/node/libs/render/cache/index.js +8 -22
  46. package/dist/js/node/libs/render/cache/page-caches/index.js +0 -2
  47. package/dist/js/node/libs/render/cache/page-caches/lru.js +0 -14
  48. package/dist/js/node/libs/render/cache/spr.js +12 -71
  49. package/dist/js/node/libs/render/cache/util.js +0 -18
  50. package/dist/js/node/libs/render/index.js +6 -26
  51. package/dist/js/node/libs/render/measure.js +0 -17
  52. package/dist/js/node/libs/render/modern/index.js +2 -20
  53. package/dist/js/node/libs/render/reader.js +12 -39
  54. package/dist/js/node/libs/render/ssr.js +4 -16
  55. package/dist/js/node/libs/render/static.js +6 -18
  56. package/dist/js/node/libs/render/type.js +0 -1
  57. package/dist/js/node/libs/route/index.js +8 -22
  58. package/dist/js/node/libs/route/matcher.js +18 -34
  59. package/dist/js/node/libs/route/route.js +0 -15
  60. package/dist/js/node/libs/serve-file.js +5 -13
  61. package/dist/js/node/server/index.js +25 -72
  62. package/dist/js/node/server/modern-server-split.js +0 -13
  63. package/dist/js/node/server/modern-server.js +87 -196
  64. package/dist/js/node/utils.js +13 -52
  65. package/dist/js/node/worker-server.js +41 -0
  66. package/dist/js/treeshaking/constants.js +28 -0
  67. package/dist/js/treeshaking/index.js +13 -0
  68. package/dist/js/treeshaking/libs/context/context.js +243 -0
  69. package/dist/js/treeshaking/libs/context/index.js +5 -0
  70. package/dist/js/treeshaking/libs/hook-api/index.js +157 -0
  71. package/dist/js/treeshaking/libs/hook-api/route.js +33 -0
  72. package/dist/js/treeshaking/libs/hook-api/template.js +91 -0
  73. package/dist/js/treeshaking/libs/loadConfig.js +39 -0
  74. package/dist/js/treeshaking/libs/metrics.js +12 -0
  75. package/dist/js/treeshaking/libs/proxy.js +80 -0
  76. package/dist/js/treeshaking/libs/render/cache/__tests__/cache.fun.test.js +124 -0
  77. package/dist/js/treeshaking/libs/render/cache/__tests__/cache.test.js +464 -0
  78. package/dist/js/treeshaking/libs/render/cache/__tests__/cacheable.js +53 -0
  79. package/dist/js/treeshaking/libs/render/cache/__tests__/error-configuration.js +35 -0
  80. package/dist/js/treeshaking/libs/render/cache/__tests__/matched-cache.js +121 -0
  81. package/dist/js/treeshaking/libs/render/cache/index.js +184 -0
  82. package/dist/js/treeshaking/libs/render/cache/page-caches/index.js +30 -0
  83. package/dist/js/treeshaking/libs/render/cache/page-caches/lru.js +46 -0
  84. package/dist/js/treeshaking/libs/render/cache/spr.js +362 -0
  85. package/dist/js/treeshaking/libs/render/cache/type.js +1 -0
  86. package/dist/js/treeshaking/libs/render/cache/util.js +101 -0
  87. package/dist/js/treeshaking/libs/render/index.js +100 -0
  88. package/dist/js/treeshaking/libs/render/measure.js +61 -0
  89. package/dist/js/treeshaking/libs/render/modern/browser-list.js +7 -0
  90. package/dist/js/treeshaking/libs/render/modern/index.js +39 -0
  91. package/dist/js/treeshaking/libs/render/reader.js +191 -0
  92. package/dist/js/treeshaking/libs/render/ssr.js +98 -0
  93. package/dist/js/treeshaking/libs/render/static.js +84 -0
  94. package/dist/js/treeshaking/libs/render/type.js +6 -0
  95. package/dist/js/treeshaking/libs/route/index.js +94 -0
  96. package/dist/js/treeshaking/libs/route/matcher.js +113 -0
  97. package/dist/js/treeshaking/libs/route/route.js +26 -0
  98. package/dist/js/treeshaking/libs/serve-file.js +75 -0
  99. package/dist/js/treeshaking/server/index.js +339 -0
  100. package/dist/js/treeshaking/server/modern-server-split.js +152 -0
  101. package/dist/js/treeshaking/server/modern-server.js +946 -0
  102. package/dist/js/treeshaking/type.js +1 -0
  103. package/dist/js/treeshaking/utils.js +90 -0
  104. package/dist/js/treeshaking/worker-server.js +56 -0
  105. package/dist/types/index.d.ts +0 -2
  106. package/dist/types/libs/context/context.d.ts +0 -3
  107. package/dist/types/libs/loadConfig.d.ts +0 -1
  108. package/dist/types/libs/render/cache/index.d.ts +0 -2
  109. package/dist/types/libs/render/cache/spr.d.ts +0 -2
  110. package/dist/types/server/index.d.ts +0 -3
  111. package/dist/types/utils.d.ts +2 -3
  112. package/dist/types/worker-server.d.ts +16 -0
  113. package/package.json +31 -15
@@ -4,45 +4,26 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Server = void 0;
7
-
8
7
  var _path = _interopRequireDefault(require("path"));
9
-
10
8
  var _fs = _interopRequireDefault(require("fs"));
11
-
12
9
  var _utils = require("@modern-js/utils");
13
-
14
10
  var _serverCore = require("@modern-js/server-core");
15
-
16
11
  var _metrics = require("../libs/metrics");
17
-
18
12
  var _loadConfig = require("../libs/loadConfig");
19
-
20
13
  var _utils2 = require("../utils");
21
-
22
14
  var _modernServerSplit = require("./modern-server-split");
23
-
24
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
-
26
16
  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; }
27
-
28
17
  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; }
29
-
30
18
  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; }
31
-
32
19
  class Server {
33
20
  constructor(options) {
34
21
  _defineProperty(this, "options", void 0);
35
-
36
22
  _defineProperty(this, "serverImpl", _modernServerSplit.createProdServer);
37
-
38
23
  _defineProperty(this, "server", void 0);
39
-
40
24
  _defineProperty(this, "app", void 0);
41
-
42
25
  _defineProperty(this, "runner", void 0);
43
-
44
26
  _defineProperty(this, "serverConfig", void 0);
45
-
46
27
  options.logger = options.logger || new _utils.Logger({
47
28
  level: 'warn'
48
29
  });
@@ -50,6 +31,7 @@ class Server {
50
31
  this.options = options;
51
32
  this.serverConfig = {};
52
33
  }
34
+
53
35
  /**
54
36
  * 初始化顺序
55
37
  * - 读取 .env.{process.env.MODERN_ENV} 文件,加载环境变量
@@ -64,68 +46,61 @@ class Server {
64
46
  * - 执行 prepare hook
65
47
  * - 执行 server init
66
48
  */
67
-
68
-
69
49
  async init() {
70
50
  const {
71
51
  options
72
52
  } = this;
73
53
  this.loadServerEnv(options);
74
54
  this.initServerConfig(options);
75
- await this.injectContext(this.runner, options); // initialize server runner
55
+ await this.injectContext(this.runner, options);
76
56
 
77
- this.runner = await this.createHookRunner(); // init config and execute config hook
57
+ // initialize server runner
58
+ this.runner = await this.createHookRunner();
78
59
 
60
+ // init config and execute config hook
79
61
  await this.initConfig(this.runner, options);
80
- await this.injectContext(this.runner, options); // initialize server
62
+ await this.injectContext(this.runner, options);
81
63
 
64
+ // initialize server
82
65
  this.server = this.serverImpl(options);
83
- await this.runPrepareHook(this.runner); // create http-server
66
+ await this.runPrepareHook(this.runner);
84
67
 
85
- this.app = await this.server.createHTTPServer(this.getRequestHandler()); // runner can only be used after server init
68
+ // create http-server
69
+ this.app = await this.server.createHTTPServer(this.getRequestHandler());
86
70
 
71
+ // runner can only be used after server init
87
72
  await this.server.onInit(this.runner, this.app);
88
73
  return this;
89
74
  }
75
+
90
76
  /**
91
77
  * Execute config hooks
92
78
  * @param runner
93
79
  * @param options
94
80
  */
95
-
96
-
97
81
  runConfigHook(runner, serverConfig) {
98
82
  const newServerConfig = runner.config(serverConfig || {});
99
83
  return newServerConfig;
100
84
  }
101
-
102
85
  async runPrepareHook(runner) {
103
86
  runner.prepare();
104
87
  }
105
-
106
88
  initServerConfig(options) {
107
- var _options$config$outpu;
108
-
109
89
  const {
110
90
  pwd,
111
91
  serverConfigFile
112
92
  } = options;
113
-
114
- const distDirectory = _path.default.join(pwd, ((_options$config$outpu = options.config.output) === null || _options$config$outpu === void 0 ? void 0 : _options$config$outpu.path) || 'dist');
115
-
93
+ const distDirectory = _path.default.join(pwd, options.config.output.path || 'dist');
116
94
  const serverConfigPath = (0, _loadConfig.getServerConfigPath)(distDirectory, serverConfigFile);
117
95
  const serverConfig = (0, _loadConfig.requireConfig)(serverConfigPath);
118
96
  this.serverConfig = serverConfig;
119
97
  }
98
+
120
99
  /**
121
100
  *
122
101
  * merge cliConfig and serverConfig
123
102
  */
124
-
125
-
126
103
  async initConfig(runner, options) {
127
- var _config$output;
128
-
129
104
  const {
130
105
  pwd,
131
106
  config
@@ -134,89 +109,73 @@ class Server {
134
109
  serverConfig
135
110
  } = this;
136
111
  const finalServerConfig = this.runConfigHook(runner, serverConfig);
137
-
138
- const resolvedConfigPath = _path.default.join(pwd, (config === null || config === void 0 ? void 0 : (_config$output = config.output) === null || _config$output === void 0 ? void 0 : _config$output.path) || 'dist', _utils.OUTPUT_CONFIG_FILE);
139
-
112
+ const resolvedConfigPath = _path.default.join(pwd, config.output.path || 'dist', _utils.OUTPUT_CONFIG_FILE);
140
113
  options.config = (0, _loadConfig.loadConfig)({
141
114
  cliConfig: config,
142
115
  serverConfig: finalServerConfig,
143
116
  resolvedConfigPath
144
117
  });
145
118
  }
146
-
147
119
  async close() {
148
120
  this.app.close();
149
121
  }
150
-
151
122
  listen(options, listener) {
152
123
  const callback = () => {
153
124
  listener === null || listener === void 0 ? void 0 : listener();
154
125
  };
155
-
156
126
  if (typeof options === 'object') {
157
127
  this.app.listen(options, callback);
158
128
  } else {
159
129
  this.app.listen(process.env.PORT || options || 8080, callback);
160
130
  }
161
131
  }
162
-
163
132
  getRequestHandler() {
164
133
  return (req, res, next) => {
165
134
  const requestHandler = this.server.getRequestHandler();
166
135
  return requestHandler(req, res, next);
167
136
  };
168
137
  }
169
-
170
138
  async render(req, res, url) {
171
139
  return this.server.render(req, res, url);
172
140
  }
173
-
174
141
  async createHookRunner() {
175
142
  // clear server manager every create time
176
143
  _serverCore.serverManager.clear();
177
-
178
144
  const {
179
145
  options
180
- } = this; // TODO: 确认下这里是不是可以不从 options 中取插件,而是从 config 中取和过滤
181
-
146
+ } = this;
147
+ // TODO: 确认下这里是不是可以不从 options 中取插件,而是从 config 中取和过滤
182
148
  const {
183
149
  internalPlugins = _utils.INTERNAL_SERVER_PLUGINS,
184
- pwd,
185
- config
150
+ pwd
186
151
  } = options;
187
- const serverPlugins = this.serverConfig.plugins || []; // server app context for serve plugin
152
+ const serverPlugins = this.serverConfig.plugins || [];
188
153
 
154
+ // server app context for serve plugin
189
155
  const loadedPlugins = (0, _serverCore.loadPlugins)(pwd, serverPlugins, {
190
156
  internalPlugins
191
157
  });
192
- (0, _utils2.debug)('plugins', config.plugins, loadedPlugins);
158
+ (0, _utils2.debug)('plugins', loadedPlugins);
193
159
  loadedPlugins.forEach(p => {
194
160
  _serverCore.serverManager.usePlugin(p);
195
- }); // create runner
161
+ });
196
162
 
163
+ // create runner
197
164
  const hooksRunner = await _serverCore.serverManager.init();
198
165
  return hooksRunner;
199
166
  }
200
-
201
167
  async injectContext(runner, options) {
202
- var _config$output2;
203
-
204
168
  const appContext = this.initAppContext();
205
169
  const {
206
170
  config,
207
171
  pwd
208
172
  } = options;
209
-
210
173
  _serverCore.ConfigContext.set(config);
211
-
212
174
  _serverCore.AppContext.set(_objectSpread(_objectSpread({}, appContext), {}, {
213
- distDirectory: _path.default.join(pwd, ((_config$output2 = config.output) === null || _config$output2 === void 0 ? void 0 : _config$output2.path) || 'dist')
175
+ distDirectory: _path.default.join(pwd, config.output.path || 'dist')
214
176
  }));
215
177
  }
216
-
217
178
  initAppContext() {
218
- var _config$output3;
219
-
220
179
  const {
221
180
  options
222
181
  } = this;
@@ -230,29 +189,23 @@ class Server {
230
189
  }));
231
190
  return {
232
191
  appDirectory,
233
- distDirectory: _path.default.join(appDirectory, ((_config$output3 = config.output) === null || _config$output3 === void 0 ? void 0 : _config$output3.path) || 'dist'),
192
+ distDirectory: _path.default.join(appDirectory, config.output.path || 'dist'),
234
193
  sharedDirectory: _path.default.resolve(appDirectory, _utils.SHARED_DIR),
235
194
  plugins: serverPlugins
236
195
  };
237
196
  }
238
-
239
197
  loadServerEnv(options) {
240
198
  const {
241
199
  pwd: appDirectory
242
200
  } = options;
243
201
  const serverEnv = process.env.MODERN_ENV;
244
-
245
202
  const serverEnvPath = _path.default.resolve(appDirectory, `.env.${serverEnv}`);
246
-
247
203
  if (serverEnv && _fs.default.existsSync(serverEnvPath) && !_fs.default.statSync(serverEnvPath).isDirectory()) {
248
204
  const envConfig = _utils.dotenv.config({
249
205
  path: serverEnvPath
250
206
  });
251
-
252
207
  (0, _utils.dotenvExpand)(envConfig);
253
208
  }
254
209
  }
255
-
256
210
  }
257
-
258
211
  exports.Server = Server;
@@ -4,47 +4,35 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createProdServer = void 0;
7
-
8
7
  var _modernServer = require("./modern-server");
9
-
10
8
  class ModernSSRServer extends _modernServer.ModernServer {
11
9
  prepareAPIHandler(_) {
12
10
  return null;
13
11
  }
14
-
15
12
  async handleAPI(context) {
16
13
  return this.render404(context);
17
14
  }
18
-
19
15
  }
20
-
21
16
  class ModernAPIServer extends _modernServer.ModernServer {
22
17
  prepareWebHandler(_) {
23
18
  return null;
24
19
  }
25
-
26
20
  filterRoutes(routes) {
27
21
  return routes.filter(route => route.isApi);
28
22
  }
29
-
30
23
  }
31
-
32
24
  class ModernWebServer extends _modernServer.ModernServer {
33
25
  async warmupSSRBundle() {
34
26
  return null;
35
27
  }
36
-
37
28
  async handleAPI(context) {
38
29
  return this.render404(context);
39
30
  }
40
-
41
31
  async handleWeb(context, route) {
42
32
  route.isSSR = false;
43
33
  return super.handleWeb(context, route);
44
34
  }
45
-
46
35
  }
47
-
48
36
  const createProdServer = options => {
49
37
  if (options.apiOnly) {
50
38
  return new ModernAPIServer(options);
@@ -56,5 +44,4 @@ const createProdServer = options => {
56
44
  return new _modernServer.ModernServer(options);
57
45
  }
58
46
  };
59
-
60
47
  exports.createProdServer = createProdServer;