import { Source } from 'graphql';
import { Entity, ShadowEntity, ViewEntity } from '../..';
import { Context } from '../context/Context';
import { ComplexDataType } from './ComplexDataType';
export declare type DataTypeValidateType = (params: {
    value?: unknown;
    source?: Source;
    context?: Context;
}) => void | Promise<void>;
export declare type DataTypeSetup = {
    name?: string;
    description?: string;
    mock?: () => any;
    validate?: DataTypeValidateType;
    enforceRequired?: boolean;
    defaultValue?: () => any;
    enforceIndex?: boolean;
};
export declare type DataTypeFunction = (params: {
    setup: DataTypeSetup;
    entity?: Entity | ShadowEntity | ViewEntity;
}) => DataType | ComplexDataType;
export declare class DataType {
    name: string;
    description: string;
    mock?: () => any;
    validate?: DataTypeValidateType;
    enforceRequired?: boolean;
    defaultValue?: () => any;
    enforceIndex?: boolean;
    constructor(setup?: DataTypeSetup);
    toString(): string;
}
export declare const isDataType: (obj: unknown) => obj is DataType;
