@modern-js/prod-server 1.21.5 → 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 (120) hide show
  1. package/CHANGELOG.md +91 -10
  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 +125 -0
  6. package/dist/js/modern/libs/hook-api/route.js +13 -36
  7. package/dist/js/modern/libs/hook-api/template.js +38 -15
  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 +37 -28
  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 +7 -10
  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 +24 -12
  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 +13 -6
  28. package/dist/js/modern/server/index.js +27 -43
  29. package/dist/js/modern/server/modern-server-split.js +5 -55
  30. package/dist/js/modern/server/modern-server.js +179 -250
  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 +136 -0
  38. package/dist/js/node/libs/hook-api/route.js +13 -38
  39. package/dist/js/node/libs/hook-api/template.js +40 -18
  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 +37 -33
  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 +5 -15
  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 +23 -22
  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 +15 -12
  61. package/dist/js/node/server/index.js +26 -62
  62. package/dist/js/node/server/modern-server-split.js +5 -58
  63. package/dist/js/node/server/modern-server.js +178 -280
  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/hook-api/index.d.ts +5 -0
  108. package/dist/types/libs/hook-api/route.d.ts +9 -14
  109. package/dist/types/libs/hook-api/template.d.ts +19 -9
  110. package/dist/types/libs/loadConfig.d.ts +0 -1
  111. package/dist/types/libs/render/cache/index.d.ts +4 -4
  112. package/dist/types/libs/render/cache/spr.d.ts +0 -2
  113. package/dist/types/libs/render/type.d.ts +3 -1
  114. package/dist/types/libs/serve-file.d.ts +2 -1
  115. package/dist/types/server/index.d.ts +2 -3
  116. package/dist/types/server/modern-server.d.ts +11 -11
  117. package/dist/types/type.d.ts +8 -10
  118. package/dist/types/utils.d.ts +0 -1
  119. package/dist/types/worker-server.d.ts +16 -0
  120. package/package.json +28 -35
@@ -1,12 +1,9 @@
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
- import { Logger, SHARED_DIR, OUTPUT_CONFIG_FILE, dotenv, dotenvExpand } from '@modern-js/utils';
6
+ import { Logger, SHARED_DIR, OUTPUT_CONFIG_FILE, dotenv, dotenvExpand, INTERNAL_SERVER_PLUGINS } from '@modern-js/utils';
10
7
  import { serverManager, AppContext, ConfigContext, loadPlugins } from '@modern-js/server-core';
11
8
  import { metrics as defaultMetrics } from "../libs/metrics";
12
9
  import { loadConfig, getServerConfigPath, requireConfig } from "../libs/loadConfig";
@@ -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,57 +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
-
133
+ async render(req, res, url) {
134
+ return this.server.render(req, res, url);
135
+ }
149
136
  async createHookRunner() {
150
137
  // clear server manager every create time
151
138
  serverManager.clear();
152
139
  const {
153
140
  options
154
- } = this; // TODO: 确认下这里是不是可以不从 options 中取插件,而是从 config 中取和过滤
155
-
141
+ } = this;
142
+ // TODO: 确认下这里是不是可以不从 options 中取插件,而是从 config 中取和过滤
156
143
  const {
157
- plugins = [],
144
+ internalPlugins = INTERNAL_SERVER_PLUGINS,
158
145
  pwd,
159
146
  config
160
147
  } = options;
161
- const serverPlugins = this.serverConfig.plugins || []; // server app context for serve plugin
148
+ const serverPlugins = this.serverConfig.plugins || [];
162
149
 
163
- const loadedPlugins = loadPlugins(plugins.concat(serverPlugins), pwd);
150
+ // server app context for serve plugin
151
+ const loadedPlugins = loadPlugins(pwd, serverPlugins, {
152
+ internalPlugins
153
+ });
164
154
  debug('plugins', config.plugins, loadedPlugins);
165
155
  loadedPlugins.forEach(p => {
166
156
  serverManager.usePlugin(p);
167
- }); // create runner
157
+ });
168
158
 
159
+ // create runner
169
160
  const hooksRunner = await serverManager.init();
170
161
  return hooksRunner;
171
162
  }
