@modern-js/prod-server 2.0.0-beta.2 → 2.0.0-beta.4
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 +132 -0
- package/dist/js/modern/constants.js +32 -25
- package/dist/js/modern/index.js +11 -6
- package/dist/js/modern/libs/context/context.js +52 -84
- package/dist/js/modern/libs/context/index.js +5 -2
- package/dist/js/modern/libs/hook-api/index.js +42 -35
- package/dist/js/modern/libs/hook-api/route.js +6 -7
- package/dist/js/modern/libs/hook-api/template.js +20 -34
- package/dist/js/modern/libs/loadConfig.js +45 -24
- package/dist/js/modern/libs/metrics.js +3 -4
- package/dist/js/modern/libs/proxy.js +68 -37
- package/dist/js/modern/libs/render/cache/__tests__/cache.fun.test.js +112 -67
- package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +246 -216
- package/dist/js/modern/libs/render/cache/__tests__/cacheable.js +43 -49
- package/dist/js/modern/libs/render/cache/__tests__/error-configuration.js +36 -34
- package/dist/js/modern/libs/render/cache/__tests__/matched-cache.js +83 -113
- package/dist/js/modern/libs/render/cache/index.js +88 -54
- package/dist/js/modern/libs/render/cache/page-caches/index.js +31 -8
- package/dist/js/modern/libs/render/cache/page-caches/lru.js +6 -6
- package/dist/js/modern/libs/render/cache/spr.js +133 -117
- package/dist/js/modern/libs/render/cache/type.js +0 -1
- package/dist/js/modern/libs/render/cache/util.js +71 -39
- package/dist/js/modern/libs/render/index.js +76 -56
- package/dist/js/modern/libs/render/measure.js +38 -27
- package/dist/js/modern/libs/render/reader.js +65 -62
- package/dist/js/modern/libs/render/ssr.js +50 -32
- package/dist/js/modern/libs/render/static.js +50 -33
- package/dist/js/modern/libs/render/type.js +9 -6
- package/dist/js/modern/libs/route/index.js +8 -15
- package/dist/js/modern/libs/route/matcher.js +20 -34
- package/dist/js/modern/libs/route/route.js +9 -18
- package/dist/js/modern/libs/serve-file.js +33 -20
- package/dist/js/modern/server/index.js +144 -145
- package/dist/js/modern/server/modern-server-split.js +46 -12
- package/dist/js/modern/server/modern-server.js +377 -419
- package/dist/js/modern/type.js +0 -1
- package/dist/js/modern/utils.js +62 -43
- package/dist/js/modern/worker-server.js +34 -14
- package/dist/js/node/constants.js +45 -30
- package/dist/js/node/index.js +31 -57
- package/dist/js/node/libs/context/context.js +79 -94
- package/dist/js/node/libs/context/index.js +23 -13
- package/dist/js/node/libs/hook-api/index.js +69 -48
- package/dist/js/node/libs/hook-api/route.js +22 -11
- package/dist/js/node/libs/hook-api/template.js +36 -39
- package/dist/js/node/libs/loadConfig.js +69 -35
- package/dist/js/node/libs/metrics.js +21 -9
- package/dist/js/node/libs/proxy.js +86 -44
- package/dist/js/node/libs/render/cache/__tests__/cache.fun.test.js +132 -70
- package/dist/js/node/libs/render/cache/__tests__/cache.test.js +268 -218
- package/dist/js/node/libs/render/cache/__tests__/cacheable.js +61 -55
- package/dist/js/node/libs/render/cache/__tests__/error-configuration.js +54 -40
- package/dist/js/node/libs/render/cache/__tests__/matched-cache.js +101 -119
- package/dist/js/node/libs/render/cache/index.js +110 -64
- package/dist/js/node/libs/render/cache/page-caches/index.js +50 -14
- package/dist/js/node/libs/render/cache/page-caches/lru.js +29 -12
- package/dist/js/node/libs/render/cache/spr.js +156 -129
- package/dist/js/node/libs/render/cache/type.js +0 -5
- package/dist/js/node/libs/render/cache/util.js +88 -45
- package/dist/js/node/libs/render/index.js +102 -67
- package/dist/js/node/libs/render/measure.js +55 -31
- package/dist/js/node/libs/render/reader.js +87 -70
- package/dist/js/node/libs/render/ssr.js +76 -47
- package/dist/js/node/libs/render/static.js +75 -40
- package/dist/js/node/libs/render/type.js +27 -12
- package/dist/js/node/libs/route/index.js +26 -26
- package/dist/js/node/libs/route/matcher.js +36 -41
- package/dist/js/node/libs/route/route.js +25 -22
- package/dist/js/node/libs/serve-file.js +61 -32
- package/dist/js/node/server/index.js +160 -160
- package/dist/js/node/server/modern-server-split.js +68 -22
- package/dist/js/node/server/modern-server.js +395 -443
- package/dist/js/node/type.js +0 -3
- package/dist/js/node/utils.js +74 -52
- package/dist/js/node/worker-server.js +53 -21
- package/dist/js/treeshaking/constants.js +26 -25
- package/dist/js/treeshaking/index.js +10 -10
- package/dist/js/treeshaking/libs/context/context.js +268 -237
- package/dist/js/treeshaking/libs/context/index.js +3 -3
- package/dist/js/treeshaking/libs/hook-api/index.js +265 -143
- package/dist/js/treeshaking/libs/hook-api/route.js +65 -30
- package/dist/js/treeshaking/libs/hook-api/template.js +121 -85
- package/dist/js/treeshaking/libs/loadConfig.js +80 -37
- package/dist/js/treeshaking/libs/metrics.js +4 -10
- package/dist/js/treeshaking/libs/proxy.js +240 -76
- package/dist/js/treeshaking/libs/render/cache/__tests__/cache.fun.test.js +288 -121
- package/dist/js/treeshaking/libs/render/cache/__tests__/cache.test.js +772 -455
- package/dist/js/treeshaking/libs/render/cache/__tests__/cacheable.js +65 -51
- package/dist/js/treeshaking/libs/render/cache/__tests__/error-configuration.js +45 -35
- package/dist/js/treeshaking/libs/render/cache/__tests__/matched-cache.js +144 -118
- package/dist/js/treeshaking/libs/render/cache/index.js +337 -175
- package/dist/js/treeshaking/libs/render/cache/page-caches/index.js +151 -27
- package/dist/js/treeshaking/libs/render/cache/page-caches/lru.js +80 -42
- package/dist/js/treeshaking/libs/render/cache/spr.js +470 -340
- package/dist/js/treeshaking/libs/render/cache/type.js +1 -1
- package/dist/js/treeshaking/libs/render/cache/util.js +271 -92
- package/dist/js/treeshaking/libs/render/index.js +228 -95
- package/dist/js/treeshaking/libs/render/measure.js +142 -57
- package/dist/js/treeshaking/libs/render/reader.js +325 -177
- package/dist/js/treeshaking/libs/render/ssr.js +220 -95
- package/dist/js/treeshaking/libs/render/static.js +210 -78
- package/dist/js/treeshaking/libs/render/type.js +7 -6
- package/dist/js/treeshaking/libs/route/index.js +125 -89
- package/dist/js/treeshaking/libs/route/matcher.js +132 -107
- package/dist/js/treeshaking/libs/route/route.js +40 -26
- package/dist/js/treeshaking/libs/serve-file.js +177 -68
- package/dist/js/treeshaking/server/index.js +468 -327
- package/dist/js/treeshaking/server/modern-server-split.js +352 -144
- package/dist/js/treeshaking/server/modern-server.js +1046 -911
- package/dist/js/treeshaking/type.js +1 -1
- package/dist/js/treeshaking/utils.js +138 -81
- package/dist/js/treeshaking/worker-server.js +176 -55
- package/dist/types/index.d.ts +2 -0
- package/dist/types/libs/context/context.d.ts +4 -1
- package/dist/types/libs/loadConfig.d.ts +1 -0
- package/dist/types/libs/render/cache/index.d.ts +2 -0
- package/dist/types/libs/render/cache/spr.d.ts +2 -0
- package/dist/types/libs/route/route.d.ts +0 -1
- package/dist/types/server/index.d.ts +3 -0
- package/dist/types/utils.d.ts +1 -1
- package/dist/types/worker-server.d.ts +1 -2
- package/package.json +7 -14
- package/dist/js/modern/libs/render/modern/browser-list.js +0 -7
- package/dist/js/modern/libs/render/modern/index.js +0 -37
- package/dist/js/node/libs/render/modern/browser-list.js +0 -14
- package/dist/js/node/libs/render/modern/index.js +0 -46
- package/dist/js/treeshaking/libs/render/modern/browser-list.js +0 -7
- package/dist/js/treeshaking/libs/render/modern/index.js +0 -39
- package/dist/types/libs/render/modern/browser-list.d.ts +0 -1
- package/dist/types/libs/render/modern/index.d.ts +0 -3
|
@@ -1,25 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
export class ModernRoute {
|
|
1
|
+
class ModernRoute {
|
|
3
2
|
constructor(routeSpec) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
_defineProperty(this, "urlPath", void 0);
|
|
7
|
-
_defineProperty(this, "entryPath", void 0);
|
|
8
|
-
_defineProperty(this, "bundle", void 0);
|
|
9
|
-
_defineProperty(this, "isApi", void 0);
|
|
10
|
-
_defineProperty(this, "isSSR", void 0);
|
|
11
|
-
_defineProperty(this, "isSPA", void 0);
|
|
12
|
-
_defineProperty(this, "enableModernMode", void 0);
|
|
13
|
-
_defineProperty(this, "params", {});
|
|
14
|
-
_defineProperty(this, "responseHeaders", void 0);
|
|
15
|
-
this.entryName = routeSpec.entryName || '';
|
|
3
|
+
this.params = {};
|
|
4
|
+
this.entryName = routeSpec.entryName || "";
|
|
16
5
|
this.urlPath = routeSpec.urlPath;
|
|
17
|
-
this.entryPath = routeSpec.entryPath ||
|
|
6
|
+
this.entryPath = routeSpec.entryPath || "";
|
|
18
7
|
this.isSSR = routeSpec.isSSR || false;
|
|
19
8
|
this.isSPA = routeSpec.isSPA || false;
|
|
20
9
|
this.isApi = routeSpec.isApi || false;
|
|
21
|
-
this.bundle = routeSpec.bundle ||
|
|
22
|
-
this.enableModernMode = (_routeSpec$enableMode = routeSpec.enableModernMode) !== null && _routeSpec$enableMode !== void 0 ? _routeSpec$enableMode : false;
|
|
10
|
+
this.bundle = routeSpec.bundle || "";
|
|
23
11
|
this.responseHeaders = routeSpec.responseHeaders;
|
|
24
12
|
}
|
|
25
|
-
}
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
ModernRoute
|
|
16
|
+
};
|
|
@@ -1,7 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
var __async = (__this, __arguments, generator) => {
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
var fulfilled = (value) => {
|
|
4
|
+
try {
|
|
5
|
+
step(generator.next(value));
|
|
6
|
+
} catch (e) {
|
|
7
|
+
reject(e);
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
var rejected = (value) => {
|
|
11
|
+
try {
|
|
12
|
+
step(generator.throw(value));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
reject(e);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
import serve from "serve-static";
|
|
22
|
+
import { isString, isRegExp } from "@modern-js/utils";
|
|
5
23
|
import { useLocalPrefix } from "../utils";
|
|
6
24
|
const removedPrefix = (req, prefix) => {
|
|
7
25
|
if (useLocalPrefix(prefix)) {
|
|
@@ -11,30 +29,21 @@ const removedPrefix = (req, prefix) => {
|
|
|
11
29
|
};
|
|
12
30
|
} else {
|
|
13
31
|
return () => {
|
|
14
|
-
// emptyy
|
|
15
32
|
};
|
|
16
33
|
}
|
|
17
34
|
};
|
|
18
|
-
|
|
19
|
-
if (context.url ===
|
|
35
|
+
const faviconFallbackHandler = (context, next) => {
|
|
36
|
+
if (context.url === "/favicon.ico") {
|
|
20
37
|
context.res.statusCode = 204;
|
|
21
38
|
context.res.end();
|
|
22
39
|
} else {
|
|
23
40
|
next();
|
|
24
41
|
}
|
|
25
42
|
};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const {
|
|
30
|
-
url: requestUrl,
|
|
31
|
-
req,
|
|
32
|
-
res
|
|
33
|
-
} = context;
|
|
34
|
-
const {
|
|
35
|
-
assetPrefix = '/'
|
|
36
|
-
} = output;
|
|
37
|
-
const hitRule = rules.find(item => {
|
|
43
|
+
const createStaticFileHandler = (rules, output = {}) => (context, next) => __async(void 0, null, function* () {
|
|
44
|
+
const { url: requestUrl, req, res } = context;
|
|
45
|
+
const { assetPrefix = "/" } = output;
|
|
46
|
+
const hitRule = rules.find((item) => {
|
|
38
47
|
if (isString(item.path) && requestUrl.startsWith(item.path)) {
|
|
39
48
|
return true;
|
|
40
49
|
} else if (isRegExp(item.path) && item.path.test(requestUrl)) {
|
|
@@ -51,4 +60,8 @@ async (context, next) => {
|
|
|
51
60
|
} else {
|
|
52
61
|
return next();
|
|
53
62
|
}
|
|
54
|
-
};
|
|
63
|
+
});
|
|
64
|
+
export {
|
|
65
|
+
createStaticFileHandler,
|
|
66
|
+
faviconFallbackHandler
|
|
67
|
+
};
|
|
@@ -1,122 +1,138 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
var __async = (__this, __arguments, generator) => {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
var fulfilled = (value) => {
|
|
23
|
+
try {
|
|
24
|
+
step(generator.next(value));
|
|
25
|
+
} catch (e) {
|
|
26
|
+
reject(e);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
var rejected = (value) => {
|
|
30
|
+
try {
|
|
31
|
+
step(generator.throw(value));
|
|
32
|
+
} catch (e) {
|
|
33
|
+
reject(e);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
37
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
import path from "path";
|
|
41
|
+
import fs from "fs";
|
|
42
|
+
import {
|
|
43
|
+
Logger,
|
|
44
|
+
SHARED_DIR,
|
|
45
|
+
OUTPUT_CONFIG_FILE,
|
|
46
|
+
dotenv,
|
|
47
|
+
dotenvExpand,
|
|
48
|
+
INTERNAL_SERVER_PLUGINS
|
|
49
|
+
} from "@modern-js/utils";
|
|
50
|
+
import {
|
|
51
|
+
serverManager,
|
|
52
|
+
AppContext,
|
|
53
|
+
ConfigContext,
|
|
54
|
+
loadPlugins
|
|
55
|
+
} from "@modern-js/server-core";
|
|
8
56
|
import { metrics as defaultMetrics } from "../libs/metrics";
|
|
9
|
-
import {
|
|
57
|
+
import {
|
|
58
|
+
loadConfig,
|
|
59
|
+
getServerConfigPath,
|
|
60
|
+
requireConfig
|
|
61
|
+
} from "../libs/loadConfig";
|
|
10
62
|
import { debug } from "../utils";
|
|
11
63
|
import { createProdServer } from "./modern-server-split";
|
|
12
|
-
|
|
64
|
+
class Server {
|
|
13
65
|
constructor(options) {
|
|
14
|
-
|
|
15
|
-
_defineProperty(this, "serverImpl", createProdServer);
|
|
16
|
-
_defineProperty(this, "server", void 0);
|
|
17
|
-
_defineProperty(this, "app", void 0);
|
|
18
|
-
_defineProperty(this, "runner", void 0);
|
|
19
|
-
_defineProperty(this, "serverConfig", void 0);
|
|
66
|
+
this.serverImpl = createProdServer;
|
|
20
67
|
options.logger = options.logger || new Logger({
|
|
21
|
-
level:
|
|
68
|
+
level: "warn"
|
|
22
69
|
});
|
|
23
70
|
options.metrics = options.metrics || defaultMetrics;
|
|
24
71
|
this.options = options;
|
|
25
72
|
this.serverConfig = {};
|
|
26
73
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
async init() {
|
|
43
|
-
const {
|
|
44
|
-
options
|
|
45
|
-
} = this;
|
|
46
|
-
this.loadServerEnv(options);
|
|
47
|
-
this.initServerConfig(options);
|
|
48
|
-
await this.injectContext(this.runner, options);
|
|
49
|
-
|
|
50
|
-
// initialize server runner
|
|
51
|
-
this.runner = await this.createHookRunner();
|
|
52
|
-
|
|
53
|
-
// init config and execute config hook
|
|
54
|
-
await this.initConfig(this.runner, options);
|
|
55
|
-
await this.injectContext(this.runner, options);
|
|
56
|
-
|
|
57
|
-
// initialize server
|
|
58
|
-
this.server = this.serverImpl(options);
|
|
59
|
-
await this.runPrepareHook(this.runner);
|
|
60
|
-
|
|
61
|
-
// create http-server
|
|
62
|
-
this.app = await this.server.createHTTPServer(this.getRequestHandler());
|
|
63
|
-
|
|
64
|
-
// runner can only be used after server init
|
|
65
|
-
await this.server.onInit(this.runner, this.app);
|
|
66
|
-
return this;
|
|
74
|
+
init() {
|
|
75
|
+
return __async(this, null, function* () {
|
|
76
|
+
const { options } = this;
|
|
77
|
+
this.loadServerEnv(options);
|
|
78
|
+
this.initServerConfig(options);
|
|
79
|
+
yield this.injectContext(this.runner, options);
|
|
80
|
+
this.runner = yield this.createHookRunner();
|
|
81
|
+
yield this.initConfig(this.runner, options);
|
|
82
|
+
yield this.injectContext(this.runner, options);
|
|
83
|
+
this.server = this.serverImpl(options);
|
|
84
|
+
yield this.runPrepareHook(this.runner);
|
|
85
|
+
this.app = yield this.server.createHTTPServer(this.getRequestHandler());
|
|
86
|
+
yield this.server.onInit(this.runner, this.app);
|
|
87
|
+
return this;
|
|
88
|
+
});
|
|
67
89
|
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Execute config hooks
|
|
71
|
-
* @param runner
|
|
72
|
-
* @param options
|
|
73
|
-
*/
|
|
74
90
|
runConfigHook(runner, serverConfig) {
|
|
75
91
|
const newServerConfig = runner.config(serverConfig || {});
|
|
76
92
|
return newServerConfig;
|
|
77
93
|
}
|
|
78
|
-
|
|
79
|
-
|
|
94
|
+
runPrepareHook(runner) {
|
|
95
|
+
return __async(this, null, function* () {
|
|
96
|
+
runner.prepare();
|
|
97
|
+
});
|
|
80
98
|
}
|
|
81
99
|
initServerConfig(options) {
|
|
82
|
-
const {
|
|
83
|
-
|
|
100
|
+
const { pwd, serverConfigFile } = options;
|
|
101
|
+
const distDirectory = path.join(pwd, options.config.output.path || "dist");
|
|
102
|
+
const serverConfigPath = getServerConfigPath(
|
|
103
|
+
distDirectory,
|
|
84
104
|
serverConfigFile
|
|
85
|
-
|
|
86
|
-
const distDirectory = path.join(pwd, options.config.output.path || 'dist');
|
|
87
|
-
const serverConfigPath = getServerConfigPath(distDirectory, serverConfigFile);
|
|
105
|
+
);
|
|
88
106
|
const serverConfig = requireConfig(serverConfigPath);
|
|
89
107
|
this.serverConfig = serverConfig;
|
|
90
108
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
options.config = loadConfig({
|
|
107
|
-
cliConfig: config,
|
|
108
|
-
serverConfig: finalServerConfig,
|
|
109
|
-
resolvedConfigPath
|
|
109
|
+
initConfig(runner, options) {
|
|
110
|
+
return __async(this, null, function* () {
|
|
111
|
+
const { pwd, config } = options;
|
|
112
|
+
const { serverConfig } = this;
|
|
113
|
+
const finalServerConfig = this.runConfigHook(runner, serverConfig);
|
|
114
|
+
const resolvedConfigPath = path.join(
|
|
115
|
+
pwd,
|
|
116
|
+
config.output.path || "dist",
|
|
117
|
+
OUTPUT_CONFIG_FILE
|
|
118
|
+
);
|
|
119
|
+
options.config = loadConfig({
|
|
120
|
+
cliConfig: config,
|
|
121
|
+
serverConfig: finalServerConfig,
|
|
122
|
+
resolvedConfigPath
|
|
123
|
+
});
|
|
110
124
|
});
|
|
111
125
|
}
|
|
112
|
-
|
|
113
|
-
this
|
|
126
|
+
close() {
|
|
127
|
+
return __async(this, null, function* () {
|
|
128
|
+
this.app.close();
|
|
129
|
+
});
|
|
114
130
|
}
|
|
115
131
|
listen(options, listener) {
|
|
116
132
|
const callback = () => {
|
|
117
|
-
listener
|
|
133
|
+
listener == null ? void 0 : listener();
|
|
118
134
|
};
|
|
119
|
-
if (typeof options ===
|
|
135
|
+
if (typeof options === "object") {
|
|
120
136
|
this.app.listen(options, callback);
|
|
121
137
|
} else {
|
|
122
138
|
this.app.listen(process.env.PORT || options || 8080, callback);
|
|
@@ -128,76 +144,59 @@ export class Server {
|
|
|
128
144
|
return requestHandler(req, res, next);
|
|
129
145
|
};
|
|
130
146
|
}
|
|
131
|
-
|
|
132
|
-
return this
|
|
133
|
-
|
|
134
|
-
async createHookRunner() {
|
|
135
|
-
// clear server manager every create time
|
|
136
|
-
serverManager.clear();
|
|
137
|
-
const {
|
|
138
|
-
options
|
|
139
|
-
} = this;
|
|
140
|
-
// TODO: 确认下这里是不是可以不从 options 中取插件,而是从 config 中取和过滤
|
|
141
|
-
const {
|
|
142
|
-
internalPlugins = INTERNAL_SERVER_PLUGINS,
|
|
143
|
-
pwd
|
|
144
|
-
} = options;
|
|
145
|
-
const serverPlugins = this.serverConfig.plugins || [];
|
|
146
|
-
|
|
147
|
-
// server app context for serve plugin
|
|
148
|
-
const loadedPlugins = loadPlugins(pwd, serverPlugins, {
|
|
149
|
-
internalPlugins
|
|
147
|
+
render(req, res, url) {
|
|
148
|
+
return __async(this, null, function* () {
|
|
149
|
+
return this.server.render(req, res, url);
|
|
150
150
|
});
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
151
|
+
}
|
|
152
|
+
createHookRunner() {
|
|
153
|
+
return __async(this, null, function* () {
|
|
154
|
+
serverManager.clear();
|
|
155
|
+
const { options } = this;
|
|
156
|
+
const { internalPlugins = INTERNAL_SERVER_PLUGINS, pwd } = options;
|
|
157
|
+
const serverPlugins = this.serverConfig.plugins || [];
|
|
158
|
+
const loadedPlugins = loadPlugins(pwd, serverPlugins, { internalPlugins });
|
|
159
|
+
debug("plugins", loadedPlugins);
|
|
160
|
+
loadedPlugins.forEach((p) => {
|
|
161
|
+
serverManager.usePlugin(p);
|
|
162
|
+
});
|
|
163
|
+
const hooksRunner = yield serverManager.init();
|
|
164
|
+
return hooksRunner;
|
|
154
165
|
});
|
|
155
|
-
|
|
156
|
-
// create runner
|
|
157
|
-
const hooksRunner = await serverManager.init();
|
|
158
|
-
return hooksRunner;
|
|
159
166
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
config,
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
}));
|
|
167
|
+
injectContext(runner, options) {
|
|
168
|
+
return __async(this, null, function* () {
|
|
169
|
+
const appContext = this.initAppContext();
|
|
170
|
+
const { config, pwd } = options;
|
|
171
|
+
ConfigContext.set(config);
|
|
172
|
+
AppContext.set(__spreadProps(__spreadValues({}, appContext), {
|
|
173
|
+
distDirectory: path.join(pwd, config.output.path || "dist")
|
|
174
|
+
}));
|
|
175
|
+
});
|
|
170
176
|
}
|
|
171
177
|
initAppContext() {
|
|
172
|
-
const {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
const {
|
|
176
|
-
pwd: appDirectory,
|
|
177
|
-
plugins = [],
|
|
178
|
-
config
|
|
179
|
-
} = options;
|
|
180
|
-
const serverPlugins = plugins.map(p => ({
|
|
178
|
+
const { options } = this;
|
|
179
|
+
const { pwd: appDirectory, plugins = [], config } = options;
|
|
180
|
+
const serverPlugins = plugins.map((p) => ({
|
|
181
181
|
server: p
|
|
182
182
|
}));
|
|
183
183
|
return {
|
|
184
184
|
appDirectory,
|
|
185
|
-
distDirectory: path.join(appDirectory, config.output.path ||
|
|
185
|
+
distDirectory: path.join(appDirectory, config.output.path || "dist"),
|
|
186
186
|
sharedDirectory: path.resolve(appDirectory, SHARED_DIR),
|
|
187
187
|
plugins: serverPlugins
|
|
188
188
|
};
|
|
189
189
|
}
|
|
190
190
|
loadServerEnv(options) {
|
|
191
|
-
const {
|
|
192
|
-
pwd: appDirectory
|
|
193
|
-
} = options;
|
|
191
|
+
const { pwd: appDirectory } = options;
|
|
194
192
|
const serverEnv = process.env.MODERN_ENV;
|
|
195
193
|
const serverEnvPath = path.resolve(appDirectory, `.env.${serverEnv}`);
|
|
196
194
|
if (serverEnv && fs.existsSync(serverEnvPath) && !fs.statSync(serverEnvPath).isDirectory()) {
|
|
197
|
-
const envConfig = dotenv.config({
|
|
198
|
-
path: serverEnvPath
|
|
199
|
-
});
|
|
195
|
+
const envConfig = dotenv.config({ path: serverEnvPath });
|
|
200
196
|
dotenvExpand(envConfig);
|
|
201
197
|
}
|
|
202
198
|
}
|
|
203
|
-
}
|
|
199
|
+
}
|
|
200
|
+
export {
|
|
201
|
+
Server
|
|
202
|
+
};
|
|
@@ -1,10 +1,35 @@
|
|
|
1
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
2
|
+
var __reflectGet = Reflect.get;
|
|
3
|
+
var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
|
|
4
|
+
var __async = (__this, __arguments, generator) => {
|
|
5
|
+
return new Promise((resolve, reject) => {
|
|
6
|
+
var fulfilled = (value) => {
|
|
7
|
+
try {
|
|
8
|
+
step(generator.next(value));
|
|
9
|
+
} catch (e) {
|
|
10
|
+
reject(e);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
var rejected = (value) => {
|
|
14
|
+
try {
|
|
15
|
+
step(generator.throw(value));
|
|
16
|
+
} catch (e) {
|
|
17
|
+
reject(e);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
21
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
22
|
+
});
|
|
23
|
+
};
|
|
1
24
|
import { ModernServer } from "./modern-server";
|
|
2
25
|
class ModernSSRServer extends ModernServer {
|
|
3
26
|
prepareAPIHandler(_) {
|
|
4
27
|
return null;
|
|
5
28
|
}
|
|
6
|
-
|
|
7
|
-
return this
|
|
29
|
+
handleAPI(context) {
|
|
30
|
+
return __async(this, null, function* () {
|
|
31
|
+
return this.render404(context);
|
|
32
|
+
});
|
|
8
33
|
}
|
|
9
34
|
}
|
|
10
35
|
class ModernAPIServer extends ModernServer {
|
|
@@ -12,22 +37,28 @@ class ModernAPIServer extends ModernServer {
|
|
|
12
37
|
return null;
|
|
13
38
|
}
|
|
14
39
|
filterRoutes(routes) {
|
|
15
|
-
return routes.filter(route => route.isApi);
|
|
40
|
+
return routes.filter((route) => route.isApi);
|
|
16
41
|
}
|
|
17
42
|
}
|
|
18
43
|
class ModernWebServer extends ModernServer {
|
|
19
|
-
|
|
20
|
-
return null
|
|
44
|
+
warmupSSRBundle() {
|
|
45
|
+
return __async(this, null, function* () {
|
|
46
|
+
return null;
|
|
47
|
+
});
|
|
21
48
|
}
|
|
22
|
-
|
|
23
|
-
return this
|
|
49
|
+
handleAPI(context) {
|
|
50
|
+
return __async(this, null, function* () {
|
|
51
|
+
return this.render404(context);
|
|
52
|
+
});
|
|
24
53
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
54
|
+
handleWeb(context, route) {
|
|
55
|
+
return __async(this, null, function* () {
|
|
56
|
+
route.isSSR = false;
|
|
57
|
+
return __superGet(ModernWebServer.prototype, this, "handleWeb").call(this, context, route);
|
|
58
|
+
});
|
|
28
59
|
}
|
|
29
60
|
}
|
|
30
|
-
|
|
61
|
+
const createProdServer = (options) => {
|
|
31
62
|
if (options.apiOnly) {
|
|
32
63
|
return new ModernAPIServer(options);
|
|
33
64
|
} else if (options.ssrOnly) {
|
|
@@ -37,4 +68,7 @@ export const createProdServer = options => {
|
|
|
37
68
|
} else {
|
|
38
69
|
return new ModernServer(options);
|
|
39
70
|
}
|
|
40
|
-
};
|
|
71
|
+
};
|
|
72
|
+
export {
|
|
73
|
+
createProdServer
|
|
74
|
+
};
|