import { ConstDirectiveNode, GraphQLArgument, GraphQLEnumType, GraphQLEnumValue, GraphQLField, GraphQLInputField, GraphQLInputObjectType, GraphQLInterfaceType, GraphQLNamedType, GraphQLObjectType, GraphQLScalarType, GraphQLSchema, GraphQLUnionType, Kind } from 'graphql';
import { AddChange } from '../schema.js';
import { Change, ChangeType, CriticalityLevel, DirectiveAddedChange, DirectiveRemovedChange, DirectiveUsageArgumentAddedChange, DirectiveUsageArgumentDefinitionAddedChange, DirectiveUsageArgumentDefinitionRemovedChange, DirectiveUsageArgumentRemovedChange, DirectiveUsageEnumAddedChange, DirectiveUsageEnumRemovedChange, DirectiveUsageEnumValueAddedChange, DirectiveUsageEnumValueRemovedChange, DirectiveUsageFieldAddedChange, DirectiveUsageFieldDefinitionAddedChange, DirectiveUsageFieldDefinitionRemovedChange, DirectiveUsageFieldRemovedChange, DirectiveUsageInputFieldDefinitionAddedChange, DirectiveUsageInputFieldDefinitionRemovedChange, DirectiveUsageInputObjectAddedChange, DirectiveUsageInputObjectRemovedChange, DirectiveUsageInterfaceAddedChange, DirectiveUsageInterfaceRemovedChange, DirectiveUsageObjectAddedChange, DirectiveUsageObjectRemovedChange, DirectiveUsageScalarAddedChange, DirectiveUsageScalarRemovedChange, DirectiveUsageSchemaAddedChange, DirectiveUsageSchemaRemovedChange, DirectiveUsageUnionMemberAddedChange, DirectiveUsageUnionMemberRemovedChange } from './change.js';
type KindToPayload = {
    [Kind.FIELD]: {
        input: {
            field: GraphQLField<any, any, any>;
            parentType: GraphQLInterfaceType | GraphQLObjectType<any, any>;
        };
        change: DirectiveAddedChange | DirectiveRemovedChange;
    };
    [Kind.ENUM_TYPE_DEFINITION]: {
        input: GraphQLEnumType;
        change: DirectiveUsageEnumAddedChange | DirectiveUsageEnumRemovedChange;
    };
    [Kind.FIELD_DEFINITION]: {
        input: {
            field: GraphQLField<any, any, any>;
            parentType: GraphQLInterfaceType | GraphQLObjectType<any, any>;
        };
        change: DirectiveUsageFieldDefinitionAddedChange | DirectiveUsageFieldDefinitionRemovedChange;
    };
    [Kind.UNION_TYPE_DEFINITION]: {
        input: GraphQLUnionType;
        change: DirectiveUsageUnionMemberAddedChange | DirectiveUsageUnionMemberRemovedChange;
    };
    [Kind.ENUM_VALUE_DEFINITION]: {
        input: {
            type: GraphQLEnumType;
            value: GraphQLEnumValue;
        };
        change: DirectiveUsageEnumValueAddedChange | DirectiveUsageEnumValueRemovedChange;
    };
    [Kind.SCHEMA_DEFINITION]: {
        input: GraphQLSchema | null;
        change: DirectiveUsageSchemaAddedChange | DirectiveUsageSchemaRemovedChange;
    };
    [Kind.SCALAR_TYPE_DEFINITION]: {
        input: GraphQLScalarType;
        change: DirectiveUsageScalarAddedChange | DirectiveUsageScalarRemovedChange;
    };
    [Kind.OBJECT]: {
        input: GraphQLObjectType;
        change: DirectiveUsageObjectAddedChange | DirectiveUsageObjectRemovedChange;
    };
    [Kind.INTERFACE_TYPE_DEFINITION]: {
        input: GraphQLInterfaceType;
        change: DirectiveUsageInterfaceAddedChange | DirectiveUsageInterfaceRemovedChange;
    };
    [Kind.INPUT_OBJECT_TYPE_DEFINITION]: {
        input: GraphQLInputObjectType;
        change: DirectiveUsageInputObjectAddedChange | DirectiveUsageInputObjectRemovedChange;
    };
    [Kind.INPUT_VALUE_DEFINITION]: {
        input: {
            field: GraphQLInputField;
            type: GraphQLInputObjectType;
        };
        change: DirectiveUsageArgumentDefinitionAddedChange | DirectiveUsageArgumentDefinitionRemovedChange;
    };
    [Kind.ARGUMENT]: {
        input: {
            field: GraphQLField<any, any, any>;
            type: GraphQLObjectType | GraphQLInterfaceType;
            argument: GraphQLArgument;
        };
        change: DirectiveUsageArgumentDefinitionAddedChange | DirectiveUsageArgumentDefinitionRemovedChange;
    };
};
export declare function directiveUsageArgumentDefinitionAddedFromMeta(args: DirectiveUsageArgumentDefinitionAddedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was added to argument '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_ARGUMENT_DEFINITION_ADDED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        typeName: string;
        fieldName: string;
        argumentName: string;
        addedDirectiveName: string;
        addedToNewType: boolean;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageArgumentDefinitionRemovedFromMeta(args: DirectiveUsageArgumentDefinitionRemovedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was removed from argument '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_ARGUMENT_DEFINITION_REMOVED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        typeName: string;
        fieldName: string;
        argumentName: string;
        removedDirectiveName: string;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageInputObjectAddedFromMeta(args: DirectiveUsageInputObjectAddedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was added to input object '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_INPUT_OBJECT_ADDED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        inputObjectName: string;
        addedInputFieldName: string;
        isAddedInputFieldTypeNullable: boolean;
        addedInputFieldType: string;
        addedDirectiveName: string;
        addedToNewType: boolean;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageInputObjectRemovedFromMeta(args: DirectiveUsageInputObjectRemovedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was removed from input object '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_INPUT_OBJECT_REMOVED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        inputObjectName: string;
        removedInputFieldName: string;
        isRemovedInputFieldTypeNullable: boolean;
        removedInputFieldType: string;
        removedDirectiveName: string;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageInterfaceAddedFromMeta(args: DirectiveUsageInterfaceAddedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was added to interface '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_INTERFACE_ADDED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        interfaceName: string;
        addedDirectiveName: string;
        addedToNewType: boolean;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageInterfaceRemovedFromMeta(args: DirectiveUsageInterfaceRemovedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was removed from interface '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_INTERFACE_REMOVED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        interfaceName: string;
        removedDirectiveName: string;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageInputFieldDefinitionAddedFromMeta(args: DirectiveUsageInputFieldDefinitionAddedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was added to input field '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_INPUT_FIELD_DEFINITION_ADDED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        inputObjectName: string;
        inputFieldName: string;
        inputFieldType: string;
        addedDirectiveName: string;
        addedToNewType: boolean;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageInputFieldDefinitionRemovedFromMeta(args: DirectiveUsageInputFieldDefinitionRemovedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was removed from input field '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_INPUT_FIELD_DEFINITION_REMOVED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        inputObjectName: string;
        inputFieldName: string;
        removedDirectiveName: string;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageObjectAddedFromMeta(args: DirectiveUsageObjectAddedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was added to object '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_OBJECT_ADDED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        objectName: string;
        addedDirectiveName: string;
        addedToNewType: boolean;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageObjectRemovedFromMeta(args: DirectiveUsageObjectRemovedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was removed from object '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_OBJECT_REMOVED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        objectName: string;
        removedDirectiveName: string;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageEnumAddedFromMeta(args: DirectiveUsageEnumAddedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was added to enum '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_ENUM_ADDED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        enumName: string;
        addedDirectiveName: string;
        addedToNewType: boolean;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageEnumRemovedFromMeta(args: DirectiveUsageEnumRemovedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was removed from enum '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_ENUM_REMOVED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        enumName: string;
        removedDirectiveName: string;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageFieldAddedFromMeta(args: DirectiveUsageFieldAddedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was added to field '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_FIELD_ADDED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        typeName: string;
        fieldName: string;
        addedDirectiveName: string;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageFieldDefinitionAddedFromMeta(args: DirectiveUsageFieldDefinitionAddedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was added to field '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_FIELD_DEFINITION_ADDED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        typeName: string;
        fieldName: string;
        addedDirectiveName: string;
        addedToNewType: boolean;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageFieldRemovedFromMeta(args: DirectiveUsageFieldRemovedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was removed from field '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_FIELD_REMOVED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        typeName: string;
        fieldName: string;
        removedDirectiveName: string;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageFieldDefinitionRemovedFromMeta(args: DirectiveUsageFieldDefinitionRemovedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was removed from field '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_FIELD_DEFINITION_REMOVED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        typeName: string;
        fieldName: string;
        removedDirectiveName: string;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageEnumValueAddedFromMeta(args: DirectiveUsageEnumValueAddedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was added to enum value '${string}.${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_ENUM_VALUE_ADDED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        enumName: string;
        enumValueName: string;
        addedDirectiveName: string;
        addedToNewType: boolean;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageEnumValueRemovedFromMeta(args: DirectiveUsageEnumValueRemovedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was removed from enum value '${string}.${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_ENUM_VALUE_REMOVED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        enumName: string;
        enumValueName: string;
        removedDirectiveName: string;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageSchemaAddedFromMeta(args: DirectiveUsageSchemaAddedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was added to schema`;
    };
    readonly type: "DIRECTIVE_USAGE_SCHEMA_ADDED";
    readonly message: string;
    readonly path: `.@${string}`;
    readonly meta: {
        addedDirectiveName: string;
        addedToNewType: boolean;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageSchemaRemovedFromMeta(args: DirectiveUsageSchemaRemovedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was removed from schema`;
    };
    readonly type: "DIRECTIVE_USAGE_SCHEMA_REMOVED";
    readonly message: string;
    readonly path: `.@${string}`;
    readonly meta: {
        removedDirectiveName: string;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageScalarAddedFromMeta(args: DirectiveUsageScalarAddedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was added to scalar '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_SCALAR_ADDED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        scalarName: string;
        addedDirectiveName: string;
        addedToNewType: boolean;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageScalarRemovedFromMeta(args: DirectiveUsageScalarRemovedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was removed from scalar '${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_SCALAR_REMOVED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        scalarName: string;
        removedDirectiveName: string;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageUnionMemberAddedFromMeta(args: DirectiveUsageUnionMemberAddedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was added to union member '${string}.${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_UNION_MEMBER_ADDED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        unionName: string;
        addedUnionMemberTypeName: string;
        addedDirectiveName: string;
        addedToNewType: boolean;
        directiveRepeatedTimes: number;
    };
};
export declare function directiveUsageUnionMemberRemovedFromMeta(args: DirectiveUsageUnionMemberRemovedChange): {
    readonly criticality: {
        readonly level: CriticalityLevel;
        readonly reason: `Directive '${string}' was removed from union member '${string}.${string}'`;
    };
    readonly type: "DIRECTIVE_USAGE_UNION_MEMBER_REMOVED";
    readonly message: string;
    readonly path: string;
    readonly meta: {
        unionName: string;
        removedUnionMemberTypeName: string;
        removedDirectiveName: string;
        directiveRepeatedTimes: number;
    };
};
export type DirectiveUsageAddedChange = typeof ChangeType.DirectiveUsageArgumentDefinitionAdded | typeof ChangeType.DirectiveUsageInputFieldDefinitionAdded | typeof ChangeType.DirectiveUsageInputObjectAdded | typeof ChangeType.DirectiveUsageInterfaceAdded | typeof ChangeType.DirectiveUsageObjectAdded | typeof ChangeType.DirectiveUsageEnumAdded | typeof ChangeType.DirectiveUsageFieldDefinitionAdded | typeof ChangeType.DirectiveUsageUnionMemberAdded | typeof ChangeType.DirectiveUsageEnumValueAdded | typeof ChangeType.DirectiveUsageSchemaAdded | typeof ChangeType.DirectiveUsageScalarAdded | typeof ChangeType.DirectiveUsageFieldAdded;
export type DirectiveUsageRemovedChange = typeof ChangeType.DirectiveUsageArgumentDefinitionRemoved | typeof ChangeType.DirectiveUsageInputFieldDefinitionRemoved | typeof ChangeType.DirectiveUsageInputObjectRemoved | typeof ChangeType.DirectiveUsageInterfaceRemoved | typeof ChangeType.DirectiveUsageObjectRemoved | typeof ChangeType.DirectiveUsageEnumRemoved | typeof ChangeType.DirectiveUsageFieldDefinitionRemoved | typeof ChangeType.DirectiveUsageUnionMemberRemoved | typeof ChangeType.DirectiveUsageEnumValueRemoved | typeof ChangeType.DirectiveUsageSchemaRemoved | typeof ChangeType.DirectiveUsageScalarRemoved | typeof ChangeType.DirectiveUsageFieldRemoved;
export declare function directiveUsageAdded<K extends keyof KindToPayload>(kind: K, directive: ConstDirectiveNode, payload: KindToPayload[K]['input'], addedToNewType: boolean): Change<DirectiveUsageAddedChange>;
export declare function directiveUsageRemoved<K extends keyof KindToPayload>(kind: K, directive: ConstDirectiveNode, payload: KindToPayload[K]['input']): Change;
export declare function directiveUsageArgumentAddedFromMeta(args: DirectiveUsageArgumentAddedChange): Change;
export declare function directiveUsageArgumentRemovedFromMeta(args: DirectiveUsageArgumentRemovedChange): Change;
export declare function directiveUsageChanged(oldDirective: ConstDirectiveNode | null, newDirective: ConstDirectiveNode, addChange: AddChange, parentType?: GraphQLNamedType, parentField?: GraphQLField<any, any> | GraphQLInputField, parentArgument?: GraphQLArgument, parentEnumValue?: GraphQLEnumValue): void;
export {};
