import type { Diagnostic as DiagnosticType, CompletionItem as CompletionItemType } from 'vscode-languageserver-types';
import type { ASTNode, GraphQLSchema } from 'graphql';
import type { DocumentNode, FragmentDefinitionNode, NamedTypeNode, TypeDefinitionNode, NameNode } from 'graphql/language';
import type { GraphQLArgument, GraphQLEnumValue, GraphQLField, GraphQLInputFieldMap, GraphQLInterfaceType, GraphQLObjectType, GraphQLType } from 'graphql/type/definition';
import type { GraphQLDirective } from 'graphql/type/directives';
export declare type Maybe<T> = T | null | undefined;
import type { GraphQLConfig, GraphQLProjectConfig, GraphQLExtensionDeclaration } from 'graphql-config';
export type { GraphQLConfig, GraphQLProjectConfig, GraphQLExtensionDeclaration, };
export interface GraphQLCache {
    getGraphQLConfig: () => GraphQLConfig;
    getProjectForFile: (uri: string) => GraphQLProjectConfig;
    getObjectTypeDependencies: (query: string, fragmentDefinitions: Map<string, ObjectTypeInfo>) => Promise<ObjectTypeInfo[]>;
    getObjectTypeDependenciesForAST: (parsedQuery: ASTNode, fragmentDefinitions: Map<string, ObjectTypeInfo>) => Promise<ObjectTypeInfo[]>;
    getObjectTypeDefinitions: (graphQLConfig: GraphQLProjectConfig) => Promise<Map<string, ObjectTypeInfo>>;
    updateObjectTypeDefinition: (rootDir: Uri, filePath: Uri, contents: CachedContent[]) => Promise<void>;
    updateObjectTypeDefinitionCache: (rootDir: Uri, filePath: Uri, exists: boolean) => Promise<void>;
    getFragmentDependencies: (query: string, fragmentDefinitions: Maybe<Map<string, FragmentInfo>>) => Promise<FragmentInfo[]>;
    getFragmentDependenciesForAST: (parsedQuery: ASTNode, fragmentDefinitions: Map<string, FragmentInfo>) => Promise<FragmentInfo[]>;
    getFragmentDefinitions: (graphQLConfig: GraphQLProjectConfig) => Promise<Map<string, FragmentInfo>>;
    updateFragmentDefinition: (rootDir: Uri, filePath: Uri, contents: CachedContent[]) => Promise<void>;
    updateFragmentDefinitionCache: (rootDir: Uri, filePath: Uri, exists: boolean) => Promise<void>;
    getSchema: (appName?: string, queryHasExtensions?: boolean) => Promise<GraphQLSchema | null>;
}
export interface IPosition {
    line: number;
    character: number;
    setLine(line: number): void;
    setCharacter(character: number): void;
    lessThanOrEqualTo(position: IPosition): boolean;
}
export interface IRange {
    start: IPosition;
    end: IPosition;
    setEnd(line: number, character: number): void;
    setStart(line: number, character: number): void;
    containsPosition(position: IPosition): boolean;
}
export declare type CachedContent = {
    query: string;
    range: IRange | null;
};
export declare type Uri = string;
export declare type GraphQLFileMetadata = {
    filePath: Uri;
    size: number;
    mtime: number;
};
export declare type GraphQLFileInfo = {
    filePath: Uri;
    content: string;
    asts: DocumentNode[];
    queries: CachedContent[];
    size: number;
    mtime: number;
};
export declare type AllTypeInfo = {
    type: Maybe<GraphQLType>;
    parentType: Maybe<GraphQLType>;
    inputType: Maybe<GraphQLType>;
    directiveDef: Maybe<GraphQLDirective>;
    fieldDef: Maybe<GraphQLField<any, any>>;
    enumValue: Maybe<GraphQLEnumValue>;
    argDef: Maybe<GraphQLArgument>;
    argDefs: Maybe<GraphQLArgument[]>;
    objectFieldDefs: Maybe<GraphQLInputFieldMap>;
    interfaceDef: Maybe<GraphQLInterfaceType>;
    objectTypeDef: Maybe<GraphQLObjectType>;
};
export declare type FragmentInfo = {
    filePath?: Uri;
    content: string;
    definition: FragmentDefinitionNode;
};
export declare type NamedTypeInfo = {
    filePath?: Uri;
    content: string;
    definition: NamedTypeNode;
};
export declare type ObjectTypeInfo = {
    filePath?: Uri;
    content: string;
    definition: TypeDefinitionNode;
};
export declare type Diagnostic = DiagnosticType;
export declare type CompletionItemBase = {
    label: string;
    isDeprecated?: boolean;
};
export declare type CompletionItem = CompletionItemType & {
    isDeprecated?: boolean;
    documentation?: string | null;
    deprecationReason?: string | null;
    type?: GraphQLType;
    command?: CompletionItemType['command'];
};
export declare type Definition = {
    path: Uri;
    position: IPosition;
    range?: IRange;
    id?: string;
    name?: string;
    language?: string;
    projectRoot?: Uri;
};
export declare type TokenKind = 'keyword' | 'class-name' | 'constructor' | 'method' | 'param' | 'string' | 'whitespace' | 'plain' | 'type';
export declare type TextToken = {
    kind: TokenKind;
    value: string | NameNode;
};
export declare type TokenizedText = TextToken[];
export declare type OutlineTree = {
    plainText?: string;
    tokenizedText?: TokenizedText;
    representativeName?: string;
    kind: string;
    startPosition: IPosition;
    endPosition?: IPosition;
    children: OutlineTree[];
};
export declare type Outline = {
    outlineTrees: OutlineTree[];
};
export interface FileEvent {
    uri: string;
    type: FileChangeType;
}
export declare const FileChangeTypeKind: {
    Created: number;
    Changed: number;
    Deleted: number;
};
export declare type FileChangeTypeKind = {
    Created: 1;
    Changed: 2;
    Deleted: 3;
};
export declare type FileChangeTypeKeys = keyof FileChangeTypeKind;
export declare type FileChangeType = FileChangeTypeKind[FileChangeTypeKeys];
export declare namespace CompletionItemKind {
    const Text: 1;
    const Method: 2;
    const Function: 3;
    const Constructor: 4;
    const Field: 5;
    const Variable: 6;
    const Class: 7;
    const Interface: 8;
    const Module: 9;
    const Property: 10;
    const Unit: 11;
    const Value: 12;
    const Enum: 13;
    const Keyword: 14;
    const Snippet: 15;
    const Color: 16;
    const File: 17;
    const Reference: 18;
    const Folder: 19;
    const EnumMember: 20;
    const Constant: 21;
    const Struct: 22;
    const Event: 23;
    const Operator: 24;
    const TypeParameter: 25;
}
export declare type CompletionItemKind = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25;
//# sourceMappingURL=index.d.ts.map