@uni-helper/vite-plugin-uni-pages 0.4.9 → 0.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/README.md +892 -58
- package/client.d.ts +2 -4
- package/dist/index.d.mts +1087 -397
- package/dist/index.mjs +4045 -956
- package/package.json +33 -36
- package/dist/index.cjs +0 -1401
- package/dist/index.d.cts +0 -569
- package/index.d.ts +0 -4
package/dist/index.d.mts
CHANGED
|
@@ -1,570 +1,1260 @@
|
|
|
1
|
-
import
|
|
1
|
+
import fs from "node:fs";
|
|
2
2
|
import { FSWatcher } from "chokidar";
|
|
3
3
|
import { Logger, Plugin, ViteDevServer } from "vite";
|
|
4
|
-
import fs from "node:fs";
|
|
5
|
-
import Debug from "debug";
|
|
6
4
|
import { LoadConfigSource } from "unconfig";
|
|
7
|
-
import
|
|
8
|
-
import
|
|
5
|
+
import { CallExpression } from "@babel/types";
|
|
6
|
+
import Debug from "debug";
|
|
9
7
|
import { SFCDescriptor, SFCParseOptions } from "@vue/compiler-sfc";
|
|
10
|
-
import {
|
|
11
|
-
export * from "@uni-helper/uni-pages-types";
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
import { PageItem, PagesConfig, SubPackages, TabBar, TabBarItem, UserPagesConfig } from "@uni-helper/uni-pages-types";
|
|
9
|
+
export type * from "@uni-helper/uni-pages-types";
|
|
10
|
+
//#region src/condition.d.ts
|
|
11
|
+
/**
|
|
12
|
+
* 按平台写不同页面配置的小工具
|
|
13
|
+
*
|
|
14
|
+
* 用法来自 @uni-ku/pages-json:define().ifdef().ifndef()。用户在
|
|
15
|
+
* 函数式 definePage 里调用 define() 拿到可链式写的定义对象,先写
|
|
16
|
+
* 所有平台共用的配置,再按平台加不同的部分。插件在宏求值完就立刻
|
|
17
|
+
* 按当前平台算出最终结果,后面的步骤只会看到普通对象。
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* 可以链式调用的"按平台写配置"对象
|
|
21
|
+
*
|
|
22
|
+
* 用户在函数式 definePage 里通过 define() 创建。分支按写的顺序生效,
|
|
23
|
+
* 后写的同名键会盖掉先写的。
|
|
24
|
+
*/
|
|
25
|
+
export declare class DefineConditional {
|
|
26
|
+
/** 所有平台共用的基础配置 */
|
|
27
|
+
private readonly base;
|
|
28
|
+
/** 按写的顺序记下的条件分支 */
|
|
29
|
+
private readonly branches;
|
|
30
|
+
constructor(base: Record<string, any>);
|
|
31
|
+
/** 仅在给定平台应用 `partial` */
|
|
32
|
+
ifdef(platform: string | string[], partial: Record<string, any>): this;
|
|
33
|
+
/** 在除给定平台之外的所有平台应用 `partial` */
|
|
34
|
+
ifndef(platform: string | string[], partial: Record<string, any>): this;
|
|
35
|
+
/**
|
|
36
|
+
* 算出某个平台最终用的普通配置:从基础配置开始,按写的顺序把每个
|
|
37
|
+
* 匹配的分支合并进去。平台列表里 `h5` 和 `web` 互相通用(见
|
|
38
|
+
* platformMatches)。
|
|
39
|
+
*/
|
|
40
|
+
resolve(platform: string): Record<string, any>;
|
|
16
41
|
}
|
|
17
|
-
|
|
42
|
+
/** 判断宏求值的结果是不是一个条件定义 */
|
|
43
|
+
export declare function isConditional(obj: unknown): obj is DefineConditional;
|
|
18
44
|
/**
|
|
19
|
-
*
|
|
20
|
-
* Used in pages.config.ts configuration file to provide type hints and validation
|
|
45
|
+
* 把条件定义算成某个平台的普通配置
|
|
21
46
|
*
|
|
22
|
-
* @
|
|
23
|
-
*
|
|
47
|
+
* 简单包了一层 {@link DefineConditional.resolve},调用方不用导入
|
|
48
|
+
* 这个类。
|
|
24
49
|
*/
|
|
25
|
-
declare function
|
|
50
|
+
export declare function resolveConditional(cond: DefineConditional, platform: string): Record<string, any>;
|
|
51
|
+
//#endregion
|
|
52
|
+
//#region src/logger.d.ts
|
|
53
|
+
/**
|
|
54
|
+
* 调试日志工具
|
|
55
|
+
* 基于 debug 包做分级日志输出
|
|
56
|
+
* 通过环境变量 DEBUG=vite-plugin-uni-pages:* 开启
|
|
57
|
+
*/
|
|
58
|
+
export declare const debug: {
|
|
59
|
+
/** HMR 相关日志 */
|
|
60
|
+
hmr: Debug.Debugger;
|
|
61
|
+
/** 配置项相关日志 */
|
|
62
|
+
options: Debug.Debugger;
|
|
63
|
+
/** 主包页面扫描日志 */
|
|
64
|
+
pages: Debug.Debugger;
|
|
65
|
+
/** 分包页面扫描日志 */
|
|
66
|
+
subPages: Debug.Debugger;
|
|
67
|
+
/** 错误日志 */
|
|
68
|
+
error: Debug.Debugger;
|
|
69
|
+
/** 缓存相关日志 */
|
|
70
|
+
cache: Debug.Debugger;
|
|
71
|
+
/** 声明文件生成日志 */
|
|
72
|
+
declaration: Debug.Debugger;
|
|
73
|
+
/** definePage 宏解析日志 */
|
|
74
|
+
definePage: Debug.Debugger;
|
|
75
|
+
};
|
|
26
76
|
//#endregion
|
|
27
77
|
//#region src/page.d.ts
|
|
78
|
+
/** Page 读取页面内容所需的环境;不再依赖整个 PageContext */
|
|
79
|
+
export interface PageEnvironment {
|
|
80
|
+
platform: string;
|
|
81
|
+
/** 读取时取得当前 logger,覆盖 setLogger 在 Page 创建之后才发生的情况 */
|
|
82
|
+
getLogger?: () => Logger | undefined;
|
|
83
|
+
}
|
|
84
|
+
/** 一次页面读取的结果;缓存和变更检测都留在 Page 内部 */
|
|
85
|
+
export interface PageSnapshot {
|
|
86
|
+
/** 用于合并的页面元数据,path 已按 uri 补齐 */
|
|
87
|
+
meta: InternalPageItem;
|
|
88
|
+
/** definePage 声明的 tabBar 项,已补齐 pagePath 和 index */
|
|
89
|
+
tabBar?: TabBarItem & {
|
|
90
|
+
index: number;
|
|
91
|
+
};
|
|
92
|
+
/** 页面在当前平台通过 definePage(null) 退出 */
|
|
93
|
+
skipped: boolean;
|
|
94
|
+
/** 与上一次成功读取相比内容或跳过状态是否变化 */
|
|
95
|
+
changed: boolean;
|
|
96
|
+
}
|
|
28
97
|
/**
|
|
29
|
-
*
|
|
98
|
+
* 表示一个 Vue 页面文件的读取适配器
|
|
30
99
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* 2. Parse page metadata defined by definePage macro
|
|
34
|
-
* 3. Provide tabBar configuration information
|
|
35
|
-
* 4. Track page file change status
|
|
100
|
+
* 调用方只需要 `load()`:文件读取、宏求值、跳过状态、tabBar 补全和
|
|
101
|
+
* 变更检测都在快照里返回。`getPageMeta` / `getTabBar` 保留为兼容入口。
|
|
36
102
|
*/
|
|
37
|
-
declare class Page {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
/** Page path information containing relative and absolute paths */
|
|
103
|
+
export declare class Page {
|
|
104
|
+
private readonly environment;
|
|
105
|
+
/** 页面路径信息,包含相对路径与绝对路径 */
|
|
41
106
|
path: PagePath;
|
|
42
|
-
/**
|
|
107
|
+
/** 页面 URI,用于 pages.json 的 path 字段 */
|
|
43
108
|
uri: string;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
109
|
+
private snapshot;
|
|
110
|
+
/** 当前读取缓存是否有效 */
|
|
111
|
+
private loaded;
|
|
112
|
+
/** 当前缓存是否已尝试读取;失败后等下次失效再重试 */
|
|
113
|
+
private readAttempted;
|
|
114
|
+
/** 上一次成功读取的配置,用于变更检测 */
|
|
47
115
|
private raw;
|
|
48
|
-
|
|
49
|
-
|
|
116
|
+
constructor(environment: PageEnvironment, path: PagePath);
|
|
117
|
+
/** 页面是否通过 definePage(null) 退出 */
|
|
118
|
+
get skipped(): boolean;
|
|
119
|
+
/** 页面内容是否相对上次成功读取发生变化 */
|
|
120
|
+
get changed(): boolean;
|
|
50
121
|
/**
|
|
51
|
-
*
|
|
52
|
-
* @param ctx - Page context instance
|
|
53
|
-
* @param path - Page path information
|
|
54
|
-
*/
|
|
55
|
-
constructor(ctx: PageContext, path: PagePath);
|
|
56
|
-
/**
|
|
57
|
-
* Get page metadata
|
|
58
|
-
* Parse configuration defined by definePage macro and return metadata for pages.json
|
|
122
|
+
* 读取页面并返回快照
|
|
59
123
|
*
|
|
60
|
-
* @param forceUpdate -
|
|
61
|
-
* @returns Page metadata object
|
|
124
|
+
* @param forceUpdate - 忽略缓存强制重读
|
|
62
125
|
*/
|
|
63
|
-
|
|
126
|
+
load(forceUpdate?: boolean): Promise<PageSnapshot>;
|
|
64
127
|
/**
|
|
65
|
-
*
|
|
66
|
-
* Extract tabBar related configuration from definePage macro
|
|
128
|
+
* 获取页面配置,保留给既有调用方
|
|
67
129
|
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
130
|
+
* 返回副本:合并阶段会原地写 `type: 'home'`,不能让首页标记留在
|
|
131
|
+
* 读取快照里,否则增量更新会继续把旧首页当成首页。
|
|
70
132
|
*/
|
|
71
|
-
|
|
133
|
+
getPageMeta(forceUpdate?: boolean): Promise<InternalPageItem>;
|
|
134
|
+
/** 获取 tabBar 项,保留给既有调用方 */
|
|
135
|
+
getTabBar(forceUpdate?: boolean): Promise<TabBarItem & {
|
|
72
136
|
index: number;
|
|
73
137
|
} | undefined>;
|
|
138
|
+
/** 加载尚未读取的页面配置,缓存失效前不重复尝试失败的读取 */
|
|
139
|
+
ensureLoaded(): Promise<void>;
|
|
74
140
|
/**
|
|
75
|
-
*
|
|
76
|
-
*
|
|
141
|
+
* 使页面读取缓存失效
|
|
142
|
+
*
|
|
143
|
+
* @description 下次访问时重新读取,保留上次成功快照作为读取失败时的回退
|
|
77
144
|
*/
|
|
145
|
+
invalidate(): void;
|
|
146
|
+
/** 检查页面是否发生变化 */
|
|
78
147
|
hasChanged(): boolean;
|
|
79
148
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
149
|
+
* 读取页面文件并解析配置
|
|
150
|
+
*
|
|
151
|
+
* @description 成功后替换快照;失败时保留上次成功快照,只记录警告
|
|
82
152
|
*/
|
|
83
153
|
read(): Promise<void>;
|
|
154
|
+
private createSnapshot;
|
|
155
|
+
/** 读取失败且从未成功时的默认快照,保持页面仍以 uri 参与生成 */
|
|
156
|
+
private fallbackSnapshot;
|
|
84
157
|
private readPageMetaFromFile;
|
|
85
158
|
}
|
|
159
|
+
//#endregion
|
|
160
|
+
//#region src/types.d.ts
|
|
161
|
+
/** 提前生成页面配置所需的运行环境 */
|
|
162
|
+
interface PrepareOptions {
|
|
163
|
+
/**
|
|
164
|
+
* Vite 项目根目录,相对路径以当前工作目录为基准
|
|
165
|
+
*
|
|
166
|
+
* @default process.env.VITE_ROOT_DIR || process.cwd()
|
|
167
|
+
*/
|
|
168
|
+
root?: string;
|
|
169
|
+
/** 是否采用 UniPlatform 文件名后缀规则,必须与最终插件列表一致 */
|
|
170
|
+
platformSuffix: boolean;
|
|
171
|
+
}
|
|
86
172
|
/**
|
|
87
|
-
*
|
|
88
|
-
* Compatible with different versions of @vue/compiler-sfc
|
|
89
|
-
*
|
|
90
|
-
* @param code - Vue SFC source code
|
|
91
|
-
* @param options - Parse options
|
|
92
|
-
* @returns SFC descriptor object
|
|
93
|
-
*/
|
|
94
|
-
declare function parseSFC(code: string, options?: SFCParseOptions): SFCDescriptor;
|
|
95
|
-
/**
|
|
96
|
-
* Try to extract page metadata defined by definePage macro from SFC
|
|
97
|
-
* Support using definePage in script setup or regular script
|
|
173
|
+
* 支持提前生成页面配置的 Vite 插件实例
|
|
98
174
|
*
|
|
99
|
-
* @
|
|
100
|
-
* @returns Page metadata object, or undefined if definePage is not found
|
|
175
|
+
* @description 同一实例可在构建或开发服务器关闭后顺序复用;重叠运行的构建和服务器须各自创建实例
|
|
101
176
|
*/
|
|
102
|
-
|
|
177
|
+
interface UniPagesPlugin extends Plugin {
|
|
178
|
+
/**
|
|
179
|
+
* 等待页面配置与已启用的声明文件生成,返回当前插件实例
|
|
180
|
+
*
|
|
181
|
+
* @description
|
|
182
|
+
* - 在创建需要读取 pages.json 的下游插件之前等待此方法完成
|
|
183
|
+
* - 使用调用时的 UNI_PLATFORM;根目录、平台和后缀规则必须与 Vite 初始化一致
|
|
184
|
+
* - 当前准备期间相同参数的并发或重复调用共享结果,首次 Vite 接管复用该结果
|
|
185
|
+
* - Vite 会话关闭后再次调用会重新生成;成功准备过的根目录、平台和后缀约束持续有效
|
|
186
|
+
* - 生成失败后可重试
|
|
187
|
+
*
|
|
188
|
+
* @throws 参数冲突、编译平台缺失、实例正在关闭或生成失败时拒绝 Promise
|
|
189
|
+
*/
|
|
190
|
+
prepare: (options: PrepareOptions) => Promise<UniPagesPlugin>;
|
|
191
|
+
}
|
|
103
192
|
/**
|
|
104
|
-
*
|
|
105
|
-
* Support function expressions, arrow functions and object expressions as arguments
|
|
106
|
-
*
|
|
107
|
-
* @param stmts - AST statement array
|
|
108
|
-
* @param filename - Filename for error reporting
|
|
109
|
-
* @returns definePage call expression, or undefined if not found
|
|
193
|
+
* 从对象类型中排除索引签名键,仅保留显式键
|
|
110
194
|
*/
|
|
111
|
-
|
|
195
|
+
type ExcludeIndexSignature<T> = { [K in keyof T as string extends K ? never : number extends K ? never : symbol extends K ? never : K]: T[K]; };
|
|
112
196
|
/**
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
* @returns Import declaration array
|
|
197
|
+
* 插件内部的页面信息
|
|
198
|
+
* 在标准 PageItem 之上加了插件自己用的 `type` 标记。
|
|
199
|
+
* 插件写的条目会带着它进 pages.json(之后的运行靠它找回首页);
|
|
200
|
+
* 只有比较两个条目相不相等时,会先把它去掉再比
|
|
118
201
|
*/
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
202
|
+
interface InternalPageItem extends PageItem {
|
|
203
|
+
/** 插件用于识别首页的内部标记 */
|
|
204
|
+
type?: 'home' | 'page';
|
|
205
|
+
}
|
|
206
|
+
type InternalPages = InternalPageItem[];
|
|
122
207
|
/**
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
* Core responsibilities:
|
|
126
|
-
* 1. Scan page directories and collect page files
|
|
127
|
-
* 2. Load user configuration files (pages.config.ts, etc.)
|
|
128
|
-
* 3. Parse page metadata (definePage macro)
|
|
129
|
-
* 4. Merge page configurations and generate pages.json
|
|
130
|
-
* 5. Provide virtual module and HMR support
|
|
208
|
+
* 用户可在 definePage 宏中定义的 tabBar 项
|
|
209
|
+
* 在文档级 TabBarItem 之上扩展插件专有字段
|
|
131
210
|
*/
|
|
132
|
-
|
|
133
|
-
private _server;
|
|
134
|
-
/** Parsed configuration object from user config file (pages.config.ts) */
|
|
135
|
-
pagesGlobConfig: index_d_exports$1.PagesConfig | undefined;
|
|
136
|
-
/** Source path list of user configuration files */
|
|
137
|
-
pagesConfigSourcePaths: string[];
|
|
138
|
-
/** Main package page map, key is the absolute path of the page file */
|
|
139
|
-
pages: Map<string, Page>;
|
|
140
|
-
/** Sub-package page map, key is the sub-package root directory, value is the page map under that sub-package */
|
|
141
|
-
subPages: Map<string, Map<string, Page>>;
|
|
142
|
-
/** Main package page metadata array for generating pages.json pages field */
|
|
143
|
-
pageMetaData: PageMetaDatum[];
|
|
144
|
-
/** Sub-package page metadata array for generating pages.json subPackages field */
|
|
145
|
-
subPageMetaData: SubPageMetaDatum[];
|
|
146
|
-
/** Generated pages.json file path */
|
|
147
|
-
resolvedPagesJSONPath: string;
|
|
148
|
-
private resolvedPagesJSONIndent?;
|
|
149
|
-
private resolvedPagesJSONNewline?;
|
|
150
|
-
private resolvedPagesJSONEofNewline?;
|
|
151
|
-
/** Original options passed by the user */
|
|
152
|
-
rawOptions: UserOptions;
|
|
153
|
-
/** Project root directory */
|
|
154
|
-
root: string;
|
|
155
|
-
/** Resolved configuration options */
|
|
156
|
-
options: ResolvedOptions;
|
|
157
|
-
logger?: Logger;
|
|
158
|
-
/** Whether to work with vite-plugin-uni-platform plugin */
|
|
159
|
-
withUniPlatform: boolean;
|
|
160
|
-
/** Cached previous pages.json content to avoid redundant writes */
|
|
161
|
-
private lastPagesJson;
|
|
162
|
-
/**
|
|
163
|
-
* Create a PageContext instance
|
|
164
|
-
* @param userOptions - User configuration options
|
|
165
|
-
* @param viteRoot - Vite project root directory, defaults to current working directory
|
|
166
|
-
*/
|
|
167
|
-
constructor(userOptions: UserOptions, viteRoot?: string);
|
|
168
|
-
/**
|
|
169
|
-
* Set the Vite logger
|
|
170
|
-
* @param logger - Vite logger instance
|
|
171
|
-
*/
|
|
172
|
-
setLogger(logger: Logger): void;
|
|
173
|
-
/**
|
|
174
|
-
* Load user page configuration file (e.g. pages.config.ts)
|
|
175
|
-
* Uses unconfig to load configuration, supporting multiple config file formats
|
|
176
|
-
*/
|
|
177
|
-
loadUserPagesConfig(): Promise<void>;
|
|
178
|
-
/**
|
|
179
|
-
* Scan main package page directories and collect all page file paths
|
|
180
|
-
* Scan corresponding directories based on the configured dirs option
|
|
181
|
-
*/
|
|
182
|
-
scanPages(): Promise<void>;
|
|
183
|
-
/**
|
|
184
|
-
* Scan sub-package page directories and collect all sub-package page file paths
|
|
185
|
-
* Scan corresponding directories based on the configured subPackages option
|
|
186
|
-
*/
|
|
187
|
-
scanSubPages(): Promise<void>;
|
|
188
|
-
/**
|
|
189
|
-
* Set up Vite dev server for HMR and file watching
|
|
190
|
-
* @param server - Vite dev server instance
|
|
191
|
-
*/
|
|
192
|
-
setupViteServer(server: ViteDevServer): void;
|
|
193
|
-
/**
|
|
194
|
-
* Set up file watcher to monitor page file and config file changes
|
|
195
|
-
* Automatically update pages.json when page files or config files change
|
|
196
|
-
* @param watcher - chokidar file watcher instance
|
|
197
|
-
*/
|
|
198
|
-
setupWatcher(watcher: FSWatcher): Promise<void>;
|
|
199
|
-
/**
|
|
200
|
-
* Page update callback, triggered when page files or configuration changes
|
|
201
|
-
* Responsible for invalidating virtual modules and notifying the browser to do a full reload
|
|
202
|
-
*/
|
|
203
|
-
onUpdate(): void;
|
|
204
|
-
/**
|
|
205
|
-
* parse pages rules && set page type
|
|
206
|
-
* @param pages page path array
|
|
207
|
-
* @param type page type
|
|
208
|
-
* @param overrides custom page config
|
|
209
|
-
* @returns pages rules
|
|
210
|
-
*/
|
|
211
|
-
parsePages(pages: Map<string, Page>, type: 'main' | 'sub', overrides?: PageMetaDatum[]): Promise<PageMetaDatum[]>;
|
|
211
|
+
interface UserTabBarItem extends Partial<TabBarItem> {
|
|
212
212
|
/**
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
* @
|
|
216
|
-
*/
|
|
217
|
-
setHomePage(result: PageMetaDatum[]): PageMetaDatum[];
|
|
218
|
-
/**
|
|
219
|
-
* Merge main package page metadata
|
|
220
|
-
* Filter out pages belonging to sub-packages, then parse page metadata and merge user configuration
|
|
221
|
-
*/
|
|
222
|
-
mergePageMetaData(): Promise<void>;
|
|
223
|
-
/**
|
|
224
|
-
* Merge sub-package page metadata
|
|
225
|
-
* Parse page metadata for each sub-package and handle sub-package configuration inheritance
|
|
226
|
-
* Preserves sub-package level properties like plugins from user config
|
|
227
|
-
*/
|
|
228
|
-
mergeSubPageMetaData(): Promise<void>;
|
|
229
|
-
/**
|
|
230
|
-
* Update pages.json file
|
|
231
|
-
* This is the core method responsible for coordinating the entire page configuration generation flow:
|
|
232
|
-
* 1. Check file changes (if filepath is specified)
|
|
233
|
-
* 2. Load user configuration
|
|
234
|
-
* 3. Scan page files
|
|
235
|
-
* 4. Merge page metadata
|
|
236
|
-
* 5. Generate and write pages.json
|
|
237
|
-
* @param filepath - Changed file path for incremental update judgment
|
|
238
|
-
* @returns Whether pages.json was successfully updated
|
|
239
|
-
*/
|
|
240
|
-
updatePagesJSON(filepath?: string): Promise<boolean>;
|
|
241
|
-
/**
|
|
242
|
-
* Generate virtual module content
|
|
243
|
-
* Returns JavaScript code containing pages and subPackages exports
|
|
244
|
-
* @returns Virtual module code string
|
|
213
|
+
* 页面路径,省略时由插件自动填充
|
|
214
|
+
*
|
|
215
|
+
* @deprecated 改用 pages.json 的 pagePath
|
|
245
216
|
*/
|
|
246
|
-
|
|
217
|
+
pagePath?: string;
|
|
247
218
|
/**
|
|
248
|
-
*
|
|
249
|
-
*
|
|
219
|
+
* 插件用于排序 tabBar 项的索引
|
|
220
|
+
*
|
|
221
|
+
* @default 0
|
|
250
222
|
*/
|
|
251
|
-
|
|
223
|
+
index?: number;
|
|
224
|
+
[x: string]: any;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* 用户可在 definePage 宏中定义的页面配置
|
|
228
|
+
* 在文档级 PageItem 之上扩展插件专有字段
|
|
229
|
+
*/
|
|
230
|
+
interface UserPageItem extends Partial<PageItem> {
|
|
252
231
|
/**
|
|
253
|
-
*
|
|
254
|
-
* @returns JSON string of sub-package page metadata
|
|
232
|
+
* @deprecated 改用 pages.json 的 path
|
|
255
233
|
*/
|
|
256
|
-
|
|
234
|
+
path?: string;
|
|
257
235
|
/**
|
|
258
|
-
*
|
|
259
|
-
* Merges page-defined tabBar items with config-defined tabBar
|
|
260
|
-
* @returns Merged tabBar configuration object, or undefined if no tabBar exists
|
|
236
|
+
* 页面类型,设为 "home" 标记首页
|
|
261
237
|
*/
|
|
262
|
-
|
|
238
|
+
type?: 'home' | 'page';
|
|
263
239
|
/**
|
|
264
|
-
*
|
|
265
|
-
* Generate type definitions for page paths to provide type hints during navigation
|
|
240
|
+
* tabBar 项配置,插件收集它生成 pages.json 的 tabBar.list
|
|
266
241
|
*/
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
private readInfoFromPagesJSON;
|
|
270
|
-
private getIndent;
|
|
271
|
-
private getNewline;
|
|
272
|
-
private getEndOfLine;
|
|
242
|
+
tabBar?: UserTabBarItem;
|
|
243
|
+
[x: string]: any;
|
|
273
244
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
/**
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
* @param server - Vite dev server instance
|
|
281
|
-
*/
|
|
282
|
-
declare function invalidatePagesModule(server: ViteDevServer): void;
|
|
283
|
-
/**
|
|
284
|
-
* Debug logging utility
|
|
285
|
-
* Uses debug package for leveled log output
|
|
286
|
-
* Enable via environment variable DEBUG=vite-plugin-uni-pages:*
|
|
287
|
-
*/
|
|
288
|
-
declare const debug: {
|
|
289
|
-
/** HMR related logs */hmr: Debug.Debugger; /** Configuration options related logs */
|
|
290
|
-
options: Debug.Debugger; /** Main package page scanning logs */
|
|
291
|
-
pages: Debug.Debugger; /** Sub-package page scanning logs */
|
|
292
|
-
subPages: Debug.Debugger; /** Error logs */
|
|
293
|
-
error: Debug.Debugger; /** Cache related logs */
|
|
294
|
-
cache: Debug.Debugger; /** Declaration file generation logs */
|
|
295
|
-
declaration: Debug.Debugger; /** definePage macro parsing logs */
|
|
296
|
-
definePage: Debug.Debugger;
|
|
297
|
-
};
|
|
245
|
+
/** 值或值的 Promise */
|
|
246
|
+
type MaybePromise<T> = T | Promise<T>;
|
|
247
|
+
/** 值或返回该值的函数 */
|
|
248
|
+
type MaybeCallable<T> = T | (() => T);
|
|
249
|
+
/** 值、返回该值的函数,或返回该值 Promise 的函数 */
|
|
250
|
+
type MaybePromiseCallable<T> = T | (() => T) | (() => Promise<T>);
|
|
298
251
|
/**
|
|
299
|
-
*
|
|
300
|
-
* @param extensions - File extensions array
|
|
301
|
-
* @returns Glob pattern string
|
|
252
|
+
* 注入函数式 definePage 宏的上下文
|
|
302
253
|
*/
|
|
303
|
-
|
|
254
|
+
interface DefinePageContext {
|
|
255
|
+
/** 当前平台标识,如 'mp-weixin' */
|
|
256
|
+
platform: string;
|
|
257
|
+
/**
|
|
258
|
+
* 开始写"按平台不同"的页面配置
|
|
259
|
+
*
|
|
260
|
+
* 用法:`define(base).ifdef(platforms, partial).ifndef(platforms, partial)`。
|
|
261
|
+
* 匹配的分支按写的顺序合并进 `base`:对象一层层合并,数组和普通值
|
|
262
|
+
* 整个替换。`h5` 和 `web` 是同一个平台的两个名字,写哪个都算
|
|
263
|
+
* 两个都匹配。
|
|
264
|
+
*/
|
|
265
|
+
define: (base: UserPageItem) => DefineConditional;
|
|
266
|
+
}
|
|
304
267
|
/**
|
|
305
|
-
*
|
|
306
|
-
*
|
|
268
|
+
* 在 Vue 页面文件中定义页面配置
|
|
269
|
+
* 宏调用会在构建时被插件移除
|
|
307
270
|
*
|
|
308
|
-
*
|
|
309
|
-
*
|
|
271
|
+
* 返回 `null`(或直接传 `null`)可把页面从当前平台的 pages.json 里
|
|
272
|
+
* 排除。用传进来的 `define` 就能按平台写不同配置,不用自己判断平台。
|
|
310
273
|
*/
|
|
311
|
-
declare function
|
|
274
|
+
declare function definePage(options: UserPageItem | null | ((context: DefinePageContext) => MaybePromise<UserPageItem | DefineConditional | null>)): void;
|
|
275
|
+
/** definePage 宏的类型 */
|
|
276
|
+
type DefinePage = typeof definePage;
|
|
277
|
+
/** 调试日志类型,对应 debug 对象中的方法 */
|
|
278
|
+
type DebugType = keyof typeof debug;
|
|
312
279
|
/**
|
|
313
|
-
*
|
|
314
|
-
* @param pageMetaData page meta data array
|
|
315
|
-
* TODO: support merge middleware
|
|
280
|
+
* @deprecated 改用 {@link DebugType}
|
|
316
281
|
*/
|
|
317
|
-
|
|
282
|
+
type debugType = DebugType;
|
|
283
|
+
/** 配置来源类型,支持字符串路径或 unconfig 的 LoadConfigSource 对象 */
|
|
284
|
+
type ConfigSource = string | LoadConfigSource<PagesConfig> | LoadConfigSource<PagesConfig>[];
|
|
318
285
|
/**
|
|
319
|
-
*
|
|
286
|
+
* 插件配置项接口
|
|
287
|
+
* 定义用户可传入的全部配置选项
|
|
320
288
|
*
|
|
321
|
-
*
|
|
322
|
-
*
|
|
323
|
-
* @param options.code - TypeScript code content to execute
|
|
324
|
-
* @param options.filename - Script filename for error location and context
|
|
325
|
-
* @returns Script execution result, if export is a function then execute and return its return value
|
|
326
|
-
*/
|
|
327
|
-
declare function parseCode(options: {
|
|
328
|
-
imports: string[];
|
|
329
|
-
code: string;
|
|
330
|
-
filename: string;
|
|
331
|
-
}): Promise<any>;
|
|
332
|
-
/**
|
|
333
|
-
* Async sleep function
|
|
334
|
-
* @param ms - Sleep duration in milliseconds
|
|
335
|
-
* @returns Promise object
|
|
336
|
-
*/
|
|
337
|
-
declare function sleep(ms: number): Promise<unknown>;
|
|
338
|
-
/** Babel code generator for converting AST back to code */
|
|
339
|
-
declare const babelGenerate: typeof babelGenerator;
|
|
340
|
-
//#endregion
|
|
341
|
-
//#region src/types.d.ts
|
|
342
|
-
/** Debug log type, corresponding to methods in the debug object */
|
|
343
|
-
type debugType = keyof typeof debug;
|
|
344
|
-
/** Configuration source type, supports string path or unconfig LoadConfigSource object */
|
|
345
|
-
type ConfigSource = string | LoadConfigSource<index_d_exports$1.PagesConfig> | LoadConfigSource<index_d_exports$1.PagesConfig>[];
|
|
346
|
-
/**
|
|
347
|
-
* Plugin configuration options interface
|
|
348
|
-
* Defines all configuration options that users can pass in
|
|
289
|
+
* 内部流水线:加载用户配置 -> 扫描页面文件 -> 合并页面配置 ->
|
|
290
|
+
* 生成并写入 pages.json
|
|
349
291
|
*/
|
|
350
292
|
interface Options {
|
|
351
293
|
/**
|
|
352
|
-
*
|
|
294
|
+
* 是否为页面路径生成 TypeScript 声明
|
|
353
295
|
*
|
|
354
|
-
*
|
|
296
|
+
* 为 `true` 时在项目根目录生成 `uni-pages.d.ts`;
|
|
297
|
+
* 为字符串时作为相对项目根目录的自定义输出路径。
|
|
355
298
|
*
|
|
356
299
|
* @default true
|
|
300
|
+
* @since 0.2.9
|
|
357
301
|
*/
|
|
358
302
|
dts?: boolean | string;
|
|
359
303
|
/**
|
|
360
|
-
*
|
|
304
|
+
* 页面配置文件的加载来源
|
|
305
|
+
*
|
|
306
|
+
* @description 基于 unconfig,按来源顺序加载首个有效配置
|
|
361
307
|
*
|
|
362
|
-
* @default 'pages.config
|
|
308
|
+
* @default 'pages.config'
|
|
309
|
+
* @since 0.2.7
|
|
363
310
|
*/
|
|
364
311
|
configSource: ConfigSource;
|
|
365
312
|
/**
|
|
366
|
-
*
|
|
367
|
-
*
|
|
313
|
+
* 默认应用入口页面(首页)
|
|
314
|
+
*
|
|
315
|
+
* 在没有页面通过 `definePage({ type: 'home' })` 标记为首页时使用。
|
|
316
|
+
* 支持多种路径写法,兼容不同的目录布局。
|
|
317
|
+
*
|
|
318
|
+
* @default ['pages/index', 'pages/index/index']
|
|
319
|
+
* @since 0.1.9
|
|
368
320
|
*/
|
|
369
|
-
homePage: string;
|
|
321
|
+
homePage: string | string[];
|
|
370
322
|
/**
|
|
371
|
-
*
|
|
323
|
+
* 是否自动扫描目录并把页面配置合并进 pages.json
|
|
324
|
+
*
|
|
325
|
+
* 关闭时只加载用户配置文件,不扫描文件系统
|
|
326
|
+
*
|
|
372
327
|
* @default true
|
|
328
|
+
* @since 0.1.0
|
|
373
329
|
*/
|
|
374
330
|
mergePages: boolean;
|
|
375
331
|
/**
|
|
376
|
-
*
|
|
332
|
+
* 主包页面的搜索目录
|
|
333
|
+
*
|
|
334
|
+
* 支持 glob 模式,如 'src/{pages,views}'。
|
|
335
|
+
* 最终结果由 tinyglobby 解析为匹配到的目录列表。
|
|
336
|
+
*
|
|
377
337
|
* @default 'src/pages'
|
|
338
|
+
* @since 0.1.0
|
|
378
339
|
*/
|
|
379
340
|
dir: string;
|
|
380
341
|
/**
|
|
381
|
-
*
|
|
342
|
+
* uni-app 分包加载的页面目录
|
|
382
343
|
*
|
|
383
|
-
*
|
|
344
|
+
* @description
|
|
345
|
+
* 支持字符串或对象形式的目录 glob,开发期间自动发现新增、删除和重命名的目录
|
|
346
|
+
* 对象的 root 可用同步回调根据匹配目录计算
|
|
384
347
|
*
|
|
385
|
-
*
|
|
386
|
-
*
|
|
387
|
-
* avoiding '..' in the generated root path.
|
|
348
|
+
* monorepo 项目中页面可能位于项目根目录之外。使用对象形式指定
|
|
349
|
+
* 出现在 pages.json 中的自定义 root,避免生成的 root 路径含 '..'。
|
|
388
350
|
*
|
|
389
351
|
* @see https://github.com/uni-helper/vite-plugin-uni-pages/issues/271
|
|
390
352
|
* @default []
|
|
353
|
+
* @since 0.1.8
|
|
391
354
|
*/
|
|
392
355
|
subPackages: (string | SubPackageConfig)[];
|
|
393
356
|
/**
|
|
394
|
-
* pages.json
|
|
395
|
-
*
|
|
357
|
+
* pages.json 所在目录
|
|
358
|
+
*
|
|
359
|
+
* 相对项目根目录,也是计算页面相对路径的基准
|
|
360
|
+
*
|
|
361
|
+
* @default 'src'
|
|
362
|
+
* @since 0.0.1
|
|
396
363
|
*/
|
|
397
364
|
outDir: string;
|
|
398
365
|
/**
|
|
399
|
-
*
|
|
400
|
-
*
|
|
366
|
+
* 页面排除的文件或目录模式
|
|
367
|
+
*
|
|
368
|
+
* @description
|
|
369
|
+
* - 相对模式基于 Vite root,绝对模式直接匹配对应路径;命中目录时排除整个子树
|
|
370
|
+
* - 主包、分包的扫描与页面事件使用相同规则
|
|
371
|
+
* - 自定义数组替换默认值,空数组禁用默认页面排除,空字符串忽略
|
|
372
|
+
* - 不接受 `!foo` 否定规则,`!(keep).vue` 等 extglob 有效
|
|
373
|
+
*
|
|
374
|
+
* @default ['**\/node_modules/**', '**\/.git/**', '**\/__*__/**']
|
|
375
|
+
* @since 0.0.4
|
|
401
376
|
*/
|
|
402
377
|
exclude: string[];
|
|
403
378
|
/**
|
|
404
|
-
*
|
|
379
|
+
* 压缩生成的 pages.json
|
|
405
380
|
* @default false
|
|
381
|
+
* @since 0.1.6
|
|
406
382
|
*/
|
|
407
383
|
minify: boolean;
|
|
408
384
|
/**
|
|
409
|
-
*
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
385
|
+
* 是否在生成的 pages.json 末尾追加换行符
|
|
386
|
+
* @default false
|
|
387
|
+
* @since 0.5.0
|
|
388
|
+
*/
|
|
389
|
+
insertFinalNewline: boolean;
|
|
390
|
+
/**
|
|
391
|
+
* 生成的 pages.json 的缩进
|
|
392
|
+
*
|
|
393
|
+
* 接受空格数或字符串(如 `'\t'`)
|
|
394
|
+
*
|
|
395
|
+
* `minify` 为 `true` 时忽略
|
|
396
|
+
* @default 2
|
|
397
|
+
* @since 0.5.0
|
|
398
|
+
*/
|
|
399
|
+
indent: number | string;
|
|
400
|
+
/**
|
|
401
|
+
* 生成的 pages.json 的换行符
|
|
402
|
+
* @default '\n'
|
|
403
|
+
* @since 0.5.0
|
|
404
|
+
*/
|
|
405
|
+
eol: '\n' | '\r\n';
|
|
406
|
+
/**
|
|
407
|
+
* 启用调试日志
|
|
408
|
+
*
|
|
409
|
+
* 为 `true` 时启用所有分类;为字符串时只启用对应分类。可用分类:
|
|
410
|
+
* hmr | options | pages | subPages | error | cache | declaration | definePage。
|
|
411
|
+
* 也可通过 DEBUG=vite-plugin-uni-pages:* 环境变量控制。
|
|
412
|
+
*
|
|
413
|
+
* @default false
|
|
414
|
+
* @since 0.1.8
|
|
415
|
+
*/
|
|
416
|
+
debug: boolean | DebugType;
|
|
417
|
+
/**
|
|
418
|
+
* 生命周期钩子,在各流水线阶段触发。钩子只接收该阶段的输入或输出
|
|
419
|
+
* 数据,绝不接收整个上下文。
|
|
420
|
+
*
|
|
421
|
+
* @since 0.0.3
|
|
422
|
+
*/
|
|
423
|
+
onBeforeLoadUserConfig: () => void;
|
|
424
|
+
onAfterLoadUserConfig: (pagesGlobConfig: PagesConfig | undefined) => void;
|
|
425
|
+
onBeforeScanPages: () => void;
|
|
426
|
+
onAfterScanPages: (pages: Map<string, Page>, subPages: Map<string, Map<string, Page>>) => void;
|
|
427
|
+
onBeforeMergePageMetaData: (pages: Map<string, Page>, pagesGlobConfig: PagesConfig | undefined) => void;
|
|
428
|
+
onAfterMergePageMetaData: (pageMetaData: InternalPages, subPageMetaData: SubPackages) => void;
|
|
429
|
+
onBeforeWriteFile: (filePath: string) => void;
|
|
430
|
+
onAfterWriteFile: (filePath: string, content: string) => void;
|
|
420
431
|
}
|
|
421
|
-
/**
|
|
432
|
+
/** 用户配置项类型,所有选项均为可选 */
|
|
422
433
|
type UserOptions = Partial<Options>;
|
|
423
434
|
/**
|
|
424
|
-
*
|
|
425
|
-
*
|
|
435
|
+
* 解析后的配置项接口
|
|
436
|
+
* 保留原始扫描规则、展开后的目录和生成选项
|
|
426
437
|
*/
|
|
427
|
-
interface ResolvedOptions extends Omit<Options, '
|
|
438
|
+
interface ResolvedOptions extends Omit<Options, 'homePage' | 'configSource' | 'dts' | 'subPackages'> {
|
|
428
439
|
/**
|
|
429
|
-
*
|
|
440
|
+
* 解析为 Vite 配置中的 `root` 值。
|
|
430
441
|
* @default config.root
|
|
431
442
|
*/
|
|
432
443
|
root: string;
|
|
433
444
|
dts: string | false;
|
|
434
445
|
/**
|
|
435
|
-
*
|
|
446
|
+
* 解析后的页面目录列表
|
|
436
447
|
*/
|
|
437
448
|
dirs: string[];
|
|
438
449
|
/**
|
|
439
|
-
*
|
|
450
|
+
* 解析后的入口页面
|
|
440
451
|
*/
|
|
441
452
|
homePage: string[];
|
|
442
|
-
configSource: LoadConfigSource<
|
|
453
|
+
configSource: LoadConfigSource<PagesConfig>[];
|
|
443
454
|
/**
|
|
444
|
-
*
|
|
455
|
+
* 解析后的分包目录列表
|
|
445
456
|
*/
|
|
446
457
|
subPackages: string[];
|
|
458
|
+
/** 原始分包目录规则,用于重新发现目录 */
|
|
459
|
+
subPackagePatterns: (string | SubPackageConfig)[];
|
|
447
460
|
/**
|
|
448
|
-
*
|
|
449
|
-
*
|
|
461
|
+
* 分包目录的 root 映射(目录 -> 最终 root)
|
|
462
|
+
*
|
|
463
|
+
* @description 未登记的目录继续使用相对 outDir 的默认 root
|
|
450
464
|
*/
|
|
451
465
|
subPackageRootMap: Map<string, string>;
|
|
452
466
|
}
|
|
453
467
|
/**
|
|
454
|
-
*
|
|
455
|
-
*
|
|
468
|
+
* 分包配置接口
|
|
469
|
+
* 为 monorepo 支持,允许自定义 pages.json 中的 root 路径
|
|
456
470
|
*
|
|
457
|
-
*
|
|
458
|
-
*
|
|
459
|
-
*
|
|
471
|
+
* monorepo 项目中页面可能位于项目根目录之外(如 ../../packages/login/src/pages)。
|
|
472
|
+
* 默认情况下插件会生成含 '..' 的 root 路径,而 uni-app 不支持。
|
|
473
|
+
* 通过该配置指定出现在 pages.json 中的自定义 root。
|
|
460
474
|
*
|
|
461
475
|
* @example
|
|
462
476
|
* ```ts
|
|
463
477
|
* subPackages: [
|
|
464
478
|
* {
|
|
465
|
-
* dir: '../../packages/login/src/pages', //
|
|
466
|
-
* root: 'packages/login/src/pages', //
|
|
479
|
+
* dir: '../../packages/login/src/pages', // 实际扫描的物理目录
|
|
480
|
+
* root: 'packages/login/src/pages', // pages.json 中的自定义 root
|
|
467
481
|
* }
|
|
468
482
|
* ]
|
|
469
483
|
* ```
|
|
470
484
|
*/
|
|
471
485
|
interface SubPackageConfig {
|
|
472
|
-
/**
|
|
486
|
+
/** 扫描页面文件的物理目录或 glob,相对 Vite root 解析 */
|
|
473
487
|
dir: string;
|
|
474
|
-
/**
|
|
475
|
-
|
|
488
|
+
/**
|
|
489
|
+
* 出现在 pages.json subPackages.root 中的自定义根路径
|
|
490
|
+
*
|
|
491
|
+
* @description
|
|
492
|
+
* 回调同步接收相对 Vite root、使用 `/` 分隔且无末尾斜杠的匹配目录
|
|
493
|
+
* 返回值须为非空相对路径,不能包含 `..`;每次重新发现目录时会再次调用
|
|
494
|
+
*/
|
|
495
|
+
root: string | ((dir: string) => string);
|
|
496
|
+
}
|
|
497
|
+
/** 最终分包 root 的决议来源 */
|
|
498
|
+
interface ScanSourceOrigin {
|
|
499
|
+
/** 提供 root 的词法目录,与对应分包目录来源的 dir 一致 */
|
|
500
|
+
dir: string;
|
|
501
|
+
/** 提供 root 的声明在 subPackagePatterns 中的索引,从 0 开始 */
|
|
502
|
+
ruleIndex: number;
|
|
503
|
+
/** 提供 root 的声明是否为显式来源 */
|
|
504
|
+
explicitRoot: boolean;
|
|
505
|
+
}
|
|
506
|
+
/** 扫描来源的词法目录及声明位置 */
|
|
507
|
+
interface ScanSourceCoordinate {
|
|
508
|
+
/** 扫描目录的词法路径,保留符号链接别名;相对路径以 Vite root 为基准 */
|
|
509
|
+
dir: string;
|
|
510
|
+
/** 当前声明是否显式提供 root,与是否继承其他声明的显式 root 无关 */
|
|
511
|
+
explicitRoot: boolean;
|
|
512
|
+
/** 主包为 0,分包为 subPackagePatterns 中的从零索引;hook 页面未关联声明时为 -1 */
|
|
513
|
+
ruleIndex: number;
|
|
514
|
+
/** 声明内从零开始的目录匹配索引;glob 按路径排序,无匹配记录时为 0 */
|
|
515
|
+
matchIndex: number;
|
|
516
|
+
/** 最终分包 root 的决议来源,可能来自另一声明;主包及未关联声明的 hook 页面无此值 */
|
|
517
|
+
rootSource?: ScanSourceOrigin;
|
|
476
518
|
}
|
|
477
519
|
/**
|
|
478
|
-
*
|
|
479
|
-
*
|
|
520
|
+
* 页面路径信息接口
|
|
521
|
+
* 包含页面文件的相对路径与绝对路径
|
|
480
522
|
*/
|
|
481
523
|
interface PagePath {
|
|
482
|
-
/**
|
|
524
|
+
/** 相对输出目录的路径 */
|
|
483
525
|
relativePath: string;
|
|
484
|
-
/**
|
|
526
|
+
/** 页面文件的绝对路径 */
|
|
485
527
|
absolutePath: string;
|
|
486
528
|
}
|
|
487
529
|
//#endregion
|
|
530
|
+
//#region src/config.d.ts
|
|
531
|
+
/**
|
|
532
|
+
* 定义 uni-pages 配置
|
|
533
|
+
* 在 pages.config.ts 配置文件中使用,提供类型提示与校验
|
|
534
|
+
*
|
|
535
|
+
* @param config - 页面配置对象
|
|
536
|
+
* @returns 配置对象
|
|
537
|
+
*/
|
|
538
|
+
export declare function defineUniPages(config: UserPagesConfig): UserPagesConfig;
|
|
539
|
+
//#endregion
|
|
488
540
|
//#region src/constant.d.ts
|
|
489
|
-
/**
|
|
490
|
-
declare const MODULE_ID_VIRTUAL = "virtual:uni-pages";
|
|
491
|
-
/**
|
|
492
|
-
declare const RESOLVED_MODULE_ID_VIRTUAL = "\0virtual:uni-pages";
|
|
493
|
-
/**
|
|
494
|
-
declare const OUTPUT_NAME = "pages.json";
|
|
495
|
-
/**
|
|
496
|
-
declare const FILE_EXTENSIONS: string[];
|
|
541
|
+
/** Vite 模块解析用的虚拟模块标识 */
|
|
542
|
+
export declare const MODULE_ID_VIRTUAL = "virtual:uni-pages";
|
|
543
|
+
/** 加 \0 前缀解析后的虚拟模块标识,避免与其他模块冲突 */
|
|
544
|
+
export declare const RESOLVED_MODULE_ID_VIRTUAL = "\0virtual:uni-pages";
|
|
545
|
+
/** 输出文件名,即 uni-app 的页面配置文件 */
|
|
546
|
+
export declare const OUTPUT_NAME = "pages.json";
|
|
547
|
+
/** 支持的页面文件扩展名 */
|
|
548
|
+
export declare const FILE_EXTENSIONS: string[];
|
|
549
|
+
//#endregion
|
|
550
|
+
//#region src/pages-snapshot.d.ts
|
|
551
|
+
/**
|
|
552
|
+
* 一次生成的完整路由快照。
|
|
553
|
+
*
|
|
554
|
+
* 虚拟模块、路由字符串和声明文件都从这里取值。生成过程本身仍可以使用
|
|
555
|
+
* 可变的工作字段;创建快照时复制容器,后续工作字段的增删不会改变这次的结果,便于测试与虚拟模块读取保持一致。
|
|
556
|
+
*/
|
|
557
|
+
interface PagesSnapshot {
|
|
558
|
+
pages: InternalPages;
|
|
559
|
+
subPackages: SubPackages;
|
|
560
|
+
tabBar?: TabBar;
|
|
561
|
+
globConfig?: PagesConfig;
|
|
562
|
+
homePath?: string;
|
|
563
|
+
}
|
|
564
|
+
//#endregion
|
|
565
|
+
//#region src/context.d.ts
|
|
566
|
+
/**
|
|
567
|
+
* 页面上下文:负责扫描页面、加载配置、合并页面信息、生成 pages.json
|
|
568
|
+
*
|
|
569
|
+
* 做的事情按固定顺序是:加载用户配置 → 扫描页面文件 → 合并页面
|
|
570
|
+
* 信息 → 写入 pages.json。这个顺序由 {@link updatePagesJSON}(完整
|
|
571
|
+
* 流程)或 {@link scanAndMerge}(只算不写)管理,调用方不用关心
|
|
572
|
+
* 内部步骤。
|
|
573
|
+
*/
|
|
574
|
+
export declare class PageContext {
|
|
575
|
+
private _server;
|
|
576
|
+
private readonly configLoader;
|
|
577
|
+
private readonly watchers;
|
|
578
|
+
private readonly watchedConfigPaths;
|
|
579
|
+
/** 当前配置依赖与恢复范围;事件判定和路径展开都从这里取 */
|
|
580
|
+
private readonly configWatch;
|
|
581
|
+
/** 生成物(pages.json、d.ts)的绝对路径,只在首次事件时算一次 */
|
|
582
|
+
private generatedPathsCache;
|
|
583
|
+
private pendingUpdate;
|
|
584
|
+
private disposed;
|
|
585
|
+
private disposal;
|
|
586
|
+
/** 本轮扫描的目录、分包来源与规则;扫描和监听共用 */
|
|
587
|
+
private scanPlan;
|
|
588
|
+
/** 最近一次生成的完整快照;虚拟模块、路由与声明都读它 */
|
|
589
|
+
private generatedSnapshot;
|
|
590
|
+
/** 随扫描更新的 Page 来源,用于复用检查和冲突诊断 */
|
|
591
|
+
private readonly pageSources;
|
|
592
|
+
/** 扫描候选独立于归属裁剪后的输出映射,保留非代表来源的内容缓存 */
|
|
593
|
+
private mainPageCandidates;
|
|
594
|
+
private subPageCandidates;
|
|
595
|
+
private readonly pageWatcher;
|
|
596
|
+
/** 待处理的页面更新:生成期间到达的事件合并到下一轮 */
|
|
597
|
+
private pendingPageUpdate;
|
|
598
|
+
/** 当前事件更新循环;dispose 时等待它排空 */
|
|
599
|
+
private pendingPageFlush;
|
|
600
|
+
/** 页面监听启动参数;初始化失败时保留,后续生成会重试 */
|
|
601
|
+
private pageWatcherStart;
|
|
602
|
+
/** 当前配置本地依赖及加载失败后仍需监听的恢复路径 */
|
|
603
|
+
pagesConfigDependencyPaths: string[];
|
|
604
|
+
/** 从用户配置文件(pages.config.ts)解析出的配置对象 */
|
|
605
|
+
pagesGlobConfig: PagesConfig | undefined;
|
|
606
|
+
/** 用户配置文件的来源路径列表 */
|
|
607
|
+
pagesConfigSourcePaths: string[];
|
|
608
|
+
/** 主包页面映射,键为页面文件的词法绝对路径 */
|
|
609
|
+
pages: Map<string, Page>;
|
|
610
|
+
/** 分包页面映射,外层键为词法扫描目录,内层键为页面文件的词法绝对路径 */
|
|
611
|
+
subPages: Map<string, Map<string, Page>>;
|
|
612
|
+
/** 主包页面配置数组,用于生成 pages.json 的 pages 字段 */
|
|
613
|
+
pageMetaData: InternalPages;
|
|
614
|
+
/** 分包页面配置数组,用于生成 pages.json 的 subPackages 字段 */
|
|
615
|
+
subPageMetaData: SubPackages;
|
|
616
|
+
/**
|
|
617
|
+
* 最近一次合并出的 tabBar(配置文件与 definePage 声明的合体)。
|
|
618
|
+
* 类型声明生成 tab 页列表时用它,definePage 声明的 tabBar 页才能
|
|
619
|
+
* 一起从 navigateTo 的 url 类型里排除
|
|
620
|
+
*/
|
|
621
|
+
tabBar: TabBar | undefined;
|
|
622
|
+
/** 生成的 pages.json 文件路径 */
|
|
623
|
+
resolvedPagesJSONPath: string;
|
|
624
|
+
/** 项目根目录 */
|
|
625
|
+
root: string;
|
|
626
|
+
/** 解析后的配置项 */
|
|
627
|
+
options: ResolvedOptions;
|
|
628
|
+
/** 当前平台标识,如 'mp-weixin';由调用方传入,不依赖模块加载时冻结的环境 */
|
|
629
|
+
readonly platform: string;
|
|
630
|
+
logger?: Logger;
|
|
631
|
+
/** 是否与 vite-plugin-uni-platform 插件协同工作 */
|
|
632
|
+
withUniPlatform: boolean;
|
|
633
|
+
/** pages.json 中页面路径的解析基准路径 */
|
|
634
|
+
private get basePath();
|
|
635
|
+
/**
|
|
636
|
+
* 创建 PageContext 实例
|
|
637
|
+
* @param userOptions - 用户配置项
|
|
638
|
+
* @param viteRoot - Vite 项目根目录,默认为当前工作目录
|
|
639
|
+
* @param platform - 当前平台标识,默认取 uni-env 的平台
|
|
640
|
+
*/
|
|
641
|
+
constructor(userOptions: UserOptions, viteRoot?: string, platform?: string);
|
|
642
|
+
/**
|
|
643
|
+
* 设置 Vite logger
|
|
644
|
+
* @param logger - Vite logger 实例
|
|
645
|
+
*/
|
|
646
|
+
setLogger(logger: Logger): void;
|
|
647
|
+
/**
|
|
648
|
+
* 加载用户页面配置文件(如 pages.config.ts)
|
|
649
|
+
* 使用 unconfig 加载配置,支持多种配置文件格式
|
|
650
|
+
*/
|
|
651
|
+
loadUserPagesConfig(): Promise<void>;
|
|
652
|
+
/**
|
|
653
|
+
* 按顺序跑完扫描与合并:先扫描主包和分包的页面,再合并它们的
|
|
654
|
+
* 信息。步骤顺序只维护在这里,调用方和测试都不用关心。
|
|
655
|
+
*/
|
|
656
|
+
scanAndMerge(): Promise<void>;
|
|
657
|
+
/** 刷新本轮扫描计划,并同步兼容投影供既有调用方读取 */
|
|
658
|
+
private refreshScanPlan;
|
|
659
|
+
/** 扫描与监听阶段读取本轮计划;计划在 refreshScanPlan 之后必定存在 */
|
|
660
|
+
private requireScanPlan;
|
|
661
|
+
/**
|
|
662
|
+
* 设置 Vite 开发服务器,用于 HMR 与文件监听
|
|
663
|
+
* @param server - Vite 开发服务器实例
|
|
664
|
+
*/
|
|
665
|
+
setupViteServer(server: ViteDevServer): void;
|
|
666
|
+
/**
|
|
667
|
+
* 生成物(pages.json 与 d.ts)的绝对路径
|
|
668
|
+
*
|
|
669
|
+
* 只依赖构造后不再变化的 `options` 与 `resolvedPagesJSONPath`,
|
|
670
|
+
* 算一次缓存即可,不必每个事件重新解析
|
|
671
|
+
*/
|
|
672
|
+
private generatedFilePaths;
|
|
673
|
+
/** 按当前词法规则识别页面事件,真实路径只用于关联已收录来源 */
|
|
674
|
+
private pageFileForEvent;
|
|
675
|
+
private pageDirectoryForEvent;
|
|
676
|
+
/**
|
|
677
|
+
* 注册配置文件与页面目录结构监听,并启动页面内容监听
|
|
678
|
+
*
|
|
679
|
+
* @param watcher - 配置文件及目录结构事件使用的 chokidar 监听器
|
|
680
|
+
*/
|
|
681
|
+
setupWatcher(watcher: FSWatcher): Promise<void>;
|
|
682
|
+
/**
|
|
683
|
+
* 启动页面监听
|
|
684
|
+
*
|
|
685
|
+
* @description 初始化失败只记录并保留启动参数,后续生成会重新尝试;监听属于辅助
|
|
686
|
+
* 能力,不能阻断页面生成,也不能留下未处理的拒绝
|
|
687
|
+
*/
|
|
688
|
+
private startPageWatcher;
|
|
689
|
+
/**
|
|
690
|
+
* 释放本上下文的监听与待处理更新
|
|
691
|
+
*
|
|
692
|
+
* @description 关闭后不再接受监听注册或更新;已开始的生成会完成,重复调用等待同一次释放
|
|
693
|
+
* 共享 watcher 的关闭仍由 Vite 负责
|
|
694
|
+
*/
|
|
695
|
+
disposeWatchers(): Promise<void>;
|
|
696
|
+
/** 补充未覆盖的监听路径,注册成功后记账,失败时保留重试机会 */
|
|
697
|
+
private addWatchPaths;
|
|
698
|
+
/**
|
|
699
|
+
* 让监听路径与当前配置依赖保持一致
|
|
700
|
+
*
|
|
701
|
+
* 只新增路径,从不 unwatch:chokidar 对文件调用 unwatch 会连带
|
|
702
|
+
* 拆掉父目录监听,新建文件就再也发现不了。因此监听集合是并集,
|
|
703
|
+
* 会随着会话累积;每次刷新都按当前依赖重建配置监听计划,
|
|
704
|
+
* 真正决定是否触发的始终是计划里的依赖集合(恢复目录除外,那是
|
|
705
|
+
* 故意留的兜底)。
|
|
706
|
+
*/
|
|
707
|
+
private refreshConfigWatchers;
|
|
708
|
+
/** 配置变化的完整更新:失败只记录,不让 Promise 拒绝 */
|
|
709
|
+
private updatePagesAndNotify;
|
|
710
|
+
/** 记录 watcher 更新失败,避免未处理的拒绝终止进程 */
|
|
711
|
+
private logUpdateFailure;
|
|
712
|
+
/**
|
|
713
|
+
* 登记页面事件触发的更新:生成期间到达的事件合并到下一轮
|
|
714
|
+
*
|
|
715
|
+
* @description 连续删除、重建会一次性派发大量事件,逐个生成会反复
|
|
716
|
+
* 重读全部页面;内容变更合并待刷新文件,结构变更执行完整刷新
|
|
717
|
+
* @param filepath - 只读取该页面;省略时执行完整扫描
|
|
718
|
+
*/
|
|
719
|
+
private queuePageUpdate;
|
|
720
|
+
/**
|
|
721
|
+
* 排空页面事件队列;失败只记录,不让 Promise 拒绝
|
|
722
|
+
*
|
|
723
|
+
* 页面事件的回调走这里而不是直接调 {@link updatePagesJSON}:一旦
|
|
724
|
+
* 它拒绝(拿不到文件锁、声明文件写不进去),就成了未处理的拒绝,
|
|
725
|
+
* Node 默认直接终止进程。开发时正在编辑文件,一次偶发的锁冲突
|
|
726
|
+
* 不该把 dev server 打死。用户改一次文件就会再触发一次事件,
|
|
727
|
+
* 所以这里报错即可。
|
|
728
|
+
*/
|
|
729
|
+
private flushPageUpdates;
|
|
730
|
+
/**
|
|
731
|
+
* 页面更新回调,页面文件或配置变化时触发
|
|
732
|
+
* 负责使虚拟模块失效并通知浏览器整页刷新
|
|
733
|
+
*/
|
|
734
|
+
onUpdate(): void;
|
|
735
|
+
/**
|
|
736
|
+
* 刷新页面配置并更新 pages.json
|
|
737
|
+
*
|
|
738
|
+
* @description 同一实例的调用按顺序执行;指定页面时尝试增量读取,页面尚未收录或物理身份变化时执行完整刷新
|
|
739
|
+
*
|
|
740
|
+
* @param filepath 变更页面的绝对路径或相对 root 的路径;省略时执行完整刷新
|
|
741
|
+
* @returns pages.json 写入新内容时为 `true`,内容未变、上下文已关闭或跳过生成时为 `false`
|
|
742
|
+
* @throws 生成、写入或声明输出失败时拒绝;声明输出失败前 pages.json 可能已更新
|
|
743
|
+
*/
|
|
744
|
+
updatePagesJSON(filepath?: string): Promise<boolean>;
|
|
745
|
+
private enqueuePagesUpdate;
|
|
746
|
+
private generatePagesJSON;
|
|
747
|
+
/** 最近一次生成的路由快照;未写入文件时由当前工作字段合成 */
|
|
748
|
+
get snapshot(): PagesSnapshot;
|
|
749
|
+
/**
|
|
750
|
+
* 生成虚拟模块内容
|
|
751
|
+
* 返回包含 pages 与 subPackages 导出的 JavaScript 代码
|
|
752
|
+
* @returns 虚拟模块代码字符串
|
|
753
|
+
*/
|
|
754
|
+
virtualModule(): string;
|
|
755
|
+
/**
|
|
756
|
+
* 将主包路由数据解析为 JSON 字符串
|
|
757
|
+
* @returns 主包页面配置的 JSON 字符串
|
|
758
|
+
*/
|
|
759
|
+
resolveRoutes(): string;
|
|
760
|
+
/**
|
|
761
|
+
* 将分包路由数据解析为 JSON 字符串
|
|
762
|
+
* @returns 分包页面配置的 JSON 字符串
|
|
763
|
+
*/
|
|
764
|
+
resolveSubRoutes(): string;
|
|
765
|
+
/**
|
|
766
|
+
* 解析 tabBar 配置
|
|
767
|
+
* 将页面定义的 tabBar 项与配置文件定义的 tabBar 合并
|
|
768
|
+
* @returns 合并后的 tabBar 配置对象,无 tabBar 时为 undefined
|
|
769
|
+
*/
|
|
770
|
+
resolveTabBar(): Promise<TabBar | undefined>;
|
|
771
|
+
/**
|
|
772
|
+
* 生成 TypeScript 声明文件
|
|
773
|
+
* 为页面路径生成类型定义,导航时提供类型提示
|
|
774
|
+
*/
|
|
775
|
+
generateDeclaration(): Promise<void> | undefined;
|
|
776
|
+
/**
|
|
777
|
+
* 按词法目录扫描主包页面
|
|
778
|
+
*
|
|
779
|
+
* @description 各目录分别执行文件排除,物理别名保留到页面有效性与归属决议阶段
|
|
780
|
+
*/
|
|
781
|
+
private scanPages;
|
|
782
|
+
/**
|
|
783
|
+
* 登记本轮来源并复用身份与输出基准均未变化的 Page
|
|
784
|
+
*
|
|
785
|
+
* @description 整轮更新使读取缓存失效,增量更新复用目标页的预读结果与其他页面缓存
|
|
786
|
+
* @returns 路径仍存在时返回页面实例,扫描期间已消失时为 undefined
|
|
787
|
+
*/
|
|
788
|
+
private trackPage;
|
|
789
|
+
private pageEnvironment;
|
|
790
|
+
/** 页面来源的原始声明规则,用于冲突诊断;hook 页面可能没有 */
|
|
791
|
+
private configuredRule;
|
|
792
|
+
/**
|
|
793
|
+
* 按词法路径或物理身份查找全部缓存候选
|
|
794
|
+
* @param filepath - 页面文件的绝对路径
|
|
795
|
+
* @returns 主包和分包中属于同一文件的页面实例,每个实例只返回一次
|
|
796
|
+
*/
|
|
797
|
+
private findPages;
|
|
798
|
+
/**
|
|
799
|
+
* 按词法来源扫描分包页面
|
|
800
|
+
*
|
|
801
|
+
* @description 同一物理目录的不同别名仍分别执行文件排除,避免某个别名被排除后漏页
|
|
802
|
+
*/
|
|
803
|
+
private scanSubPages;
|
|
804
|
+
/**
|
|
805
|
+
* 为每个物理扫描目录选取声明来源
|
|
806
|
+
*
|
|
807
|
+
* @description 同一路径的不同写法只扫描一次,定位信息按显式优先选择;
|
|
808
|
+
* 符号链接别名是不同的 absolute,仍分别保留各自的词法路径
|
|
809
|
+
*/
|
|
810
|
+
private subPackageSourcesByDir;
|
|
811
|
+
/** 获取目录的最终分包 root,未登记时相对 outDir 计算默认值 */
|
|
812
|
+
private subPackageRoot;
|
|
813
|
+
/**
|
|
814
|
+
* 决议有效页面的归属并校验生成路由
|
|
815
|
+
*
|
|
816
|
+
* @description 先读取宏并应用既有平台规则,再选择代表;冲突校验通过后才裁剪页面映射,
|
|
817
|
+
* 配置覆盖与输出去重在此之后执行
|
|
818
|
+
*/
|
|
819
|
+
private resolveScanSources;
|
|
820
|
+
/**
|
|
821
|
+
* 解析 pages 规则并设置页面类型
|
|
822
|
+
* @param pages 页面路径映射
|
|
823
|
+
* @param packageType 页面包类型(主包或分包)
|
|
824
|
+
* @param overrides 自定义页面配置
|
|
825
|
+
* @returns pages 规则
|
|
826
|
+
*/
|
|
827
|
+
private parsePages;
|
|
828
|
+
/**
|
|
829
|
+
* 设置首页
|
|
830
|
+
* @param result pages 规则数组
|
|
831
|
+
* @returns pages 规则
|
|
832
|
+
*/
|
|
833
|
+
private setHomePage;
|
|
834
|
+
/**
|
|
835
|
+
* 决议扫描来源后合并主包页面配置
|
|
836
|
+
*
|
|
837
|
+
* @description 有效分包优先认领物理页面,生成来源冲突在用户配置覆盖前检查
|
|
838
|
+
*/
|
|
839
|
+
private mergePageMetaData;
|
|
840
|
+
/**
|
|
841
|
+
* 合并分包页面配置
|
|
842
|
+
*
|
|
843
|
+
* @description 静态、glob 和回调来源先按最终 root 汇集,再对整组应用一次配置覆盖,
|
|
844
|
+
* 保留手工页面和分包 plugins 配置
|
|
845
|
+
*/
|
|
846
|
+
private mergeSubPageMetaData;
|
|
847
|
+
}
|
|
848
|
+
/**
|
|
849
|
+
* 应用 vite-plugin-uni-platform 的页面文件名后缀规则(如 `index.h5.vue`
|
|
850
|
+
* 对应页面 `index`):丢弃其他平台的后缀页面,保留当前平台的并把文件名
|
|
851
|
+
* 里的后缀剥掉。
|
|
852
|
+
*
|
|
853
|
+
* 带点的判断只看路径最后一段(文件名),和 vite-plugin-uni-platform
|
|
854
|
+
* 自己的规则一致(它也只在文件名上判断后缀),目录名里的点(如
|
|
855
|
+
* `pages/v1.2/detail`)不算平台后缀。
|
|
856
|
+
*
|
|
857
|
+
* 注意后缀匹配仍是原始的 `path.includes(platform)`,没有做 definePage
|
|
858
|
+
* 那边 h5/web 的别名换算(见 condition.ts 的 platformMatches):
|
|
859
|
+
* UNI_PLATFORM=web 时,`.h5` 后缀的页面会被过滤掉。这是一直以来的
|
|
860
|
+
* 行为,为了和 vite-plugin-uni-platform 自己的命名规则保持一致而保留。
|
|
861
|
+
*
|
|
862
|
+
* @param pages - 合并后的主包页面配置
|
|
863
|
+
* @param platform - 当前平台标识
|
|
864
|
+
* @returns 过滤并剥掉后缀的新数组,入参不被修改
|
|
865
|
+
*/
|
|
866
|
+
export declare function filterPlatformSuffixPages(pages: InternalPages, platform: string): InternalPages;
|
|
867
|
+
//#endregion
|
|
868
|
+
//#region src/directories.d.ts
|
|
869
|
+
/**
|
|
870
|
+
* 规范化页面目录选择器中的路径分隔符
|
|
871
|
+
*
|
|
872
|
+
* @description 在 Windows 上将反斜杠路径分隔符转换为 `/`,保留 `\[`、`\(` 等 glob 转义
|
|
873
|
+
*
|
|
874
|
+
* @param pattern 页面目录路径或 glob 表达式
|
|
875
|
+
* @returns Windows 返回规范化后的选择器,其他平台返回原字符串
|
|
876
|
+
*
|
|
877
|
+
* @example
|
|
878
|
+
* ```ts
|
|
879
|
+
* normalizePagePattern('src\\pages') // Windows: 'src/pages'
|
|
880
|
+
* ```
|
|
881
|
+
*/
|
|
882
|
+
export declare function normalizePagePattern(pattern: string): string;
|
|
883
|
+
/**
|
|
884
|
+
* 将目录选择器中的 glob 转义还原为字面字符
|
|
885
|
+
*
|
|
886
|
+
* @description 用于已经确定的固定路径部分,还原后的字符串可传给 `path.resolve` 等路径 API
|
|
887
|
+
*
|
|
888
|
+
* @param pattern 以 `/` 分隔、可包含 glob 转义的固定目录路径
|
|
889
|
+
* @returns 去除 glob 特殊字符前转义反斜杠的路径字符串
|
|
890
|
+
*
|
|
891
|
+
* @example
|
|
892
|
+
* ```ts
|
|
893
|
+
* unescapePagePattern('src/\\[demo\\]') // 'src/[demo]'
|
|
894
|
+
* ```
|
|
895
|
+
*/
|
|
896
|
+
export declare function unescapePagePattern(pattern: string): string;
|
|
897
|
+
/**
|
|
898
|
+
* 查找当前可扫描的页面目录
|
|
899
|
+
*
|
|
900
|
+
* @description 应用目录排除后,返回相对 root、按路径排序的匹配结果;空规则或否定规则返回空数组
|
|
901
|
+
*
|
|
902
|
+
* @param dir 页面目录 glob,可使用绝对路径
|
|
903
|
+
* @param root 相对目录和相对 exclude 的解析基准
|
|
904
|
+
* @param exclude 目录及页面排除规则
|
|
905
|
+
*/
|
|
906
|
+
export declare function resolvePageDirs(dir: string, root: string, exclude: string[]): string[];
|
|
907
|
+
/** 单次分包目录发现保留的来源记录 */
|
|
908
|
+
export interface SubPackageDirectorySource extends ScanSourceCoordinate {
|
|
909
|
+
/**
|
|
910
|
+
* 扫描目录的词法路径,与 subPackages 的目录投影一致
|
|
911
|
+
*
|
|
912
|
+
* @description glob 或回调来源相对 Vite root,静态来源保留声明的绝对或相对写法
|
|
913
|
+
*/
|
|
914
|
+
dir: string;
|
|
915
|
+
/** 相对 Vite root 解析的绝对路径,保留符号链接别名 */
|
|
916
|
+
absolute: string;
|
|
917
|
+
/** 目录的 realpath 身份;缺失、非目录或解析期间消失时为 undefined */
|
|
918
|
+
identity?: string;
|
|
919
|
+
/** 同一物理目录完成显式/默认来源决议后的最终分包 root */
|
|
920
|
+
root: string;
|
|
921
|
+
/** 最终 root 的选择来源,可能与当前声明不同 */
|
|
922
|
+
rootSource: ScanSourceOrigin;
|
|
923
|
+
}
|
|
924
|
+
type SubPackageDirectoryProjection = Pick<ResolvedOptions, 'subPackages' | 'subPackageRootMap'>;
|
|
925
|
+
/** 展开分包声明,返回逐条来源记录和扫描目录投影 */
|
|
926
|
+
export declare function discoverSubPackageDirectories(patterns: (string | SubPackageConfig)[], root: string, outDir: string, exclude: string[]): {
|
|
927
|
+
sources: SubPackageDirectorySource[];
|
|
928
|
+
projection: SubPackageDirectoryProjection;
|
|
929
|
+
};
|
|
930
|
+
/**
|
|
931
|
+
* 展开分包目录并确定各目录的最终 root
|
|
932
|
+
*
|
|
933
|
+
* @description 每次调用重新发现目录并求值回调;按声明顺序排列,glob 内按路径排序
|
|
934
|
+
* 同一物理目录的显式 root 优先于默认值,词法别名分别保留,重复目录投影只登记一次
|
|
935
|
+
*
|
|
936
|
+
* @param patterns 原始分包目录声明
|
|
937
|
+
* @param root 相对目录和相对 exclude 的解析基准
|
|
938
|
+
* @param outDir 默认分包 root 的换算基准,相对 root 解析
|
|
939
|
+
* @param exclude 目录及页面排除规则
|
|
940
|
+
* @returns 目录列表及最终 root 映射
|
|
941
|
+
* @throws 目录规则无效、root 回调失败、显式 root 冲突或非缺失类目录访问错误
|
|
942
|
+
*/
|
|
943
|
+
export declare function resolveSubPackageDirs(patterns: (string | SubPackageConfig)[], root: string, outDir: string, exclude: string[]): SubPackageDirectoryProjection;
|
|
944
|
+
/**
|
|
945
|
+
* 读取当前分包目录来源
|
|
946
|
+
*
|
|
947
|
+
* @description 每次调用重新发现目录并求值回调;需要与扫描共用同一份结果时,
|
|
948
|
+
* 使用 ScanPlan 而不是在扫描中途再次调用
|
|
949
|
+
*
|
|
950
|
+
* @returns 按声明及匹配顺序排列的来源,调用方应只读使用记录
|
|
951
|
+
* @throws 目录规则、root 决议或目录访问错误
|
|
952
|
+
*/
|
|
953
|
+
export declare function getSubPackageDirectorySources(options: ResolvedOptions): readonly SubPackageDirectorySource[];
|
|
954
|
+
/**
|
|
955
|
+
* 刷新扫描目录与分包 root 投影
|
|
956
|
+
*
|
|
957
|
+
* @description 仅用于兼容仍读取 `ResolvedOptions` 的调用方;内部扫描走
|
|
958
|
+
* `createScanPlan()`,每次重新发现目录来源与物理身份,不保留上一轮快照
|
|
959
|
+
*
|
|
960
|
+
* @throws 目录规则、root 决议或目录访问失败时抛出,应中止本轮扫描
|
|
961
|
+
*/
|
|
962
|
+
export declare function refreshPageDirectories(options: ResolvedOptions): void;
|
|
963
|
+
/**
|
|
964
|
+
* 判断目录事件是否可能改变扫描目录集合
|
|
965
|
+
*
|
|
966
|
+
* @description directory 相对 options.root 解析,允许目录已删除;关闭 mergePages 时返回 false
|
|
967
|
+
*/
|
|
968
|
+
export declare function isPageDirectoryEvent(directory: string, options: ResolvedOptions): boolean;
|
|
969
|
+
/**
|
|
970
|
+
* 判断文件路径是否位于当前页面规则内
|
|
971
|
+
*
|
|
972
|
+
* @description file 相对 options.root 解析,按原始规则与 exclude 判断,不要求文件存在或目录已展开
|
|
973
|
+
* 关闭 mergePages 时返回 false,文件扩展名由调用方校验
|
|
974
|
+
*/
|
|
975
|
+
export declare function isPageFileInDirectories(file: string, options: ResolvedOptions): boolean;
|
|
497
976
|
//#endregion
|
|
498
977
|
//#region src/files.d.ts
|
|
499
978
|
/**
|
|
500
|
-
*
|
|
979
|
+
* 判断是否为路径缺失或中间路径不是目录的文件系统错误
|
|
980
|
+
*
|
|
981
|
+
* @returns 错误码为 ENOENT 或 ENOTDIR 时返回 true,其他错误及空输入返回 false
|
|
501
982
|
*/
|
|
502
|
-
declare function
|
|
983
|
+
export declare function isMissingFsError(error: unknown): boolean;
|
|
503
984
|
/**
|
|
504
|
-
*
|
|
505
|
-
*
|
|
506
|
-
* @
|
|
985
|
+
* 获取扫描目录中未被排除的页面文件
|
|
986
|
+
*
|
|
987
|
+
* @param directory - 绝对扫描目录,或相对项目根的目录
|
|
988
|
+
* @param options - 已解析的页面选项,排除规则以其中的项目根为基准
|
|
989
|
+
* @returns 相对扫描目录、使用 `/` 分隔的文件路径
|
|
507
990
|
*/
|
|
508
|
-
declare function
|
|
991
|
+
export declare function getPageFiles(directory: string, options: ResolvedOptions): string[];
|
|
509
992
|
/**
|
|
510
|
-
*
|
|
993
|
+
* 检查文件是否为目标页面文件
|
|
994
|
+
* 判断文件扩展名是否在支持的页面文件类型列表中
|
|
511
995
|
*
|
|
512
|
-
*
|
|
513
|
-
*
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
996
|
+
* @param path - 文件路径
|
|
997
|
+
* @returns 是否为目标文件
|
|
998
|
+
*/
|
|
999
|
+
export declare function isTargetFile(path: string): boolean;
|
|
1000
|
+
/**
|
|
1001
|
+
* 根据项目根目录与输出目录解析 pages.json 文件路径
|
|
517
1002
|
*
|
|
518
|
-
* @param
|
|
519
|
-
* @param
|
|
520
|
-
* @
|
|
521
|
-
* @returns The value resolved by `task`, or `undefined` if the lock could not be acquired
|
|
1003
|
+
* @param root - 项目根目录
|
|
1004
|
+
* @param outDir - 相对 root 的 pages.json 输出目录
|
|
1005
|
+
* @returns pages.json 绝对路径
|
|
522
1006
|
*/
|
|
523
|
-
declare function
|
|
1007
|
+
export declare function resolvePagesJsonPath(root: string, outDir: string): string;
|
|
524
1008
|
/**
|
|
525
|
-
*
|
|
526
|
-
* Avoid data corruption caused by concurrent writes through file lock
|
|
527
|
-
* Use atomic write to ensure file write integrity
|
|
1009
|
+
* 确保这个路径上有一个能用的 pages.json 文件。
|
|
528
1010
|
*
|
|
529
|
-
*
|
|
530
|
-
*
|
|
531
|
-
*
|
|
1011
|
+
* 文件不存在时创建一个占位文件,占位内容很快会被下一次生成覆盖。
|
|
1012
|
+
* 已存在的文件绝不删除重建:删它会悄悄弄丢手写的内容(只读的文件
|
|
1013
|
+
* 也能被删除,只要它所在的目录可写),所以"路径存在但不是普通文件、
|
|
1014
|
+
* 或者读不了也写不了"都算必须由用户自己修的硬错误(例如
|
|
1015
|
+
* `chmod u+w`)。
|
|
532
1016
|
*
|
|
533
|
-
* @param path -
|
|
534
|
-
* @
|
|
535
|
-
*
|
|
1017
|
+
* @param path - 待检查的文件路径
|
|
1018
|
+
* @throws 路径存在但不是普通文件、缺少读写权限,或占位文件创建失败时
|
|
1019
|
+
* 抛出
|
|
536
1020
|
*/
|
|
537
|
-
declare function
|
|
1021
|
+
export declare function checkPagesJsonFileSync(path: fs.PathLike): void;
|
|
1022
|
+
/**
|
|
1023
|
+
* 拿到文件的独占锁后运行任务,运行完自动放锁。
|
|
1024
|
+
*
|
|
1025
|
+
* 它保护"读文件 → 算新内容 → 写回"的整个过程:锁从 `task` 开始
|
|
1026
|
+
* 一直拿到它结束,别的进程看不到、也覆盖不了写了一半的文件。
|
|
1027
|
+
* pages.json 的生成靠这一点:新内容要根据当前文件来算(里面有其他
|
|
1028
|
+
* 平台的 `#ifdef` 块)。
|
|
1029
|
+
*
|
|
1030
|
+
* 同进程的调用方先在上面那条按路径的队列里排队,再碰 OS 锁;下面的
|
|
1031
|
+
* 重试只用来等其他进程放锁。
|
|
1032
|
+
*
|
|
1033
|
+
* @param path - 要加锁的文件路径
|
|
1034
|
+
* @param task - 在锁内运行的异步任务;返回值原样返回给调用方
|
|
1035
|
+
* @param retry - 锁被别人拿着时的重试次数,默认 3
|
|
1036
|
+
* @returns `task` 的结果;一直拿不到锁时为 `undefined`
|
|
1037
|
+
* @throws 权限不足、路径缺失等非竞争错误原样抛出,不重试
|
|
1038
|
+
*/
|
|
1039
|
+
export declare function withFileLock<T>(path: string, task: () => Promise<T>, retry?: number): Promise<T | undefined>;
|
|
1040
|
+
//#endregion
|
|
1041
|
+
//#region src/macro.d.ts
|
|
1042
|
+
/**
|
|
1043
|
+
* definePage 宏的解析与求值
|
|
1044
|
+
*
|
|
1045
|
+
* 这个文件负责看懂一个 definePage 宏要的全部步骤:解析 Vue 单文件
|
|
1046
|
+
* 组件、逐个 script 块解析(单个块失败不影响别的块)、找到宏调用、
|
|
1047
|
+
* 收集 import 语句、放进沙箱求值。外部只用两个函数:
|
|
1048
|
+
* evaluateDefinePage(扫描时用)和 findDefinePageMacro(转换时用)。
|
|
1049
|
+
*
|
|
1050
|
+
* 两个入口都从 {@link parseSfcBlocks} 的块模型取宏:「两边按同一套
|
|
1051
|
+
* 规则找到同一个宏」由这个共享模型保证,不靠两边各自实现再对齐。
|
|
1052
|
+
*/
|
|
1053
|
+
/**
|
|
1054
|
+
* 解析 Vue 单文件组件(SFC)
|
|
1055
|
+
* 兼容不同版本的 @vue/compiler-sfc
|
|
1056
|
+
*
|
|
1057
|
+
* @param code - Vue SFC 源码
|
|
1058
|
+
* @param options - 解析选项
|
|
1059
|
+
* @returns SFC descriptor 对象
|
|
1060
|
+
*/
|
|
1061
|
+
export declare function parseSFC(code: string, options?: SFCParseOptions): SFCDescriptor;
|
|
1062
|
+
/**
|
|
1063
|
+
* 求值 Vue SFC 里的 definePage 宏,返回页面信息
|
|
1064
|
+
*
|
|
1065
|
+
* 扫描时用。解析或求值出错时,错误会交给调用方(Page.read),它会把
|
|
1066
|
+
* 这个页面退回成只含路径的简单信息。
|
|
1067
|
+
*
|
|
1068
|
+
* @param code - Vue SFC 源码
|
|
1069
|
+
* @param filename - SFC 文件名,用于错误提示和模块解析
|
|
1070
|
+
* @param platform - 当前平台标识,传给函数式宏;默认取 uni-env 的平台
|
|
1071
|
+
* @returns 页面信息对象;宏明确退出(definePage(null) 或函数返回
|
|
1072
|
+
* null)时为 `null`;没找到 definePage 时为 undefined
|
|
1073
|
+
*/
|
|
1074
|
+
export declare function evaluateDefinePage(code: string, filename: string, platform?: string): Promise<UserPageItem | null | undefined>;
|
|
1075
|
+
/**
|
|
1076
|
+
* 在 Vue SFC 中定位 definePage 宏调用但不求值
|
|
1077
|
+
*
|
|
1078
|
+
* 转换插件用它找到宏再删掉,不求值。块解析失败通过 `onParseError`
|
|
1079
|
+
* 报出来,不抛错。
|
|
1080
|
+
*
|
|
1081
|
+
* @param code - Vue SFC 源码
|
|
1082
|
+
* @param filename - 用于错误上报的 SFC 文件名
|
|
1083
|
+
* @param options - 可选的按块解析失败钩子
|
|
1084
|
+
* @param options.onParseError - 以失败的 script 块名与错误对象调用
|
|
1085
|
+
* @returns definePage 调用表达式,未找到时为 undefined
|
|
1086
|
+
*/
|
|
1087
|
+
export declare function findDefinePageMacro(code: string, filename: string, options?: {
|
|
1088
|
+
onParseError?: (block: string, error: unknown) => void;
|
|
1089
|
+
}): CallExpression | undefined;
|
|
538
1090
|
//#endregion
|
|
539
1091
|
//#region src/options.d.ts
|
|
540
1092
|
/**
|
|
541
|
-
*
|
|
542
|
-
*
|
|
1093
|
+
* 解析用户配置项
|
|
1094
|
+
* 将用户提供的配置与默认值合并,并处理路径解析
|
|
1095
|
+
*
|
|
1096
|
+
* @param userOptions - 用户配置项
|
|
1097
|
+
* @param viteRoot - Vite 项目根目录
|
|
1098
|
+
* @returns 解析后的配置项
|
|
1099
|
+
*/
|
|
1100
|
+
export declare function resolveOptions(userOptions: UserOptions, viteRoot?: string): ResolvedOptions;
|
|
1101
|
+
//#endregion
|
|
1102
|
+
//#region src/pages-json.d.ts
|
|
1103
|
+
/**
|
|
1104
|
+
* pages.json 的读取、合并、写回
|
|
1105
|
+
*
|
|
1106
|
+
* 这个文件负责 pages.json 的主流程:
|
|
1107
|
+
* - 多个平台共用一个文件时,用 #ifdef 注释区分各自的条目(合并规则
|
|
1108
|
+
* 的核心在 platform-variants.ts,数组侧的适配在这里,对象侧
|
|
1109
|
+
* tabBar 属性的适配在 tab-bar.ts)
|
|
1110
|
+
* - tabBar list 的条目顺序:配置覆盖全部既有条目时按配置顺序输出,
|
|
1111
|
+
* 否则新增条目落到声明位置、既有条目保持磁盘序(规则 6)
|
|
1112
|
+
* - 合并时保持首页排最前
|
|
1113
|
+
* - 写入"由插件生成"的标记,靠它识别哪些条目是插件写的
|
|
1114
|
+
* - 序列化格式(缩进、换行)
|
|
1115
|
+
* - 文件锁和原子写入,防止并发写坏文件
|
|
1116
|
+
*
|
|
1117
|
+
* 外部只需要用 writePagesJson(写文件)和 mergePagesJson(纯计算),
|
|
1118
|
+
* 不用接触 comment-json 的内部结构。
|
|
1119
|
+
*
|
|
1120
|
+
* 当前平台用不到的区块怎么处理,分两种情况:
|
|
1121
|
+
* - tabBar 的外观属性:uni-app 条件编译能把整段剥掉,保留并包上 #ifdef
|
|
1122
|
+
* - 没有任何页面的分包:构建产物里会留下指向不存在目录的空壳,直接删掉
|
|
1123
|
+
*/
|
|
1124
|
+
/** 由扫描/合并流水线组装出的路由数据 */
|
|
1125
|
+
export interface PagesJsonData {
|
|
1126
|
+
/** 主包页面配置 */
|
|
1127
|
+
pages: InternalPages;
|
|
1128
|
+
/** 分包页面配置 */
|
|
1129
|
+
subPackages: SubPackages;
|
|
1130
|
+
/** 解析后的 tabBar 配置 */
|
|
1131
|
+
tabBar?: TabBar;
|
|
1132
|
+
/**
|
|
1133
|
+
* 从扫描出的配置解析出的首页路径。从 pages.json 合并而来的条目
|
|
1134
|
+
* 可能缺少内部 `type` 标记(手写条目从不携带它),因此首页条目主要
|
|
1135
|
+
* 按路径重新定位;未设置时退回到 `type` 标记。
|
|
1136
|
+
*/
|
|
1137
|
+
homePath?: string;
|
|
1138
|
+
}
|
|
1139
|
+
/** 生成 pages.json 时怎么排版 */
|
|
1140
|
+
export interface PagesJsonFormatOptions {
|
|
1141
|
+
/**
|
|
1142
|
+
* 压缩成一行输出,优先级高于 `indent`。单行 JSON 放不下注释,
|
|
1143
|
+
* 生成标记、用户注释、所有 `#ifdef` 块都会丢失:只属于其他平台的
|
|
1144
|
+
* 条目和区块会直接暴露在本平台的构建产物里(如外来的 tabBar
|
|
1145
|
+
* list),tabBar 外观属性也变成"谁最后写谁说了算"。所以同一个
|
|
1146
|
+
* 项目的所有平台要保持这个配置一致
|
|
1147
|
+
*/
|
|
1148
|
+
minify?: boolean;
|
|
1149
|
+
/** 缩进,空格数或字符串(如 '\t') */
|
|
1150
|
+
indent?: number | string;
|
|
1151
|
+
/** 换行符 */
|
|
1152
|
+
eol?: '\n' | '\r\n';
|
|
1153
|
+
/** 是否在末尾追加换行符 */
|
|
1154
|
+
insertFinalNewline?: boolean;
|
|
1155
|
+
}
|
|
1156
|
+
export interface WritePagesJsonOptions {
|
|
1157
|
+
/** 当前平台标识,如 'mp-weixin' 或 'h5' */
|
|
1158
|
+
platform: string;
|
|
1159
|
+
/** 来自 pages.config.ts 的用户配置;pages/subPackages/tabBar 之外的字段原样写进输出 */
|
|
1160
|
+
globConfig?: PagesConfig;
|
|
1161
|
+
/** 序列化格式 */
|
|
1162
|
+
format?: PagesJsonFormatOptions;
|
|
1163
|
+
}
|
|
1164
|
+
/** 纯合并步骤的选项:{@link WritePagesJsonOptions} 中与文件无关的部分 */
|
|
1165
|
+
export type MergePagesJsonOptions = Pick<WritePagesJsonOptions, 'platform' | 'globConfig' | 'format'>;
|
|
1166
|
+
/**
|
|
1167
|
+
* 把路由数据合并进 pages.json 并写回
|
|
1168
|
+
*
|
|
1169
|
+
* 整个"读取 → 合并 → 写回"都锁在同一把文件锁里:因为新内容要参考
|
|
1170
|
+
* 当前文件里其他平台的 `#ifdef` 块,两个终端同时跑(比如
|
|
1171
|
+
* dev:mp-weixin + dev:mp-alipay)时才不会互相覆盖或读到写了一半的
|
|
1172
|
+
* 内容。写入用临时文件 + rename,中途崩溃也不会留下截断的文件。
|
|
1173
|
+
*
|
|
1174
|
+
* @param jsonPath - pages.json 文件路径
|
|
1175
|
+
* @param data - 由扫描/合并流水线组装的路由数据
|
|
1176
|
+
* @param options - 平台、用户配置与序列化格式
|
|
1177
|
+
* @returns 写入结果;获取不到文件锁时为 undefined
|
|
1178
|
+
*/
|
|
1179
|
+
export declare function writePagesJson(jsonPath: string, data: PagesJsonData, options: WritePagesJsonOptions): Promise<{
|
|
1180
|
+
updated: boolean;
|
|
1181
|
+
content: string;
|
|
1182
|
+
} | undefined>;
|
|
1183
|
+
/**
|
|
1184
|
+
* Retries an async operation up to 3 times on EPERM, waiting 50ms between
|
|
1185
|
+
* attempts. Other errors propagate immediately.
|
|
543
1186
|
*
|
|
544
|
-
*
|
|
545
|
-
*
|
|
546
|
-
*
|
|
1187
|
+
* Windows file rename (used by write-file-atomic) can fail with EPERM when
|
|
1188
|
+
* another process holds the destination open with a sharing mode that excludes
|
|
1189
|
+
* rename (e.g. chokidar's watcher). The lock clears in under a frame.
|
|
547
1190
|
*/
|
|
548
|
-
declare function
|
|
1191
|
+
export declare function retryOnEperm(operation: () => Promise<unknown>): Promise<void>;
|
|
549
1192
|
/**
|
|
550
|
-
*
|
|
1193
|
+
* 不碰文件系统,只做计算:把路由数据合并进现有 pages.json 文本
|
|
1194
|
+
* (多平台 `#ifdef` 块、首页重排、生成标记、过期分包清理)并序列化
|
|
1195
|
+
* 成字符串。文件锁、变更检测和原子写入都在 {@link writePagesJson}
|
|
1196
|
+
* 里;测试直接用字符串检查这个函数。
|
|
1197
|
+
*
|
|
1198
|
+
* @param existingContent - 当前 pages.json 文本,没有时传空字符串
|
|
1199
|
+
* @param data - 由扫描/合并流水线组装的路由数据
|
|
1200
|
+
* @param options - 平台、用户配置与序列化格式
|
|
1201
|
+
* @returns 序列化后的 pages.json 内容
|
|
551
1202
|
*/
|
|
552
|
-
declare function
|
|
553
|
-
|
|
554
|
-
|
|
1203
|
+
export declare function mergePagesJson(existingContent: string, data: PagesJsonData, options: MergePagesJsonOptions): string;
|
|
1204
|
+
//#endregion
|
|
1205
|
+
//#region src/pipeline.d.ts
|
|
1206
|
+
/**
|
|
1207
|
+
* 插件对外的主要入口
|
|
1208
|
+
*
|
|
1209
|
+
* "扫描 → 合并 → 写入"这一整套流程,在这里包成一次调用就能跑的
|
|
1210
|
+
* 函数。`root` 和 `platform` 可以从外面传进来,调用方和测试就不用
|
|
1211
|
+
* 受制于进程启动时定死的工作目录和环境变量。Vite 插件和 PageContext
|
|
1212
|
+
* 也是这里的调用方;测试通过这个入口跑完整流程,不去碰内部步骤。
|
|
1213
|
+
*/
|
|
1214
|
+
/** 可以从外面传进来的流水线输入 */
|
|
1215
|
+
export interface PipelineOverrides {
|
|
1216
|
+
/** 项目根目录,默认为当前工作目录 */
|
|
1217
|
+
root?: string;
|
|
1218
|
+
/** 当前平台标识,如 'mp-weixin';默认取 uni-env 的平台 */
|
|
1219
|
+
platform?: string;
|
|
555
1220
|
}
|
|
556
1221
|
/**
|
|
557
|
-
*
|
|
1222
|
+
* 创建 PageContext,并在内存里跑完「扫描/合并」
|
|
1223
|
+
*
|
|
1224
|
+
* 不写任何文件;路由数据通过 `resolveRoutes`、`resolveSubRoutes`、
|
|
1225
|
+
* `resolveTabBar` 和 `virtualModule` 取。
|
|
1226
|
+
*
|
|
1227
|
+
* @param userOptions - 用户配置项
|
|
1228
|
+
* @param overrides - 从外面传入的 root 与 platform
|
|
1229
|
+
* @returns 完成扫描与合并的 PageContext
|
|
1230
|
+
*/
|
|
1231
|
+
export declare function createPages(userOptions?: UserOptions, overrides?: PipelineOverrides): Promise<PageContext>;
|
|
1232
|
+
/**
|
|
1233
|
+
* 运行完整流水线:加载用户配置、扫描、合并并写入 pages.json
|
|
1234
|
+
* (以及 TypeScript 声明文件)
|
|
1235
|
+
*
|
|
1236
|
+
* @param userOptions - 用户配置项
|
|
1237
|
+
* @param overrides - 从外面传入的 root 与 platform
|
|
1238
|
+
* @returns pages.json 是否有更新,以及产出它的上下文
|
|
1239
|
+
*/
|
|
1240
|
+
export declare function generateAll(userOptions?: UserOptions, overrides?: PipelineOverrides): Promise<{
|
|
1241
|
+
updated: boolean;
|
|
1242
|
+
ctx: PageContext;
|
|
1243
|
+
}>;
|
|
1244
|
+
//#endregion
|
|
1245
|
+
//#region src/index.d.ts
|
|
1246
|
+
/**
|
|
1247
|
+
* vite-plugin-uni-pages 插件主入口
|
|
558
1248
|
*
|
|
559
|
-
*
|
|
560
|
-
*
|
|
561
|
-
*
|
|
562
|
-
*
|
|
563
|
-
*
|
|
1249
|
+
* 自动扫描页面目录并生成 pages.json 配置文件
|
|
1250
|
+
* 支持 definePage 宏定义页面配置
|
|
1251
|
+
* 支持多平台条件编译
|
|
1252
|
+
* 支持分包配置
|
|
1253
|
+
* 支持 TypeScript 声明文件生成
|
|
564
1254
|
*
|
|
565
|
-
* @param userOptions -
|
|
566
|
-
* @returns Vite
|
|
1255
|
+
* @param userOptions - 用户配置项
|
|
1256
|
+
* @returns Vite 插件实例
|
|
567
1257
|
*/
|
|
568
|
-
declare function VitePluginUniPages(userOptions?: UserOptions):
|
|
1258
|
+
export declare function VitePluginUniPages(userOptions?: UserOptions): UniPagesPlugin;
|
|
569
1259
|
//#endregion
|
|
570
|
-
export { ConfigSource, type DefinePage, type ExcludeIndexSignature,
|
|
1260
|
+
export { type ConfigSource, type DebugType, type DefinePage, type DefinePageContext, type ExcludeIndexSignature, type InternalPageItem, type InternalPages, type MaybeCallable, type MaybePromise, type MaybePromiseCallable, type Options, type PagePath, type PrepareOptions, type ResolvedOptions, type ScanSourceCoordinate, type ScanSourceOrigin, type SubPackageConfig, type UniPagesPlugin, type UserOptions, type UserPageItem, type UserTabBarItem, VitePluginUniPages as default, type debugType, type definePage };
|