import { CommonPattern } from "./common";
export declare type StringPattern = {
    readonly type: 'string';
    readonly regexp?: RegExp;
    readonly minimumLength?: number;
    readonly maximumLength?: number;
    readonly enum?: string[];
} & CommonPattern;
export declare type NumberPattern = {
    readonly type: 'number';
    readonly allowNaN?: boolean;
    readonly allowInfinity?: boolean;
    readonly integer?: boolean;
    readonly float?: boolean;
    readonly fraction?: boolean;
    readonly minimum?: number;
    readonly maximum?: number;
    readonly enum?: number[];
} & CommonPattern;
export declare type BigIntPattern = {
    readonly type: 'bigint';
    readonly minimum?: bigint;
    readonly maximum?: bigint;
    readonly enum?: bigint[];
} & CommonPattern;
export declare type BooleanPattern = {
    readonly type: 'boolean';
    readonly ensureTrue?: boolean;
    readonly ensureFalse?: boolean;
} & CommonPattern;
export declare type DatePattern = {
    readonly type: 'date';
    readonly allowString?: boolean;
    readonly before?: Date;
    readonly after?: Date;
} & CommonPattern;
export declare type FunctionPattern = {
    readonly type: 'function';
} & CommonPattern;
export declare type MapPattern = {
    readonly type: 'map';
    readonly map: Record<string, Pattern>;
    readonly strict?: boolean;
} & CommonPattern;
export declare type RecordPattern = {
    readonly type: 'record';
    readonly key: Pattern;
    readonly value: Pattern;
} & CommonPattern;
export declare type ListPattern = {
    readonly type: 'list';
    readonly element: Pattern;
    readonly minimumSize?: number;
    readonly maximumSize?: number;
} & CommonPattern;
export declare type TuplePattern = {
    readonly type: 'tuple';
    readonly list: Pattern[];
} & CommonPattern;
export declare type CustomPattern = {
    readonly type: 'custom';
    readonly validate: (value: any) => boolean;
} & CommonPattern;
export declare type OrPattern = {
    readonly type: 'or';
    readonly options: Pattern[];
} & CommonPattern;
export declare type AndPattern = {
    readonly type: 'and';
    readonly requirements: Pattern[];
} & CommonPattern;
export declare type ExactPattern = {
    readonly type: 'exact';
    readonly value: any;
} & CommonPattern;
export declare type EmptyPattern = {
    readonly type: 'empty';
    readonly allowUndefined?: boolean;
    readonly allowNull?: boolean;
} & CommonPattern;
export declare type AnyPattern = {
    readonly type: 'any';
    readonly banishUndefined?: boolean;
    readonly banishNull?: boolean;
} & CommonPattern;
export declare type Pattern = StringPattern | NumberPattern | BigIntPattern | BooleanPattern | DatePattern | FunctionPattern | MapPattern | RecordPattern | ListPattern | TuplePattern | CustomPattern | OrPattern | AndPattern | ExactPattern | EmptyPattern | AnyPattern;
