import { Node , ScriptKind , SourceFile , SyntaxKind } from 'typescript' ; export type TSQueryNodeTransformer = ( node : Node ) => Node | null | undefined ; export type TSQueryStringTransformer = ( node : Node ) => string | null | undefined ; export type TSQueryApi = { < T extends Node = Node > ( ast , selector , options ? ) : Array < T > ; ast ( source , fileName ? , scriptKind ? ) : SourceFile ; map ( ast , selector , nodeTransformer , options ? ) : SourceFile ; match < T extends Node = Node > ( ast , selector , options ? ) : Array < T > ; parse ( selector , options ? ) : TSQuerySelectorNode ; project ( configFilePath ) : Array < SourceFile > ; projectFiles ( configFilePath ) : Array < string > ; query < T extends Node = Node > ( ast , selector , options ? ) : Array < T > ; replace ( source , selector , stringTransformer , options ? ) : string ; syntaxKindName ( node ) : string ; } ; export type TSQueryAttributeOperatorType = 'regexp' | 'literal' | 'type' ; export type TSQueryAttributeOperator = ( obj : any , value : any , type : TSQueryAttributeOperatorType ) => boolean ; export type TSQueryAttributeOperators = { [ key ] : TSQueryAttributeOperator ; } ; export type TSQueryMatcher = ( node : Node , selector : TSQuerySelectorNode , ancestry : Array < Node > , options : TSQueryOptions ) => boolean ; export type TSQueryMatchers = { [ key ] : TSQueryMatcher ; } ; export type TSQueryProperties = { kindName : string ; name ? : string ; text : string ; value ? : any ; } ; export type TSQueryOptions = { visitAllChildren ? : boolean ; } ; export type TSQuerySelectorNode = { [ key ] : TSQuerySelectorNode | Array < TSQuerySelectorNode > | RegExp | boolean | number | string ; index : TSQuerySelectorNode ; left : TSQuerySelectorNode ; name : string ; operator : '=' | '!=' | '<=' | '<' | '>=' | '>' ; right : TSQuerySelectorNode ; selectors : Array < TSQuerySelectorNode > ; subject : boolean ; type : TSQueryAttributeOperatorType ; value : TSQuerySelectorNode | RegExp | number | string ; } ; export type TSQueryTraverseOptions = { enter : ( node : Node , parent : Node | null ) => void ; leave : ( node : Node , parent : Node | null ) => void ; visitAllChildren : boolean ; } ;