import { PrimitiveTypeAssertionConstraints, RepeatedAssertionConstraints, ErrorMessages, TypeAssertion } from './types/tynder-schema-types';
export * from './types/tynder-schema-types';
export declare type RecursivePartial<T> = {
    [P in keyof T]?: T[P] extends (infer U)[] ? RecursivePartial<U>[] : T[P] extends object ? RecursivePartial<T[P]> : T[P];
};
export declare type TypeAssertionErrorMessageConstraints = Partial<Omit<PrimitiveTypeAssertionConstraints & RepeatedAssertionConstraints, 'pattern'> & {
    pattern: string;
}>;
export interface TypeAssertionErrorMessage {
    code: string;
    message: string;
    dataPath: string;
    constraints: TypeAssertionErrorMessageConstraints;
    value?: any;
}
export interface Stereotype {
    tryParse: (value: any) => {
        value: any;
    } | null;
    evaluateFormula: (valueOrFormula: any) => any;
    compare: (a: any, b: any) => number;
    doCast: boolean;
}
export declare type CustomConstraint = (data: any, args: any) => boolean;
export interface CustomConstraintInfo {
    kinds?: Array<TypeAssertion['kind']>;
    check: CustomConstraint;
}
export interface ValidationContext {
    checkAll?: boolean;
    noAdditionalProps?: boolean;
    errorMessages?: ErrorMessages;
    mapper?: (value: any, ty: TypeAssertion) => any;
    errors: TypeAssertionErrorMessage[];
    typeStack: Array<// For error reporting (keyword substitutions)
    // For error reporting (keyword substitutions)
    TypeAssertion | [
        TypeAssertion,
        number | string | undefined
    ]>;
    recordTypeFieldValidated?: boolean;
    schema?: TypeAssertionMap;
    stereotypes?: Map<string, Stereotype>;
    customConstraints?: Map<string, CustomConstraintInfo>;
}
export interface TypeAssertionSetValue {
    ty: TypeAssertion;
    exported: boolean;
    isDeclare: boolean;
    resolved: boolean;
}
export declare type TypeAssertionMap = Map<string, TypeAssertionSetValue>;
export interface SymbolResolverOperators {
    [propName: string]: (...args: Array<TypeAssertion | string>) => TypeAssertion;
}
export interface ResolveSymbolOptions {
    isDeserialization?: boolean;
}
export interface SymbolResolverContext extends ResolveSymbolOptions {
    nestLevel: number;
    symlinkStack: string[];
    operators?: SymbolResolverOperators;
}
export interface CodegenContext {
    nestLevel: number;
    schema?: TypeAssertionMap;
}
