1import serialize from 'serialize-javascript';
2import type { Gez } from './gez';
3/**
4 * 渲染的参数
5 */
6export interface RenderContextOptions {
7 /**
8 * 静态资产的公共路径,可以根据业务的上下文来动态设置不同的路径。
9 */
10 base?: string;
11 /**
12 * gez.render() 函数执行时,会调用 entry.server.ts 文件导出的名称。
13 */
14 entryName?: string;
15 /**
16 * 传递给 RenderContext 对象的 params 字段。
17 */
18 params?: Record<string, any>;
19}
20/**
21 * 渲染上下文
22 */
23export declare class RenderContext {
24 /**
25 * Gez 的实例。
26 */
27 gez: Gez;
28 /**
29 * 重定向地址。
30 */
31 redirect: string | null;
32 /**
33 * 响应的状态码。
34 */
35 status: number | null;
36 private _html;
37 /**
38 * 参数传入的 base。
39 */
40 readonly base: string;
41 /**
42 * 参数传入的 params。
43 */
44 readonly params: Record<string, any>;
45 /**
46 * 参数传入的 entryName。
47 */
48 readonly entryName: string;
49 /**
50 * 服务端渲染过程中,收集模块执行过程中的 import.meta 对象。
51 */
52 importMetaSet: Set<ImportMeta>;
53 /**
54 * importMetaSet 收集完成后,调用 rc.commit() 函数时,会更新这个对象的信息。
55 */
56 files: RenderFiles;
57 constructor(gez: Gez, options?: RenderContextOptions);
58 /**
59 * 响应的 html 内容。
60 */
61 get html(): string;
62 set html(html: string);
63 /**
64 * 透传 https://github.com/yahoo/serialize-javascript
65 */
66 serialize(input: any, options?: serialize.SerializeJSOptions): any;
67 /**
68 * 在 window 对象,注入一个 JS 变量对象,data 必须是可以被序列化的。
69 */
70 state(varName: string, data: Record<string, any>): string;
71 /**
72 * 同构应用渲染完成后,提交模块依赖更新 files 对象。
73 */
74 commit(): Promise<void>;
75 /**
76 * 根据 files 生成 JS 和 CSS 文件的预加载代码。
77 */
78 preload(): string;
79 /**
80 * 根据 files 生成服务端首屏加载的 CSS。
81 */
82 css(): string;
83 /**
84 * 根据 files 生成 importmap 相关代码。
85 */
86 importmap(): string;
87 /**
88 * 根据 files 生成模块入口执行代码。
89 */
90 moduleEntry(): string;
91 /**
92 * 根据 files 生成 ESM 模块预加载代码。
93 */
94 modulePreload(): string;
95}
96/**
97 * 服务端渲染处理函数。
98 */
99export type ServerRenderHandle = (render: RenderContext) => Promise<void>;
100/**
101 * 当前页面渲染的文件
102 */
103export interface RenderFiles {
104 /**
105 * CSS 文件列表。
106 */
107 css: string[];
108 /**
109 * ESM 模块列表。
110 */
111 modulepreload: string[];
112 /**
113 * importmap.js 文件列表。
114 */
115 importmap: string[];
116 /**
117 * 全部的 JS 文件列表,包含 modulepreload 和 importmap。
118 */
119 js: string[];
120 /**
121 * 除了 JS 和 CSS 之外的其它文件列表。
122 */
123 resources: string[];
124}