import { ASTNode, DocumentNode, GraphQLSchema } from 'graphql';
import type { CachedContent, GraphQLFileMetadata, GraphQLFileInfo, FragmentInfo, ObjectTypeInfo, Uri } from 'graphql-language-service';
import { GraphQLConfig, GraphQLProjectConfig } from 'graphql-config';
import type { UnnormalizedTypeDefPointer } from '@graphql-tools/load';
import { parseDocument } from './parseDocument';
import { LoadConfigOptions } from './types';
import { NoopLogger, Logger } from './Logger';
import { LRUCache } from 'lru-cache';
export type OnSchemaChange = (project: GraphQLProjectConfig) => void;
export declare function getGraphQLCache({ parser, logger, loadConfigOptions, config, onSchemaChange, schemaCacheTTL }: {
    parser: typeof parseDocument;
    logger: Logger | NoopLogger;
    loadConfigOptions: LoadConfigOptions;
    config?: GraphQLConfig;
    onSchemaChange?: OnSchemaChange;
    schemaCacheTTL?: number;
}): Promise<GraphQLCache>;
export declare class GraphQLCache {
    _configDir: Uri;
    _graphQLFileListCache: Map<Uri, Map<string, GraphQLFileInfo>>;
    _graphQLConfig: GraphQLConfig;
    _schemaMap: LRUCache<Uri, GraphQLSchema>;
    _typeExtensionMap: Map<Uri, number>;
    _fragmentDefinitionsCache: Map<Uri, Map<string, FragmentInfo>>;
    _typeDefinitionsCache: Map<Uri, Map<string, ObjectTypeInfo>>;
    _parser: typeof parseDocument;
    _logger: Logger | NoopLogger;
    _onSchemaChange?: OnSchemaChange;
    _schemaCacheTTL?: number;
    constructor({ configDir, config, parser, logger, onSchemaChange, schemaCacheTTL }: {
        configDir: Uri;
        config: GraphQLConfig;
        parser: typeof parseDocument;
        logger: Logger | NoopLogger;
        onSchemaChange?: OnSchemaChange;
        schemaCacheTTL?: number;
    });
    getGraphQLConfig: () => GraphQLConfig;
    getProjectForFile: (uri: string) => GraphQLProjectConfig | void;
    getFragmentDependencies: (query: string, fragmentDefinitions?: Map<string, FragmentInfo> | null) => Promise<FragmentInfo[]>;
    getFragmentDependenciesForAST: (parsedQuery: ASTNode, fragmentDefinitions: Map<string, FragmentInfo>) => Promise<FragmentInfo[]>;
    _cacheKeyForProject: ({ dirpath, name }: GraphQLProjectConfig) => string;
    getFragmentDefinitions: (projectConfig: GraphQLProjectConfig) => Promise<Map<string, FragmentInfo>>;
    getObjectTypeDependenciesForAST: (parsedQuery: ASTNode, objectTypeDefinitions: Map<string, ObjectTypeInfo>) => Promise<Array<ObjectTypeInfo>>;
    getObjectTypeDefinitions: (projectConfig: GraphQLProjectConfig) => Promise<Map<string, ObjectTypeInfo>>;
    _readFilesFromInputDirs: (rootDir: string, projectConfig: GraphQLProjectConfig) => Promise<Array<GraphQLFileMetadata>>;
    _getSchemaAndDocumentFilePatterns: (projectConfig: GraphQLProjectConfig) => string[];
    updateFragmentDefinition(projectCacheKey: Uri, filePath: Uri, contents: Array<CachedContent>): Promise<void>;
    _setFragmentCache(asts: {
        ast: DocumentNode | null;
        query: string;
    }[], fragmentCache: Map<string, FragmentInfo>, filePath: string | undefined): Map<string, FragmentInfo>;
    updateObjectTypeDefinition(projectCacheKey: Uri, filePath: Uri, contents: Array<CachedContent>): Promise<void>;
    _setDefinitionCache(asts: {
        ast: DocumentNode | null;
        query: string;
    }[], typeCache: Map<string, ObjectTypeInfo>, filePath: string | undefined): Map<string, ObjectTypeInfo>;
    _extendSchema(schema: GraphQLSchema, schemaPath: string | null, schemaCacheKey: string | null): GraphQLSchema;
    getSchema: (appName?: string, queryHasExtensions?: boolean | null) => Promise<GraphQLSchema | null>;
    invalidateSchemaCacheForProject(projectConfig: GraphQLProjectConfig): void;
    _getSchemaCacheKeyForProject(projectConfig: GraphQLProjectConfig): UnnormalizedTypeDefPointer;
    _getProjectName(projectConfig: GraphQLProjectConfig): string;
    readAllGraphQLFiles: (list: Array<GraphQLFileMetadata>) => Promise<{
        objectTypeDefinitions: Map<string, ObjectTypeInfo>;
        fragmentDefinitions: Map<string, FragmentInfo>;
        graphQLFileMap: Map<string, GraphQLFileInfo>;
    }>;
    processGraphQLFiles: (responses: Array<GraphQLFileInfo>) => {
        objectTypeDefinitions: Map<string, ObjectTypeInfo>;
        fragmentDefinitions: Map<string, FragmentInfo>;
        graphQLFileMap: Map<string, GraphQLFileInfo>;
    };
    promiseToReadGraphQLFile: (filePath: Uri) => Promise<GraphQLFileInfo>;
}
//# sourceMappingURL=GraphQLCache.d.ts.map