@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
@@ -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,83 +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
-
140
+ async render(req, res, url) {
141
+ return this.server.render(req, res, url);
142
+ }
170
143
  async createHookRunner() {
171
144
  // clear server manager every create time
172
145
  _serverCore.serverManager.clear();
173
-
174
146
  const {
175
147
  options
176
- } = this; // TODO: 确认下这里是不是可以不从 options 中取插件,而是从 config 中取和过滤
177
-
148
+ } = this;
149
+ // TODO: 确认下这里是不是可以不从 options 中取插件,而是从 config 中取和过滤
178
150
  const {
179
- plugins = [],
151
+ internalPlugins = _utils.INTERNAL_SERVER_PLUGINS,
180
152
  pwd,
181
153
  config
182
154
  } = options;
183
- const serverPlugins = this.serverConfig.plugins || []; // server app context for serve plugin
155
+ const serverPlugins = this.serverConfig.plugins || [];
184
156
 
185
- const loadedPlugins = (0, _serverCore.loadPlugins)(plugins.concat(serverPlugins), pwd);
157
+ // server app context for serve plugin
158
+ const loadedPlugins = (0, _serverCore.loadPlugins)(pwd, serverPlugins, {
159
+ internalPlugins
160
+ });
186
161
  (0, _utils2.debug)('plugins', config.plugins, loadedPlugins);
187
162
  loadedPlugins.forEach(p => {
188
163
  _serverCore.serverManager.usePlugin(p);
189
- }); // create runner
164
+ });
190
165
 
166
+ // create runner
191
167
  const hooksRunner = await _serverCore.serverManager.init();
192
168
  return hooksRunner;
193
169
  }
194
-
195
170
  async injectContext(runner, options) {
196
171
  var _config$output2;
197
-
198
172
  const appContext = this.initAppContext();
199
173
  const {
200
174
  config,
201
175
  pwd
202
176
  } = options;
203
-
204
177
  _serverCore.ConfigContext.set(config);
205
-
206
178
  _serverCore.AppContext.set(_objectSpread(_objectSpread({}, appContext), {}, {
207
179
  distDirectory: _path.default.join(pwd, ((_config$output2 = config.output) === null || _config$output2 === void 0 ? void 0 : _config$output2.path) || 'dist')
208
180
  }));
209
181
  }
210
-
211
182
  initAppContext() {
212
183
  var _config$output3;
213
-
214
184
  const {
215
185
  options
216
186
  } = this;
@@ -229,24 +199,18 @@ class Server {
229
199
  plugins: serverPlugins
230
200
  };
231
201
  }
232
-
233
202
  loadServerEnv(options) {
234
203
  const {
235
204
  pwd: appDirectory
236
205
  } = options;
237
206
  const serverEnv = process.env.MODERN_ENV;
238
-
239
207
  const serverEnvPath = _path.default.resolve(appDirectory, `.env.${serverEnv}`);
240
-
241
208
  if (serverEnv && _fs.default.existsSync(serverEnvPath) && !_fs.default.statSync(serverEnvPath).isDirectory()) {
242
209
  const envConfig = _utils.dotenv.config({
243
210
  path: serverEnvPath
244
211
  });
245
-
246
212
  (0, _utils.dotenvExpand)(envConfig);
247
213
  }
248
214
  }
249
-
250
215
  }
251
-
252
216
  exports.Server = Server;
@@ -4,87 +4,35 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createProdServer = void 0;
7
-
8
- var _constants = require("../constants");
9
-
10
7
  var _modernServer = require("./modern-server");
11
-
12
8
  class ModernSSRServer extends _modernServer.ModernServer {
13
9
  prepareAPIHandler(_) {
14
10
  return null;
15
11
  }
16
-
17
- filterRoutes(routes) {
18
- return routes.filter(route => !route.isApi);
19
- }
20
-
21
- async setupBeforeProdMiddleware() {
22
- if (this.runMode === _constants.RUN_MODE.FULL) {
23
- await super.setupBeforeProdMiddleware();
24
- }
25
- }
26
-
27
- async emitRouteHook(_, _input) {
28
- if (this.runMode === _constants.RUN_MODE.FULL) {
29
- await super.emitRouteHook(_, _input);
30
- }
12
+ async handleAPI(context) {
13
+ return this.render404(context);
31
14
  }
32
-
33
15
  }
34
-
35
16
  class ModernAPIServer extends _modernServer.ModernServer {
36
17
  prepareWebHandler(_) {
37
18
  return null;
38
19
  }
39
-
40
20
  filterRoutes(routes) {
41
21
  return routes.filter(route => route.isApi);
42
22
  }
43
-
44
- async setupBeforeProdMiddleware() {
45
- if (this.runMode === _constants.RUN_MODE.FULL) {
46
- await super.setupBeforeProdMiddleware();
47
- }
48
- }
49
-
50
- async emitRouteHook(_, _input) {// empty
51
- }
52
-
53
23
  }
54
-
55
24
  class ModernWebServer extends _modernServer.ModernServer {
56
25
  async warmupSSRBundle() {
57
26
  return null;
58
27
  }
59
-
60
28
  async handleAPI(context) {
61
- const {
62
- proxyTarget
63
- } = this;
64
-
65
- if (proxyTarget !== null && proxyTarget !== void 0 && proxyTarget.api) {
66
- return this.proxy();
67
- } else {
68
- return this.render404(context);
69
- }
29
+ return this.render404(context);
70
30
  }
71
-
72
31
  async handleWeb(context, route) {
73
- const {
74
- proxyTarget
75
- } = this;
76
-
77
- if (route.isSSR && proxyTarget !== null && proxyTarget !== void 0 && proxyTarget.ssr) {
78
- return this.proxy();
79
- } else {
80
- // if no proxyTarget but access web server, degradation to csr
81
- route.isSSR = false;
82
- return super.handleWeb(context, route);
83
- }
32
+ route.isSSR = false;
33
+ return super.handleWeb(context, route);
84
34
  }
85
-
86
35
  }
87
-
88
36
  const createProdServer = options => {
89
37
  if (options.apiOnly) {
90
38
  return new ModernAPIServer(options);
@@ -96,5 +44,4 @@ const createProdServer = options => {
96
44
  return new _modernServer.ModernServer(options);
97
45
  }
98
46
  };
99
-
100
47
  exports.createProdServer = createProdServer;