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