import { DocumentNode, GraphQLFieldConfig, GraphQLInputFieldConfig, GraphQLNamedType, GraphQLSchema, GraphQLType } from 'graphql';
import { MapperKind } from '@graphql-tools/utils';
import { SubgraphConfig, SubgraphTransform } from './compose.js';
type MapperTypeKind = MapperKind.ROOT_OBJECT | MapperKind.OBJECT_TYPE | MapperKind.INTERFACE_TYPE | MapperKind.UNION_TYPE | MapperKind.ENUM_TYPE | MapperKind.INPUT_OBJECT_TYPE | MapperKind.SCALAR_TYPE | MapperKind.TYPE;
export declare function createRenameTypeTransform(renameFn: (type: GraphQLNamedType, subgraphConfig: SubgraphConfig) => string, kind?: MapperTypeKind): SubgraphTransform;
export type MapperFieldKind = MapperKind.FIELD | MapperKind.ROOT_FIELD | MapperKind.OBJECT_FIELD | MapperKind.INTERFACE_FIELD | MapperKind.INPUT_OBJECT_FIELD;
export declare function createRenameFieldTransform(renameFn: (field: GraphQLFieldConfig<any, any> | GraphQLInputFieldConfig, fieldName: string, typeName: string, subgraphConfig: SubgraphConfig) => string, kind?: MapperFieldKind): SubgraphTransform;
export interface PrefixTransformConfig {
    /**
     * The prefix to apply to the schema types. By default it's the API name.
     */
    value?: string;
    /**
     * List of ignored types
     */
    ignore?: string[];
    /**
     * Changes root types and changes the field names (default: false)
     */
    includeRootOperations?: boolean;
    /**
     * Changes types (default: true)
     */
    includeTypes?: boolean;
}
export declare function createPrefixTransform({ value, ignore, includeRootOperations, includeTypes, }?: PrefixTransformConfig): (schema: GraphQLSchema, subgraphConfig: SubgraphConfig) => GraphQLSchema;
export interface FilterTransformConfig {
    rootFieldFilter?: (typeName: string, fieldName: string) => boolean;
    typeFilter?: (type: GraphQLNamedType) => boolean;
    fieldFilter?: (typeName: string, fieldName: string) => boolean;
    objectFieldFilter?: (typeName: string, fieldName: string) => boolean;
    interfaceFieldFilter?: (typeName: string, fieldName: string) => boolean;
    inputObjectFieldFilter?: (typeName: string, fieldName: string) => boolean;
    argumentFilter?: (typeName: string, fieldName: string, argName: string) => boolean;
}
export declare function createFilterTransform(config: FilterTransformConfig): SubgraphTransform;
export type NameReplacer = (name: string) => string;
export interface NamingConventionTransform {
    typeNames?: NameReplacer;
    fieldNames?: NameReplacer;
    enumValues?: NameReplacer;
    fieldArgumentNames?: NameReplacer;
}
export * from 'change-case';
export declare function createNamingConventionTransform(config: NamingConventionTransform): SubgraphTransform;
export declare function createTypeReplaceTransform(replacerFn: (typeName: string, fieldName: string, existingType: GraphQLType) => string | void): SubgraphTransform;
export declare function createExtendTransform(typeDefs: string | DocumentNode): (schema: GraphQLSchema) => GraphQLSchema;
