@easy-electron/preload 1.0.1-alpha.1

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.
@@ -0,0 +1,234 @@
1
+ export { EVENT_MODULE_KEY, EventHandlerConfig, EventHandlerMap, IPC_MODULE_KEY, IpcHandleFunction, IpcHandlerConfig, IpcHandlerMap, IpcHandlerValue, IpcOnFunction, defineEvents, defineIpc } from './runtime-entry.cjs';
2
+ import 'electron';
3
+
4
+ /**
5
+ * EasyPreload 生成器配置
6
+ */
7
+ interface EasyPreloadGeneratorConfig {
8
+ /**
9
+ * 扫描目录(默认 './electron')
10
+ */
11
+ dir?: string;
12
+ /**
13
+ * IPC 源文件匹配模式(支持数组和 glob 格式)
14
+ * 默认 ['**\/*.ipc.ts']
15
+ */
16
+ source?: string | string[];
17
+ /**
18
+ * 事件源文件匹配模式(支持数组和 glob 格式)
19
+ * 默认 ['**\/*.events.ts']
20
+ */
21
+ events?: string | string[];
22
+ /**
23
+ * 忽略的文件模式(glob 格式)
24
+ * 默认 ['\*\*\/node_modules\/\*\*', '\*\*\/dist\/\*\*', '\*\*\/dist-electron\/\*\*']
25
+ */
26
+ ignores?: string[];
27
+ /**
28
+ * preload 输出路径
29
+ * 默认 ./electron/preload.ts
30
+ */
31
+ output: string;
32
+ /**
33
+ * 类型定义输出路径
34
+ * 默认 ./types/electron.d.ts
35
+ */
36
+ typesOutput: string;
37
+ /**
38
+ * 全局对象名称(默认 'elec')
39
+ */
40
+ globalName?: string;
41
+ /**
42
+ * 是否在生成的类型定义中保留方法注释(默认 true)
43
+ */
44
+ preserveComments?: boolean;
45
+ }
46
+
47
+ /**
48
+ * EasyPreload 生成器
49
+ *
50
+ * 扫描项目中的 IPC 和 Event 定义文件,自动生成:
51
+ * 1. preload.ts — contextBridge 桥接文件,暴露 IPC 调用和事件监听到渲染进程
52
+ * 2. electron.d.ts — 类型定义文件,为 window.elec 提供完整的类型提示
53
+ */
54
+ declare class EasyPreloadGenerator {
55
+ private readonly config;
56
+ private readonly logger;
57
+ constructor(config: EasyPreloadGeneratorConfig);
58
+ /**
59
+ * 执行生成,扫描 IPC 和 Event 定义文件,输出 preload 和类型文件
60
+ */
61
+ generate(): void;
62
+ /**
63
+ * 扫描 IPC 定义文件
64
+ */
65
+ private scanIpc;
66
+ /**
67
+ * 扫描 Event 定义文件
68
+ */
69
+ private scanEvents;
70
+ /**
71
+ * 生成 preload.ts 文件内容
72
+ *
73
+ * 结构:
74
+ * ```ts
75
+ * contextBridge.exposeInMainWorld('globalName', {
76
+ * // 无模块 IPC 方法(顶层)
77
+ * ping: () => ipcRenderer.invoke('ping'),
78
+ * // 有模块 IPC 方法(嵌套对象)
79
+ * test: {
80
+ * getData: (id) => ipcRenderer.invoke('test:getData', id),
81
+ * },
82
+ * // 事件(嵌套在 events 下)
83
+ * events: {
84
+ * onXxx: (callback) => { ... },
85
+ * module: { onYyy: (callback) => { ... } },
86
+ * },
87
+ * })
88
+ * ```
89
+ */
90
+ private generatePreload;
91
+ /**
92
+ * 生成 preload 中的 IPC 调用代码
93
+ *
94
+ * 无模块的处理器直接放在顶层,有模块的嵌套在模块名对象下。
95
+ * 根据 handlerType 选择 invoke(handle/handleOnce)或 send(on/once)。
96
+ */
97
+ private generatePreloadIpc;
98
+ /**
99
+ * 生成单个 IPC 方法的 preload 代码
100
+ *
101
+ * @param name 方法名
102
+ * @param channel IPC 通道名
103
+ * @param handler 处理器信息
104
+ * @returns 方法代码字符串(不含尾部逗号)
105
+ */
106
+ private generatePreloadIpcMethod;
107
+ /**
108
+ * 生成 preload 中的事件监听代码
109
+ *
110
+ * 所有事件嵌套在 `events` 对象下。
111
+ * 无模块的事件直接放在 events 下,有模块的嵌套在 events.module 下。
112
+ */
113
+ private generatePreloadEvents;
114
+ /**
115
+ * 生成单个事件的监听/移除方法代码
116
+ *
117
+ * 根据 handler 的 once 和 remove 属性生成:
118
+ * - on/once 监听方法
119
+ * - removeSingle 方法(remove 为 'single' 或 'both')
120
+ * - removeAll 方法(remove 为 'all' 或 'both')
121
+ *
122
+ * @param name 事件名(如 onDownloadProgress)
123
+ * @param channel IPC 通道名
124
+ * @param handler 事件处理器模型
125
+ * @param lines 输出行数组
126
+ * @param indent 缩进字符串
127
+ */
128
+ private generatePreloadEventMethods;
129
+ /**
130
+ * 生成事件的 remove 方法代码
131
+ */
132
+ private generatePreloadRemoveMethods;
133
+ /**
134
+ * 生成类型定义文件内容
135
+ *
136
+ * 结构:
137
+ * ```ts
138
+ * interface ElecApi {
139
+ * ping: () => Promise<string>
140
+ * test: { getData: (id: string) => Promise<Data> }
141
+ * }
142
+ * export interface ElecEvents {
143
+ * onXxx: (callback: (data: T) => void) => () => void
144
+ * }
145
+ * declare global {
146
+ * interface Window { elec: ElecApi & { events: ElecEvents } }
147
+ * }
148
+ * export {}
149
+ * ```
150
+ */
151
+ private generateTypes;
152
+ /**
153
+ * 生成 ElecApi 接口中的 IPC 方法类型
154
+ */
155
+ private generateTypesIpc;
156
+ /**
157
+ * 生成单个 IPC 方法的类型签名
158
+ *
159
+ * @param name 方法名
160
+ * @param handler 处理器信息
161
+ * @param lines 输出行数组
162
+ * @param indent 缩进字符串
163
+ */
164
+ private generateTypesIpcMethod;
165
+ /**
166
+ * 生成 ElecEvents 接口中的事件方法类型
167
+ */
168
+ private generateTypesEvents;
169
+ /**
170
+ * 生成单个事件的类型签名(监听 + remove 方法)
171
+ */
172
+ private generateTypesEventMethods;
173
+ /**
174
+ * 收集所有 IPC 和 Event 定义中引用的类型导入语句
175
+ *
176
+ * 将各文件的 imports 映射合并,按模块路径分组,
177
+ * 生成相对于输出文件的 import type 语句。
178
+ *
179
+ * @param ipcDefs IPC 定义列表
180
+ * @param eventDefs Event 定义列表
181
+ * @returns import 语句列表
182
+ */
183
+ private collectTypeImports;
184
+ /**
185
+ * 将源文件中的模块路径转换为相对于输出文件的路径
186
+ *
187
+ * 支持三种输入:
188
+ * - 相对路径(以 . 开头): 相对于源文件解析后再转换
189
+ * - 绝对路径: 直接计算相对于输出文件的路径
190
+ * - 包导入(非相对/绝对路径): 直接返回
191
+ *
192
+ * @param sourceFilePath 源文件绝对路径
193
+ * @param modulePath 模块路径(相对、绝对或包名)
194
+ * @returns 相对于输出文件的模块路径
195
+ */
196
+ private resolveImportPath;
197
+ /**
198
+ * 将事件名转换为 IPC 通道名(camelCase → kebab-case)
199
+ *
200
+ * 去掉 on/once 前缀后转换:
201
+ * - onDownloadProgress → download-progress
202
+ * - onceReady → ready
203
+ *
204
+ * @param name 事件名
205
+ * @returns 通道名
206
+ */
207
+ private toEventChannel;
208
+ /**
209
+ * 去掉事件名的 on/once 前缀,返回大写开头的基础名
210
+ *
211
+ * - onDownloadProgress → DownloadProgress
212
+ * - onceReady → Ready
213
+ *
214
+ * @param name 事件名
215
+ * @returns 基础名(首字母大写)
216
+ */
217
+ private stripEventPrefix;
218
+ /**
219
+ * 确保返回类型被 Promise 包裹
220
+ *
221
+ * - 已经是 Promise<T> → 原样返回
222
+ * - 其他类型 → 包裹为 Promise<T>
223
+ *
224
+ * @param returnType 原始返回类型
225
+ * @returns Promise 包裹后的返回类型
226
+ */
227
+ private ensurePromise;
228
+ /**
229
+ * 写入文件,自动创建目录
230
+ */
231
+ private writeFile;
232
+ }
233
+
234
+ export { EasyPreloadGenerator };
@@ -0,0 +1,234 @@
1
+ export { EVENT_MODULE_KEY, EventHandlerConfig, EventHandlerMap, IPC_MODULE_KEY, IpcHandleFunction, IpcHandlerConfig, IpcHandlerMap, IpcHandlerValue, IpcOnFunction, defineEvents, defineIpc } from './runtime-entry.mjs';
2
+ import 'electron';
3
+
4
+ /**
5
+ * EasyPreload 生成器配置
6
+ */
7
+ interface EasyPreloadGeneratorConfig {
8
+ /**
9
+ * 扫描目录(默认 './electron')
10
+ */
11
+ dir?: string;
12
+ /**
13
+ * IPC 源文件匹配模式(支持数组和 glob 格式)
14
+ * 默认 ['**\/*.ipc.ts']
15
+ */
16
+ source?: string | string[];
17
+ /**
18
+ * 事件源文件匹配模式(支持数组和 glob 格式)
19
+ * 默认 ['**\/*.events.ts']
20
+ */
21
+ events?: string | string[];
22
+ /**
23
+ * 忽略的文件模式(glob 格式)
24
+ * 默认 ['\*\*\/node_modules\/\*\*', '\*\*\/dist\/\*\*', '\*\*\/dist-electron\/\*\*']
25
+ */
26
+ ignores?: string[];
27
+ /**
28
+ * preload 输出路径
29
+ * 默认 ./electron/preload.ts
30
+ */
31
+ output: string;
32
+ /**
33
+ * 类型定义输出路径
34
+ * 默认 ./types/electron.d.ts
35
+ */
36
+ typesOutput: string;
37
+ /**
38
+ * 全局对象名称(默认 'elec')
39
+ */
40
+ globalName?: string;
41
+ /**
42
+ * 是否在生成的类型定义中保留方法注释(默认 true)
43
+ */
44
+ preserveComments?: boolean;
45
+ }
46
+
47
+ /**
48
+ * EasyPreload 生成器
49
+ *
50
+ * 扫描项目中的 IPC 和 Event 定义文件,自动生成:
51
+ * 1. preload.ts — contextBridge 桥接文件,暴露 IPC 调用和事件监听到渲染进程
52
+ * 2. electron.d.ts — 类型定义文件,为 window.elec 提供完整的类型提示
53
+ */
54
+ declare class EasyPreloadGenerator {
55
+ private readonly config;
56
+ private readonly logger;
57
+ constructor(config: EasyPreloadGeneratorConfig);
58
+ /**
59
+ * 执行生成,扫描 IPC 和 Event 定义文件,输出 preload 和类型文件
60
+ */
61
+ generate(): void;
62
+ /**
63
+ * 扫描 IPC 定义文件
64
+ */
65
+ private scanIpc;
66
+ /**
67
+ * 扫描 Event 定义文件
68
+ */
69
+ private scanEvents;
70
+ /**
71
+ * 生成 preload.ts 文件内容
72
+ *
73
+ * 结构:
74
+ * ```ts
75
+ * contextBridge.exposeInMainWorld('globalName', {
76
+ * // 无模块 IPC 方法(顶层)
77
+ * ping: () => ipcRenderer.invoke('ping'),
78
+ * // 有模块 IPC 方法(嵌套对象)
79
+ * test: {
80
+ * getData: (id) => ipcRenderer.invoke('test:getData', id),
81
+ * },
82
+ * // 事件(嵌套在 events 下)
83
+ * events: {
84
+ * onXxx: (callback) => { ... },
85
+ * module: { onYyy: (callback) => { ... } },
86
+ * },
87
+ * })
88
+ * ```
89
+ */
90
+ private generatePreload;
91
+ /**
92
+ * 生成 preload 中的 IPC 调用代码
93
+ *
94
+ * 无模块的处理器直接放在顶层,有模块的嵌套在模块名对象下。
95
+ * 根据 handlerType 选择 invoke(handle/handleOnce)或 send(on/once)。
96
+ */
97
+ private generatePreloadIpc;
98
+ /**
99
+ * 生成单个 IPC 方法的 preload 代码
100
+ *
101
+ * @param name 方法名
102
+ * @param channel IPC 通道名
103
+ * @param handler 处理器信息
104
+ * @returns 方法代码字符串(不含尾部逗号)
105
+ */
106
+ private generatePreloadIpcMethod;
107
+ /**
108
+ * 生成 preload 中的事件监听代码
109
+ *
110
+ * 所有事件嵌套在 `events` 对象下。
111
+ * 无模块的事件直接放在 events 下,有模块的嵌套在 events.module 下。
112
+ */
113
+ private generatePreloadEvents;
114
+ /**
115
+ * 生成单个事件的监听/移除方法代码
116
+ *
117
+ * 根据 handler 的 once 和 remove 属性生成:
118
+ * - on/once 监听方法
119
+ * - removeSingle 方法(remove 为 'single' 或 'both')
120
+ * - removeAll 方法(remove 为 'all' 或 'both')
121
+ *
122
+ * @param name 事件名(如 onDownloadProgress)
123
+ * @param channel IPC 通道名
124
+ * @param handler 事件处理器模型
125
+ * @param lines 输出行数组
126
+ * @param indent 缩进字符串
127
+ */
128
+ private generatePreloadEventMethods;
129
+ /**
130
+ * 生成事件的 remove 方法代码
131
+ */
132
+ private generatePreloadRemoveMethods;
133
+ /**
134
+ * 生成类型定义文件内容
135
+ *
136
+ * 结构:
137
+ * ```ts
138
+ * interface ElecApi {
139
+ * ping: () => Promise<string>
140
+ * test: { getData: (id: string) => Promise<Data> }
141
+ * }
142
+ * export interface ElecEvents {
143
+ * onXxx: (callback: (data: T) => void) => () => void
144
+ * }
145
+ * declare global {
146
+ * interface Window { elec: ElecApi & { events: ElecEvents } }
147
+ * }
148
+ * export {}
149
+ * ```
150
+ */
151
+ private generateTypes;
152
+ /**
153
+ * 生成 ElecApi 接口中的 IPC 方法类型
154
+ */
155
+ private generateTypesIpc;
156
+ /**
157
+ * 生成单个 IPC 方法的类型签名
158
+ *
159
+ * @param name 方法名
160
+ * @param handler 处理器信息
161
+ * @param lines 输出行数组
162
+ * @param indent 缩进字符串
163
+ */
164
+ private generateTypesIpcMethod;
165
+ /**
166
+ * 生成 ElecEvents 接口中的事件方法类型
167
+ */
168
+ private generateTypesEvents;
169
+ /**
170
+ * 生成单个事件的类型签名(监听 + remove 方法)
171
+ */
172
+ private generateTypesEventMethods;
173
+ /**
174
+ * 收集所有 IPC 和 Event 定义中引用的类型导入语句
175
+ *
176
+ * 将各文件的 imports 映射合并,按模块路径分组,
177
+ * 生成相对于输出文件的 import type 语句。
178
+ *
179
+ * @param ipcDefs IPC 定义列表
180
+ * @param eventDefs Event 定义列表
181
+ * @returns import 语句列表
182
+ */
183
+ private collectTypeImports;
184
+ /**
185
+ * 将源文件中的模块路径转换为相对于输出文件的路径
186
+ *
187
+ * 支持三种输入:
188
+ * - 相对路径(以 . 开头): 相对于源文件解析后再转换
189
+ * - 绝对路径: 直接计算相对于输出文件的路径
190
+ * - 包导入(非相对/绝对路径): 直接返回
191
+ *
192
+ * @param sourceFilePath 源文件绝对路径
193
+ * @param modulePath 模块路径(相对、绝对或包名)
194
+ * @returns 相对于输出文件的模块路径
195
+ */
196
+ private resolveImportPath;
197
+ /**
198
+ * 将事件名转换为 IPC 通道名(camelCase → kebab-case)
199
+ *
200
+ * 去掉 on/once 前缀后转换:
201
+ * - onDownloadProgress → download-progress
202
+ * - onceReady → ready
203
+ *
204
+ * @param name 事件名
205
+ * @returns 通道名
206
+ */
207
+ private toEventChannel;
208
+ /**
209
+ * 去掉事件名的 on/once 前缀,返回大写开头的基础名
210
+ *
211
+ * - onDownloadProgress → DownloadProgress
212
+ * - onceReady → Ready
213
+ *
214
+ * @param name 事件名
215
+ * @returns 基础名(首字母大写)
216
+ */
217
+ private stripEventPrefix;
218
+ /**
219
+ * 确保返回类型被 Promise 包裹
220
+ *
221
+ * - 已经是 Promise<T> → 原样返回
222
+ * - 其他类型 → 包裹为 Promise<T>
223
+ *
224
+ * @param returnType 原始返回类型
225
+ * @returns Promise 包裹后的返回类型
226
+ */
227
+ private ensurePromise;
228
+ /**
229
+ * 写入文件,自动创建目录
230
+ */
231
+ private writeFile;
232
+ }
233
+
234
+ export { EasyPreloadGenerator };
@@ -0,0 +1,234 @@
1
+ export { EVENT_MODULE_KEY, EventHandlerConfig, EventHandlerMap, IPC_MODULE_KEY, IpcHandleFunction, IpcHandlerConfig, IpcHandlerMap, IpcHandlerValue, IpcOnFunction, defineEvents, defineIpc } from './runtime-entry.js';
2
+ import 'electron';
3
+
4
+ /**
5
+ * EasyPreload 生成器配置
6
+ */
7
+ interface EasyPreloadGeneratorConfig {
8
+ /**
9
+ * 扫描目录(默认 './electron')
10
+ */
11
+ dir?: string;
12
+ /**
13
+ * IPC 源文件匹配模式(支持数组和 glob 格式)
14
+ * 默认 ['**\/*.ipc.ts']
15
+ */
16
+ source?: string | string[];
17
+ /**
18
+ * 事件源文件匹配模式(支持数组和 glob 格式)
19
+ * 默认 ['**\/*.events.ts']
20
+ */
21
+ events?: string | string[];
22
+ /**
23
+ * 忽略的文件模式(glob 格式)
24
+ * 默认 ['\*\*\/node_modules\/\*\*', '\*\*\/dist\/\*\*', '\*\*\/dist-electron\/\*\*']
25
+ */
26
+ ignores?: string[];
27
+ /**
28
+ * preload 输出路径
29
+ * 默认 ./electron/preload.ts
30
+ */
31
+ output: string;
32
+ /**
33
+ * 类型定义输出路径
34
+ * 默认 ./types/electron.d.ts
35
+ */
36
+ typesOutput: string;
37
+ /**
38
+ * 全局对象名称(默认 'elec')
39
+ */
40
+ globalName?: string;
41
+ /**
42
+ * 是否在生成的类型定义中保留方法注释(默认 true)
43
+ */
44
+ preserveComments?: boolean;
45
+ }
46
+
47
+ /**
48
+ * EasyPreload 生成器
49
+ *
50
+ * 扫描项目中的 IPC 和 Event 定义文件,自动生成:
51
+ * 1. preload.ts — contextBridge 桥接文件,暴露 IPC 调用和事件监听到渲染进程
52
+ * 2. electron.d.ts — 类型定义文件,为 window.elec 提供完整的类型提示
53
+ */
54
+ declare class EasyPreloadGenerator {
55
+ private readonly config;
56
+ private readonly logger;
57
+ constructor(config: EasyPreloadGeneratorConfig);
58
+ /**
59
+ * 执行生成,扫描 IPC 和 Event 定义文件,输出 preload 和类型文件
60
+ */
61
+ generate(): void;
62
+ /**
63
+ * 扫描 IPC 定义文件
64
+ */
65
+ private scanIpc;
66
+ /**
67
+ * 扫描 Event 定义文件
68
+ */
69
+ private scanEvents;
70
+ /**
71
+ * 生成 preload.ts 文件内容
72
+ *
73
+ * 结构:
74
+ * ```ts
75
+ * contextBridge.exposeInMainWorld('globalName', {
76
+ * // 无模块 IPC 方法(顶层)
77
+ * ping: () => ipcRenderer.invoke('ping'),
78
+ * // 有模块 IPC 方法(嵌套对象)
79
+ * test: {
80
+ * getData: (id) => ipcRenderer.invoke('test:getData', id),
81
+ * },
82
+ * // 事件(嵌套在 events 下)
83
+ * events: {
84
+ * onXxx: (callback) => { ... },
85
+ * module: { onYyy: (callback) => { ... } },
86
+ * },
87
+ * })
88
+ * ```
89
+ */
90
+ private generatePreload;
91
+ /**
92
+ * 生成 preload 中的 IPC 调用代码
93
+ *
94
+ * 无模块的处理器直接放在顶层,有模块的嵌套在模块名对象下。
95
+ * 根据 handlerType 选择 invoke(handle/handleOnce)或 send(on/once)。
96
+ */
97
+ private generatePreloadIpc;
98
+ /**
99
+ * 生成单个 IPC 方法的 preload 代码
100
+ *
101
+ * @param name 方法名
102
+ * @param channel IPC 通道名
103
+ * @param handler 处理器信息
104
+ * @returns 方法代码字符串(不含尾部逗号)
105
+ */
106
+ private generatePreloadIpcMethod;
107
+ /**
108
+ * 生成 preload 中的事件监听代码
109
+ *
110
+ * 所有事件嵌套在 `events` 对象下。
111
+ * 无模块的事件直接放在 events 下,有模块的嵌套在 events.module 下。
112
+ */
113
+ private generatePreloadEvents;
114
+ /**
115
+ * 生成单个事件的监听/移除方法代码
116
+ *
117
+ * 根据 handler 的 once 和 remove 属性生成:
118
+ * - on/once 监听方法
119
+ * - removeSingle 方法(remove 为 'single' 或 'both')
120
+ * - removeAll 方法(remove 为 'all' 或 'both')
121
+ *
122
+ * @param name 事件名(如 onDownloadProgress)
123
+ * @param channel IPC 通道名
124
+ * @param handler 事件处理器模型
125
+ * @param lines 输出行数组
126
+ * @param indent 缩进字符串
127
+ */
128
+ private generatePreloadEventMethods;
129
+ /**
130
+ * 生成事件的 remove 方法代码
131
+ */
132
+ private generatePreloadRemoveMethods;
133
+ /**
134
+ * 生成类型定义文件内容
135
+ *
136
+ * 结构:
137
+ * ```ts
138
+ * interface ElecApi {
139
+ * ping: () => Promise<string>
140
+ * test: { getData: (id: string) => Promise<Data> }
141
+ * }
142
+ * export interface ElecEvents {
143
+ * onXxx: (callback: (data: T) => void) => () => void
144
+ * }
145
+ * declare global {
146
+ * interface Window { elec: ElecApi & { events: ElecEvents } }
147
+ * }
148
+ * export {}
149
+ * ```
150
+ */
151
+ private generateTypes;
152
+ /**
153
+ * 生成 ElecApi 接口中的 IPC 方法类型
154
+ */
155
+ private generateTypesIpc;
156
+ /**
157
+ * 生成单个 IPC 方法的类型签名
158
+ *
159
+ * @param name 方法名
160
+ * @param handler 处理器信息
161
+ * @param lines 输出行数组
162
+ * @param indent 缩进字符串
163
+ */
164
+ private generateTypesIpcMethod;
165
+ /**
166
+ * 生成 ElecEvents 接口中的事件方法类型
167
+ */
168
+ private generateTypesEvents;
169
+ /**
170
+ * 生成单个事件的类型签名(监听 + remove 方法)
171
+ */
172
+ private generateTypesEventMethods;
173
+ /**
174
+ * 收集所有 IPC 和 Event 定义中引用的类型导入语句
175
+ *
176
+ * 将各文件的 imports 映射合并,按模块路径分组,
177
+ * 生成相对于输出文件的 import type 语句。
178
+ *
179
+ * @param ipcDefs IPC 定义列表
180
+ * @param eventDefs Event 定义列表
181
+ * @returns import 语句列表
182
+ */
183
+ private collectTypeImports;
184
+ /**
185
+ * 将源文件中的模块路径转换为相对于输出文件的路径
186
+ *
187
+ * 支持三种输入:
188
+ * - 相对路径(以 . 开头): 相对于源文件解析后再转换
189
+ * - 绝对路径: 直接计算相对于输出文件的路径
190
+ * - 包导入(非相对/绝对路径): 直接返回
191
+ *
192
+ * @param sourceFilePath 源文件绝对路径
193
+ * @param modulePath 模块路径(相对、绝对或包名)
194
+ * @returns 相对于输出文件的模块路径
195
+ */
196
+ private resolveImportPath;
197
+ /**
198
+ * 将事件名转换为 IPC 通道名(camelCase → kebab-case)
199
+ *
200
+ * 去掉 on/once 前缀后转换:
201
+ * - onDownloadProgress → download-progress
202
+ * - onceReady → ready
203
+ *
204
+ * @param name 事件名
205
+ * @returns 通道名
206
+ */
207
+ private toEventChannel;
208
+ /**
209
+ * 去掉事件名的 on/once 前缀,返回大写开头的基础名
210
+ *
211
+ * - onDownloadProgress → DownloadProgress
212
+ * - onceReady → Ready
213
+ *
214
+ * @param name 事件名
215
+ * @returns 基础名(首字母大写)
216
+ */
217
+ private stripEventPrefix;
218
+ /**
219
+ * 确保返回类型被 Promise 包裹
220
+ *
221
+ * - 已经是 Promise<T> → 原样返回
222
+ * - 其他类型 → 包裹为 Promise<T>
223
+ *
224
+ * @param returnType 原始返回类型
225
+ * @returns Promise 包裹后的返回类型
226
+ */
227
+ private ensurePromise;
228
+ /**
229
+ * 写入文件,自动创建目录
230
+ */
231
+ private writeFile;
232
+ }
233
+
234
+ export { EasyPreloadGenerator };