172
-
173
163
  async injectContext(runner, options) {
174
164
  var _config$output2;
175
-
176
165
  const appContext = this.initAppContext();
177
166
  const {
178
167
  config,
@@ -183,10 +172,8 @@ export class Server {
183
172
  distDirectory: path.join(pwd, ((_config$output2 = config.output) === null || _config$output2 === void 0 ? void 0 : _config$output2.path) || 'dist')
184
173
  }));
185
174
  }
186
-
187
175
  initAppContext() {
188
176
  var _config$output3;
189
-
190
177
  const {
191
178
  options
192
179
  } = this;
@@ -205,14 +192,12 @@ export class Server {
205
192
  plugins: serverPlugins
206
193
  };
207
194
  }
208
-
209
195
  loadServerEnv(options) {
210
196
  const {
211
197
  pwd: appDirectory
212
198
  } = options;
213
199
  const serverEnv = process.env.MODERN_ENV;
214
200
  const serverEnvPath = path.resolve(appDirectory, `.env.${serverEnv}`);
215
-
216
201
  if (serverEnv && fs.existsSync(serverEnvPath) && !fs.statSync(serverEnvPath).isDirectory()) {
217
202
  const envConfig = dotenv.config({
218
203
  path: serverEnvPath
@@ -220,5 +205,4 @@ export class Server {
220
205
  dotenvExpand(envConfig);
221
206
  }
222
207
  }
223
-
224
208
  }
@@ -1,82 +1,32 @@
1
- import { RUN_MODE } from "../constants";
2
1
  import { ModernServer } from "./modern-server";
3
-
4
2
  class ModernSSRServer extends ModernServer {
5
3
  prepareAPIHandler(_) {
6
4
  return null;
7
5
  }
8
-
9
- filterRoutes(routes) {
10
- return routes.filter(route => !route.isApi);
11
- }
12
-
13
- async setupBeforeProdMiddleware() {
14
- if (this.runMode === RUN_MODE.FULL) {
15
- await super.setupBeforeProdMiddleware();
16
- }
17
- }
18
-
19
- async emitRouteHook(_, _input) {
20
- if (this.runMode === RUN_MODE.FULL) {
21
- await super.emitRouteHook(_, _input);
22
- }
6
+ async handleAPI(context) {
7
+ return this.render404(context);
23
8
  }
24
-
25
9
  }
26
-
27
10
  class ModernAPIServer extends ModernServer {
28
11
  prepareWebHandler(_) {
29
12
  return null;
30
13
  }
31
-
32
14
  filterRoutes(routes) {
33
15
  return routes.filter(route => route.isApi);
34
16
  }
35
-
36
- async setupBeforeProdMiddleware() {
37
- if (this.runMode === RUN_MODE.FULL) {
38
- await super.setupBeforeProdMiddleware();
39
- }
40
- }
41
-
42
- async emitRouteHook(_, _input) {// empty
43
- }
44
-
45
17
  }
46
-
47
18
  class ModernWebServer extends ModernServer {
48
19
  async warmupSSRBundle() {
49
20
  return null;
50
21
  }
51
-
52
22
  async handleAPI(context) {
53
- const {
54
- proxyTarget
55
- } = this;
56
-
57
- if (proxyTarget !== null && proxyTarget !== void 0 && proxyTarget.api) {
58
- return this.proxy();
59
- } else {
60
- return this.render404(context);
61
- }
23
+ return this.render404(context);
62
24
  }
63
-
64
25
  async handleWeb(context, route) {
65
- const {
66
- proxyTarget
67
- } = this;
68
-
69
- if (route.isSSR && proxyTarget !== null && proxyTarget !== void 0 && proxyTarget.ssr) {
70
- return this.proxy();
71
- } else {
72
- // if no proxyTarget but access web server, degradation to csr
73
- route.isSSR = false;
74
- return super.handleWeb(context, route);
75
- }
26
+ route.isSSR = false;
27
+ return super.handleWeb(context, route);
76
28
  }
77
-
78
29
  }
79
-
80
30
  export const createProdServer = options => {
81
31
  if (options.apiOnly) {
82
32
  return new ModernAPIServer(options);