@modern-js/prod-server 2.0.0-beta.3 → 2.0.0-beta.6
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 +139 -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 +44 -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 +150 -145
- package/dist/js/modern/server/modern-server-split.js +46 -12
- package/dist/js/modern/server/modern-server.js +384 -422
- 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 +53 -30
- package/dist/js/node/index.js +37 -57
- package/dist/js/node/libs/context/context.js +83 -94
- package/dist/js/node/libs/context/index.js +28 -13
- package/dist/js/node/libs/hook-api/index.js +76 -48
- package/dist/js/node/libs/hook-api/route.js +26 -11
- package/dist/js/node/libs/hook-api/template.js +41 -39
- package/dist/js/node/libs/loadConfig.js +73 -35
- package/dist/js/node/libs/metrics.js +25 -9
- package/dist/js/node/libs/proxy.js +89 -44
- package/dist/js/node/libs/render/cache/__tests__/cache.fun.test.js +99 -56
- package/dist/js/node/libs/render/cache/__tests__/cache.test.js +147 -128
- package/dist/js/node/libs/render/cache/__tests__/cacheable.js +65 -55
- package/dist/js/node/libs/render/cache/__tests__/error-configuration.js +58 -40
- package/dist/js/node/libs/render/cache/__tests__/matched-cache.js +105 -119
- package/dist/js/node/libs/render/cache/index.js +110 -64
- package/dist/js/node/libs/render/cache/page-caches/index.js +54 -14
- package/dist/js/node/libs/render/cache/page-caches/lru.js +33 -12
- package/dist/js/node/libs/render/cache/spr.js +161 -129
- package/dist/js/node/libs/render/cache/type.js +15 -5
- package/dist/js/node/libs/render/cache/util.js +99 -45
- package/dist/js/node/libs/render/index.js +106 -67
- package/dist/js/node/libs/render/measure.js +58 -31
- package/dist/js/node/libs/render/reader.js +95 -70
- package/dist/js/node/libs/render/ssr.js +80 -47
- package/dist/js/node/libs/render/static.js +79 -40
- package/dist/js/node/libs/render/type.js +31 -12
- package/dist/js/node/libs/route/index.js +31 -26
- package/dist/js/node/libs/route/matcher.js +40 -41
- package/dist/js/node/libs/route/route.js +29 -22
- package/dist/js/node/libs/serve-file.js +66 -32
- package/dist/js/node/server/index.js +168 -160
- package/dist/js/node/server/modern-server-split.js +72 -22
- package/dist/js/node/server/modern-server.js +403 -445
- package/dist/js/node/type.js +15 -3
- package/dist/js/node/utils.js +85 -52
- package/dist/js/node/worker-server.js +57 -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 +267 -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 +493 -327
- package/dist/js/treeshaking/server/modern-server-split.js +352 -144
- package/dist/js/treeshaking/server/modern-server.js +1048 -909
- 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,65 @@ 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 {
|
|
157
|
+
internalPlugins = INTERNAL_SERVER_PLUGINS,
|
|
158
|
+
pwd,
|
|
159
|
+
plugins = []
|
|
160
|
+
} = options;
|
|
161
|
+
const serverPlugins = this.serverConfig.plugins || [];
|
|
162
|
+
const loadedPlugins = loadPlugins(pwd, [...serverPlugins, ...plugins], {
|
|
163
|
+
internalPlugins
|
|
164
|
+
});
|
|
165
|
+
debug("plugins", loadedPlugins);
|
|
166
|
+
loadedPlugins.forEach((p) => {
|
|
167
|
+
serverManager.usePlugin(p);
|
|
168
|
+
});
|
|
169
|
+
const hooksRunner = yield serverManager.init();
|
|
170
|
+
return hooksRunner;
|
|
154
171
|
});
|
|
155
|
-
|
|
156
|
-
// create runner
|
|
157
|
-
const hooksRunner = await serverManager.init();
|
|
158
|
-
return hooksRunner;
|
|
159
172
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
config,
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
}));
|
|
173
|
+
injectContext(runner, options) {
|
|
174
|
+
return __async(this, null, function* () {
|
|
175
|
+
const appContext = this.initAppContext();
|
|
176
|
+
const { config, pwd } = options;
|
|
177
|
+
ConfigContext.set(config);
|
|
178
|
+
AppContext.set(__spreadProps(__spreadValues({}, appContext), {
|
|
179
|
+
distDirectory: path.join(pwd, config.output.path || "dist")
|
|
180
|
+
}));
|
|
181
|
+
});
|
|
170
182
|
}
|
|
171
183
|
initAppContext() {
|
|
172
|
-
const {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
const {
|
|
176
|
-
pwd: appDirectory,
|
|
177
|
-
plugins = [],
|
|
178
|
-
config
|
|
179
|
-
} = options;
|
|
180
|
-
const serverPlugins = plugins.map(p => ({
|
|
184
|
+
const { options } = this;
|
|
185
|
+
const { pwd: appDirectory, plugins = [], config } = options;
|
|
186
|
+
const serverPlugins = plugins.map((p) => ({
|
|
181
187
|
server: p
|
|
182
188
|
}));
|
|
183
189
|
return {
|
|
184
190
|
appDirectory,
|
|
185
|
-
distDirectory: path.join(appDirectory, config.output.path ||
|
|
191
|
+
distDirectory: path.join(appDirectory, config.output.path || "dist"),
|
|
186
192
|
sharedDirectory: path.resolve(appDirectory, SHARED_DIR),
|
|
187
193
|
plugins: serverPlugins
|
|
188
194
|
};
|
|
189
195
|
}
|
|
190
196
|
loadServerEnv(options) {
|
|
191
|
-
const {
|
|
192
|
-
pwd: appDirectory
|
|
193
|
-
} = options;
|
|
197
|
+
const { pwd: appDirectory } = options;
|
|
194
198
|
const serverEnv = process.env.MODERN_ENV;
|
|
195
199
|
const serverEnvPath = path.resolve(appDirectory, `.env.${serverEnv}`);
|
|
196
200
|
if (serverEnv && fs.existsSync(serverEnvPath) && !fs.statSync(serverEnvPath).isDirectory()) {
|
|
197
|
-
const envConfig = dotenv.config({
|
|
198
|
-
path: serverEnvPath
|
|
199
|
-
});
|
|
201
|
+
const envConfig = dotenv.config({ path: serverEnvPath });
|
|
200
202
|
dotenvExpand(envConfig);
|
|
201
203
|
}
|
|
202
204
|
}
|
|
203
|
-
}
|
|
205
|
+
}
|
|
206
|
+
export {
|
|
207
|
+
Server
|
|
208
|
+
};
|
|
@@ -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
|
+
};
|