@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.
- package/CHANGELOG.md +91 -10
- package/dist/js/modern/constants.js +0 -2
- package/dist/js/modern/index.js +0 -1
- package/dist/js/modern/libs/context/context.js +10 -56
- package/dist/js/modern/libs/hook-api/index.js +125 -0
- package/dist/js/modern/libs/hook-api/route.js +13 -36
- package/dist/js/modern/libs/hook-api/template.js +38 -15
- package/dist/js/modern/libs/loadConfig.js +3 -10
- package/dist/js/modern/libs/metrics.js +6 -6
- package/dist/js/modern/libs/proxy.js +7 -12
- package/dist/js/modern/libs/render/cache/__tests__/cache.fun.test.js +0 -1
- package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +0 -9
- package/dist/js/modern/libs/render/cache/index.js +37 -28
- package/dist/js/modern/libs/render/cache/page-caches/lru.js +0 -10
- package/dist/js/modern/libs/render/cache/spr.js +12 -62
- package/dist/js/modern/libs/render/cache/util.js +0 -6
- package/dist/js/modern/libs/render/index.js +6 -11
- package/dist/js/modern/libs/render/measure.js +7 -10
- package/dist/js/modern/libs/render/modern/index.js +2 -13
- package/dist/js/modern/libs/render/reader.js +13 -24
- package/dist/js/modern/libs/render/ssr.js +24 -12
- package/dist/js/modern/libs/render/static.js +6 -9
- package/dist/js/modern/libs/render/type.js +0 -1
- package/dist/js/modern/libs/route/index.js +8 -19
- package/dist/js/modern/libs/route/matcher.js +21 -29
- package/dist/js/modern/libs/route/route.js +0 -13
- package/dist/js/modern/libs/serve-file.js +13 -6
- package/dist/js/modern/server/index.js +27 -43
- package/dist/js/modern/server/modern-server-split.js +5 -55
- package/dist/js/modern/server/modern-server.js +179 -250
- package/dist/js/modern/utils.js +2 -21
- package/dist/js/modern/worker-server.js +34 -0
- package/dist/js/node/constants.js +0 -2
- package/dist/js/node/index.js +0 -10
- package/dist/js/node/libs/context/context.js +10 -65
- package/dist/js/node/libs/context/index.js +0 -3
- package/dist/js/node/libs/hook-api/index.js +136 -0
- package/dist/js/node/libs/hook-api/route.js +13 -38
- package/dist/js/node/libs/hook-api/template.js +40 -18
- package/dist/js/node/libs/loadConfig.js +3 -22
- package/dist/js/node/libs/metrics.js +6 -6
- package/dist/js/node/libs/proxy.js +7 -17
- package/dist/js/node/libs/render/cache/__tests__/cache.fun.test.js +0 -5
- package/dist/js/node/libs/render/cache/__tests__/cache.test.js +0 -12
- package/dist/js/node/libs/render/cache/index.js +37 -33
- package/dist/js/node/libs/render/cache/page-caches/index.js +0 -2
- package/dist/js/node/libs/render/cache/page-caches/lru.js +0 -14
- package/dist/js/node/libs/render/cache/spr.js +12 -71
- package/dist/js/node/libs/render/cache/util.js +0 -18
- package/dist/js/node/libs/render/index.js +6 -26
- package/dist/js/node/libs/render/measure.js +5 -15
- package/dist/js/node/libs/render/modern/index.js +2 -20
- package/dist/js/node/libs/render/reader.js +12 -39
- package/dist/js/node/libs/render/ssr.js +23 -22
- package/dist/js/node/libs/render/static.js +6 -18
- package/dist/js/node/libs/render/type.js +0 -1
- package/dist/js/node/libs/route/index.js +8 -22
- package/dist/js/node/libs/route/matcher.js +18 -34
- package/dist/js/node/libs/route/route.js +0 -15
- package/dist/js/node/libs/serve-file.js +15 -12
- package/dist/js/node/server/index.js +26 -62
- package/dist/js/node/server/modern-server-split.js +5 -58
- package/dist/js/node/server/modern-server.js +178 -280
- package/dist/js/node/utils.js +3 -46
- package/dist/js/node/worker-server.js +41 -0
- package/dist/js/treeshaking/constants.js +28 -0
- package/dist/js/treeshaking/index.js +13 -0
- package/dist/js/treeshaking/libs/context/context.js +243 -0
- package/dist/js/treeshaking/libs/context/index.js +5 -0
- package/dist/js/treeshaking/libs/hook-api/index.js +157 -0
- package/dist/js/treeshaking/libs/hook-api/route.js +33 -0
- package/dist/js/treeshaking/libs/hook-api/template.js +91 -0
- package/dist/js/treeshaking/libs/loadConfig.js +39 -0
- package/dist/js/treeshaking/libs/metrics.js +12 -0
- package/dist/js/treeshaking/libs/proxy.js +80 -0
- package/dist/js/treeshaking/libs/render/cache/__tests__/cache.fun.test.js +124 -0
- package/dist/js/treeshaking/libs/render/cache/__tests__/cache.test.js +464 -0
- package/dist/js/treeshaking/libs/render/cache/__tests__/cacheable.js +53 -0
- package/dist/js/treeshaking/libs/render/cache/__tests__/error-configuration.js +35 -0
- package/dist/js/treeshaking/libs/render/cache/__tests__/matched-cache.js +121 -0
- package/dist/js/treeshaking/libs/render/cache/index.js +184 -0
- package/dist/js/treeshaking/libs/render/cache/page-caches/index.js +30 -0
- package/dist/js/treeshaking/libs/render/cache/page-caches/lru.js +46 -0
- package/dist/js/treeshaking/libs/render/cache/spr.js +362 -0
- package/dist/js/treeshaking/libs/render/cache/type.js +1 -0
- package/dist/js/treeshaking/libs/render/cache/util.js +101 -0
- package/dist/js/treeshaking/libs/render/index.js +100 -0
- package/dist/js/treeshaking/libs/render/measure.js +61 -0
- package/dist/js/treeshaking/libs/render/modern/browser-list.js +7 -0
- package/dist/js/treeshaking/libs/render/modern/index.js +39 -0
- package/dist/js/treeshaking/libs/render/reader.js +191 -0
- package/dist/js/treeshaking/libs/render/ssr.js +98 -0
- package/dist/js/treeshaking/libs/render/static.js +84 -0
- package/dist/js/treeshaking/libs/render/type.js +6 -0
- package/dist/js/treeshaking/libs/route/index.js +94 -0
- package/dist/js/treeshaking/libs/route/matcher.js +113 -0
- package/dist/js/treeshaking/libs/route/route.js +26 -0
- package/dist/js/treeshaking/libs/serve-file.js +75 -0
- package/dist/js/treeshaking/server/index.js +343 -0
- package/dist/js/treeshaking/server/modern-server-split.js +152 -0
- package/dist/js/treeshaking/server/modern-server.js +945 -0
- package/dist/js/treeshaking/type.js +1 -0
- package/dist/js/treeshaking/utils.js +87 -0
- package/dist/js/treeshaking/worker-server.js +56 -0
- package/dist/types/index.d.ts +0 -2
- package/dist/types/libs/context/context.d.ts +0 -3
- package/dist/types/libs/hook-api/index.d.ts +5 -0
- package/dist/types/libs/hook-api/route.d.ts +9 -14
- package/dist/types/libs/hook-api/template.d.ts +19 -9
- package/dist/types/libs/loadConfig.d.ts +0 -1
- package/dist/types/libs/render/cache/index.d.ts +4 -4
- package/dist/types/libs/render/cache/spr.d.ts +0 -2
- package/dist/types/libs/render/type.d.ts +3 -1
- package/dist/types/libs/serve-file.d.ts +2 -1
- package/dist/types/server/index.d.ts +2 -3
- package/dist/types/server/modern-server.d.ts +11 -11
- package/dist/types/type.d.ts +8 -10
- package/dist/types/utils.d.ts +0 -1
- package/dist/types/worker-server.d.ts +16 -0
- 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);
|
|
48
|
+
await this.injectContext(this.runner, options);
|
|
59
49
|
|
|
60
|
-
|
|
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);
|
|
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);
|
|
59
|
+
await this.runPrepareHook(this.runner);
|
|
67
60
|
|
|
68
|
-
|
|
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;
|
|
155
|
-
|
|
141
|
+
} = this;
|
|
142
|
+
// TODO: 确认下这里是不是可以不从 options 中取插件,而是从 config 中取和过滤
|
|
156
143
|
const {
|
|
157
|
-
|
|
144
|
+
internalPlugins = INTERNAL_SERVER_PLUGINS,
|
|
158
145
|
pwd,
|
|
159
146
|
config
|
|
160
147
|
} = options;
|
|
161
|
-
const serverPlugins = this.serverConfig.plugins || [];
|
|
148
|
+
const serverPlugins = this.serverConfig.plugins || [];
|
|
162
149
|
|
|
163
|
-
|
|
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
|
-
});
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
66
|
-
|
|
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);
|