@easy-electron/ts-parser 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.
- package/LICENSE +21 -0
- package/dist/index.cjs +743 -0
- package/dist/index.d.cts +607 -0
- package/dist/index.d.mts +607 -0
- package/dist/index.d.ts +607 -0
- package/dist/index.mjs +737 -0
- package/package.json +36 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,607 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 通用 TypeScript 文件解析结果
|
|
5
|
+
*/
|
|
6
|
+
interface ParsedSourceFile {
|
|
7
|
+
/** 文件路径 */
|
|
8
|
+
filePath: string;
|
|
9
|
+
/** 导入声明 */
|
|
10
|
+
imports: ImportDeclarationInfo[];
|
|
11
|
+
/** 导出声明 */
|
|
12
|
+
exports: ExportDeclarationInfo[];
|
|
13
|
+
/** 接口定义 */
|
|
14
|
+
interfaces: InterfaceInfo[];
|
|
15
|
+
/** 类型别名定义 */
|
|
16
|
+
typeAliases: TypeAliasInfo[];
|
|
17
|
+
/** 枚举定义 */
|
|
18
|
+
enums: EnumInfo[];
|
|
19
|
+
/** 类定义 */
|
|
20
|
+
classes: ClassInfo[];
|
|
21
|
+
/** 函数声明(包括箭头函数变量) */
|
|
22
|
+
functions: FunctionInfo[];
|
|
23
|
+
/** 变量声明 */
|
|
24
|
+
variables: VariableInfo[];
|
|
25
|
+
/** 默认导出表达式(如 export default defineIpc(...)) */
|
|
26
|
+
defaultExport?: DefaultExportInfo;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 导入声明信息
|
|
30
|
+
*/
|
|
31
|
+
interface ImportDeclarationInfo {
|
|
32
|
+
/** 模块路径 */
|
|
33
|
+
moduleSpecifier: string;
|
|
34
|
+
/** 是否为类型导入 (import type) */
|
|
35
|
+
isTypeOnly: boolean;
|
|
36
|
+
/** 默认导入名称 */
|
|
37
|
+
defaultImport?: string;
|
|
38
|
+
/** 命名导入列表 */
|
|
39
|
+
namedImports: NamedImportInfo[];
|
|
40
|
+
/** 命名空间导入 (import * as xxx) */
|
|
41
|
+
namespaceImport?: string;
|
|
42
|
+
/** 原始文本 */
|
|
43
|
+
text: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 命名导入信息
|
|
47
|
+
*/
|
|
48
|
+
interface NamedImportInfo {
|
|
49
|
+
/** 导入名称 */
|
|
50
|
+
name: string;
|
|
51
|
+
/** 别名 */
|
|
52
|
+
alias?: string;
|
|
53
|
+
/** 是否为类型导入 */
|
|
54
|
+
isTypeOnly: boolean;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 导出声明信息
|
|
58
|
+
*/
|
|
59
|
+
interface ExportDeclarationInfo {
|
|
60
|
+
/** 导出名称列表(命名导出) */
|
|
61
|
+
namedExports: NamedExportInfo[];
|
|
62
|
+
/** 模块路径(re-export 时) */
|
|
63
|
+
moduleSpecifier?: string;
|
|
64
|
+
/** 是否为类型导出 */
|
|
65
|
+
isTypeOnly: boolean;
|
|
66
|
+
/** 是否为默认导出 */
|
|
67
|
+
isDefault: boolean;
|
|
68
|
+
/** 原始文本 */
|
|
69
|
+
text: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 命名导出信息
|
|
73
|
+
*/
|
|
74
|
+
interface NamedExportInfo {
|
|
75
|
+
/** 导出名称 */
|
|
76
|
+
name: string;
|
|
77
|
+
/** 别名 */
|
|
78
|
+
alias?: string;
|
|
79
|
+
/** 是否为类型导出 */
|
|
80
|
+
isTypeOnly: boolean;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* 接口信息
|
|
84
|
+
*/
|
|
85
|
+
interface InterfaceInfo {
|
|
86
|
+
/** 接口名称 */
|
|
87
|
+
name: string;
|
|
88
|
+
/** 是否导出 */
|
|
89
|
+
isExported: boolean;
|
|
90
|
+
/** 泛型参数 */
|
|
91
|
+
typeParameters: string[];
|
|
92
|
+
/** 继承列表 */
|
|
93
|
+
extends: string[];
|
|
94
|
+
/** 成员列表 */
|
|
95
|
+
members: PropertySignatureInfo[];
|
|
96
|
+
/** JSDoc 注释 */
|
|
97
|
+
comment?: string;
|
|
98
|
+
/** 原始文本 */
|
|
99
|
+
text: string;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 属性签名信息
|
|
103
|
+
*/
|
|
104
|
+
interface PropertySignatureInfo {
|
|
105
|
+
/** 属性名 */
|
|
106
|
+
name: string;
|
|
107
|
+
/** 类型文本 */
|
|
108
|
+
type: string;
|
|
109
|
+
/** 是否可选 */
|
|
110
|
+
isOptional: boolean;
|
|
111
|
+
/** JSDoc 注释 */
|
|
112
|
+
comment?: string;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 类型别名信息
|
|
116
|
+
*/
|
|
117
|
+
interface TypeAliasInfo {
|
|
118
|
+
/** 类型名称 */
|
|
119
|
+
name: string;
|
|
120
|
+
/** 是否导出 */
|
|
121
|
+
isExported: boolean;
|
|
122
|
+
/** 泛型参数 */
|
|
123
|
+
typeParameters: string[];
|
|
124
|
+
/** 类型文本 */
|
|
125
|
+
type: string;
|
|
126
|
+
/** JSDoc 注释 */
|
|
127
|
+
comment?: string;
|
|
128
|
+
/** 原始文本 */
|
|
129
|
+
text: string;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* 枚举信息
|
|
133
|
+
*/
|
|
134
|
+
interface EnumInfo {
|
|
135
|
+
/** 枚举名称 */
|
|
136
|
+
name: string;
|
|
137
|
+
/** 是否导出 */
|
|
138
|
+
isExported: boolean;
|
|
139
|
+
/** 是否为 const enum */
|
|
140
|
+
isConst: boolean;
|
|
141
|
+
/** 成员列表 */
|
|
142
|
+
members: EnumMemberInfo[];
|
|
143
|
+
/** JSDoc 注释 */
|
|
144
|
+
comment?: string;
|
|
145
|
+
/** 原始文本 */
|
|
146
|
+
text: string;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* 枚举成员信息
|
|
150
|
+
*/
|
|
151
|
+
interface EnumMemberInfo {
|
|
152
|
+
/** 成员名称 */
|
|
153
|
+
name: string;
|
|
154
|
+
/** 初始值 */
|
|
155
|
+
value?: string;
|
|
156
|
+
/** JSDoc 注释 */
|
|
157
|
+
comment?: string;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* 类信息
|
|
161
|
+
*/
|
|
162
|
+
interface ClassInfo {
|
|
163
|
+
/** 类名 */
|
|
164
|
+
name: string;
|
|
165
|
+
/** 是否导出 */
|
|
166
|
+
isExported: boolean;
|
|
167
|
+
/** 是否为抽象类 */
|
|
168
|
+
isAbstract: boolean;
|
|
169
|
+
/** 泛型参数 */
|
|
170
|
+
typeParameters: string[];
|
|
171
|
+
/** 继承的类 */
|
|
172
|
+
extends?: string;
|
|
173
|
+
/** 实现的接口 */
|
|
174
|
+
implements: string[];
|
|
175
|
+
/** 成员列表 */
|
|
176
|
+
members: ClassMemberInfo[];
|
|
177
|
+
/** JSDoc 注释 */
|
|
178
|
+
comment?: string;
|
|
179
|
+
/** 原始文本 */
|
|
180
|
+
text: string;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* 类成员信息
|
|
184
|
+
*/
|
|
185
|
+
interface ClassMemberInfo {
|
|
186
|
+
/** 成员名称 */
|
|
187
|
+
name: string;
|
|
188
|
+
/** 成员类型: property | method | constructor | getter | setter */
|
|
189
|
+
kind: 'property' | 'method' | 'constructor' | 'getter' | 'setter';
|
|
190
|
+
/** 访问修饰符 */
|
|
191
|
+
accessibility?: 'public' | 'private' | 'protected';
|
|
192
|
+
/** 是否为静态成员 */
|
|
193
|
+
isStatic: boolean;
|
|
194
|
+
/** 是否为只读 */
|
|
195
|
+
isReadonly: boolean;
|
|
196
|
+
/** 是否为抽象成员 */
|
|
197
|
+
isAbstract: boolean;
|
|
198
|
+
/** 是否为可选成员 */
|
|
199
|
+
isOptional: boolean;
|
|
200
|
+
/** 类型文本(属性类型或方法返回类型) */
|
|
201
|
+
type?: string;
|
|
202
|
+
/** 参数列表(方法/构造函数) */
|
|
203
|
+
parameters?: ParameterInfo[];
|
|
204
|
+
/** JSDoc 注释 */
|
|
205
|
+
comment?: string;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* 函数信息(函数声明 + 箭头函数变量)
|
|
209
|
+
*/
|
|
210
|
+
interface FunctionInfo {
|
|
211
|
+
/** 函数名 */
|
|
212
|
+
name: string;
|
|
213
|
+
/** 是否导出 */
|
|
214
|
+
isExported: boolean;
|
|
215
|
+
/** 是否为默认导出 */
|
|
216
|
+
isDefault: boolean;
|
|
217
|
+
/** 是否为异步函数 */
|
|
218
|
+
isAsync: boolean;
|
|
219
|
+
/** 是否为生成器函数 */
|
|
220
|
+
isGenerator: boolean;
|
|
221
|
+
/** 泛型参数 */
|
|
222
|
+
typeParameters: string[];
|
|
223
|
+
/** 参数列表 */
|
|
224
|
+
parameters: ParameterInfo[];
|
|
225
|
+
/** 返回类型 */
|
|
226
|
+
returnType?: string;
|
|
227
|
+
/** JSDoc 注释 */
|
|
228
|
+
comment?: string;
|
|
229
|
+
/** 原始文本 */
|
|
230
|
+
text: string;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* 参数信息
|
|
234
|
+
*/
|
|
235
|
+
interface ParameterInfo {
|
|
236
|
+
/** 参数名 */
|
|
237
|
+
name: string;
|
|
238
|
+
/** 参数类型 */
|
|
239
|
+
type?: string;
|
|
240
|
+
/** 是否可选 */
|
|
241
|
+
isOptional: boolean;
|
|
242
|
+
/** 是否为剩余参数 */
|
|
243
|
+
isRest: boolean;
|
|
244
|
+
/** 默认值文本 */
|
|
245
|
+
defaultValue?: string;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* 变量声明信息
|
|
249
|
+
*/
|
|
250
|
+
interface VariableInfo {
|
|
251
|
+
/** 变量名 */
|
|
252
|
+
name: string;
|
|
253
|
+
/** 声明类型: const | let | var */
|
|
254
|
+
declarationKind: 'const' | 'let' | 'var';
|
|
255
|
+
/** 是否导出 */
|
|
256
|
+
isExported: boolean;
|
|
257
|
+
/** 类型注解 */
|
|
258
|
+
type?: string;
|
|
259
|
+
/** 初始化表达式(如果是函数调用,解析为 CallExpressionInfo) */
|
|
260
|
+
initializer?: CallExpressionInfo | string;
|
|
261
|
+
/** JSDoc 注释 */
|
|
262
|
+
comment?: string;
|
|
263
|
+
/** 原始文本 */
|
|
264
|
+
text: string;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* 函数调用表达式信息
|
|
268
|
+
*/
|
|
269
|
+
interface CallExpressionInfo {
|
|
270
|
+
/** 调用的函数名 */
|
|
271
|
+
callee: string;
|
|
272
|
+
/** 泛型参数 */
|
|
273
|
+
typeArguments: string[];
|
|
274
|
+
/** 参数列表 */
|
|
275
|
+
arguments: ArgumentInfo[];
|
|
276
|
+
/** 原始文本 */
|
|
277
|
+
text: string;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* 参数信息(调用表达式的参数)
|
|
281
|
+
*/
|
|
282
|
+
interface ArgumentInfo {
|
|
283
|
+
/** 参数类型: string | number | boolean | object | array | function | identifier | other */
|
|
284
|
+
kind: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'function' | 'identifier' | 'other';
|
|
285
|
+
/** 值(字面量时为实际值) */
|
|
286
|
+
value?: string | number | boolean;
|
|
287
|
+
/** 对象字面量属性(kind 为 object 时) */
|
|
288
|
+
properties?: ObjectPropertyInfo[];
|
|
289
|
+
/** 数组元素(kind 为 array 时) */
|
|
290
|
+
elements?: ArgumentInfo[];
|
|
291
|
+
/** 函数信息(kind 为 function 时) */
|
|
292
|
+
function?: FunctionExpressionInfo;
|
|
293
|
+
/** 原始文本 */
|
|
294
|
+
text: string;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* 对象字面量属性信息
|
|
298
|
+
*/
|
|
299
|
+
interface ObjectPropertyInfo {
|
|
300
|
+
/** 属性名 */
|
|
301
|
+
name: string;
|
|
302
|
+
/** 属性值 */
|
|
303
|
+
value: ArgumentInfo;
|
|
304
|
+
/** JSDoc 注释 */
|
|
305
|
+
comment?: string;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* 函数表达式信息(对象属性中的函数值)
|
|
309
|
+
*/
|
|
310
|
+
interface FunctionExpressionInfo {
|
|
311
|
+
/** 是否为异步 */
|
|
312
|
+
isAsync: boolean;
|
|
313
|
+
/** 参数列表 */
|
|
314
|
+
parameters: ParameterInfo[];
|
|
315
|
+
/** 返回类型 */
|
|
316
|
+
returnType?: string;
|
|
317
|
+
/** 函数体文本 */
|
|
318
|
+
bodyText?: string;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* 默认导出信息
|
|
322
|
+
*/
|
|
323
|
+
interface DefaultExportInfo {
|
|
324
|
+
/** 导出类型 */
|
|
325
|
+
kind: 'call' | 'identifier' | 'function' | 'class' | 'object' | 'other';
|
|
326
|
+
/** 函数调用信息(kind 为 call 时) */
|
|
327
|
+
call?: CallExpressionInfo;
|
|
328
|
+
/** 标识符名称(kind 为 identifier 时) */
|
|
329
|
+
identifier?: string;
|
|
330
|
+
/** 原始文本 */
|
|
331
|
+
text: string;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* 通用 TypeScript 文件解析器
|
|
336
|
+
*
|
|
337
|
+
* 基于 TypeScript Compiler API,将 TS 源文件解析为结构化数据模型。
|
|
338
|
+
* 支持解析的结构包括:
|
|
339
|
+
* - 导入/导出声明
|
|
340
|
+
* - 接口、类型别名、枚举
|
|
341
|
+
* - 类(含成员、修饰符、继承关系)
|
|
342
|
+
* - 函数声明与箭头函数变量
|
|
343
|
+
* - 变量声明(含函数调用表达式解析)
|
|
344
|
+
* - 默认导出表达式
|
|
345
|
+
* - JSDoc 注释提取
|
|
346
|
+
*
|
|
347
|
+
* @example
|
|
348
|
+
* ```ts
|
|
349
|
+
* const parser = new TsParser()
|
|
350
|
+
* const result = parser.parse('./src/example.ts')
|
|
351
|
+
* console.log(result.interfaces) // 所有接口定义
|
|
352
|
+
* console.log(result.functions) // 所有函数声明
|
|
353
|
+
* ```
|
|
354
|
+
*/
|
|
355
|
+
declare class TsParser {
|
|
356
|
+
private compilerOptions;
|
|
357
|
+
/**
|
|
358
|
+
* 创建解析器实例
|
|
359
|
+
* @param compilerOptions TypeScript 编译选项,不传则使用默认配置(ES2020 + ESNext + Bundler)
|
|
360
|
+
*/
|
|
361
|
+
constructor(compilerOptions?: ts.CompilerOptions);
|
|
362
|
+
/**
|
|
363
|
+
* 解析 TS 文件,返回结构化的解析结果
|
|
364
|
+
* @param filePath 文件路径
|
|
365
|
+
* @param content 文件内容(可选,不传则通过 ts.sys 从文件系统读取)
|
|
366
|
+
* @returns 解析后的源文件结构
|
|
367
|
+
* @throws 当文件无法读取时抛出错误
|
|
368
|
+
*/
|
|
369
|
+
parse(filePath: string, content?: string): ParsedSourceFile;
|
|
370
|
+
/**
|
|
371
|
+
* 从源码字符串直接解析,无需文件路径
|
|
372
|
+
* @param source TypeScript 源码字符串
|
|
373
|
+
* @param fileName 虚拟文件名,默认 'anonymous.ts'
|
|
374
|
+
* @returns 解析后的源文件结构
|
|
375
|
+
*/
|
|
376
|
+
parseSource(source: string, fileName?: string): ParsedSourceFile;
|
|
377
|
+
/**
|
|
378
|
+
* 遍历源文件的顶层节点,根据节点类型分发到对应的解析方法
|
|
379
|
+
* @param node 当前遍历的 AST 节点
|
|
380
|
+
* @param sourceFile 源文件对象(用于获取文本)
|
|
381
|
+
* @param result 解析结果容器,各解析方法会将结果写入其中
|
|
382
|
+
*/
|
|
383
|
+
private visitNode;
|
|
384
|
+
/**
|
|
385
|
+
* 解析 import 声明节点
|
|
386
|
+
*
|
|
387
|
+
* 支持以下导入形式:
|
|
388
|
+
* - 默认导入: `import Foo from 'module'`
|
|
389
|
+
* - 命名导入: `import { Foo, Bar as Baz } from 'module'`
|
|
390
|
+
* - 命名空间导入: `import * as ns from 'module'`
|
|
391
|
+
* - 类型导入: `import type { Foo } from 'module'`
|
|
392
|
+
* - 混合导入: `import Foo, { Bar } from 'module'`
|
|
393
|
+
*
|
|
394
|
+
* @param node import 声明 AST 节点
|
|
395
|
+
* @param sourceFile 源文件对象
|
|
396
|
+
* @returns 导入声明信息
|
|
397
|
+
*/
|
|
398
|
+
private parseImport;
|
|
399
|
+
/**
|
|
400
|
+
* 解析 export 声明节点(不含 export default)
|
|
401
|
+
*
|
|
402
|
+
* 支持以下导出形式:
|
|
403
|
+
* - 命名导出: `export { Foo, Bar as Baz }`
|
|
404
|
+
* - 重导出: `export { Foo } from 'module'`
|
|
405
|
+
* - 全量重导出: `export * from 'module'`
|
|
406
|
+
* - 类型导出: `export type { Foo }`
|
|
407
|
+
*
|
|
408
|
+
* @param node export 声明 AST 节点
|
|
409
|
+
* @param sourceFile 源文件对象
|
|
410
|
+
* @returns 导出声明信息
|
|
411
|
+
*/
|
|
412
|
+
private parseExport;
|
|
413
|
+
/**
|
|
414
|
+
* 解析接口声明节点
|
|
415
|
+
*
|
|
416
|
+
* 提取接口的名称、泛型参数、继承关系、成员属性及其类型、可选性、JSDoc 注释等。
|
|
417
|
+
*
|
|
418
|
+
* @param node 接口声明 AST 节点
|
|
419
|
+
* @param sourceFile 源文件对象
|
|
420
|
+
* @returns 接口信息
|
|
421
|
+
*/
|
|
422
|
+
private parseInterface;
|
|
423
|
+
/**
|
|
424
|
+
* 解析类型别名声明节点
|
|
425
|
+
*
|
|
426
|
+
* 如: `type Foo<T> = Bar | Baz`
|
|
427
|
+
*
|
|
428
|
+
* @param node 类型别名声明 AST 节点
|
|
429
|
+
* @param sourceFile 源文件对象
|
|
430
|
+
* @returns 类型别名信息
|
|
431
|
+
*/
|
|
432
|
+
private parseTypeAlias;
|
|
433
|
+
/**
|
|
434
|
+
* 解析枚举声明节点
|
|
435
|
+
*
|
|
436
|
+
* 支持普通枚举和 const 枚举,提取每个成员的名称、初始值和注释。
|
|
437
|
+
*
|
|
438
|
+
* @param node 枚举声明 AST 节点
|
|
439
|
+
* @param sourceFile 源文件对象
|
|
440
|
+
* @returns 枚举信息
|
|
441
|
+
*/
|
|
442
|
+
private parseEnum;
|
|
443
|
+
/**
|
|
444
|
+
* 解析类声明节点
|
|
445
|
+
*
|
|
446
|
+
* 提取类的名称、泛型参数、继承/实现关系、是否抽象类,
|
|
447
|
+
* 以及所有成员(属性、方法、构造函数、getter/setter)。
|
|
448
|
+
*
|
|
449
|
+
* @param node 类声明 AST 节点
|
|
450
|
+
* @param sourceFile 源文件对象
|
|
451
|
+
* @returns 类信息
|
|
452
|
+
*/
|
|
453
|
+
private parseClass;
|
|
454
|
+
/**
|
|
455
|
+
* 解析单个类成员节点
|
|
456
|
+
*
|
|
457
|
+
* 根据成员类型(构造函数、属性、方法、getter、setter)提取对应信息,
|
|
458
|
+
* 包括访问修饰符(public/private/protected)、static、readonly、abstract 等修饰符。
|
|
459
|
+
*
|
|
460
|
+
* @param member 类成员 AST 节点
|
|
461
|
+
* @param sourceFile 源文件对象
|
|
462
|
+
* @returns 类成员信息,无法识别的成员类型返回 null
|
|
463
|
+
*/
|
|
464
|
+
private parseClassMember;
|
|
465
|
+
/**
|
|
466
|
+
* 解析函数声明节点
|
|
467
|
+
*
|
|
468
|
+
* 如: `function foo<T>(a: string): Promise<T> { ... }`
|
|
469
|
+
* 提取函数名、泛型参数、参数列表、返回类型、async/generator 标记等。
|
|
470
|
+
*
|
|
471
|
+
* @param node 函数声明 AST 节点
|
|
472
|
+
* @param sourceFile 源文件对象
|
|
473
|
+
* @returns 函数信息
|
|
474
|
+
*/
|
|
475
|
+
private parseFunctionDeclaration;
|
|
476
|
+
/**
|
|
477
|
+
* 解析变量声明语句
|
|
478
|
+
*
|
|
479
|
+
* 对每个变量声明进行分类处理:
|
|
480
|
+
* - 如果初始化表达式是箭头函数/函数表达式,归入 functions
|
|
481
|
+
* - 如果初始化表达式是函数调用,解析为 CallExpressionInfo
|
|
482
|
+
* - 其他情况作为普通变量处理
|
|
483
|
+
*
|
|
484
|
+
* @param node 变量声明语句 AST 节点
|
|
485
|
+
* @param sourceFile 源文件对象
|
|
486
|
+
* @param result 解析结果容器
|
|
487
|
+
*/
|
|
488
|
+
private parseVariableStatement;
|
|
489
|
+
/**
|
|
490
|
+
* 判断节点是否为函数类表达式(箭头函数或函数表达式)
|
|
491
|
+
* @param node AST 节点
|
|
492
|
+
* @returns 是否为函数类表达式
|
|
493
|
+
*/
|
|
494
|
+
private isFunctionLike;
|
|
495
|
+
/**
|
|
496
|
+
* 将箭头函数/函数表达式变量解析为 FunctionInfo
|
|
497
|
+
*
|
|
498
|
+
* 如: `const foo = async (a: string) => { ... }`
|
|
499
|
+
*
|
|
500
|
+
* @param name 变量名(即函数名)
|
|
501
|
+
* @param node 函数表达式 AST 节点
|
|
502
|
+
* @param isExported 是否导出
|
|
503
|
+
* @param sourceFile 源文件对象
|
|
504
|
+
* @param comment JSDoc 注释
|
|
505
|
+
* @returns 函数信息
|
|
506
|
+
*/
|
|
507
|
+
private parseFunctionExpression;
|
|
508
|
+
/**
|
|
509
|
+
* 解析函数调用表达式
|
|
510
|
+
*
|
|
511
|
+
* 如: `defineIpc('test', { ... })` 或 `createApp<Config>(options)`
|
|
512
|
+
* 提取被调用函数名、泛型参数、实参列表(递归解析每个参数)。
|
|
513
|
+
*
|
|
514
|
+
* @param node 函数调用表达式 AST 节点
|
|
515
|
+
* @param sourceFile 源文件对象
|
|
516
|
+
* @returns 函数调用表达式信息
|
|
517
|
+
*/
|
|
518
|
+
parseCallExpression(node: ts.CallExpression, sourceFile: ts.SourceFile): CallExpressionInfo;
|
|
519
|
+
/**
|
|
520
|
+
* 解析表达式参数,递归处理各种字面量和复合类型
|
|
521
|
+
*
|
|
522
|
+
* 支持的参数类型:
|
|
523
|
+
* - 字符串字面量 → kind: 'string'
|
|
524
|
+
* - 数字字面量 → kind: 'number'
|
|
525
|
+
* - 布尔字面量 → kind: 'boolean'
|
|
526
|
+
* - 对象字面量 → kind: 'object'(递归解析属性)
|
|
527
|
+
* - 数组字面量 → kind: 'array'(递归解析元素)
|
|
528
|
+
* - 函数/箭头函数 → kind: 'function'
|
|
529
|
+
* - 标识符引用 → kind: 'identifier'
|
|
530
|
+
* - 其他表达式 → kind: 'other'
|
|
531
|
+
*
|
|
532
|
+
* @param node 参数 AST 节点
|
|
533
|
+
* @param sourceFile 源文件对象
|
|
534
|
+
* @returns 参数信息
|
|
535
|
+
*/
|
|
536
|
+
parseArgument(node: ts.Node, sourceFile: ts.SourceFile): ArgumentInfo;
|
|
537
|
+
/**
|
|
538
|
+
* 将箭头函数/函数表达式节点解析为 FunctionExpressionInfo
|
|
539
|
+
* @param node 箭头函数或函数表达式 AST 节点
|
|
540
|
+
* @param sourceFile 源文件对象
|
|
541
|
+
* @returns 函数表达式信息(含参数、返回类型、函数体)
|
|
542
|
+
*/
|
|
543
|
+
private parseFunctionExpressionInfo;
|
|
544
|
+
/**
|
|
545
|
+
* 将对象字面量中的方法声明解析为 FunctionExpressionInfo
|
|
546
|
+
*
|
|
547
|
+
* 如: `{ getData() { ... } }` 中的 getData 方法
|
|
548
|
+
*
|
|
549
|
+
* @param node 方法声明 AST 节点
|
|
550
|
+
* @param sourceFile 源文件对象
|
|
551
|
+
* @returns 函数表达式信息
|
|
552
|
+
*/
|
|
553
|
+
private parseMethodAsFunctionExpression;
|
|
554
|
+
/**
|
|
555
|
+
* 解析默认导出表达式(export default ...)
|
|
556
|
+
*
|
|
557
|
+
* 根据导出表达式的类型分类:
|
|
558
|
+
* - 函数调用: `export default defineIpc(...)` → kind: 'call'
|
|
559
|
+
* - 标识符: `export default router` → kind: 'identifier'
|
|
560
|
+
* - 对象字面量: `export default { ... }` → kind: 'object'
|
|
561
|
+
* - 其他表达式 → kind: 'other'
|
|
562
|
+
*
|
|
563
|
+
* @param node 默认导出赋值 AST 节点
|
|
564
|
+
* @param sourceFile 源文件对象
|
|
565
|
+
* @returns 默认导出信息
|
|
566
|
+
*/
|
|
567
|
+
private parseDefaultExport;
|
|
568
|
+
/**
|
|
569
|
+
* 解析函数/方法的参数列表
|
|
570
|
+
* @param params 参数声明节点数组
|
|
571
|
+
* @param sourceFile 源文件对象
|
|
572
|
+
* @returns 参数信息列表(含名称、类型、可选性、剩余参数、默认值)
|
|
573
|
+
*/
|
|
574
|
+
private parseParameters;
|
|
575
|
+
/**
|
|
576
|
+
* 提取泛型参数列表的文本表示
|
|
577
|
+
* @param typeParams 泛型参数声明节点数组
|
|
578
|
+
* @returns 泛型参数文本列表,如 ['T', 'K extends string']
|
|
579
|
+
*/
|
|
580
|
+
private getTypeParameters;
|
|
581
|
+
/**
|
|
582
|
+
* 检查节点是否具有 export 修饰符
|
|
583
|
+
* @param node AST 节点
|
|
584
|
+
* @returns 是否导出
|
|
585
|
+
*/
|
|
586
|
+
private hasExportModifier;
|
|
587
|
+
/**
|
|
588
|
+
* 获取类成员的访问修饰符
|
|
589
|
+
* @param node 类成员 AST 节点
|
|
590
|
+
* @returns 访问修饰符(public/private/protected),无显式修饰符时返回 undefined
|
|
591
|
+
*/
|
|
592
|
+
private getAccessibility;
|
|
593
|
+
/**
|
|
594
|
+
* 提取节点的 JSDoc 注释
|
|
595
|
+
*
|
|
596
|
+
* 通过 ts.getLeadingCommentRanges 获取节点前的注释块,
|
|
597
|
+
* 只返回以 `/**` 开头的 JSDoc 风格注释,忽略普通行注释和块注释。
|
|
598
|
+
*
|
|
599
|
+
* @param node AST 节点
|
|
600
|
+
* @param sourceFile 源文件对象
|
|
601
|
+
* @returns JSDoc 注释文本(含 `/**` 和 `*/`),无 JSDoc 时返回 undefined
|
|
602
|
+
*/
|
|
603
|
+
private getJsDoc;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
export { TsParser };
|
|
607
|
+
export type { ArgumentInfo, CallExpressionInfo, ClassInfo, ClassMemberInfo, DefaultExportInfo, EnumInfo, EnumMemberInfo, ExportDeclarationInfo, FunctionExpressionInfo, FunctionInfo, ImportDeclarationInfo, InterfaceInfo, NamedExportInfo, NamedImportInfo, ObjectPropertyInfo, ParameterInfo, ParsedSourceFile, PropertySignatureInfo, TypeAliasInfo, VariableInfo };
|