@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.
- package/CHANGELOG.md +55 -0
- 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 +0 -31
- package/dist/js/modern/libs/hook-api/route.js +0 -8
- package/dist/js/modern/libs/hook-api/template.js +0 -16
- 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 +8 -16
- 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 +1 -11
- 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 +5 -6
- 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 +5 -6
- package/dist/js/modern/server/index.js +19 -41
- package/dist/js/modern/server/modern-server-split.js +0 -11
- package/dist/js/modern/server/modern-server.js +83 -164
- 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 +0 -42
- package/dist/js/node/libs/hook-api/route.js +0 -10
- package/dist/js/node/libs/hook-api/template.js +0 -22
- 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 +8 -22
- 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 +0 -17
- 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 +4 -16
- 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 +5 -13
- package/dist/js/node/server/index.js +19 -61
- package/dist/js/node/server/modern-server-split.js +0 -13
- package/dist/js/node/server/modern-server.js +83 -193
- 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/loadConfig.d.ts +0 -1
- package/dist/types/libs/render/cache/index.d.ts +0 -2
- package/dist/types/libs/render/cache/spr.d.ts +0 -2
- package/dist/types/server/index.d.ts +0 -3
- package/dist/types/utils.d.ts +0 -1
- package/dist/types/worker-server.d.ts +16 -0
- 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);
|
|
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,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;
|
|
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 || [];
|
|
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
|
-
});
|
|
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);
|