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

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 +55 -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 +19 -41
  29. package/dist/js/modern/server/modern-server-split.js +0 -11
  30. package/dist/js/modern/server/modern-server.js +83 -164
  31. package/dist/js/modern/utils.js +2 -21
  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 +19 -61
  62. package/dist/js/node/server/modern-server-split.js +0 -13
  63. package/dist/js/node/server/modern-server.js +83 -193
  64. package/dist/js/node/utils.js +3 -46
  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 +343 -0
  100. package/dist/js/treeshaking/server/modern-server-split.js +152 -0
  101. package/dist/js/treeshaking/server/modern-server.js +945 -0
  102. package/dist/js/treeshaking/type.js +1 -0
  103. package/dist/js/treeshaking/utils.js +87 -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 +0 -1
  112. package/dist/types/worker-server.d.ts +16 -0
  113. package/package.json +28 -12
@@ -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,63 @@ 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
89
  var _options$config$outpu;
108
-
109
90
  const {
110
91
  pwd,
111
92
  serverConfigFile
112
93
  } = options;
113
-
114
94
  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
-
116
95
  const serverConfigPath = (0, _loadConfig.getServerConfigPath)(distDirectory, serverConfigFile);
117
96
  const serverConfig = (0, _loadConfig.requireConfig)(serverConfigPath);
118
97
  this.serverConfig = serverConfig;
119
98
  }
99
+
120
100
  /**
121
101
  *
122
102
  * merge cliConfig and serverConfig
123
103
  */
124
-
125
-
126
104
  async initConfig(runner, options) {
127
105
  var _config$output;
128
-
129
106
  const {
130
107
  pwd,
131
108
  config
@@ -134,89 +111,76 @@ class Server {
134
111
  serverConfig
135
112
  } = this;
136
113
  const finalServerConfig = this.runConfigHook(runner, serverConfig);
137
-
138
114
  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
-
140
115
  options.config = (0, _loadConfig.loadConfig)({
141
116
  cliConfig: config,
142
117
  serverConfig: finalServerConfig,
143
118
  resolvedConfigPath
144
119
  });
145
120
  }
146
-
147
121
  async close() {
148
122
  this.app.close();
149
123
  }
150
-
151
124
  listen(options, listener) {
152
125
  const callback = () => {
153
126
  listener === null || listener === void 0 ? void 0 : listener();
154
127
  };
155
-
156
128
  if (typeof options === 'object') {
157
129
  this.app.listen(options, callback);
158
130
  } else {
159
131
  this.app.listen(process.env.PORT || options || 8080, callback);
160
132
  }
161
133
  }
162
-
163
134
  getRequestHandler() {
164
135
  return (req, res, next) => {
165
136
  const requestHandler = this.server.getRequestHandler();
166
137
  return requestHandler(req, res, next);
167
138
  };
168
139
  }
169
-
170
140
  async render(req, res, url) {
171
141
  return this.server.render(req, res, url);
172
142
  }
173
-
174
143
  async createHookRunner() {
175
144
  // clear server manager every create time
176
145
  _serverCore.serverManager.clear();
177
-
178
146
  const {
179
147
  options
180
- } = this; // TODO: 确认下这里是不是可以不从 options 中取插件,而是从 config 中取和过滤
181
-
148
+ } = this;
149
+ // TODO: 确认下这里是不是可以不从 options 中取插件,而是从 config 中取和过滤
182
150
  const {
183
151
  internalPlugins = _utils.INTERNAL_SERVER_PLUGINS,
184
152
  pwd,
185
153
  config
186
154
  } = options;
187
- const serverPlugins = this.serverConfig.plugins || []; // server app context for serve plugin
155
+ const serverPlugins = this.serverConfig.plugins || [];
188
156
 
157
+ // server app context for serve plugin
189
158
  const loadedPlugins = (0, _serverCore.loadPlugins)(pwd, serverPlugins, {
190
159
  internalPlugins
191
160
  });
192
161
  (0, _utils2.debug)('plugins', config.plugins, loadedPlugins);
193
162
  loadedPlugins.forEach(p => {
194
163
  _serverCore.serverManager.usePlugin(p);
195
- }); // create runner
164
+ });
196
165
 
166
+ // create runner
197
167
  const hooksRunner = await _serverCore.serverManager.init();
198
168
  return hooksRunner;
199
169
  }
200
-
201
170
  async injectContext(runner, options) {
202
171
  var _config$output2;
203
-
204
172
  const appContext = this.initAppContext();
205
173
  const {
206
174
  config,
207
175
  pwd
208
176
  } = options;
209
-
210
177
  _serverCore.ConfigContext.set(config);
211
-
212
178
  _serverCore.AppContext.set(_objectSpread(_objectSpread({}, appContext), {}, {
213
179
  distDirectory: _path.default.join(pwd, ((_config$output2 = config.output) === null || _config$output2 === void 0 ? void 0 : _config$output2.path) || 'dist')
214
180
  }));
215
181
  }
216
-
217
182
  initAppContext() {
218
183
  var _config$output3;
219
-
220
184
  const {
221
185
  options
222
186
  } = this;
@@ -235,24 +199,18 @@ class Server {
235
199
  plugins: serverPlugins
236
200
  };
237
201
  }
238
-
239
202
  loadServerEnv(options) {
240
203
  const {
241
204
  pwd: appDirectory
242
205
  } = options;
243
206
  const serverEnv = process.env.MODERN_ENV;
244
-
245
207
  const serverEnvPath = _path.default.resolve(appDirectory, `.env.${serverEnv}`);
246
-
247
208
  if (serverEnv && _fs.default.existsSync(serverEnvPath) && !_fs.default.statSync(serverEnvPath).isDirectory()) {
248
209
  const envConfig = _utils.dotenv.config({
249
210
  path: serverEnvPath
250
211
  });
251
-
252
212
  (0, _utils.dotenvExpand)(envConfig);
253
213
  }
254
214
  }
255
-
256
215
  }
257
-
258
216
  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;