import type { QuoteStyle, RootResult, NameResult, BaseNode } from './RootResult.js' import type { Node } from 'estree' /** * A parse sub result that might not be a valid type expression on its own. */ export type NonRootResult = RootResult | PropertyResult | ObjectFieldResult | JsdocObjectFieldResult | KeyValueResult | MappedTypeResult | IndexSignatureResult | TypeParameterResult | CallSignatureResult | ConstructorSignatureResult | MethodSignatureResult | IndexedAccessIndexResult | ComputedPropertyResult | ComputedMethodResult export interface ObjectFieldResult extends BaseNode { type: 'JsdocTypeObjectField' key: string | MappedTypeResult | IndexSignatureResult | ComputedPropertyResult | ComputedMethodResult right: RootResult | undefined optional: boolean readonly: boolean meta: { quote: QuoteStyle | undefined, postColonSpacing?: string postKeySpacing?: string postOptionalSpacing?: string } } export interface JsdocObjectFieldResult extends BaseNode { type: 'JsdocTypeJsdocObjectField' left: RootResult right: RootResult } export interface PropertyResult extends BaseNode { type: 'JsdocTypeProperty' value: string meta: { quote: QuoteStyle | undefined } } /** * A key value pair represented by a `:`. Can occur as a named parameter of a {@link FunctionResult} or as an entry for * an {@link TupleResult}. Is a {@link NonRootResult}. */ export interface KeyValueResult extends BaseNode { type: 'JsdocTypeKeyValue' key: string right: RootResult | undefined optional: boolean variadic: boolean meta?: { postKeySpacing: string, postOptionalSpacing: string, postVariadicSpacing: string, postColonSpacing: string } } export interface IndexSignatureResult extends BaseNode { type: 'JsdocTypeIndexSignature' key: string right: RootResult } export interface MappedTypeResult extends BaseNode { type: 'JsdocTypeMappedType' key: string right: RootResult } export interface TypeParameterResult extends BaseNode { type: 'JsdocTypeTypeParameter' defaultValue?: RootResult name: NameResult constraint?: RootResult meta?: { defaultValueSpacing: string } } export interface CallSignatureResult extends BaseNode { type: 'JsdocTypeCallSignature' parameters: Array returnType: RootResult, typeParameters?: TypeParameterResult[], meta?: { parameterSpacing: string, typeParameterSpacing: string, postGenericSpacing: string, preReturnMarkerSpacing?: string, postReturnMarkerSpacing?: string } } export interface ConstructorSignatureResult extends BaseNode { type: 'JsdocTypeConstructorSignature' parameters: Array returnType: RootResult, typeParameters?: TypeParameterResult[], meta?: { parameterSpacing: string, typeParameterSpacing: string, postNewSpacing: string, postGenericSpacing: string, preReturnMarkerSpacing?: string, postReturnMarkerSpacing?: string } } export interface MethodSignatureResult extends BaseNode { type: 'JsdocTypeMethodSignature' name: string meta: { quote: QuoteStyle | undefined, parameterSpacing?: string, typeParameterSpacing?: string, postMethodNameSpacing?: string, postGenericSpacing?: string, preReturnMarkerSpacing?: string, postReturnMarkerSpacing?: string } parameters: Array returnType: RootResult, typeParameters?: TypeParameterResult[] } export interface IndexedAccessIndexResult extends BaseNode { type: 'JsdocTypeIndexedAccessIndex', right: RootResult } export interface ComputedPropertyResult extends BaseNode { type: 'JsdocTypeComputedProperty', value: RootResult | Node } export interface ComputedMethodResult extends BaseNode { type: 'JsdocTypeComputedMethod', value: RootResult | Node, optional: boolean, parameters: Array, returnType: RootResult, typeParameters?: TypeParameterResult[], meta?: { parameterSpacing: string, typeParameterSpacing: string, postGenericSpacing: string preReturnMarkerSpacing?: string, postReturnMarkerSpacing?: string } }