@modern-js/prod-server 2.5.1-alpha.2 → 2.6.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/libs/context/context.js +13 -0
- package/dist/cjs/libs/hook-api/index.js +4 -0
- package/dist/cjs/libs/loadConfig.js +5 -0
- package/dist/cjs/libs/render/cache/__tests__/cache.fun.test.js +4 -0
- package/dist/cjs/libs/render/cache/page-caches/lru.js +4 -0
- package/dist/cjs/libs/render/cache/spr.js +5 -0
- package/dist/cjs/libs/render/cache/util.js +4 -0
- package/dist/cjs/libs/render/index.js +4 -0
- package/dist/cjs/libs/render/reader.js +9 -0
- package/dist/cjs/libs/render/ssr.js +16 -4
- package/dist/cjs/libs/render/static.js +4 -0
- package/dist/cjs/libs/route/index.js +4 -0
- package/dist/cjs/libs/route/matcher.js +4 -0
- package/dist/cjs/libs/serve-file.js +26 -19
- package/dist/cjs/server/index.js +32 -4
- package/dist/cjs/server/modern-server.js +19 -3
- package/dist/esm/libs/context/context.js +15 -6
- package/dist/esm/libs/render/cache/spr.js +1 -0
- package/dist/esm/libs/render/ssr.js +5 -5
- package/dist/esm/libs/route/index.js +4 -0
- package/dist/esm/libs/route/matcher.js +4 -0
- package/dist/esm/libs/serve-file.js +2 -1
- package/dist/esm/server/index.js +30 -7
- package/dist/esm/server/modern-server.js +17 -4
- package/dist/esm-node/libs/context/context.js +9 -0
- package/dist/esm-node/libs/loadConfig.js +1 -0
- package/dist/esm-node/libs/render/cache/spr.js +1 -0
- package/dist/esm-node/libs/render/reader.js +5 -0
- package/dist/esm-node/libs/render/ssr.js +12 -4
- package/dist/esm-node/libs/route/index.js +4 -0
- package/dist/esm-node/libs/route/matcher.js +4 -0
- package/dist/esm-node/libs/serve-file.js +22 -19
- package/dist/esm-node/server/index.js +28 -4
- package/dist/esm-node/server/modern-server.js +15 -3
- package/dist/types/libs/context/context.d.ts +1 -1
- package/dist/types/libs/render/ssr.d.ts +1 -0
- package/dist/types/type.d.ts +1 -8
- package/dist/types/utils.d.ts +1 -1
- package/package.json +9 -9
- package/dist/js/modern/constants.js +0 -35
- package/dist/js/modern/index.js +0 -18
- package/dist/js/modern/libs/context/context.js +0 -160
- package/dist/js/modern/libs/context/index.js +0 -6
- package/dist/js/modern/libs/hook-api/index.js +0 -134
- package/dist/js/modern/libs/hook-api/route.js +0 -20
- package/dist/js/modern/libs/hook-api/template.js +0 -73
- package/dist/js/modern/libs/loadConfig.js +0 -62
- package/dist/js/modern/libs/logger.js +0 -111
- package/dist/js/modern/libs/metrics.js +0 -11
- package/dist/js/modern/libs/proxy.js +0 -92
- package/dist/js/modern/libs/render/cache/__tests__/cache.fun.test.js +0 -114
- package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +0 -254
- package/dist/js/modern/libs/render/cache/__tests__/cacheable.js +0 -47
- package/dist/js/modern/libs/render/cache/__tests__/error-configuration.js +0 -37
- package/dist/js/modern/libs/render/cache/__tests__/matched-cache.js +0 -91
- package/dist/js/modern/libs/render/cache/index.js +0 -115
- package/dist/js/modern/libs/render/cache/page-caches/index.js +0 -32
- package/dist/js/modern/libs/render/cache/page-caches/lru.js +0 -29
- package/dist/js/modern/libs/render/cache/spr.js +0 -248
- package/dist/js/modern/libs/render/cache/type.js +0 -0
- package/dist/js/modern/libs/render/cache/util.js +0 -102
- package/dist/js/modern/libs/render/index.js +0 -86
- package/dist/js/modern/libs/render/measure.js +0 -68
- package/dist/js/modern/libs/render/reader.js +0 -107
- package/dist/js/modern/libs/render/ssr.js +0 -100
- package/dist/js/modern/libs/render/static.js +0 -60
- package/dist/js/modern/libs/render/type.js +0 -9
- package/dist/js/modern/libs/route/index.js +0 -54
- package/dist/js/modern/libs/route/matcher.js +0 -87
- package/dist/js/modern/libs/route/route.js +0 -16
- package/dist/js/modern/libs/serve-file.js +0 -67
- package/dist/js/modern/server/index.js +0 -208
- package/dist/js/modern/server/modern-server-split.js +0 -74
- package/dist/js/modern/server/modern-server.js +0 -554
- package/dist/js/modern/type.js +0 -0
- package/dist/js/modern/utils.js +0 -136
- package/dist/js/modern/worker-server.js +0 -89
- package/dist/js/node/constants.js +0 -62
- package/dist/js/node/index.js +0 -44
- package/dist/js/node/libs/context/context.js +0 -189
- package/dist/js/node/libs/context/index.js +0 -30
- package/dist/js/node/libs/hook-api/index.js +0 -164
- package/dist/js/node/libs/hook-api/route.js +0 -43
- package/dist/js/node/libs/hook-api/template.js +0 -97
- package/dist/js/node/libs/loadConfig.js +0 -91
- package/dist/js/node/libs/logger.js +0 -133
- package/dist/js/node/libs/metrics.js +0 -34
- package/dist/js/node/libs/proxy.js +0 -114
- package/dist/js/node/libs/render/cache/__tests__/cache.fun.test.js +0 -115
- package/dist/js/node/libs/render/cache/__tests__/cache.test.js +0 -245
- package/dist/js/node/libs/render/cache/__tests__/cacheable.js +0 -70
- package/dist/js/node/libs/render/cache/__tests__/error-configuration.js +0 -60
- package/dist/js/node/libs/render/cache/__tests__/matched-cache.js +0 -114
- package/dist/js/node/libs/render/cache/index.js +0 -134
- package/dist/js/node/libs/render/cache/page-caches/index.js +0 -55
- package/dist/js/node/libs/render/cache/page-caches/lru.js +0 -58
- package/dist/js/node/libs/render/cache/spr.js +0 -270
- package/dist/js/node/libs/render/cache/type.js +0 -15
- package/dist/js/node/libs/render/cache/util.js +0 -138
- package/dist/js/node/libs/render/index.js +0 -115
- package/dist/js/node/libs/render/measure.js +0 -90
- package/dist/js/node/libs/render/reader.js +0 -140
- package/dist/js/node/libs/render/ssr.js +0 -123
- package/dist/js/node/libs/render/static.js +0 -89
- package/dist/js/node/libs/render/type.js +0 -32
- package/dist/js/node/libs/route/index.js +0 -78
- package/dist/js/node/libs/route/matcher.js +0 -106
- package/dist/js/node/libs/route/route.js +0 -39
- package/dist/js/node/libs/serve-file.js +0 -97
- package/dist/js/node/server/index.js +0 -219
- package/dist/js/node/server/modern-server-split.js +0 -97
- package/dist/js/node/server/modern-server.js +0 -559
- package/dist/js/node/type.js +0 -15
- package/dist/js/node/utils.js +0 -166
- package/dist/js/node/worker-server.js +0 -113
- package/dist/js/treeshaking/constants.js +0 -29
- package/dist/js/treeshaking/index.js +0 -13
- package/dist/js/treeshaking/libs/context/context.js +0 -274
- package/dist/js/treeshaking/libs/context/index.js +0 -5
- package/dist/js/treeshaking/libs/hook-api/index.js +0 -281
- package/dist/js/treeshaking/libs/hook-api/route.js +0 -68
- package/dist/js/treeshaking/libs/hook-api/template.js +0 -127
- package/dist/js/treeshaking/libs/loadConfig.js +0 -82
- package/dist/js/treeshaking/libs/logger.js +0 -205
- package/dist/js/treeshaking/libs/metrics.js +0 -6
- package/dist/js/treeshaking/libs/proxy.js +0 -244
- package/dist/js/treeshaking/libs/render/cache/__tests__/cache.fun.test.js +0 -291
- package/dist/js/treeshaking/libs/render/cache/__tests__/cache.test.js +0 -781
- package/dist/js/treeshaking/libs/render/cache/__tests__/cacheable.js +0 -67
- package/dist/js/treeshaking/libs/render/cache/__tests__/error-configuration.js +0 -45
- package/dist/js/treeshaking/libs/render/cache/__tests__/matched-cache.js +0 -147
- package/dist/js/treeshaking/libs/render/cache/index.js +0 -346
- package/dist/js/treeshaking/libs/render/cache/page-caches/index.js +0 -154
- package/dist/js/treeshaking/libs/render/cache/page-caches/lru.js +0 -84
- package/dist/js/treeshaking/libs/render/cache/spr.js +0 -492
- package/dist/js/treeshaking/libs/render/cache/type.js +0 -1
- package/dist/js/treeshaking/libs/render/cache/util.js +0 -280
- package/dist/js/treeshaking/libs/render/index.js +0 -234
- package/dist/js/treeshaking/libs/render/measure.js +0 -146
- package/dist/js/treeshaking/libs/render/reader.js +0 -339
- package/dist/js/treeshaking/libs/render/ssr.js +0 -223
- package/dist/js/treeshaking/libs/render/static.js +0 -216
- package/dist/js/treeshaking/libs/render/type.js +0 -7
- package/dist/js/treeshaking/libs/route/index.js +0 -130
- package/dist/js/treeshaking/libs/route/matcher.js +0 -143
- package/dist/js/treeshaking/libs/route/route.js +0 -40
- package/dist/js/treeshaking/libs/serve-file.js +0 -184
- package/dist/js/treeshaking/server/index.js +0 -505
- package/dist/js/treeshaking/server/modern-server-split.js +0 -360
- package/dist/js/treeshaking/server/modern-server.js +0 -1089
- package/dist/js/treeshaking/type.js +0 -1
- package/dist/js/treeshaking/utils.js +0 -147
- package/dist/js/treeshaking/worker-server.js +0 -233
|
@@ -66,6 +66,7 @@ class ModernServer {
|
|
|
66
66
|
this.staticGenerate = staticGenerate || false;
|
|
67
67
|
this.runMode = runMode || RUN_MODE.FULL;
|
|
68
68
|
}
|
|
69
|
+
// server prepare
|
|
69
70
|
async onInit(runner, app) {
|
|
70
71
|
var _a, _b;
|
|
71
72
|
this.runner = runner;
|
|
@@ -113,6 +114,7 @@ class ModernServer {
|
|
|
113
114
|
this.addHandler(this.routeHandler.bind(this));
|
|
114
115
|
this.compose();
|
|
115
116
|
}
|
|
117
|
+
// server ready
|
|
116
118
|
onRepack(_) {
|
|
117
119
|
}
|
|
118
120
|
addBeforeRouteHandler() {
|
|
@@ -135,6 +137,7 @@ class ModernServer {
|
|
|
135
137
|
const onlyWeb = filepath.startsWith(serverPath);
|
|
136
138
|
this.prepareFrameHandler({ onlyWeb, onlyApi });
|
|
137
139
|
}
|
|
140
|
+
// exposed requestHandler
|
|
138
141
|
getRequestHandler() {
|
|
139
142
|
return this.requestHandler.bind(this);
|
|
140
143
|
}
|
|
@@ -156,6 +159,8 @@ class ModernServer {
|
|
|
156
159
|
async createHTTPServer(handler) {
|
|
157
160
|
return createServer(handler);
|
|
158
161
|
}
|
|
162
|
+
/* —————————————————————— function will be overwrite —————————————————————— */
|
|
163
|
+
// get routes info
|
|
159
164
|
getRoutes() {
|
|
160
165
|
if (this.presetRoutes) {
|
|
161
166
|
return this.presetRoutes;
|
|
@@ -167,9 +172,12 @@ class ModernServer {
|
|
|
167
172
|
}
|
|
168
173
|
return [];
|
|
169
174
|
}
|
|
175
|
+
// add promisify request handler to server
|
|
176
|
+
// handler should do not do more things after invoke next
|
|
170
177
|
addHandler(handler) {
|
|
171
178
|
this.handlers.push(handler);
|
|
172
179
|
}
|
|
180
|
+
// return 404 page
|
|
173
181
|
render404(context) {
|
|
174
182
|
context.error(ERROR_DIGEST.ENOTF, "404 Not Found");
|
|
175
183
|
this.renderErrorPage(context, 404);
|
|
@@ -187,6 +195,7 @@ class ModernServer {
|
|
|
187
195
|
);
|
|
188
196
|
this.beforeRouteHandler = handler;
|
|
189
197
|
}
|
|
198
|
+
// gather frame extension and get framework handler
|
|
190
199
|
async prepareFrameHandler(options) {
|
|
191
200
|
const { workDir, runner } = this;
|
|
192
201
|
const { onlyApi, onlyWeb } = options || {};
|
|
@@ -224,7 +233,6 @@ class ModernServer {
|
|
|
224
233
|
pwd: workDir,
|
|
225
234
|
config: extension,
|
|
226
235
|
prefix: Array.isArray(prefix) ? prefix[0] : prefix,
|
|
227
|
-
httpMethodDecider: bff == null ? void 0 : bff.httpMethodDecider,
|
|
228
236
|
render: this.render.bind(this)
|
|
229
237
|
},
|
|
230
238
|
{ onLast: () => null }
|
|
@@ -257,6 +265,7 @@ class ModernServer {
|
|
|
257
265
|
async proxy() {
|
|
258
266
|
return null;
|
|
259
267
|
}
|
|
268
|
+
// warmup ssr function
|
|
260
269
|
warmupSSRBundle() {
|
|
261
270
|
const { distDir } = this;
|
|
262
271
|
const bundles = this.router.getBundles();
|
|
@@ -270,6 +279,8 @@ class ModernServer {
|
|
|
270
279
|
createContext(req, res, options = {}) {
|
|
271
280
|
return createContext(req, res, options);
|
|
272
281
|
}
|
|
282
|
+
/* —————————————————————— private function —————————————————————— */
|
|
283
|
+
// handler route.json, include api / csr / ssr
|
|
273
284
|
async routeHandler(context) {
|
|
274
285
|
const { res } = context;
|
|
275
286
|
const matched = this.router.match(context.path);
|
|
@@ -350,7 +361,7 @@ class ModernServer {
|
|
|
350
361
|
templateInjectableStream({
|
|
351
362
|
prependHead: route.entryName ? `<script>window._SERVER_DATA=${JSON.stringify(
|
|
352
363
|
context.serverData
|
|
353
|
-
)}
|
|
364
|
+
)}</script>` : void 0
|
|
354
365
|
})
|
|
355
366
|
).pipe(res);
|
|
356
367
|
return;
|
|
@@ -370,7 +381,7 @@ class ModernServer {
|
|
|
370
381
|
afterRenderContext.template.prependHead(
|
|
371
382
|
`<script>window._SERVER_DATA=${JSON.stringify(
|
|
372
383
|
context.serverData
|
|
373
|
-
)}
|
|
384
|
+
)}</script>`
|
|
374
385
|
);
|
|
375
386
|
response = afterRenderContext.template.get();
|
|
376
387
|
}
|
|
@@ -386,6 +397,7 @@ class ModernServer {
|
|
|
386
397
|
}
|
|
387
398
|
return false;
|
|
388
399
|
}
|
|
400
|
+
// compose handlers and create the final handler
|
|
389
401
|
compose() {
|
|
390
402
|
const { handlers } = this;
|
|
391
403
|
if (!Array.isArray(handlers)) {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/// <reference types="node" />
|
|
4
4
|
/// <reference types="node" />
|
|
5
5
|
/// <reference types="node/http" />
|
|
6
|
-
/// <reference types=".dts-temp/
|
|
6
|
+
/// <reference types=".dts-temp/x5zLsplldTCJONgx6eTKT/src/type" />
|
|
7
7
|
import { IncomingMessage, ServerResponse } from 'http';
|
|
8
8
|
import { URL } from 'url';
|
|
9
9
|
import qs from 'querystring';
|
package/dist/types/type.d.ts
CHANGED
|
@@ -26,14 +26,7 @@ export type ModernServerOptions = {
|
|
|
26
26
|
ssrOnly?: boolean;
|
|
27
27
|
webOnly?: boolean;
|
|
28
28
|
runMode?: string;
|
|
29
|
-
|
|
30
|
-
appDirectory: string;
|
|
31
|
-
sharedDirectory: string;
|
|
32
|
-
apiDirectory: string;
|
|
33
|
-
lambdaDirectory: string;
|
|
34
|
-
};
|
|
35
|
-
serverConfigFile?: string;
|
|
36
|
-
proxyTarget?: any;
|
|
29
|
+
[propName: string]: any;
|
|
37
30
|
};
|
|
38
31
|
export type RenderResult = {
|
|
39
32
|
content: string | Buffer;
|
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/x5zLsplldTCJONgx6eTKT/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
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"modern",
|
|
12
12
|
"modern.js"
|
|
13
13
|
],
|
|
14
|
-
"version": "2.
|
|
14
|
+
"version": "2.6.0",
|
|
15
15
|
"jsnext:source": "./src/index.ts",
|
|
16
16
|
"types": "./dist/types/index.d.ts",
|
|
17
17
|
"main": "./dist/cjs/index.js",
|
|
@@ -45,8 +45,6 @@
|
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@modern-js/utils": "2.5.0",
|
|
49
|
-
"@modern-js/server-core": "2.5.1-alpha.0",
|
|
50
48
|
"etag": "^1.8.1",
|
|
51
49
|
"fresh": "^0.5.2",
|
|
52
50
|
"cookie": "^0.4.2",
|
|
@@ -55,13 +53,11 @@
|
|
|
55
53
|
"lru-cache": "^6.0.0",
|
|
56
54
|
"merge-deep": "^3.0.3",
|
|
57
55
|
"path-to-regexp": "^6.2.0",
|
|
58
|
-
"serve-static": "^1.14.1"
|
|
56
|
+
"serve-static": "^1.14.1",
|
|
57
|
+
"@modern-js/utils": "2.6.0",
|
|
58
|
+
"@modern-js/server-core": "2.6.0"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
|
-
"@modern-js/types": "2.5.1-alpha.0",
|
|
62
|
-
"@modern-js/server-core": "2.5.1-alpha.0",
|
|
63
|
-
"@scripts/jest-config": "2.5.0",
|
|
64
|
-
"@scripts/build": "2.5.0",
|
|
65
61
|
"@types/cookie": "^0.4.1",
|
|
66
62
|
"@types/jest": "^27",
|
|
67
63
|
"@types/lru-cache": "^5.1.1",
|
|
@@ -74,7 +70,11 @@
|
|
|
74
70
|
"jest": "^27",
|
|
75
71
|
"node-mocks-http": "^1.11.0",
|
|
76
72
|
"portfinder": "^1.0.28",
|
|
77
|
-
"typescript": "^4"
|
|
73
|
+
"typescript": "^4",
|
|
74
|
+
"@modern-js/types": "2.6.0",
|
|
75
|
+
"@modern-js/server-core": "2.6.0",
|
|
76
|
+
"@scripts/jest-config": "2.6.0",
|
|
77
|
+
"@scripts/build": "2.6.0"
|
|
78
78
|
},
|
|
79
79
|
"sideEffects": false,
|
|
80
80
|
"publishConfig": {
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
const AGGRED_DIR = {
|
|
2
|
-
mock: "config/mock",
|
|
3
|
-
server: "server",
|
|
4
|
-
api: "api",
|
|
5
|
-
shared: "shared",
|
|
6
|
-
lambda: "lambda"
|
|
7
|
-
};
|
|
8
|
-
var ApiServerMode = /* @__PURE__ */ ((ApiServerMode2) => {
|
|
9
|
-
ApiServerMode2["func"] = "function";
|
|
10
|
-
ApiServerMode2["frame"] = "framework";
|
|
11
|
-
return ApiServerMode2;
|
|
12
|
-
})(ApiServerMode || {});
|
|
13
|
-
const ERROR_DIGEST = {
|
|
14
|
-
INIT: "Server init error",
|
|
15
|
-
ENOTF: "Page could not be found",
|
|
16
|
-
WARMUP: "SSR warmup failed",
|
|
17
|
-
EINTER: "Internal server error",
|
|
18
|
-
ERENDER: "SSR render failed",
|
|
19
|
-
EMICROINJ: "Get micro-frontend info failed"
|
|
20
|
-
};
|
|
21
|
-
const ERROR_PAGE_TEXT = {
|
|
22
|
-
404: "This page could not be found.",
|
|
23
|
-
500: "Internal Server Error."
|
|
24
|
-
};
|
|
25
|
-
const RUN_MODE = {
|
|
26
|
-
FULL: "full",
|
|
27
|
-
TYPE: "type"
|
|
28
|
-
};
|
|
29
|
-
export {
|
|
30
|
-
AGGRED_DIR,
|
|
31
|
-
ApiServerMode,
|
|
32
|
-
ERROR_DIGEST,
|
|
33
|
-
ERROR_PAGE_TEXT,
|
|
34
|
-
RUN_MODE
|
|
35
|
-
};
|
package/dist/js/modern/index.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Server } from "./server";
|
|
2
|
-
import { ModernServer } from "./server/modern-server";
|
|
3
|
-
import { createProxyHandler } from "./libs/proxy";
|
|
4
|
-
export * from "./type";
|
|
5
|
-
export * from "./constants";
|
|
6
|
-
var src_default = (options) => {
|
|
7
|
-
if (options == null) {
|
|
8
|
-
throw new Error("can not start mserver without options");
|
|
9
|
-
}
|
|
10
|
-
const server = new Server(options);
|
|
11
|
-
return server.init();
|
|
12
|
-
};
|
|
13
|
-
export {
|
|
14
|
-
ModernServer,
|
|
15
|
-
Server,
|
|
16
|
-
createProxyHandler,
|
|
17
|
-
src_default as default
|
|
18
|
-
};
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
import { URL } from "url";
|
|
2
|
-
import qs from "querystring";
|
|
3
|
-
import { Buffer } from "buffer";
|
|
4
|
-
import createEtag from "etag";
|
|
5
|
-
import fresh from "fresh";
|
|
6
|
-
import { headersWithoutCookie } from "../../utils";
|
|
7
|
-
class ModernServerContext {
|
|
8
|
-
constructor(req, res, options) {
|
|
9
|
-
this.params = {};
|
|
10
|
-
this.options = {};
|
|
11
|
-
this.req = req;
|
|
12
|
-
this.res = res;
|
|
13
|
-
this.options = options || {};
|
|
14
|
-
this.serverData = {};
|
|
15
|
-
this.bind();
|
|
16
|
-
}
|
|
17
|
-
get logger() {
|
|
18
|
-
return this.req.logger;
|
|
19
|
-
}
|
|
20
|
-
get metrics() {
|
|
21
|
-
return this.req.metrics;
|
|
22
|
-
}
|
|
23
|
-
bind() {
|
|
24
|
-
const { req, res } = this;
|
|
25
|
-
req.get = (key) => this.getReqHeader(key);
|
|
26
|
-
res.set = (key, value) => this.res.setHeader(key, value);
|
|
27
|
-
res.send = (body) => {
|
|
28
|
-
this.send(body);
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
send(body) {
|
|
32
|
-
try {
|
|
33
|
-
const generateETag = !this.res.getHeader("ETag") && this.options.etag;
|
|
34
|
-
if (body !== void 0 && generateETag) {
|
|
35
|
-
const encoding = typeof body === "string" ? "utf-8" : void 0;
|
|
36
|
-
const buf = !Buffer.isBuffer(body) ? Buffer.from(body, encoding) : body;
|
|
37
|
-
const etag = createEtag(buf, { weak: true });
|
|
38
|
-
if (etag) {
|
|
39
|
-
this.res.setHeader("ETag", etag);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
if (this.fresh) {
|
|
43
|
-
this.status = 304;
|
|
44
|
-
}
|
|
45
|
-
} catch (e) {
|
|
46
|
-
this.logger.error(e.message);
|
|
47
|
-
}
|
|
48
|
-
this.res.end(body);
|
|
49
|
-
}
|
|
50
|
-
setParams(params) {
|
|
51
|
-
this.params = params;
|
|
52
|
-
}
|
|
53
|
-
setServerData(key, value) {
|
|
54
|
-
this.serverData[key] = value;
|
|
55
|
-
}
|
|
56
|
-
getReqHeader(key) {
|
|
57
|
-
const { req } = this;
|
|
58
|
-
const field = key.toLowerCase();
|
|
59
|
-
switch (field) {
|
|
60
|
-
case "referer":
|
|
61
|
-
case "referrer":
|
|
62
|
-
return req.headers.referrer || req.headers.referer || "";
|
|
63
|
-
default:
|
|
64
|
-
return req.headers[field] || "";
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
get fresh() {
|
|
68
|
-
const { status, res, method } = this;
|
|
69
|
-
if ("GET" !== method && "HEAD" !== method) {
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
|
-
if (status >= 200 && status < 300 || 304 === status) {
|
|
73
|
-
return fresh(this.headers, {
|
|
74
|
-
etag: res.getHeader("ETag"),
|
|
75
|
-
"last-modified": res.getHeader("Last-Modified")
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
get headers() {
|
|
81
|
-
return this.req.headers;
|
|
82
|
-
}
|
|
83
|
-
get method() {
|
|
84
|
-
return this.req.method;
|
|
85
|
-
}
|
|
86
|
-
get url() {
|
|
87
|
-
return this.req.url || "";
|
|
88
|
-
}
|
|
89
|
-
set url(val) {
|
|
90
|
-
this.req.url = val;
|
|
91
|
-
}
|
|
92
|
-
get host() {
|
|
93
|
-
let host = this.getReqHeader("X-Forwarded-Host");
|
|
94
|
-
if (!host) {
|
|
95
|
-
host = this.getReqHeader("Host");
|
|
96
|
-
}
|
|
97
|
-
return host.split(/\s*,\s*/, 1)[0] || "";
|
|
98
|
-
}
|
|
99
|
-
get protocol() {
|
|
100
|
-
if (this.req.socket.encrypted) {
|
|
101
|
-
return "https";
|
|
102
|
-
}
|
|
103
|
-
const proto = this.getReqHeader("X-Forwarded-Proto");
|
|
104
|
-
return proto ? proto.split(/\s*,\s*/, 1)[0] : "http";
|
|
105
|
-
}
|
|
106
|
-
get origin() {
|
|
107
|
-
return `${this.protocol}://${this.host}`;
|
|
108
|
-
}
|
|
109
|
-
get href() {
|
|
110
|
-
return this.origin + this.url;
|
|
111
|
-
}
|
|
112
|
-
get parsedURL() {
|
|
113
|
-
const url = new URL(this.req.url, this.origin);
|
|
114
|
-
return url;
|
|
115
|
-
}
|
|
116
|
-
get path() {
|
|
117
|
-
return this.parsedURL.pathname;
|
|
118
|
-
}
|
|
119
|
-
set path(p) {
|
|
120
|
-
const url = new URL(this.req.url, this.origin);
|
|
121
|
-
if (!url || !p) {
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
if (url.pathname === p) {
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
url.pathname = p;
|
|
128
|
-
this.url = url.toString();
|
|
129
|
-
}
|
|
130
|
-
get querystring() {
|
|
131
|
-
if (!this.req) {
|
|
132
|
-
return "";
|
|
133
|
-
}
|
|
134
|
-
return this.parsedURL.search.replace(/^\?/, "") || "";
|
|
135
|
-
}
|
|
136
|
-
get query() {
|
|
137
|
-
const str = this.querystring;
|
|
138
|
-
return qs.parse(str);
|
|
139
|
-
}
|
|
140
|
-
get status() {
|
|
141
|
-
return this.res.statusCode;
|
|
142
|
-
}
|
|
143
|
-
set status(statusCode) {
|
|
144
|
-
this.res.statusCode = statusCode;
|
|
145
|
-
}
|
|
146
|
-
resHasHandled() {
|
|
147
|
-
return this.res.writableEnded;
|
|
148
|
-
}
|
|
149
|
-
error(dig, e = "") {
|
|
150
|
-
this.logger.error(
|
|
151
|
-
`Web Server Error - ${dig}, error = %s, req.url = %s, req.headers = %o`,
|
|
152
|
-
e instanceof Error ? e.stack || e.message : e,
|
|
153
|
-
this.path,
|
|
154
|
-
headersWithoutCookie(this.headers)
|
|
155
|
-
);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
export {
|
|
159
|
-
ModernServerContext
|
|
160
|
-
};
|
|
@@ -1,134 +0,0 @@
|
|
|
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
|
-
import cookie from "cookie";
|
|
21
|
-
import { RouteAPI } from "./route";
|
|
22
|
-
import { TemplateAPI } from "./template";
|
|
23
|
-
class Response {
|
|
24
|
-
constructor(res) {
|
|
25
|
-
this.res = res;
|
|
26
|
-
this._cookie = cookie.parse(res.getHeader("set-cookie") || "");
|
|
27
|
-
this.cookies = {
|
|
28
|
-
get: this.getCookie.bind(this),
|
|
29
|
-
set: this.setCookie.bind(this),
|
|
30
|
-
delete: this.deleteCookie.bind(this),
|
|
31
|
-
clear: this.clearCookie.bind(this),
|
|
32
|
-
apply: this.applyCookie.bind(this)
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
get(key) {
|
|
36
|
-
return this.res.getHeader(key);
|
|
37
|
-
}
|
|
38
|
-
set(key, value) {
|
|
39
|
-
return this.res.setHeader(key, value);
|
|
40
|
-
}
|
|
41
|
-
status(code) {
|
|
42
|
-
this.res.statusCode = code;
|
|
43
|
-
}
|
|
44
|
-
getCookie(key) {
|
|
45
|
-
return this._cookie[key];
|
|
46
|
-
}
|
|
47
|
-
setCookie(key, value) {
|
|
48
|
-
this._cookie[key] = value;
|
|
49
|
-
}
|
|
50
|
-
deleteCookie(key) {
|
|
51
|
-
if (this._cookie[key]) {
|
|
52
|
-
delete this._cookie[key];
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
clearCookie() {
|
|
56
|
-
this._cookie = {};
|
|
57
|
-
}
|
|
58
|
-
applyCookie() {
|
|
59
|
-
const str = Object.entries(this._cookie).map(([key, value]) => {
|
|
60
|
-
return cookie.serialize(key, value);
|
|
61
|
-
}).join("; ");
|
|
62
|
-
if (str) {
|
|
63
|
-
this.res.setHeader("set-cookie", str);
|
|
64
|
-
} else {
|
|
65
|
-
this.res.removeHeader("set-cookie");
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
raw(body, options) {
|
|
69
|
-
const { status, headers = {} } = options || {};
|
|
70
|
-
Object.entries(headers).forEach(([key, value]) => {
|
|
71
|
-
this.res.setHeader(key, value);
|
|
72
|
-
});
|
|
73
|
-
if (status) {
|
|
74
|
-
this.res.statusCode = status;
|
|
75
|
-
}
|
|
76
|
-
this.res.end(body);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
class Request {
|
|
80
|
-
constructor(ctx) {
|
|
81
|
-
this.url = ctx.url;
|
|
82
|
-
this.host = ctx.host;
|
|
83
|
-
this.pathname = ctx.path;
|
|
84
|
-
this.query = ctx.query;
|
|
85
|
-
this.headers = ctx.headers;
|
|
86
|
-
this.cookie = ctx.headers.cookie || "";
|
|
87
|
-
this._cookie = cookie.parse(this.cookie);
|
|
88
|
-
this.cookies = {
|
|
89
|
-
get: this.getCookie.bind(this)
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
getCookie(key) {
|
|
93
|
-
return this._cookie[key];
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
const base = (context) => {
|
|
97
|
-
const { res } = context;
|
|
98
|
-
return {
|
|
99
|
-
response: new Response(res),
|
|
100
|
-
request: new Request(context),
|
|
101
|
-
logger: context.logger,
|
|
102
|
-
metrics: context.metrics
|
|
103
|
-
};
|
|
104
|
-
};
|
|
105
|
-
const createAfterMatchContext = (context, entryName) => {
|
|
106
|
-
const baseContext = base(context);
|
|
107
|
-
return __spreadProps(__spreadValues({}, baseContext), {
|
|
108
|
-
router: new RouteAPI(entryName)
|
|
109
|
-
});
|
|
110
|
-
};
|
|
111
|
-
const createAfterRenderContext = (context, content) => {
|
|
112
|
-
const baseContext = base(context);
|
|
113
|
-
return __spreadProps(__spreadValues({}, baseContext), {
|
|
114
|
-
template: new TemplateAPI(content)
|
|
115
|
-
});
|
|
116
|
-
};
|
|
117
|
-
const createMiddlewareContext = (context) => {
|
|
118
|
-
const baseContext = base(context);
|
|
119
|
-
return __spreadProps(__spreadValues({}, baseContext), {
|
|
120
|
-
response: __spreadProps(__spreadValues({}, baseContext.response), {
|
|
121
|
-
locals: context.res.locals || {}
|
|
122
|
-
}),
|
|
123
|
-
source: {
|
|
124
|
-
req: context.req,
|
|
125
|
-
res: context.res
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
};
|
|
129
|
-
export {
|
|
130
|
-
base,
|
|
131
|
-
createAfterMatchContext,
|
|
132
|
-
createAfterRenderContext,
|
|
133
|
-
createMiddlewareContext
|
|
134
|
-
};
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
class RouteAPI {
|
|
2
|
-
constructor(entryName) {
|
|
3
|
-
this.current = entryName;
|
|
4
|
-
this.status = 200;
|
|
5
|
-
this.url = "";
|
|
6
|
-
}
|
|
7
|
-
redirect(url, status = 302) {
|
|
8
|
-
this.url = url;
|
|
9
|
-
this.status = status;
|
|
10
|
-
}
|
|
11
|
-
rewrite(entryName) {
|
|
12
|
-
this.current = entryName;
|
|
13
|
-
}
|
|
14
|
-
use(entryName) {
|
|
15
|
-
this.rewrite(entryName);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
export {
|
|
19
|
-
RouteAPI
|
|
20
|
-
};
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { Transform } from "stream";
|
|
2
|
-
const RegList = {
|
|
3
|
-
before: {
|
|
4
|
-
head: "<head>",
|
|
5
|
-
body: "<body>"
|
|
6
|
-
},
|
|
7
|
-
after: {
|
|
8
|
-
head: "</head>",
|
|
9
|
-
body: "</body>"
|
|
10
|
-
}
|
|
11
|
-
};
|
|
12
|
-
class TemplateAPI {
|
|
13
|
-
constructor(content) {
|
|
14
|
-
this.content = content;
|
|
15
|
-
}
|
|
16
|
-
get() {
|
|
17
|
-
return this.content;
|
|
18
|
-
}
|
|
19
|
-
set(content) {
|
|
20
|
-
this.content = content;
|
|
21
|
-
}
|
|
22
|
-
prependHead(fragment) {
|
|
23
|
-
const { head } = RegList.before;
|
|
24
|
-
return this.replace(head, `${head}${fragment}`);
|
|
25
|
-
}
|
|
26
|
-
appendHead(fragment) {
|
|
27
|
-
const { head } = RegList.after;
|
|
28
|
-
return this.replace(head, `${fragment}${head}`);
|
|
29
|
-
}
|
|
30
|
-
prependBody(fragment) {
|
|
31
|
-
const { body } = RegList.before;
|
|
32
|
-
return this.replace(body, `${body}${fragment}`);
|
|
33
|
-
}
|
|
34
|
-
appendBody(fragment) {
|
|
35
|
-
const { body } = RegList.after;
|
|
36
|
-
return this.replace(body, `${fragment}${body}`);
|
|
37
|
-
}
|
|
38
|
-
replace(reg, text) {
|
|
39
|
-
this.content = this.content.replace(reg, text);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
const templateInjectableStream = ({
|
|
43
|
-
prependHead,
|
|
44
|
-
appendHead,
|
|
45
|
-
prependBody,
|
|
46
|
-
appendBody
|
|
47
|
-
}) => new Transform({
|
|
48
|
-
write(chunk, _, callback) {
|
|
49
|
-
let chunk_str = chunk.toString();
|
|
50
|
-
if (prependHead) {
|
|
51
|
-
const { head } = RegList.before;
|
|
52
|
-
chunk_str = chunk_str.replace(head, `${head}${prependHead}`);
|
|
53
|
-
}
|
|
54
|
-
if (appendHead) {
|
|
55
|
-
const { head } = RegList.after;
|
|
56
|
-
chunk_str = chunk_str.replace(head, `${appendHead}${head}`);
|
|
57
|
-
}
|
|
58
|
-
if (prependBody) {
|
|
59
|
-
const { body } = RegList.before;
|
|
60
|
-
chunk_str = chunk_str.replace(body, `${body}${prependBody}`);
|
|
61
|
-
}
|
|
62
|
-
if (appendBody) {
|
|
63
|
-
const { body } = RegList.after;
|
|
64
|
-
chunk_str = chunk_str.replace(body, `${appendBody}${body}`);
|
|
65
|
-
}
|
|
66
|
-
this.push(chunk_str);
|
|
67
|
-
callback();
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
export {
|
|
71
|
-
TemplateAPI,
|
|
72
|
-
templateInjectableStream
|
|
73
|
-
};
|