import { GraphQLSchema, GraphQLDirective } from "graphql";
import { Wrapper, Removable, GQLAnyType, SchemaConfig } from "../..";
import { Buildable } from "../../classes/Buildable";
export declare class Schema<ExtensionsType = any> extends Buildable<GraphQLSchema, ExtensionsType> {
    protected static _config: SchemaConfig;
    protected _directives: GraphQLDirective[];
    static get config(): SchemaConfig;
    protected _types: GQLAnyType[];
    get types(): GQLAnyType<any, any>[];
    protected constructor();
    /**
     * Create a new schema
     * @param types The type list to build
     */
    static create(...types: (GQLAnyType | Wrapper)[]): Schema<any>;
    setConfig(config: SchemaConfig): this;
    /**
     * Set the type list to build
     * @param types The type list to build
     */
    setTypes(...types: (GQLAnyType | Wrapper)[]): this;
    /**
     * Add a type to the list to build
     * @param types The type list to build
     */
    addTypes(...types: (GQLAnyType | Wrapper)[]): this;
    /**
     * Remove some types to the list
     * @param types The type list to remove
     */
    removeTypes(...types: Removable<GQLAnyType>): this;
    setDirectives(...directives: GraphQLDirective[]): this;
    addDirectives(...directives: GraphQLDirective[]): this;
    removeDirectives(...directives: GraphQLDirective[]): this;
    /**
     * Build the schema and all the types contained in it
     */
    build(): GraphQLSchema;
}
