import { TypeAnnotation } from '@deepkit/core';
import { DatabaseField, MinLength, Pattern, Validate, ValidatorError } from '@deepkit/type';
export * from './phone';
export type ConcretePrimitive = string | number | boolean;
export type DefinedPrimitive = ConcretePrimitive | null;
export type Primitive = DefinedPrimitive | undefined;
export type StrictBool = true | false;
export type KVObject<T = any> = Record<string, T>;
export type NestedKVObject<T = any> = KVObject<T | T[] | KVObject<T>>;
export type Serializable<T = ConcretePrimitive> = T | T[] | NestedKVObject<T> | NestedKVObject<T>[];
export type RequireFields<T, K extends keyof T> = T & {
    [P in K]-?: T[P];
};
export type ObjectKeysMatching<O extends {}, V> = {
    [K in keyof O]: O[K] extends V ? K : V extends O[K] ? K : never;
}[keyof O];
export type ArrowFunction = (...args: any) => any;
export type ArrowFunctionNoArgs = () => any;
export type VoidFunction = () => void;
type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N;
type DefinitelyFunction<T> = IfAny<T, never, T extends (...args: any[]) => any ? T : never>;
export type MethodsOf<T> = {
    [K in keyof T as DefinitelyFunction<T[K]> extends never ? never : K]: T[K];
};
export type MethodKeys<T> = keyof MethodsOf<T>;
declare const _dateStringPattern: RegExp;
export type DateString = string & Pattern<typeof _dateStringPattern> & DatabaseField<{
    type: 'DATE';
}> & TypeAnnotation<'dksf:type', 'date'>;
export type OnUpdate<T extends string> = TypeAnnotation<'dksf:onUpdate', T>;
export type ValidDate = Date & Validate<typeof _validateDate>;
declare function _validateDate(value: unknown): ValidatorError | undefined;
export type TrimmedString = string & TypeAnnotation<'dksf:trim'>;
export type NonEmptyTrimmedString = TrimmedString & MinLength<1>;
export declare const EMAIL_REGEX: RegExp;
export type EmailAddress = string & Pattern<typeof EMAIL_REGEX>;
export declare type __ΩConcretePrimitive = any[];
export declare type __ΩDefinedPrimitive = any[];
export declare type __ΩPrimitive = any[];
export declare type __ΩStrictBool = any[];
export declare type __ΩKVObject = any[];
export declare type __ΩNestedKVObject = any[];
export declare type __ΩSerializable = any[];
export declare type __ΩRequireFields = any[];
export declare type __ΩObjectKeysMatching = any[];
export declare type __ΩArrowFunction = any[];
export declare type __ΩArrowFunctionNoArgs = any[];
export declare type __ΩVoidFunction = any[];
export declare type __ΩMethodsOf = any[];
export declare type __ΩMethodKeys = any[];
export declare type __ΩDateString = any[];
export declare type __ΩOnUpdate = any[];
export declare type __ΩValidDate = any[];
export declare type __ΩTrimmedString = any[];
export declare type __ΩNonEmptyTrimmedString = any[];
export declare type __ΩEmailAddress = any[];
//# sourceMappingURL=index.d.ts.map