import * as ts from 'typescript'; import type { SourceFileAST, ASTNode } from '../types'; // 通用节点创建函数类型 export type CreateNodeFn = (sourceFile: SourceFileAST, node: ASTNode) => T; // 具体节点构建函数类型 export type NodeBuilderFn = (createNode: CreateNodeFn) => CreateNodeFn; // 节点构建器注册表类型 export type NodeBuilderRegistry = { [K in ts.SyntaxKind]?: NodeBuilderFn; }; // 常用的节点创建函数类型别名 export type CreateSourceFileFn = CreateNodeFn; export type CreateFunctionDeclarationFn = CreateNodeFn; export type CreateVariableStatementFn = CreateNodeFn; export type CreateBlockFn = CreateNodeFn; export type CreateCallExpressionFn = CreateNodeFn; export type CreateExpressionFn = CreateNodeFn; export type CreateStatementFn = CreateNodeFn; export type CreateParameterFn = CreateNodeFn; export type CreateTypeNodeFn = CreateNodeFn; export type CreateIdentifierFn = CreateNodeFn; export type CreateLiteralFn = CreateNodeFn; export type CreateTokenFn = CreateNodeFn>; export type CreateModifierFn = CreateNodeFn; // 特殊类型:NodeArray 不是 Node 的子类型,需要特殊处理 export type CreateSyntaxListFn = (createNode: CreateNodeFn) => (sourceFile: SourceFileAST, node: ASTNode) => ts.NodeArray;