import { ASTNode, DirectiveNode, DocumentNode, GraphQLDirective, SchemaDefinitionNode, Source } from 'graphql';
import Core, { CoreFn, Context, Immutable } from './core';
import FeatureUrl from './feature-url';
import Features, { Feature } from './features';
export declare const ErrExtraSchema: (def: SchemaDefinitionNode) => import("./error").GraphQLErrorExt<"ExtraSchema"> & {
    message: string;
    schemaDefinition: SchemaDefinitionNode;
    nodes: SchemaDefinitionNode[];
};
export declare const ErrNoSchema: () => import("./error").GraphQLErrorExt<"NoSchema"> & import("./error").Props;
export declare const ErrNoCore: (causes: Error[]) => import("./error").GraphQLErrorExt<"NoCore"> & {
    message: string;
    causes: Error[];
};
export declare const ErrBadFeature: (node: DirectiveNode, ...causes: Error[]) => import("./error").GraphQLErrorExt<"BadFeature"> & {
    message: string;
    directive: DirectiveNode;
    nodes: DirectiveNode[];
    causes: Error[];
};
export declare const ErrOverlappingNames: (name: string, features: Feature[]) => import("./error").GraphQLErrorExt<"OverlappingNames"> & {
    message: string;
    name: string;
    features: Feature[];
    nodes: DirectiveNode[];
};
export declare type CoreSchemaContext = Immutable<CoreSchema> & Context;
export declare class CoreSchema extends Core<DocumentNode> {
    static graphql(parts: TemplateStringsArray, ...replacements: any[]): CoreSchema;
    static fromSource(source: Source): CoreSchema;
    check(...fns: CoreFn<this>[]): this;
    get document(): DocumentNode;
    get schema(): SchemaDefinitionNode;
    get features(): Features;
    get names(): Map<string, Feature>;
    read(directive: GraphQLDirective | FeatureUrl | string, node: ASTNode): Generator<Item, void, unknown>;
    featureFor(node: ASTNode): Feature | undefined;
}
export default CoreSchema;
export declare function schema(this: CoreSchemaContext): SchemaDefinitionNode;
export declare function features(this: CoreSchemaContext): Features;
export declare function names(this: CoreSchemaContext): Map<string, Feature>;
export interface Item {
    node: ASTNode;
    directive: DirectiveNode;
    feature: Feature;
    canonicalName: string;
    data?: any;
}
//# sourceMappingURL=schema.d.ts.map