@modern-js/prod-server 2.21.0 → 2.22.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 +30 -0
- package/dist/cjs/constants.js +15 -5
- package/dist/cjs/index.js +12 -4
- package/dist/cjs/libs/context/context.js +4 -2
- package/dist/cjs/libs/context/index.js +6 -2
- package/dist/cjs/libs/hook-api/base.js +88 -0
- package/dist/cjs/libs/hook-api/index.js +17 -79
- package/dist/cjs/libs/hook-api/index.worker.js +109 -0
- package/dist/cjs/libs/hook-api/route.js +3 -1
- package/dist/cjs/libs/hook-api/template.js +6 -26
- package/dist/cjs/libs/hook-api/templateForStream.js +35 -0
- package/dist/cjs/libs/loadConfig.js +9 -3
- package/dist/cjs/libs/logger.js +6 -2
- package/dist/cjs/libs/metrics.js +3 -1
- package/dist/cjs/libs/proxy.js +6 -2
- package/dist/cjs/libs/render/cache/__tests__/cacheable.js +3 -1
- package/dist/cjs/libs/render/cache/__tests__/error-configuration.js +3 -1
- package/dist/cjs/libs/render/cache/__tests__/matched-cache.js +3 -1
- package/dist/cjs/libs/render/cache/index.js +3 -1
- package/dist/cjs/libs/render/cache/page-caches/index.js +3 -1
- package/dist/cjs/libs/render/cache/page-caches/lru.js +3 -1
- package/dist/cjs/libs/render/cache/spr.js +6 -2
- package/dist/cjs/libs/render/cache/util.js +24 -8
- package/dist/cjs/libs/render/index.js +3 -4
- package/dist/cjs/libs/render/measure.js +6 -2
- package/dist/cjs/libs/render/reader.js +32 -19
- package/dist/cjs/libs/render/ssr.js +3 -1
- package/dist/cjs/libs/render/static.js +3 -1
- package/dist/cjs/libs/render/type.js +3 -1
- package/dist/cjs/libs/render/utils.js +8 -3
- package/dist/cjs/libs/route/index.js +6 -2
- package/dist/cjs/libs/route/matcher.js +3 -1
- package/dist/cjs/libs/route/route.js +3 -1
- package/dist/cjs/libs/serveFile.js +6 -2
- package/dist/cjs/renderHtml.js +75 -0
- package/dist/cjs/server/index.js +9 -3
- package/dist/cjs/server/modernServer.js +21 -16
- package/dist/cjs/server/modernServerSplit.js +3 -1
- package/dist/cjs/utils.js +27 -9
- package/dist/cjs/workerServer.js +95 -11
- package/dist/esm/libs/context/context.js +1 -1
- package/dist/esm/libs/hook-api/base.js +104 -0
- package/dist/esm/libs/hook-api/index.js +5 -109
- package/dist/esm/libs/hook-api/index.worker.js +105 -0
- package/dist/esm/libs/hook-api/template.js +1 -28
- package/dist/esm/libs/hook-api/templateForStream.js +28 -0
- package/dist/esm/libs/render/index.js +1 -4
- package/dist/esm/libs/render/reader.js +26 -26
- package/dist/esm/libs/render/utils.js +2 -1
- package/dist/esm/renderHtml.js +141 -0
- package/dist/esm/server/index.js +11 -1
- package/dist/esm/server/modernServer.js +45 -37
- package/dist/esm/workerServer.js +103 -10
- package/dist/esm-node/libs/context/context.js +1 -1
- package/dist/esm-node/libs/hook-api/base.js +68 -0
- package/dist/esm-node/libs/hook-api/index.js +5 -74
- package/dist/esm-node/libs/hook-api/index.worker.js +84 -0
- package/dist/esm-node/libs/hook-api/template.js +1 -25
- package/dist/esm-node/libs/hook-api/templateForStream.js +25 -0
- package/dist/esm-node/libs/render/index.js +1 -4
- package/dist/esm-node/libs/render/reader.js +14 -11
- package/dist/esm-node/libs/render/utils.js +2 -1
- package/dist/esm-node/renderHtml.js +71 -0
- package/dist/esm-node/server/index.js +6 -2
- package/dist/esm-node/server/modernServer.js +18 -15
- package/dist/esm-node/workerServer.js +89 -9
- package/dist/types/libs/context/context.d.ts +1 -1
- package/dist/types/libs/hook-api/base.d.ts +53 -0
- package/dist/types/libs/hook-api/index.worker.d.ts +18 -0
- package/dist/types/libs/hook-api/template.d.ts +11 -14
- package/dist/types/libs/hook-api/templateForStream.d.ts +13 -0
- package/dist/types/libs/render/reader.d.ts +4 -2
- package/dist/types/renderHtml.d.ts +21 -0
- package/dist/types/server/index.d.ts +5 -1
- package/dist/types/server/modernServer.d.ts +4 -3
- package/dist/types/utils.d.ts +1 -1
- package/dist/types/workerServer.d.ts +19 -8
- package/package.json +21 -7
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { CookieAPI, Metrics, ModernRequest, ModernResponse, Logger } from '@modern-js/types/server';
|
|
2
|
+
export interface ServerResponseLike {
|
|
3
|
+
statusCode?: number;
|
|
4
|
+
locals?: Record<string, any>;
|
|
5
|
+
getHeader: (key: string) => string | undefined | string[] | number;
|
|
6
|
+
setHeader: (key: string, value: string | number | string[]) => this | void;
|
|
7
|
+
removeHeader: (key: string) => void;
|
|
8
|
+
end: (body: string) => this | void;
|
|
9
|
+
}
|
|
10
|
+
export declare class BaseResponse implements ModernResponse {
|
|
11
|
+
cookies: CookieAPI;
|
|
12
|
+
private res;
|
|
13
|
+
constructor(res: ServerResponseLike);
|
|
14
|
+
get(key: string): string | number | string[] | undefined;
|
|
15
|
+
set(key: string, value: string | number): void | ServerResponseLike;
|
|
16
|
+
status(code: number): void;
|
|
17
|
+
private setCookie;
|
|
18
|
+
private clearCookie;
|
|
19
|
+
raw(body: string, options?: {
|
|
20
|
+
status?: number;
|
|
21
|
+
headers?: Record<string, any>;
|
|
22
|
+
}): void;
|
|
23
|
+
}
|
|
24
|
+
export interface ServerRequestLike {
|
|
25
|
+
url: string;
|
|
26
|
+
host: string;
|
|
27
|
+
path: string;
|
|
28
|
+
query: Record<string, any>;
|
|
29
|
+
headers: Record<string, any>;
|
|
30
|
+
}
|
|
31
|
+
export declare class BaseRequest implements ModernRequest {
|
|
32
|
+
readonly url: string;
|
|
33
|
+
readonly host: string;
|
|
34
|
+
readonly pathname: string;
|
|
35
|
+
readonly query: Record<string, any>;
|
|
36
|
+
readonly headers: Record<string, any>;
|
|
37
|
+
readonly cookie: string;
|
|
38
|
+
cookies: Pick<CookieAPI, 'get'>;
|
|
39
|
+
private _cookie;
|
|
40
|
+
constructor(request: ServerRequestLike);
|
|
41
|
+
private getCookie;
|
|
42
|
+
}
|
|
43
|
+
export interface ServerContextLike {
|
|
44
|
+
res: ServerResponseLike;
|
|
45
|
+
req: any;
|
|
46
|
+
metrics: Metrics;
|
|
47
|
+
logger: Logger;
|
|
48
|
+
url: string;
|
|
49
|
+
host: string;
|
|
50
|
+
path: string;
|
|
51
|
+
query: Record<string, any>;
|
|
52
|
+
headers: Record<string, any>;
|
|
53
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AfterMatchContext, AfterRenderContext, HookContext, Logger, Metrics, MiddlewareContext } from '@modern-js/types/server';
|
|
2
|
+
export interface WorkerResponse {
|
|
3
|
+
headers: Headers;
|
|
4
|
+
status: number;
|
|
5
|
+
isSent: boolean;
|
|
6
|
+
locals?: Record<string, any>;
|
|
7
|
+
body?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface WorkerServerContext {
|
|
10
|
+
res: WorkerResponse;
|
|
11
|
+
req: Request;
|
|
12
|
+
logger: Logger;
|
|
13
|
+
metrics: Metrics;
|
|
14
|
+
}
|
|
15
|
+
export declare const base: (context: WorkerServerContext) => HookContext;
|
|
16
|
+
export declare const createAfterMatchContext: (context: WorkerServerContext, entryName: string) => AfterMatchContext;
|
|
17
|
+
export declare const createAfterRenderContext: (context: WorkerServerContext, content: string) => AfterRenderContext;
|
|
18
|
+
export declare const createMiddlewareContext: (context: WorkerServerContext) => MiddlewareContext<'worker'>;
|
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
export declare const RegList: {
|
|
2
|
+
before: {
|
|
3
|
+
head: string;
|
|
4
|
+
body: string;
|
|
5
|
+
};
|
|
6
|
+
after: {
|
|
7
|
+
head: string;
|
|
8
|
+
body: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
3
11
|
export declare class TemplateAPI {
|
|
4
12
|
private content;
|
|
5
13
|
constructor(content: string);
|
|
@@ -10,15 +18,4 @@ export declare class TemplateAPI {
|
|
|
10
18
|
prependBody(fragment: string): void;
|
|
11
19
|
appendBody(fragment: string): void;
|
|
12
20
|
private replace;
|
|
13
|
-
}
|
|
14
|
-
export declare const templateInjectableStream: ({
|
|
15
|
-
prependHead,
|
|
16
|
-
appendHead,
|
|
17
|
-
prependBody,
|
|
18
|
-
appendBody
|
|
19
|
-
}: {
|
|
20
|
-
prependHead?: string | undefined;
|
|
21
|
-
appendHead?: string | undefined;
|
|
22
|
-
prependBody?: string | undefined;
|
|
23
|
-
appendBody?: string | undefined;
|
|
24
|
-
}) => Transform;
|
|
21
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Transform } from 'stream';
|
|
3
|
+
export declare const templateInjectableStream: ({
|
|
4
|
+
prependHead,
|
|
5
|
+
appendHead,
|
|
6
|
+
prependBody,
|
|
7
|
+
appendBody
|
|
8
|
+
}: {
|
|
9
|
+
prependHead?: string | undefined;
|
|
10
|
+
appendHead?: string | undefined;
|
|
11
|
+
prependBody?: string | undefined;
|
|
12
|
+
appendBody?: string | undefined;
|
|
13
|
+
}) => Transform;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
+
import type { IFs } from 'memfs';
|
|
2
3
|
export declare class LruReader {
|
|
3
4
|
private readonly cache;
|
|
5
|
+
private fs;
|
|
4
6
|
constructor();
|
|
5
|
-
init(): void;
|
|
7
|
+
init(fs?: IFs): void;
|
|
6
8
|
close(): void;
|
|
7
9
|
read(filepath: string): Promise<{
|
|
8
10
|
content: Buffer;
|
|
@@ -14,5 +16,5 @@ export declare class LruReader {
|
|
|
14
16
|
}
|
|
15
17
|
export declare const readFile: (filepath: string) => Promise<Buffer | undefined>;
|
|
16
18
|
export declare const updateFile: () => void;
|
|
17
|
-
export declare const init: () => void;
|
|
19
|
+
export declare const init: (fs?: IFs) => void;
|
|
18
20
|
export declare const close: () => void;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { IncomingHttpHeaders, OutgoingHttpHeaders } from 'http';
|
|
3
|
+
import { ModernServerOptions } from './type';
|
|
4
|
+
export interface RenderHtmlOptions {
|
|
5
|
+
/** request url */
|
|
6
|
+
url: string;
|
|
7
|
+
/** request method */
|
|
8
|
+
method?: string;
|
|
9
|
+
/** request headers */
|
|
10
|
+
headers?: IncomingHttpHeaders;
|
|
11
|
+
/** request body */
|
|
12
|
+
body?: string;
|
|
13
|
+
serverOptions: ModernServerOptions;
|
|
14
|
+
}
|
|
15
|
+
export interface ReturnResponse {
|
|
16
|
+
headers: OutgoingHttpHeaders;
|
|
17
|
+
redirected: boolean;
|
|
18
|
+
status: number;
|
|
19
|
+
url: string;
|
|
20
|
+
body: string;
|
|
21
|
+
}
|
|
@@ -26,7 +26,11 @@ export declare class Server {
|
|
|
26
26
|
* - 执行 prepare hook
|
|
27
27
|
* - 执行 server init
|
|
28
28
|
*/
|
|
29
|
-
init(
|
|
29
|
+
init({
|
|
30
|
+
disableHttpServer
|
|
31
|
+
}?: {
|
|
32
|
+
disableHttpServer: boolean;
|
|
33
|
+
}): Promise<this>;
|
|
30
34
|
/**
|
|
31
35
|
* Execute config hooks
|
|
32
36
|
* @param runner
|
|
@@ -42,14 +42,15 @@ export declare class ModernServer implements ModernServerInterface {
|
|
|
42
42
|
}: ModernServerOptions);
|
|
43
43
|
onInit(runner: ServerHookRunner, app: Server): Promise<void>;
|
|
44
44
|
onRepack(_: BuildOptions): void;
|
|
45
|
+
getRequestHandler(): (req: IncomingMessage, res: ServerResponse, next?: () => void) => void | ServerResponse;
|
|
46
|
+
render(req: IncomingMessage, res: ServerResponse, url?: string): Promise<string | import("stream").Readable | null>;
|
|
47
|
+
createHTTPServer(handler: (req: IncomingMessage, res: ServerResponse, next?: () => void) => void): Promise<Server<typeof IncomingMessage, typeof ServerResponse>>;
|
|
48
|
+
protected initReader(): void;
|
|
45
49
|
protected onServerChange({
|
|
46
50
|
filepath
|
|
47
51
|
}: {
|
|
48
52
|
filepath: string;
|
|
49
53
|
}): Promise<void>;
|
|
50
|
-
getRequestHandler(): (req: IncomingMessage, res: ServerResponse, next?: () => void) => void | ServerResponse;
|
|
51
|
-
render(req: IncomingMessage, res: ServerResponse, url?: string): Promise<string | import("stream").Readable | null>;
|
|
52
|
-
createHTTPServer(handler: (req: IncomingMessage, res: ServerResponse, next?: () => void) => void): Promise<Server<typeof IncomingMessage, typeof ServerResponse>>;
|
|
53
54
|
protected getRoutes(): ServerRoute[];
|
|
54
55
|
protected addHandler(handler: ModernServerHandler): void;
|
|
55
56
|
protected render404(context: ModernServerContext): 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/t0a-Q86lFJHlugCUZWCMB/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,3 +1,4 @@
|
|
|
1
|
+
import { AfterMatchContext, AfterRenderContext, MiddlewareContext, NextFunction } from '@modern-js/types';
|
|
1
2
|
import { ModernRouteInterface } from './libs/route';
|
|
2
3
|
export type Context = Record<string, any>;
|
|
3
4
|
export interface HandlerOptions {
|
|
@@ -31,14 +32,24 @@ export declare class ReturnResponse {
|
|
|
31
32
|
*/
|
|
32
33
|
setHeaders(headers: Record<string, any>): this;
|
|
33
34
|
}
|
|
35
|
+
type Middleware = (context: MiddlewareContext<'worker'>, next: NextFunction) => Promise<void> | void;
|
|
36
|
+
type ServerHooks = {
|
|
37
|
+
middleware?: Middleware | Middleware[];
|
|
38
|
+
afterRender?: (ctx: AfterRenderContext, next: unknown) => Promise<void> | void;
|
|
39
|
+
afterMatch?: (ctx: AfterMatchContext, next: unknown) => Promise<void> | void;
|
|
40
|
+
};
|
|
41
|
+
type Page = {
|
|
42
|
+
entryName: string;
|
|
43
|
+
template: string;
|
|
44
|
+
serverHooks?: ServerHooks;
|
|
45
|
+
serverRender?: (ctx: Record<string, any>) => Promise<string>;
|
|
46
|
+
};
|
|
34
47
|
export type Manifest = {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
template: string;
|
|
40
|
-
serverRender?: (ctx: Record<string, any>) => Promise<string>;
|
|
41
|
-
}>;
|
|
48
|
+
/**
|
|
49
|
+
* @param key - path
|
|
50
|
+
*/
|
|
51
|
+
pages: Record<string, Page>;
|
|
42
52
|
routes: ModernRouteInterface[];
|
|
43
53
|
};
|
|
44
|
-
export declare const createHandler: (manifest: Manifest) => (options: HandlerOptions) => Promise<ReturnResponse>;
|
|
54
|
+
export declare const createHandler: (manifest: Manifest) => (options: HandlerOptions) => Promise<ReturnResponse>;
|
|
55
|
+
export {};
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"modern",
|
|
16
16
|
"modern.js"
|
|
17
17
|
],
|
|
18
|
-
"version": "2.
|
|
18
|
+
"version": "2.22.0",
|
|
19
19
|
"jsnext:source": "./src/index.ts",
|
|
20
20
|
"types": "./dist/types/index.d.ts",
|
|
21
21
|
"main": "./dist/cjs/index.js",
|
|
@@ -38,6 +38,15 @@
|
|
|
38
38
|
},
|
|
39
39
|
"types": "./dist/types/workerServer.d.ts",
|
|
40
40
|
"default": "./dist/esm/workerServer.js"
|
|
41
|
+
},
|
|
42
|
+
"./renderHtml": {
|
|
43
|
+
"node": {
|
|
44
|
+
"jsnext:source": "./src/renderHtml.ts",
|
|
45
|
+
"import": "./dist/esm-node/renderHtml.js",
|
|
46
|
+
"require": "./dist/cjs/renderHtml.js"
|
|
47
|
+
},
|
|
48
|
+
"types": "./dist/types/renderHtml.d.ts",
|
|
49
|
+
"default": "./dist/esm/renderHtml.js"
|
|
41
50
|
}
|
|
42
51
|
},
|
|
43
52
|
"typesVersions": {
|
|
@@ -47,6 +56,9 @@
|
|
|
47
56
|
],
|
|
48
57
|
"worker": [
|
|
49
58
|
"./dist/types/workerServer.d.ts"
|
|
59
|
+
],
|
|
60
|
+
"renderHtml": [
|
|
61
|
+
"./dist/types/renderHtml.d.ts"
|
|
50
62
|
]
|
|
51
63
|
}
|
|
52
64
|
},
|
|
@@ -61,8 +73,9 @@
|
|
|
61
73
|
"path-to-regexp": "^6.2.0",
|
|
62
74
|
"serve-static": "^1.14.1",
|
|
63
75
|
"@swc/helpers": "0.5.1",
|
|
64
|
-
"@modern-js/
|
|
65
|
-
"@modern-js/
|
|
76
|
+
"@modern-js/server-core": "2.22.0",
|
|
77
|
+
"@modern-js/plugin": "2.22.0",
|
|
78
|
+
"@modern-js/utils": "2.22.0"
|
|
66
79
|
},
|
|
67
80
|
"devDependencies": {
|
|
68
81
|
"@types/cookie": "^0.4.1",
|
|
@@ -78,10 +91,11 @@
|
|
|
78
91
|
"node-mocks-http": "^1.11.0",
|
|
79
92
|
"portfinder": "^1.0.28",
|
|
80
93
|
"typescript": "^5",
|
|
81
|
-
"
|
|
82
|
-
"@modern-js/
|
|
83
|
-
"@
|
|
84
|
-
"@scripts/build": "2.
|
|
94
|
+
"memfs": "^3.5.1",
|
|
95
|
+
"@modern-js/types": "2.22.0",
|
|
96
|
+
"@modern-js/server-core": "2.22.0",
|
|
97
|
+
"@scripts/build": "2.22.0",
|
|
98
|
+
"@scripts/jest-config": "2.22.0"
|
|
85
99
|
},
|
|
86
100
|
"sideEffects": false,
|
|
87
101
|
"publishConfig": {
|