@modern-js/prod-server 2.15.0 → 2.16.0
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 +14 -0
- package/dist/cjs/constants.js +15 -31
- package/dist/cjs/index.js +35 -37
- package/dist/cjs/libs/context/context.js +53 -66
- package/dist/cjs/libs/context/index.js +15 -28
- package/dist/cjs/libs/hook-api/index.js +59 -54
- package/dist/cjs/libs/hook-api/route.js +28 -30
- package/dist/cjs/libs/hook-api/template.js +30 -34
- package/dist/cjs/libs/loadConfig.js +74 -65
- package/dist/cjs/libs/logger.js +46 -37
- package/dist/cjs/libs/metrics.js +7 -25
- package/dist/cjs/libs/proxy.js +29 -46
- package/dist/cjs/libs/render/cache/__tests__/cache.fun.test.js +48 -64
- package/dist/cjs/libs/render/cache/__tests__/cache.test.js +53 -37
- package/dist/cjs/libs/render/cache/__tests__/cacheable.js +38 -34
- package/dist/cjs/libs/render/cache/__tests__/error-configuration.js +22 -30
- package/dist/cjs/libs/render/cache/__tests__/matched-cache.js +86 -46
- package/dist/cjs/libs/render/cache/index.js +17 -37
- package/dist/cjs/libs/render/cache/page-caches/index.js +12 -28
- package/dist/cjs/libs/render/cache/page-caches/lru.js +32 -40
- package/dist/cjs/libs/render/cache/spr.js +104 -111
- package/dist/cjs/libs/render/cache/type.js +4 -15
- package/dist/cjs/libs/render/cache/util.js +29 -53
- package/dist/cjs/libs/render/index.js +75 -73
- package/dist/cjs/libs/render/measure.js +19 -34
- package/dist/cjs/libs/render/reader.js +52 -61
- package/dist/cjs/libs/render/ssr.js +34 -66
- package/dist/cjs/libs/render/static.js +22 -45
- package/dist/cjs/libs/render/type.js +10 -28
- package/dist/cjs/libs/render/utils.js +17 -38
- package/dist/cjs/libs/route/index.js +32 -31
- package/dist/cjs/libs/route/matcher.js +38 -38
- package/dist/cjs/libs/route/route.js +29 -26
- package/dist/cjs/libs/serveFile.js +23 -41
- package/dist/cjs/server/index.js +101 -107
- package/dist/cjs/server/modernServer.js +191 -171
- package/dist/cjs/server/modernServerSplit.js +12 -30
- package/dist/cjs/type.js +4 -15
- package/dist/cjs/utils.js +50 -50
- package/dist/cjs/workerServer.js +26 -36
- package/dist/esm/constants.js +24 -25
- package/dist/esm/index.js +11 -10
- package/dist/esm/libs/context/context.js +271 -264
- package/dist/esm/libs/context/index.js +3 -3
- package/dist/esm/libs/hook-api/index.js +237 -223
- package/dist/esm/libs/hook-api/route.js +62 -60
- package/dist/esm/libs/hook-api/template.js +117 -115
- package/dist/esm/libs/loadConfig.js +68 -69
- package/dist/esm/libs/logger.js +188 -174
- package/dist/esm/libs/metrics.js +6 -3
- package/dist/esm/libs/proxy.js +236 -221
- package/dist/esm/libs/render/cache/__tests__/cache.fun.test.js +286 -267
- package/dist/esm/libs/render/cache/__tests__/cache.test.js +765 -745
- package/dist/esm/libs/render/cache/__tests__/cacheable.js +62 -63
- package/dist/esm/libs/render/cache/__tests__/error-configuration.js +42 -43
- package/dist/esm/libs/render/cache/__tests__/matched-cache.js +134 -135
- package/dist/esm/libs/render/cache/index.js +337 -326
- package/dist/esm/libs/render/cache/page-caches/index.js +147 -141
- package/dist/esm/libs/render/cache/page-caches/lru.js +78 -76
- package/dist/esm/libs/render/cache/spr.js +465 -456
- package/dist/esm/libs/render/cache/type.js +1 -1
- package/dist/esm/libs/render/cache/util.js +266 -246
- package/dist/esm/libs/render/index.js +226 -218
- package/dist/esm/libs/render/measure.js +136 -128
- package/dist/esm/libs/render/reader.js +315 -304
- package/dist/esm/libs/render/ssr.js +214 -209
- package/dist/esm/libs/render/static.js +208 -198
- package/dist/esm/libs/render/type.js +6 -7
- package/dist/esm/libs/render/utils.js +8 -9
- package/dist/esm/libs/route/index.js +134 -123
- package/dist/esm/libs/route/matcher.js +140 -130
- package/dist/esm/libs/route/route.js +36 -37
- package/dist/esm/libs/serveFile.js +177 -168
- package/dist/esm/server/index.js +578 -549
- package/dist/esm/server/modernServer.js +1137 -1074
- package/dist/esm/server/modernServerSplit.js +344 -328
- package/dist/esm/type.js +1 -1
- package/dist/esm/utils.js +133 -124
- package/dist/esm/workerServer.js +226 -220
- package/dist/esm-node/constants.js +7 -14
- package/dist/esm-node/index.js +4 -9
- package/dist/esm-node/libs/context/context.js +32 -25
- package/dist/esm-node/libs/context/index.js +2 -5
- package/dist/esm-node/libs/hook-api/index.js +40 -21
- package/dist/esm-node/libs/hook-api/route.js +21 -8
- package/dist/esm-node/libs/hook-api/template.js +19 -14
- package/dist/esm-node/libs/loadConfig.js +11 -28
- package/dist/esm-node/libs/logger.js +37 -17
- package/dist/esm-node/libs/metrics.js +1 -3
- package/dist/esm-node/libs/proxy.js +14 -22
- package/dist/esm-node/libs/render/cache/__tests__/cache.fun.test.js +25 -36
- package/dist/esm-node/libs/render/cache/__tests__/cache.test.js +23 -11
- package/dist/esm-node/libs/render/cache/__tests__/cacheable.js +32 -13
- package/dist/esm-node/libs/render/cache/__tests__/error-configuration.js +16 -9
- package/dist/esm-node/libs/render/cache/__tests__/matched-cache.js +80 -25
- package/dist/esm-node/libs/render/cache/index.js +3 -10
- package/dist/esm-node/libs/render/cache/page-caches/index.js +4 -5
- package/dist/esm-node/libs/render/cache/page-caches/lru.js +20 -8
- package/dist/esm-node/libs/render/cache/spr.js +79 -80
- package/dist/esm-node/libs/render/cache/type.js +1 -0
- package/dist/esm-node/libs/render/cache/util.js +13 -23
- package/dist/esm-node/libs/render/index.js +10 -28
- package/dist/esm-node/libs/render/measure.js +7 -13
- package/dist/esm-node/libs/render/reader.js +31 -26
- package/dist/esm-node/libs/render/ssr.js +5 -21
- package/dist/esm-node/libs/render/static.js +1 -4
- package/dist/esm-node/libs/render/type.js +3 -6
- package/dist/esm-node/libs/render/utils.js +6 -18
- package/dist/esm-node/libs/route/index.js +20 -9
- package/dist/esm-node/libs/route/matcher.js +28 -17
- package/dist/esm-node/libs/route/route.js +23 -5
- package/dist/esm-node/libs/serveFile.js +2 -6
- package/dist/esm-node/server/index.js +72 -75
- package/dist/esm-node/server/modernServer.js +102 -130
- package/dist/esm-node/server/modernServerSplit.js +1 -4
- package/dist/esm-node/type.js +1 -0
- package/dist/esm-node/utils.js +41 -32
- package/dist/esm-node/workerServer.js +9 -10
- package/dist/types/libs/context/context.d.ts +1 -1
- package/dist/types/server/modernServer.d.ts +1 -1
- package/dist/types/utils.d.ts +1 -1
- package/package.json +12 -8
|
@@ -1,82 +1,37 @@
|
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
1
14
|
import { createServer } from "http";
|
|
2
15
|
import path from "path";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
isPromise,
|
|
6
|
-
isWebOnly,
|
|
7
|
-
mime,
|
|
8
|
-
ROUTE_SPEC_FILE
|
|
9
|
-
} from "@modern-js/utils";
|
|
10
|
-
import {
|
|
11
|
-
RouteMatchManager
|
|
12
|
-
} from "../libs/route";
|
|
16
|
+
import { fs, isPromise, isWebOnly, mime, ROUTE_SPEC_FILE } from "@modern-js/utils";
|
|
17
|
+
import { RouteMatchManager } from "../libs/route";
|
|
13
18
|
import { createRenderHandler } from "../libs/render";
|
|
14
|
-
import {
|
|
15
|
-
|
|
16
|
-
faviconFallbackHandler
|
|
17
|
-
} from "../libs/serveFile";
|
|
18
|
-
import {
|
|
19
|
-
createErrorDocument,
|
|
20
|
-
createMiddlewareCollecter,
|
|
21
|
-
getStaticReg,
|
|
22
|
-
mergeExtension,
|
|
23
|
-
noop,
|
|
24
|
-
debug,
|
|
25
|
-
isRedirect
|
|
26
|
-
} from "../utils";
|
|
19
|
+
import { createStaticFileHandler, faviconFallbackHandler } from "../libs/serveFile";
|
|
20
|
+
import { createErrorDocument, createMiddlewareCollecter, getStaticReg, mergeExtension, noop, debug, isRedirect } from "../utils";
|
|
27
21
|
import * as reader from "../libs/render/reader";
|
|
28
22
|
import { createProxyHandler } from "../libs/proxy";
|
|
29
23
|
import { createContext } from "../libs/context";
|
|
30
|
-
import {
|
|
31
|
-
|
|
32
|
-
ERROR_DIGEST,
|
|
33
|
-
ERROR_PAGE_TEXT,
|
|
34
|
-
RUN_MODE
|
|
35
|
-
} from "../constants";
|
|
36
|
-
import {
|
|
37
|
-
createAfterMatchContext,
|
|
38
|
-
createAfterRenderContext,
|
|
39
|
-
createMiddlewareContext
|
|
40
|
-
} from "../libs/hook-api";
|
|
24
|
+
import { AGGRED_DIR, ERROR_DIGEST, ERROR_PAGE_TEXT, RUN_MODE } from "../constants";
|
|
25
|
+
import { createAfterMatchContext, createAfterRenderContext, createMiddlewareContext } from "../libs/hook-api";
|
|
41
26
|
const SERVER_DIR = "./server";
|
|
42
|
-
class ModernServer {
|
|
43
|
-
constructor({
|
|
44
|
-
pwd,
|
|
45
|
-
config,
|
|
46
|
-
routes,
|
|
47
|
-
staticGenerate,
|
|
48
|
-
logger,
|
|
49
|
-
metrics,
|
|
50
|
-
runMode,
|
|
51
|
-
proxyTarget
|
|
52
|
-
}) {
|
|
53
|
-
this.handlers = [];
|
|
54
|
-
this.reader = reader;
|
|
55
|
-
this.loaderHandler = null;
|
|
56
|
-
this.frameWebHandler = null;
|
|
57
|
-
this.frameAPIHandler = null;
|
|
58
|
-
this.proxyHandler = null;
|
|
59
|
-
require("ignore-styles");
|
|
60
|
-
this.pwd = pwd;
|
|
61
|
-
this.distDir = path.join(pwd, config.output.path || "dist");
|
|
62
|
-
this.workDir = this.distDir;
|
|
63
|
-
this.conf = config;
|
|
64
|
-
debug("server conf", this.conf);
|
|
65
|
-
this.logger = logger;
|
|
66
|
-
this.metrics = metrics;
|
|
67
|
-
this.router = new RouteMatchManager();
|
|
68
|
-
this.presetRoutes = routes;
|
|
69
|
-
this.proxyTarget = proxyTarget;
|
|
70
|
-
this.staticGenerate = staticGenerate || false;
|
|
71
|
-
this.runMode = runMode || RUN_MODE.FULL;
|
|
72
|
-
}
|
|
27
|
+
export class ModernServer {
|
|
73
28
|
// server prepare
|
|
74
29
|
async onInit(runner, app) {
|
|
75
|
-
var
|
|
30
|
+
var _conf_bff, _this_conf_server, _this_conf_output;
|
|
76
31
|
this.runner = runner;
|
|
77
32
|
const { distDir, staticGenerate, conf } = this;
|
|
78
33
|
debug("final server conf", this.conf);
|
|
79
|
-
this.proxyHandler = createProxyHandler((
|
|
34
|
+
this.proxyHandler = createProxyHandler((_conf_bff = conf.bff) === null || _conf_bff === void 0 ? void 0 : _conf_bff.proxy);
|
|
80
35
|
if (this.proxyHandler) {
|
|
81
36
|
this.proxyHandler.forEach((handler) => {
|
|
82
37
|
this.addHandler(handler);
|
|
@@ -91,7 +46,7 @@ class ModernServer {
|
|
|
91
46
|
this.warmupSSRBundle();
|
|
92
47
|
await this.prepareFrameHandler();
|
|
93
48
|
await this.prepareLoaderHandler(usageRoutes, distDir);
|
|
94
|
-
const ssrConfig = (
|
|
49
|
+
const ssrConfig = (_this_conf_server = this.conf.server) === null || _this_conf_server === void 0 ? void 0 : _this_conf_server.ssr;
|
|
95
50
|
const forceCSR = typeof ssrConfig === "object" ? ssrConfig.forceCSR : false;
|
|
96
51
|
this.routeRenderHandler = createRenderHandler({
|
|
97
52
|
distDir,
|
|
@@ -99,7 +54,7 @@ class ModernServer {
|
|
|
99
54
|
forceCSR
|
|
100
55
|
});
|
|
101
56
|
await this.setupBeforeProdMiddleware();
|
|
102
|
-
this.addHandler(this.setupStaticMiddleware((
|
|
57
|
+
this.addHandler(this.setupStaticMiddleware((_this_conf_output = this.conf.output) === null || _this_conf_output === void 0 ? void 0 : _this_conf_output.assetPrefix));
|
|
103
58
|
this.addHandler(faviconFallbackHandler);
|
|
104
59
|
this.addHandler(this.routeHandler.bind(this));
|
|
105
60
|
this.compose();
|
|
@@ -107,14 +62,17 @@ class ModernServer {
|
|
|
107
62
|
// server ready
|
|
108
63
|
onRepack(_) {
|
|
109
64
|
}
|
|
110
|
-
onServerChange({ filepath }) {
|
|
65
|
+
async onServerChange({ filepath }) {
|
|
111
66
|
const { pwd } = this;
|
|
112
67
|
const { api, server } = AGGRED_DIR;
|
|
113
68
|
const apiPath = path.normalize(path.join(pwd, api));
|
|
114
69
|
const serverPath = path.normalize(path.join(pwd, server));
|
|
115
70
|
const onlyApi = filepath.startsWith(apiPath);
|
|
116
71
|
const onlyWeb = filepath.startsWith(serverPath);
|
|
117
|
-
this.prepareFrameHandler({
|
|
72
|
+
await this.prepareFrameHandler({
|
|
73
|
+
onlyWeb,
|
|
74
|
+
onlyApi
|
|
75
|
+
});
|
|
118
76
|
}
|
|
119
77
|
// exposed requestHandler
|
|
120
78
|
getRequestHandler() {
|
|
@@ -166,15 +124,12 @@ class ModernServer {
|
|
|
166
124
|
}
|
|
167
125
|
async prepareLoaderHandler(specs, distDir) {
|
|
168
126
|
const { runner } = this;
|
|
169
|
-
const handler = await runner.prepareLoaderHandler(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
onLast: () => null
|
|
176
|
-
}
|
|
177
|
-
);
|
|
127
|
+
const handler = await runner.prepareLoaderHandler({
|
|
128
|
+
serverRoutes: specs,
|
|
129
|
+
distDir
|
|
130
|
+
}, {
|
|
131
|
+
onLast: () => null
|
|
132
|
+
});
|
|
178
133
|
this.loaderHandler = handler;
|
|
179
134
|
}
|
|
180
135
|
// gather frame extension and get framework handler
|
|
@@ -196,19 +151,18 @@ class ModernServer {
|
|
|
196
151
|
}
|
|
197
152
|
async prepareWebHandler(extension) {
|
|
198
153
|
const { workDir, runner } = this;
|
|
199
|
-
const handler = await runner.prepareWebServer(
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
);
|
|
154
|
+
const handler = await runner.prepareWebServer({
|
|
155
|
+
pwd: workDir,
|
|
156
|
+
config: extension
|
|
157
|
+
}, {
|
|
158
|
+
onLast: () => null
|
|
159
|
+
});
|
|
206
160
|
return handler;
|
|
207
161
|
}
|
|
208
162
|
async prepareAPIHandler(extension) {
|
|
209
163
|
const { workDir, runner, conf } = this;
|
|
210
164
|
const { bff } = conf;
|
|
211
|
-
const prefix = (bff
|
|
165
|
+
const prefix = (bff === null || bff === void 0 ? void 0 : bff.prefix) || "/api";
|
|
212
166
|
const webOnly = await isWebOnly();
|
|
213
167
|
if (webOnly && process.env.NODE_ENV === "development") {
|
|
214
168
|
return (req, res) => {
|
|
@@ -216,16 +170,15 @@ class ModernServer {
|
|
|
216
170
|
res.end(JSON.stringify(""));
|
|
217
171
|
};
|
|
218
172
|
}
|
|
219
|
-
return runner.prepareApiServer(
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
);
|
|
173
|
+
return runner.prepareApiServer({
|
|
174
|
+
pwd: workDir,
|
|
175
|
+
config: extension,
|
|
176
|
+
prefix: Array.isArray(prefix) ? prefix[0] : prefix,
|
|
177
|
+
httpMethodDecider: bff === null || bff === void 0 ? void 0 : bff.httpMethodDecider,
|
|
178
|
+
render: this.render.bind(this)
|
|
179
|
+
}, {
|
|
180
|
+
onLast: () => null
|
|
181
|
+
});
|
|
229
182
|
}
|
|
230
183
|
filterRoutes(routes) {
|
|
231
184
|
return routes;
|
|
@@ -238,20 +191,13 @@ class ModernServer {
|
|
|
238
191
|
});
|
|
239
192
|
}
|
|
240
193
|
setupStaticMiddleware(prefix) {
|
|
241
|
-
const staticPathRegExp = getStaticReg(
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
{
|
|
249
|
-
path: staticPathRegExp,
|
|
250
|
-
target: this.distDir
|
|
251
|
-
}
|
|
252
|
-
],
|
|
253
|
-
prefix
|
|
254
|
-
);
|
|
194
|
+
const staticPathRegExp = getStaticReg(this.conf.output, this.conf.html, prefix);
|
|
195
|
+
return createStaticFileHandler([
|
|
196
|
+
{
|
|
197
|
+
path: staticPathRegExp,
|
|
198
|
+
target: this.distDir
|
|
199
|
+
}
|
|
200
|
+
], prefix);
|
|
255
201
|
}
|
|
256
202
|
async handleAPI(context) {
|
|
257
203
|
const { req, res } = context;
|
|
@@ -291,11 +237,7 @@ class ModernServer {
|
|
|
291
237
|
return null;
|
|
292
238
|
}
|
|
293
239
|
if (renderResult.redirect) {
|
|
294
|
-
this.redirect(
|
|
295
|
-
res,
|
|
296
|
-
renderResult.content,
|
|
297
|
-
renderResult.statusCode
|
|
298
|
-
);
|
|
240
|
+
this.redirect(res, renderResult.content, renderResult.statusCode);
|
|
299
241
|
return null;
|
|
300
242
|
}
|
|
301
243
|
if (this.isSend(res)) {
|
|
@@ -336,12 +278,11 @@ class ModernServer {
|
|
|
336
278
|
return;
|
|
337
279
|
}
|
|
338
280
|
if (route.entryName) {
|
|
339
|
-
const afterMatchContext = createAfterMatchContext(
|
|
340
|
-
context,
|
|
341
|
-
route.entryName
|
|
342
|
-
);
|
|
281
|
+
const afterMatchContext = createAfterMatchContext(context, route.entryName);
|
|
343
282
|
if (this.runMode === RUN_MODE.FULL) {
|
|
344
|
-
await this.runner.afterMatch(afterMatchContext, {
|
|
283
|
+
await this.runner.afterMatch(afterMatchContext, {
|
|
284
|
+
onLast: noop
|
|
285
|
+
});
|
|
345
286
|
}
|
|
346
287
|
if (this.isSend(res)) {
|
|
347
288
|
return;
|
|
@@ -383,12 +324,11 @@ class ModernServer {
|
|
|
383
324
|
return;
|
|
384
325
|
}
|
|
385
326
|
if (route.entryName) {
|
|
386
|
-
const afterRenderContext = createAfterRenderContext(
|
|
387
|
-
context,
|
|
388
|
-
response.toString()
|
|
389
|
-
);
|
|
327
|
+
const afterRenderContext = createAfterRenderContext(context, response.toString());
|
|
390
328
|
if (this.runMode === RUN_MODE.FULL) {
|
|
391
|
-
await this.runner.afterRender(afterRenderContext, {
|
|
329
|
+
await this.runner.afterRender(afterRenderContext, {
|
|
330
|
+
onLast: noop
|
|
331
|
+
});
|
|
392
332
|
}
|
|
393
333
|
if (this.isSend(res)) {
|
|
394
334
|
return;
|
|
@@ -500,7 +440,39 @@ class ModernServer {
|
|
|
500
440
|
const text = ERROR_PAGE_TEXT[status] || ERROR_PAGE_TEXT[500];
|
|
501
441
|
context.res.end(createErrorDocument(status, text));
|
|
502
442
|
}
|
|
443
|
+
constructor({ pwd, config, routes, staticGenerate, logger, metrics, runMode, proxyTarget }) {
|
|
444
|
+
_define_property(this, "pwd", void 0);
|
|
445
|
+
_define_property(this, "distDir", void 0);
|
|
446
|
+
_define_property(this, "workDir", void 0);
|
|
447
|
+
_define_property(this, "router", void 0);
|
|
448
|
+
_define_property(this, "conf", void 0);
|
|
449
|
+
_define_property(this, "handlers", []);
|
|
450
|
+
_define_property(this, "presetRoutes", void 0);
|
|
451
|
+
_define_property(this, "runner", void 0);
|
|
452
|
+
_define_property(this, "logger", void 0);
|
|
453
|
+
_define_property(this, "metrics", void 0);
|
|
454
|
+
_define_property(this, "runMode", void 0);
|
|
455
|
+
_define_property(this, "reader", reader);
|
|
456
|
+
_define_property(this, "proxyTarget", void 0);
|
|
457
|
+
_define_property(this, "routeRenderHandler", void 0);
|
|
458
|
+
_define_property(this, "loaderHandler", null);
|
|
459
|
+
_define_property(this, "frameWebHandler", null);
|
|
460
|
+
_define_property(this, "frameAPIHandler", null);
|
|
461
|
+
_define_property(this, "proxyHandler", null);
|
|
462
|
+
_define_property(this, "_handler", void 0);
|
|
463
|
+
_define_property(this, "staticGenerate", void 0);
|
|
464
|
+
require("ignore-styles");
|
|
465
|
+
this.pwd = pwd;
|
|
466
|
+
this.distDir = path.join(pwd, config.output.path || "dist");
|
|
467
|
+
this.workDir = this.distDir;
|
|
468
|
+
this.conf = config;
|
|
469
|
+
debug("server conf", this.conf);
|
|
470
|
+
this.logger = logger;
|
|
471
|
+
this.metrics = metrics;
|
|
472
|
+
this.router = new RouteMatchManager();
|
|
473
|
+
this.presetRoutes = routes;
|
|
474
|
+
this.proxyTarget = proxyTarget;
|
|
475
|
+
this.staticGenerate = staticGenerate || false;
|
|
476
|
+
this.runMode = runMode || RUN_MODE.FULL;
|
|
477
|
+
}
|
|
503
478
|
}
|
|
504
|
-
export {
|
|
505
|
-
ModernServer
|
|
506
|
-
};
|
|
@@ -27,7 +27,7 @@ class ModernWebServer extends ModernServer {
|
|
|
27
27
|
return super.handleWeb(context, route);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
const createProdServer = (options) => {
|
|
30
|
+
export const createProdServer = (options) => {
|
|
31
31
|
if (options.apiOnly) {
|
|
32
32
|
return new ModernAPIServer(options);
|
|
33
33
|
} else if (options.ssrOnly) {
|
|
@@ -38,6 +38,3 @@ const createProdServer = (options) => {
|
|
|
38
38
|
return new ModernServer(options);
|
|
39
39
|
}
|
|
40
40
|
};
|
|
41
|
-
export {
|
|
42
|
-
createProdServer
|
|
43
|
-
};
|
package/dist/esm-node/type.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/esm-node/utils.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { createDebugger } from "@modern-js/utils";
|
|
2
|
-
const debug = createDebugger("prod-server");
|
|
3
|
-
const mergeExtension = (users) => {
|
|
2
|
+
export const debug = createDebugger("prod-server");
|
|
3
|
+
export const mergeExtension = (users) => {
|
|
4
4
|
const output = [];
|
|
5
|
-
return {
|
|
5
|
+
return {
|
|
6
|
+
middleware: output.concat(users)
|
|
7
|
+
};
|
|
6
8
|
};
|
|
7
|
-
const noop = () => {
|
|
9
|
+
export const noop = () => {
|
|
8
10
|
};
|
|
9
|
-
const createErrorDocument = (status, text) => {
|
|
11
|
+
export const createErrorDocument = (status, text) => {
|
|
10
12
|
const title = `${status}: ${text}`;
|
|
11
13
|
return `<!DOCTYPE html>
|
|
12
14
|
<html lang="en">
|
|
@@ -39,7 +41,7 @@ const createErrorDocument = (status, text) => {
|
|
|
39
41
|
</html>
|
|
40
42
|
`;
|
|
41
43
|
};
|
|
42
|
-
const createMiddlewareCollecter = () => {
|
|
44
|
+
export const createMiddlewareCollecter = () => {
|
|
43
45
|
const webMiddlewares = [];
|
|
44
46
|
const apiMiddlewares = [];
|
|
45
47
|
const addWebMiddleware = (input) => {
|
|
@@ -58,20 +60,33 @@ const createMiddlewareCollecter = () => {
|
|
|
58
60
|
addAPIMiddleware
|
|
59
61
|
};
|
|
60
62
|
};
|
|
61
|
-
const getStaticReg = (output = {}, html = {}, prefix = "/") => {
|
|
63
|
+
export const getStaticReg = (output = {}, html = {}, prefix = "/") => {
|
|
62
64
|
const { distPath: { css: cssPath, js: jsPath, media: mediaPath } = {} } = output;
|
|
63
65
|
const { favicon, faviconByEntries } = html;
|
|
64
66
|
const favicons = prepareFavicons(favicon, faviconByEntries);
|
|
65
|
-
const staticFiles = [
|
|
66
|
-
|
|
67
|
-
|
|
67
|
+
const staticFiles = [
|
|
68
|
+
cssPath,
|
|
69
|
+
jsPath,
|
|
70
|
+
mediaPath
|
|
71
|
+
].filter((v) => Boolean(v));
|
|
72
|
+
const staticReg = [
|
|
73
|
+
"static/",
|
|
74
|
+
"upload/",
|
|
75
|
+
...staticFiles
|
|
76
|
+
];
|
|
77
|
+
const iconReg = [
|
|
78
|
+
"favicon.ico",
|
|
79
|
+
"icon.png",
|
|
80
|
+
...favicons
|
|
81
|
+
];
|
|
68
82
|
const regPrefix = prefix.endsWith("/") ? prefix : `${prefix}/`;
|
|
69
|
-
const staticPathRegExp = new RegExp(
|
|
70
|
-
|
|
71
|
-
|
|
83
|
+
const staticPathRegExp = new RegExp(`^${regPrefix}(${[
|
|
84
|
+
...staticReg,
|
|
85
|
+
...iconReg
|
|
86
|
+
].join("|")})`);
|
|
72
87
|
return staticPathRegExp;
|
|
73
88
|
};
|
|
74
|
-
const prepareFavicons = (favicon, faviconByEntries) => {
|
|
89
|
+
export const prepareFavicons = (favicon, faviconByEntries) => {
|
|
75
90
|
const faviconNames = [];
|
|
76
91
|
if (favicon) {
|
|
77
92
|
faviconNames.push(favicon.substring(favicon.lastIndexOf("/") + 1));
|
|
@@ -80,33 +95,27 @@ const prepareFavicons = (favicon, faviconByEntries) => {
|
|
|
80
95
|
Object.keys(faviconByEntries).forEach((f) => {
|
|
81
96
|
const curFavicon = faviconByEntries[f];
|
|
82
97
|
if (curFavicon) {
|
|
83
|
-
faviconNames.push(
|
|
84
|
-
curFavicon.substring(curFavicon.lastIndexOf("/") + 1)
|
|
85
|
-
);
|
|
98
|
+
faviconNames.push(curFavicon.substring(curFavicon.lastIndexOf("/") + 1));
|
|
86
99
|
}
|
|
87
100
|
});
|
|
88
101
|
}
|
|
89
102
|
return faviconNames;
|
|
90
103
|
};
|
|
91
|
-
const headersWithoutCookie = (headers) => {
|
|
104
|
+
export const headersWithoutCookie = (headers) => {
|
|
92
105
|
if (typeof headers.cookie !== "undefined") {
|
|
93
|
-
const safeHeaders = {
|
|
106
|
+
const safeHeaders = {
|
|
107
|
+
...headers
|
|
108
|
+
};
|
|
94
109
|
delete safeHeaders.cookie;
|
|
95
110
|
return safeHeaders;
|
|
96
111
|
}
|
|
97
112
|
return headers;
|
|
98
113
|
};
|
|
99
|
-
const isRedirect = (code) => {
|
|
100
|
-
return [
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
getStaticReg,
|
|
107
|
-
headersWithoutCookie,
|
|
108
|
-
isRedirect,
|
|
109
|
-
mergeExtension,
|
|
110
|
-
noop,
|
|
111
|
-
prepareFavicons
|
|
114
|
+
export const isRedirect = (code) => {
|
|
115
|
+
return [
|
|
116
|
+
301,
|
|
117
|
+
302,
|
|
118
|
+
307,
|
|
119
|
+
308
|
|
120
|
+
].includes(code);
|
|
112
121
|
};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { Logger } from "./libs/logger";
|
|
2
2
|
import { RouteMatchManager } from "./libs/route";
|
|
3
3
|
import { metrics as defaultMetrics } from "./libs/metrics";
|
|
4
|
-
const handleUrl = (url) => {
|
|
4
|
+
export const handleUrl = (url) => {
|
|
5
5
|
return url.replace(/^https?:\/\/.*?\//gi, "/");
|
|
6
6
|
};
|
|
7
|
-
const createHandler = (manifest) => {
|
|
7
|
+
export const createHandler = (manifest) => {
|
|
8
8
|
const routeMgr = new RouteMatchManager();
|
|
9
9
|
const { pages, routes } = manifest;
|
|
10
10
|
routeMgr.reset(routes);
|
|
11
11
|
return async (ctx) => {
|
|
12
|
-
var
|
|
12
|
+
var _ctx_request, _ctx_request1, _ctx_request2;
|
|
13
13
|
const pageMatch = routeMgr.match(ctx.url);
|
|
14
14
|
if (!pageMatch) {
|
|
15
15
|
ctx.body = "404: Page not found";
|
|
@@ -17,9 +17,12 @@ const createHandler = (manifest) => {
|
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
19
|
const page = pages[pageMatch.spec.urlPath];
|
|
20
|
-
|
|
21
|
-
(
|
|
22
|
-
|
|
20
|
+
var _query;
|
|
21
|
+
(_query = (_ctx_request = ctx.request).query) !== null && _query !== void 0 ? _query : _ctx_request.query = ctx.query;
|
|
22
|
+
var _pathname;
|
|
23
|
+
(_pathname = (_ctx_request1 = ctx.request).pathname) !== null && _pathname !== void 0 ? _pathname : _ctx_request1.pathname = ctx.pathname;
|
|
24
|
+
var _params;
|
|
25
|
+
(_params = (_ctx_request2 = ctx.request).params) !== null && _params !== void 0 ? _params : _ctx_request2.params = ctx.params;
|
|
23
26
|
const params = pageMatch.parseURLParams(ctx.url);
|
|
24
27
|
if (page.serverRender) {
|
|
25
28
|
try {
|
|
@@ -63,7 +66,3 @@ const createHandler = (manifest) => {
|
|
|
63
66
|
ctx.status = 404;
|
|
64
67
|
};
|
|
65
68
|
};
|
|
66
|
-
export {
|
|
67
|
-
createHandler,
|
|
68
|
-
handleUrl
|
|
69
|
-
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
/// <reference types="node" />
|
|
4
4
|
/// <reference types="node/http" />
|
|
5
|
-
/// <reference types=".dts-temp/
|
|
5
|
+
/// <reference types=".dts-temp/vHqeIaScy5kMV0h9s6umT/src/type" />
|
|
6
6
|
import { IncomingMessage, ServerResponse } from 'http';
|
|
7
7
|
import qs from 'querystring';
|
|
8
8
|
import type { ModernServerContext as ModernServerContextInterface } from '@modern-js/types';
|
|
@@ -46,7 +46,7 @@ export declare class ModernServer implements ModernServerInterface {
|
|
|
46
46
|
filepath
|
|
47
47
|
}: {
|
|
48
48
|
filepath: string;
|
|
49
|
-
}): void
|
|
49
|
+
}): Promise<void>;
|
|
50
50
|
getRequestHandler(): (req: IncomingMessage, res: ServerResponse, next?: () => void) => void | ServerResponse;
|
|
51
51
|
render(req: IncomingMessage, res: ServerResponse, url?: string): Promise<string | import("stream").Readable | null>;
|
|
52
52
|
createHTTPServer(handler: (req: IncomingMessage, res: ServerResponse, next?: () => void) => void): Promise<Server<typeof IncomingMessage, typeof ServerResponse>>;
|
package/dist/types/utils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="node/http" />
|
|
3
|
-
/// <reference types=".dts-temp/
|
|
3
|
+
/// <reference types=".dts-temp/vHqeIaScy5kMV0h9s6umT/src/type" />
|
|
4
4
|
import { IncomingMessage } from 'http';
|
|
5
5
|
import type { OutputNormalizedConfig, HtmlNormalizedConfig } from '@modern-js/server-core';
|
|
6
6
|
export declare const debug: any;
|
package/package.json
CHANGED
|
@@ -3,7 +3,11 @@
|
|
|
3
3
|
"description": "A Progressive React Framework for modern web development.",
|
|
4
4
|
"homepage": "https://modernjs.dev",
|
|
5
5
|
"bugs": "https://github.com/web-infra-dev/modern.js/issues",
|
|
6
|
-
"repository":
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/web-infra-dev/modern.js",
|
|
9
|
+
"directory": "packages/server/prod-server"
|
|
10
|
+
},
|
|
7
11
|
"license": "MIT",
|
|
8
12
|
"keywords": [
|
|
9
13
|
"react",
|
|
@@ -11,7 +15,7 @@
|
|
|
11
15
|
"modern",
|
|
12
16
|
"modern.js"
|
|
13
17
|
],
|
|
14
|
-
"version": "2.
|
|
18
|
+
"version": "2.16.0",
|
|
15
19
|
"jsnext:source": "./src/index.ts",
|
|
16
20
|
"types": "./dist/types/index.d.ts",
|
|
17
21
|
"main": "./dist/cjs/index.js",
|
|
@@ -56,8 +60,8 @@
|
|
|
56
60
|
"merge-deep": "^3.0.3",
|
|
57
61
|
"path-to-regexp": "^6.2.0",
|
|
58
62
|
"serve-static": "^1.14.1",
|
|
59
|
-
"@modern-js/utils": "2.
|
|
60
|
-
"@modern-js/server-core": "2.
|
|
63
|
+
"@modern-js/utils": "2.16.0",
|
|
64
|
+
"@modern-js/server-core": "2.16.0"
|
|
61
65
|
},
|
|
62
66
|
"devDependencies": {
|
|
63
67
|
"@types/cookie": "^0.4.1",
|
|
@@ -73,10 +77,10 @@
|
|
|
73
77
|
"node-mocks-http": "^1.11.0",
|
|
74
78
|
"portfinder": "^1.0.28",
|
|
75
79
|
"typescript": "^4",
|
|
76
|
-
"@modern-js/types": "2.
|
|
77
|
-
"@modern-js/server-core": "2.
|
|
78
|
-
"@scripts/jest-config": "2.
|
|
79
|
-
"@scripts/build": "2.
|
|
80
|
+
"@modern-js/types": "2.16.0",
|
|
81
|
+
"@modern-js/server-core": "2.16.0",
|
|
82
|
+
"@scripts/jest-config": "2.16.0",
|
|
83
|
+
"@scripts/build": "2.16.0"
|
|
80
84
|
},
|
|
81
85
|
"sideEffects": false,
|
|
82
86
|
"publishConfig": {
|