@modern-js/prod-server 2.19.1 → 2.21.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 +34 -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 +7 -49
- package/dist/cjs/libs/render/reader.js +4 -20
- package/dist/cjs/libs/render/ssr.js +8 -10
- 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 +28 -82
- 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 +6 -134
- 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 +15 -137
- 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 +24 -229
- 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/index.js +3 -2
- package/dist/esm-node/libs/render/reader.js +1 -13
- package/dist/esm-node/libs/render/ssr.js +5 -3
- 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 +4 -15
- package/dist/esm-node/workerServer.js +102 -47
- package/dist/types/index.d.ts +0 -2
- package/dist/types/libs/context/context.d.ts +1 -4
- package/dist/types/libs/loadConfig.d.ts +0 -1
- package/dist/types/libs/logger.d.ts +0 -2
- package/dist/types/libs/render/cache/index.d.ts +0 -2
- package/dist/types/libs/render/cache/spr.d.ts +0 -2
- package/dist/types/libs/render/index.d.ts +3 -1
- package/dist/types/libs/render/ssr.d.ts +1 -0
- package/dist/types/server/index.d.ts +0 -3
- package/dist/types/utils.d.ts +1 -1
- package/dist/types/workerServer.d.ts +33 -5
- package/package.json +9 -8
|
@@ -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
|
+
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -6,7 +6,5 @@ export { ModernServer } from './server/modernServer';
|
|
|
6
6
|
export { createProxyHandler } from './libs/proxy';
|
|
7
7
|
export * from './type';
|
|
8
8
|
export * from './constants';
|
|
9
|
-
|
|
10
9
|
declare const _default: (options: ModernServerOptions) => Promise<Server>;
|
|
11
|
-
|
|
12
10
|
export default _default;
|
|
@@ -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/dQl0PkddbjYymDTKBgvwm/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';
|
|
@@ -18,12 +18,10 @@ export declare class ModernServerContext implements ModernServerContextInterface
|
|
|
18
18
|
/**
|
|
19
19
|
* http response
|
|
20
20
|
*/
|
|
21
|
-
|
|
22
21
|
res: ServerResponse;
|
|
23
22
|
/**
|
|
24
23
|
* url params
|
|
25
24
|
*/
|
|
26
|
-
|
|
27
25
|
params: Record<string, string>;
|
|
28
26
|
get logger(): import("@modern-js/types").Logger;
|
|
29
27
|
get metrics(): import("@modern-js/types").Metrics;
|
|
@@ -54,7 +52,6 @@ export declare class ModernServerContext implements ModernServerContextInterface
|
|
|
54
52
|
/**
|
|
55
53
|
* 判断链接是否已经关闭
|
|
56
54
|
*/
|
|
57
|
-
|
|
58
55
|
resHasHandled(): boolean;
|
|
59
56
|
error(dig: string, e?: Error | string): void;
|
|
60
57
|
}
|
|
@@ -44,7 +44,6 @@ declare const LOG_TYPES: {
|
|
|
44
44
|
level: string;
|
|
45
45
|
};
|
|
46
46
|
};
|
|
47
|
-
|
|
48
47
|
declare class Logger {
|
|
49
48
|
private readonly level;
|
|
50
49
|
private readonly config;
|
|
@@ -55,7 +54,6 @@ declare class Logger {
|
|
|
55
54
|
private _log;
|
|
56
55
|
private getLongestLabel;
|
|
57
56
|
}
|
|
58
|
-
|
|
59
57
|
type LoggerInterface = { [key in keyof typeof LOG_TYPES]: LoggerFunction };
|
|
60
58
|
declare const logger: Logger & LoggerInterface;
|
|
61
59
|
export { Logger };
|
|
@@ -2,7 +2,5 @@
|
|
|
2
2
|
import { Readable } from 'stream';
|
|
3
3
|
import type { ModernServerContext } from '@modern-js/types';
|
|
4
4
|
import { RenderFunction, SSRServerContext } from '../type';
|
|
5
|
-
|
|
6
5
|
declare const _default: (renderFn: RenderFunction, ctx: ModernServerContext) => (context: SSRServerContext) => Promise<string | Readable>;
|
|
7
|
-
|
|
8
6
|
export default _default;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import LRUCache from 'lru-cache';
|
|
2
2
|
import { CacheContent, CacheManagerOptions, CacheResult, CacheContext, CacheConfig } from './type';
|
|
3
|
-
|
|
4
3
|
declare class CacheManager {
|
|
5
4
|
cache: LRUCache<string, CacheContent>;
|
|
6
5
|
cacheOptions: CacheManagerOptions;
|
|
@@ -18,7 +17,6 @@ declare class CacheManager {
|
|
|
18
17
|
set(context: CacheContext, html: string, cacheConfig: CacheConfig, sync?: boolean): Promise<any>;
|
|
19
18
|
del(context: CacheContext, cacheHash: string): Promise<void>;
|
|
20
19
|
}
|
|
21
|
-
|
|
22
20
|
export declare function createCache(): CacheManager;
|
|
23
21
|
export declare function destroyCache(): void;
|
|
24
22
|
export {};
|
|
@@ -4,11 +4,13 @@ import { ModernRoute } from '../route';
|
|
|
4
4
|
export declare const createRenderHandler: ({
|
|
5
5
|
distDir,
|
|
6
6
|
staticGenerate,
|
|
7
|
-
forceCSR
|
|
7
|
+
forceCSR,
|
|
8
|
+
nonce
|
|
8
9
|
}: {
|
|
9
10
|
distDir: string;
|
|
10
11
|
staticGenerate: boolean;
|
|
11
12
|
forceCSR?: boolean | undefined;
|
|
13
|
+
nonce?: string | undefined;
|
|
12
14
|
}) => ({
|
|
13
15
|
ctx,
|
|
14
16
|
route,
|
|
@@ -26,14 +26,12 @@ export declare class Server {
|
|
|
26
26
|
* - 执行 prepare hook
|
|
27
27
|
* - 执行 server init
|
|
28
28
|
*/
|
|
29
|
-
|
|
30
29
|
init(): Promise<this>;
|
|
31
30
|
/**
|
|
32
31
|
* Execute config hooks
|
|
33
32
|
* @param runner
|
|
34
33
|
* @param options
|
|
35
34
|
*/
|
|
36
|
-
|
|
37
35
|
private runConfigHook;
|
|
38
36
|
private runPrepareHook;
|
|
39
37
|
private initServerConfig;
|
|
@@ -41,7 +39,6 @@ export declare class Server {
|
|
|
41
39
|
*
|
|
42
40
|
* merge cliConfig and serverConfig
|
|
43
41
|
*/
|
|
44
|
-
|
|
45
42
|
private initConfig;
|
|
46
43
|
close(): Promise<void>;
|
|
47
44
|
listen<T extends number | ListenOptions | undefined>(options: T, listener: any): void;
|
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/dQl0PkddbjYymDTKBgvwm/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,10 +1,39 @@
|
|
|
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
|
+
appendHeaders(headers: Record<string, any>): this;
|
|
23
|
+
/**
|
|
24
|
+
* Iterate a Object
|
|
25
|
+
* 1. adds the value if the key does not already exist.
|
|
26
|
+
* 2. modify the value if the key does already exist.
|
|
27
|
+
*
|
|
28
|
+
* more detail follow: https://developer.mozilla.org/en-US/docs/Web/API/Headers/set
|
|
29
|
+
* @param headers
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
setHeaders(headers: Record<string, any>): this;
|
|
5
33
|
}
|
|
6
34
|
export type Manifest = {
|
|
7
|
-
pages: Record<string,
|
|
35
|
+
pages: Record<string,
|
|
36
|
+
// path
|
|
8
37
|
{
|
|
9
38
|
entryName: string;
|
|
10
39
|
template: string;
|
|
@@ -12,5 +41,4 @@ export type Manifest = {
|
|
|
12
41
|
}>;
|
|
13
42
|
routes: ModernRouteInterface[];
|
|
14
43
|
};
|
|
15
|
-
export declare const
|
|
16
|
-
export declare const createHandler: (manifest: Manifest) => (ctx: Context) => Promise<void>;
|
|
44
|
+
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.21.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.21.0",
|
|
65
|
+
"@modern-js/server-core": "2.21.0"
|
|
65
66
|
},
|
|
66
67
|
"devDependencies": {
|
|
67
68
|
"@types/cookie": "^0.4.1",
|
|
@@ -76,11 +77,11 @@
|
|
|
76
77
|
"jest": "^29",
|
|
77
78
|
"node-mocks-http": "^1.11.0",
|
|
78
79
|
"portfinder": "^1.0.28",
|
|
79
|
-
"typescript": "^
|
|
80
|
-
"@modern-js/types": "2.
|
|
81
|
-
"@modern-js/server-core": "2.
|
|
82
|
-
"@scripts/
|
|
83
|
-
"@scripts/
|
|
80
|
+
"typescript": "^5",
|
|
81
|
+
"@modern-js/types": "2.21.0",
|
|
82
|
+
"@modern-js/server-core": "2.21.0",
|
|
83
|
+
"@scripts/jest-config": "2.21.0",
|
|
84
|
+
"@scripts/build": "2.21.0"
|
|
84
85
|
},
|
|
85
86
|
"sideEffects": false,
|
|
86
87
|
"publishConfig": {
|