import { TypeValueThunk, TypeOptions, ClassTypeResolver, SubscriptionFilterFunc } from "../../decorators/types";
import { ParamMetadata } from "./param-metadata";
import { Middleware } from "../../interfaces/Middleware";
export interface BaseResolverMetadata {
    methodName: string;
    schemaName: string;
    target: Function;
    handler: Function | undefined;
    resolverClassMetadata?: ResolverClassMetadata;
    params?: ParamMetadata[];
    roles?: any[];
    middlewares?: Array<Middleware<any>>;
}
export interface ResolverMetadata extends BaseResolverMetadata {
    getReturnType: TypeValueThunk;
    handler: Function;
    returnTypeOptions: TypeOptions;
    description?: string;
    deprecationReason?: string;
}
export interface FieldResolverMetadata extends BaseResolverMetadata {
    kind: "internal" | "external";
    description?: string;
    deprecationReason?: string;
    getType?: TypeValueThunk;
    typeOptions?: TypeOptions;
    getObjectType?: ClassTypeResolver;
}
export interface SubscriptionResolverMetadata extends ResolverMetadata {
    topics: string[];
    filter: SubscriptionFilterFunc | undefined;
}
export interface ResolverClassMetadata {
    target: Function;
    getObjectType: ClassTypeResolver;
    isAbstract?: boolean;
    superResolver?: ResolverClassMetadata;
}
