@modern-js/prod-server 2.19.0 → 2.20.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 +20 -0
- package/dist/cjs/index.js +3 -15
- package/dist/cjs/libs/context/context.js +10 -26
- package/dist/cjs/libs/hook-api/index.js +13 -29
- package/dist/cjs/libs/hook-api/route.js +4 -16
- package/dist/cjs/libs/hook-api/template.js +2 -14
- package/dist/cjs/libs/loadConfig.js +4 -47
- package/dist/cjs/libs/logger.js +5 -17
- package/dist/cjs/libs/render/cache/__tests__/cache.fun.test.js +2 -6
- package/dist/cjs/libs/render/cache/page-caches/lru.js +5 -21
- package/dist/cjs/libs/render/cache/spr.js +7 -23
- package/dist/cjs/libs/render/cache/util.js +2 -6
- package/dist/cjs/libs/render/index.js +4 -47
- package/dist/cjs/libs/render/reader.js +4 -20
- package/dist/cjs/libs/render/ssr.js +3 -7
- package/dist/cjs/libs/render/static.js +2 -6
- package/dist/cjs/libs/route/index.js +3 -15
- package/dist/cjs/libs/route/matcher.js +5 -17
- package/dist/cjs/libs/route/route.js +10 -22
- package/dist/cjs/libs/serveFile.js +2 -6
- package/dist/cjs/server/index.js +9 -25
- package/dist/cjs/server/modernServer.js +25 -80
- package/dist/cjs/workerServer.js +103 -48
- package/dist/esm/libs/context/context.js +4 -42
- package/dist/esm/libs/hook-api/index.js +6 -132
- package/dist/esm/libs/hook-api/route.js +3 -35
- package/dist/esm/libs/hook-api/template.js +3 -35
- package/dist/esm/libs/loadConfig.js +2 -52
- package/dist/esm/libs/logger.js +7 -101
- package/dist/esm/libs/proxy.js +5 -194
- package/dist/esm/libs/render/cache/__tests__/cache.fun.test.js +6 -192
- package/dist/esm/libs/render/cache/__tests__/cache.test.js +13 -202
- package/dist/esm/libs/render/cache/index.js +8 -164
- package/dist/esm/libs/render/cache/page-caches/index.js +3 -132
- package/dist/esm/libs/render/cache/page-caches/lru.js +3 -35
- package/dist/esm/libs/render/cache/spr.js +10 -171
- package/dist/esm/libs/render/cache/util.js +6 -211
- package/dist/esm/libs/render/index.js +3 -132
- package/dist/esm/libs/render/measure.js +4 -93
- package/dist/esm/libs/render/reader.js +8 -169
- package/dist/esm/libs/render/ssr.js +3 -132
- package/dist/esm/libs/render/static.js +3 -132
- package/dist/esm/libs/route/index.js +3 -35
- package/dist/esm/libs/route/matcher.js +3 -35
- package/dist/esm/libs/route/route.js +2 -18
- package/dist/esm/libs/serveFile.js +3 -132
- package/dist/esm/server/index.js +16 -247
- package/dist/esm/server/modernServer.js +21 -227
- package/dist/esm/server/modernServerSplit.js +12 -253
- package/dist/esm/utils.js +2 -62
- package/dist/esm/workerServer.js +134 -190
- package/dist/esm-node/libs/context/context.js +1 -13
- package/dist/esm-node/libs/hook-api/index.js +1 -13
- package/dist/esm-node/libs/hook-api/route.js +1 -13
- package/dist/esm-node/libs/hook-api/template.js +1 -13
- package/dist/esm-node/libs/logger.js +1 -13
- package/dist/esm-node/libs/render/cache/page-caches/lru.js +1 -13
- package/dist/esm-node/libs/render/cache/spr.js +1 -13
- package/dist/esm-node/libs/render/reader.js +1 -13
- package/dist/esm-node/libs/route/index.js +1 -13
- package/dist/esm-node/libs/route/matcher.js +1 -13
- package/dist/esm-node/libs/route/route.js +1 -13
- package/dist/esm-node/server/index.js +1 -13
- package/dist/esm-node/server/modernServer.js +1 -13
- package/dist/esm-node/workerServer.js +102 -47
- package/dist/types/libs/context/context.d.ts +1 -1
- package/dist/types/utils.d.ts +1 -1
- package/dist/types/workerServer.d.ts +33 -4
- package/package.json +8 -7
|
@@ -1,68 +1,123 @@
|
|
|
1
|
+
import { _ as _define_property } from "@swc/helpers/_/_define_property";
|
|
1
2
|
import { Logger } from "./libs/logger";
|
|
2
3
|
import { RouteMatchManager } from "./libs/route";
|
|
3
4
|
import { metrics as defaultMetrics } from "./libs/metrics";
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
export class ReturnResponse {
|
|
6
|
+
/**
|
|
7
|
+
* Iterate a Object
|
|
8
|
+
* 1. adds the value if the key does not already exist.
|
|
9
|
+
* 2. append the value if the key does already exist.
|
|
10
|
+
*
|
|
11
|
+
* more detail follow: https://developer.mozilla.org/en-US/docs/Web/API/Headers/append
|
|
12
|
+
* @param headers
|
|
13
|
+
* @returns
|
|
14
|
+
*/
|
|
15
|
+
appendHeaders(headers) {
|
|
16
|
+
Object.entries(headers).forEach(([key, value]) => {
|
|
17
|
+
this.headers.append(key, value.toString());
|
|
18
|
+
});
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Iterate a Object
|
|
23
|
+
* 1. adds the value if the key does not already exist.
|
|
24
|
+
* 2. modify the value if the key does already exist.
|
|
25
|
+
*
|
|
26
|
+
* more detail follow: https://developer.mozilla.org/en-US/docs/Web/API/Headers/set
|
|
27
|
+
* @param headers
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
setHeaders(headers) {
|
|
31
|
+
Object.entries(headers).forEach(([key, value]) => {
|
|
32
|
+
this.headers.set(key, value.toString());
|
|
33
|
+
});
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
constructor(body, status, headers = {}) {
|
|
37
|
+
_define_property(this, "body", void 0);
|
|
38
|
+
_define_property(this, "status", void 0);
|
|
39
|
+
_define_property(this, "headers", void 0);
|
|
40
|
+
this.body = body;
|
|
41
|
+
this.status = status;
|
|
42
|
+
this.headers = new Headers(headers);
|
|
43
|
+
this.headers.set("content-type", "text/html;charset=UTF-8");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const RESPONSE_NOTFOUND = new ReturnResponse("404: Page not found", 404);
|
|
7
47
|
export const createHandler = (manifest) => {
|
|
8
48
|
const routeMgr = new RouteMatchManager();
|
|
9
49
|
const { pages, routes } = manifest;
|
|
10
50
|
routeMgr.reset(routes);
|
|
11
|
-
return async (
|
|
12
|
-
|
|
13
|
-
const
|
|
51
|
+
return async (options) => {
|
|
52
|
+
const { request, loadableStats, routeManifest } = options;
|
|
53
|
+
const url = new URL(request.url);
|
|
54
|
+
const pageMatch = routeMgr.match(url.pathname);
|
|
14
55
|
if (!pageMatch) {
|
|
15
|
-
|
|
16
|
-
ctx.status = 404;
|
|
17
|
-
return;
|
|
56
|
+
return RESPONSE_NOTFOUND;
|
|
18
57
|
}
|
|
19
58
|
const page = pages[pageMatch.spec.urlPath];
|
|
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;
|
|
26
|
-
const params = pageMatch.parseURLParams(ctx.url);
|
|
27
59
|
if (page.serverRender) {
|
|
28
60
|
try {
|
|
29
|
-
|
|
30
|
-
|
|
61
|
+
const responseLike = {
|
|
62
|
+
headers: {},
|
|
63
|
+
statusCode: 200,
|
|
64
|
+
locals: {},
|
|
65
|
+
setHeader(key, value) {
|
|
66
|
+
this.headers[key] = value;
|
|
67
|
+
},
|
|
68
|
+
status(code) {
|
|
69
|
+
this.statusCode = code;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const params = pageMatch.parseURLParams(url.pathname) || {};
|
|
73
|
+
const serverRenderContext = {
|
|
74
|
+
request: createServerRequest(url, request, params),
|
|
75
|
+
response: responseLike,
|
|
76
|
+
loadableStats,
|
|
77
|
+
routeManifest,
|
|
78
|
+
redirection: {},
|
|
31
79
|
template: page.template,
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
response: ctx.response,
|
|
35
|
-
pathname: ctx.pathname,
|
|
36
|
-
req: ctx.request,
|
|
37
|
-
res: ctx.response,
|
|
38
|
-
params: ctx.params || params || {},
|
|
39
|
-
logger: ctx.logger || new Logger({
|
|
80
|
+
entryName: page.entryName,
|
|
81
|
+
logger: new Logger({
|
|
40
82
|
level: "warn"
|
|
41
83
|
}),
|
|
42
|
-
metrics:
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
84
|
+
metrics: defaultMetrics,
|
|
85
|
+
// FIXME: pass correctly req & res
|
|
86
|
+
req: request,
|
|
87
|
+
res: responseLike
|
|
88
|
+
};
|
|
89
|
+
const body = await page.serverRender(serverRenderContext);
|
|
90
|
+
return new ReturnResponse(body, responseLike.statusCode, responseLike.headers);
|
|
48
91
|
} catch (e) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return;
|
|
53
|
-
} else {
|
|
54
|
-
ctx.body = "404: not found";
|
|
55
|
-
ctx.status = 404;
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
92
|
+
console.warn(`page(${pageMatch.spec.urlPath}) serverRender occur error: `);
|
|
93
|
+
console.warn(e);
|
|
94
|
+
return createResponse(page.template);
|
|
58
95
|
}
|
|
59
96
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
97
|
+
console.warn(`Can't not page(${pageMatch.spec.urlPath}) serverRender`);
|
|
98
|
+
return createResponse(page.template);
|
|
99
|
+
function createServerRequest(url2, request2, params) {
|
|
100
|
+
const { pathname, host, searchParams } = url2;
|
|
101
|
+
const { headers: rawHeaders } = request2;
|
|
102
|
+
const headers = {};
|
|
103
|
+
rawHeaders.forEach((value, key) => {
|
|
104
|
+
headers[key] = value;
|
|
105
|
+
});
|
|
106
|
+
const query = Object.fromEntries(searchParams);
|
|
107
|
+
return {
|
|
108
|
+
pathname,
|
|
109
|
+
host,
|
|
110
|
+
headers,
|
|
111
|
+
params,
|
|
112
|
+
query
|
|
113
|
+
};
|
|
64
114
|
}
|
|
65
|
-
ctx.body = "404: not found";
|
|
66
|
-
ctx.status = 404;
|
|
67
115
|
};
|
|
68
116
|
};
|
|
117
|
+
function createResponse(template) {
|
|
118
|
+
if (template) {
|
|
119
|
+
return new ReturnResponse(template, 200);
|
|
120
|
+
} else {
|
|
121
|
+
return RESPONSE_NOTFOUND;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -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/fH4DiwP0xq-KSokd2lFla/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';
|
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/fH4DiwP0xq-KSokd2lFla/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;
|
|
@@ -1,7 +1,37 @@
|
|
|
1
1
|
import { ModernRouteInterface } from './libs/route';
|
|
2
2
|
export type Context = Record<string, any>;
|
|
3
|
-
export interface
|
|
4
|
-
|
|
3
|
+
export interface HandlerOptions {
|
|
4
|
+
request: Request;
|
|
5
|
+
loadableStats: Record<string, any>;
|
|
6
|
+
routeManifest: Record<string, any>;
|
|
7
|
+
}
|
|
8
|
+
export declare class ReturnResponse {
|
|
9
|
+
body: string;
|
|
10
|
+
status: number;
|
|
11
|
+
headers: Headers;
|
|
12
|
+
constructor(body: string, status: number, headers?: Record<string, any>);
|
|
13
|
+
/**
|
|
14
|
+
* Iterate a Object
|
|
15
|
+
* 1. adds the value if the key does not already exist.
|
|
16
|
+
* 2. append the value if the key does already exist.
|
|
17
|
+
*
|
|
18
|
+
* more detail follow: https://developer.mozilla.org/en-US/docs/Web/API/Headers/append
|
|
19
|
+
* @param headers
|
|
20
|
+
* @returns
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
appendHeaders(headers: Record<string, any>): this;
|
|
24
|
+
/**
|
|
25
|
+
* Iterate a Object
|
|
26
|
+
* 1. adds the value if the key does not already exist.
|
|
27
|
+
* 2. modify the value if the key does already exist.
|
|
28
|
+
*
|
|
29
|
+
* more detail follow: https://developer.mozilla.org/en-US/docs/Web/API/Headers/set
|
|
30
|
+
* @param headers
|
|
31
|
+
* @returns
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
setHeaders(headers: Record<string, any>): this;
|
|
5
35
|
}
|
|
6
36
|
export type Manifest = {
|
|
7
37
|
pages: Record<string, // path
|
|
@@ -12,5 +42,4 @@ export type Manifest = {
|
|
|
12
42
|
}>;
|
|
13
43
|
routes: ModernRouteInterface[];
|
|
14
44
|
};
|
|
15
|
-
export declare const
|
|
16
|
-
export declare const createHandler: (manifest: Manifest) => (ctx: Context) => Promise<void>;
|
|
45
|
+
export declare const createHandler: (manifest: Manifest) => (options: HandlerOptions) => Promise<ReturnResponse>;
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"modern",
|
|
16
16
|
"modern.js"
|
|
17
17
|
],
|
|
18
|
-
"version": "2.
|
|
18
|
+
"version": "2.20.0",
|
|
19
19
|
"jsnext:source": "./src/index.ts",
|
|
20
20
|
"types": "./dist/types/index.d.ts",
|
|
21
21
|
"main": "./dist/cjs/index.js",
|
|
@@ -60,8 +60,9 @@
|
|
|
60
60
|
"merge-deep": "^3.0.3",
|
|
61
61
|
"path-to-regexp": "^6.2.0",
|
|
62
62
|
"serve-static": "^1.14.1",
|
|
63
|
-
"@
|
|
64
|
-
"@modern-js/
|
|
63
|
+
"@swc/helpers": "0.5.1",
|
|
64
|
+
"@modern-js/utils": "2.20.0",
|
|
65
|
+
"@modern-js/server-core": "2.20.0"
|
|
65
66
|
},
|
|
66
67
|
"devDependencies": {
|
|
67
68
|
"@types/cookie": "^0.4.1",
|
|
@@ -77,10 +78,10 @@
|
|
|
77
78
|
"node-mocks-http": "^1.11.0",
|
|
78
79
|
"portfinder": "^1.0.28",
|
|
79
80
|
"typescript": "^4",
|
|
80
|
-
"@modern-js/types": "2.
|
|
81
|
-
"@modern-js/server-core": "2.
|
|
82
|
-
"@scripts/jest-config": "2.
|
|
83
|
-
"@scripts/build": "2.
|
|
81
|
+
"@modern-js/types": "2.20.0",
|
|
82
|
+
"@modern-js/server-core": "2.20.0",
|
|
83
|
+
"@scripts/jest-config": "2.20.0",
|
|
84
|
+
"@scripts/build": "2.20.0"
|
|
84
85
|
},
|
|
85
86
|
"sideEffects": false,
|
|
86
87
|
"publishConfig": {
|