@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
@@ -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,48 +39,47 @@ 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
82
  var _options$config$outpu;
91
-
92
83
  const {
93
84
  pwd,
94
85
  serverConfigFile
@@ -98,15 +89,13 @@ export class Server {
98
89
  const serverConfig = requireConfig(serverConfigPath);
99
90
  this.serverConfig = serverConfig;
100
91
  }
92
+
101
93
  /**
102
94
  *
103
95
  * merge cliConfig and serverConfig
104
96
  */
105
-
106
-
107
97
  async initConfig(runner, options) {
108
98
  var _config$output;
109
-
110
99
  const {
111
100
  pwd,
112
101
  config
@@ -122,63 +111,57 @@ export class Server {
122
111
  resolvedConfigPath
123
112
  });
124
113
  }
125
-
126
114
  async close() {
127
115
  this.app.close();
128
116
  }
129
-
130
117
  listen(options, listener) {
131
118
  const callback = () => {
132
119
  listener === null || listener === void 0 ? void 0 : listener();
133
120
  };
134
-
135
121
  if (typeof options === 'object') {
136
122
  this.app.listen(options, callback);
137
123
  } else {
138
124
  this.app.listen(process.env.PORT || options || 8080, callback);
139
125
  }
140
126
  }
141
-
142
127
  getRequestHandler() {
143
128
  return (req, res, next) => {
144
129
  const requestHandler = this.server.getRequestHandler();
145
130
  return requestHandler(req, res, next);
146
131
  };
147
132
  }
148
-
149
133
  async render(req, res, url) {
150
134
  return this.server.render(req, res, url);
151
135
  }
152
-
153
136
  async createHookRunner() {
154
137
  // clear server manager every create time
155
138
  serverManager.clear();
156
139
  const {
157
140
  options
158
- } = this; // TODO: 确认下这里是不是可以不从 options 中取插件,而是从 config 中取和过滤
159
-
141
+ } = this;
142
+ // TODO: 确认下这里是不是可以不从 options 中取插件,而是从 config 中取和过滤
160
143
  const {
161
144
  internalPlugins = INTERNAL_SERVER_PLUGINS,
162
145
  pwd,
163
146
  config
164
147
  } = options;
165
- const serverPlugins = this.serverConfig.plugins || []; // server app context for serve plugin
148
+ const serverPlugins = this.serverConfig.plugins || [];
166
149
 
150
+ // server app context for serve plugin
167
151
  const loadedPlugins = loadPlugins(pwd, serverPlugins, {
168
152
  internalPlugins
169
153
  });
170
154
  debug('plugins', config.plugins, loadedPlugins);
171
155
  loadedPlugins.forEach(p => {
172
156
  serverManager.usePlugin(p);
173
- }); // create runner
157
+ });
174
158
 
159
+ // create runner
175
160
  const hooksRunner = await serverManager.init();
176
161
  return hooksRunner;
177
162
  }
178
-
179
163
  async injectContext(runner, options) {
180
164
  var _config$output2;
181
-
182
165
  const appContext = this.initAppContext();
183
166
  const {
184
167
  config,
@@ -189,10 +172,8 @@ export class Server {
189
172
  distDirectory: path.join(pwd, ((_config$output2 = config.output) === null || _config$output2 === void 0 ? void 0 : _config$output2.path) || 'dist')
190
173
  }));
191
174
  }
192
-
193
175
  initAppContext() {
194
176
  var _config$output3;
195
-
196
177
  const {
197
178
  options
198
179
  } = this;
@@ -211,14 +192,12 @@ export class Server {
211
192
  plugins: serverPlugins
212
193
  };
213
194
  }
214
-
215
195
  loadServerEnv(options) {
216
196
  const {
217
197
  pwd: appDirectory
218
198
  } = options;
219
199
  const serverEnv = process.env.MODERN_ENV;
220
200
  const serverEnvPath = path.resolve(appDirectory, `.env.${serverEnv}`);
221
-
222
201
  if (serverEnv && fs.existsSync(serverEnvPath) && !fs.statSync(serverEnvPath).isDirectory()) {
223
202
  const envConfig = dotenv.config({
224
203
  path: serverEnvPath
@@ -226,5 +205,4 @@ export class Server {
226
205
  dotenvExpand(envConfig);
227
206
  }
228
207
  }
229
-
230
208
  }
@@ -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);