export declare type FieldType = Function | 'string' | 'integer' | 'boolean' | 'float' | 'id';
export declare const inputMetadataKey: unique symbol;
export declare const subMetadataKey: unique symbol;
export declare const typeMetadataKey: unique symbol;
export declare class ModelArg {
    name: string;
    type: FieldType | FieldType[];
    nullable: boolean;
    array: boolean;
    resolveType: (value: any) => FieldType;
}
export declare class ModelConstructor {
    args: ModelArg[];
    name: string;
}
export declare class ModelField {
    name: string;
    type: FieldType | FieldType[];
    substructure: boolean;
    array: boolean;
    quota: number | ((args: any[], context: any) => number);
    resolveType: (value: any) => FieldType;
    args: ModelArg[];
}
export declare class ModelSub {
    name: string;
    type: FieldType | FieldType[];
    array: boolean;
    subscribe: Function;
    value: Function;
    resolveType: (value: any) => FieldType;
    quota: number | ((args: any[], context: any) => number);
    args: ModelArg[];
}
export declare class Model {
    id: string;
    target: any;
    quotaConstr: number | ((args: any[], context: any) => number);
    constr: ModelConstructor;
    fields: {
        [name: string]: ModelField;
    };
}
export declare class ModelInputField {
    name: string;
    type: FieldType | FieldType[];
    nullable: boolean;
    array: boolean;
    resolveType: (value: any) => FieldType;
}
export declare class ModelInput {
    id: string;
    fields: {
        [name: string]: ModelInputField;
    };
}
export declare class MutationOption {
    name: string;
}
export declare class SubscriptionOption {
    name?: string;
    array?: boolean;
    resolveType?: (value: any) => FieldType;
    scope?: string;
    quota?: number | ((args: any[], context: any) => number);
    args?: ModelArg[];
}
export declare class SubscriptionArgOption {
    nullable?: boolean;
    constr?: boolean;
    array?: boolean;
    resolveType?: (value: any) => FieldType;
}
export declare class StructureOption {
    quotaConstr?: number | ((args: any[], context: any) => number);
}
export declare class FieldOption {
    name?: string;
    quota?: number | ((args: any[], context: any) => number);
    substructure?: boolean;
    array?: boolean;
    resolveType?: (value: any) => FieldType;
}
export declare class ArgOption {
    nullable?: boolean;
    constr?: boolean;
    array?: boolean;
    resolveType?: (value: any) => FieldType;
}
export declare class InputFieldOption {
    name?: string;
    nullable?: boolean;
    array?: boolean;
    resolveType?: (value: any) => FieldType;
}
export declare class InputOption {
}
export declare class ConstructorOption {
    quota?: number | ((args: any[], context: any) => number);
}
