import { Maker } from './make';
import * as runtime from './runtime';
export type Type = BinaryType | UnknownType | VoidType | BooleanType | IntegerType | NumberType | NullType | UnionType | IntersectionType | StringType | ArrayType | ObjectType | NamedType;
export type NamedTypeDefinitionDeferred = () => NamedTypeDefinition;
export interface NamedTypeDefinition {
readonly name: string;
readonly definition: Type;
readonly maker: Maker;
readonly isA: null | ((value: any) => value is A);
}
export interface BinaryType {
readonly type: 'binary';
}
export interface UnknownType {
readonly type: 'unknown';
}
export interface VoidType {
readonly type: 'void';
}
export interface NullType {
readonly type: 'null';
}
export interface UnionType {
readonly type: 'union';
readonly options: Type[];
}
export interface IntersectionType {
readonly type: 'intersection';
readonly options: Type[];
}
export interface StringType {
readonly type: 'string';
readonly format?: string;
readonly pattern?: string;
readonly minLength?: number;
readonly maxLength?: number;
readonly enum?: string[];
}
export interface BooleanType {
readonly type: 'boolean';
readonly enum?: boolean[];
}
export interface NumberType {
readonly type: 'number';
readonly enum?: number[];
readonly minimum?: number;
readonly maximum?: number;
}
export interface IntegerType {
readonly type: 'integer';
readonly enum?: number[];
readonly minimum?: number;
readonly maximum?: number;
}
export interface ArrayType {
readonly type: 'array';
readonly items: Type;
readonly minItems?: number;
readonly maxItems?: number;
}
export interface NamedType {
readonly type: 'named';
readonly reference: NamedTypeDefinitionDeferred;
}
export interface PropType {
required: boolean;
value: Type;
networkName?: string;
}
export interface Props {
[name: string]: PropType;
}
export type AdditionalProp = boolean | Type;
export interface ObjectType {
readonly type: 'object';
readonly additionalProperties: AdditionalProp;
readonly properties: Props;
}
export declare class Traversal {
private readonly root;
private readonly leaf;
static compile(root: NamedTypeDefinition, leaf: NamedTypeDefinition): runtime.reflection.Traversal;
private cache;
private cachedAncestors;
private constructor();
private dedupePaths;
map(value: Root, fn: (leaf: Leaf) => Leaf): Root;
pmap(value: Root, fn: (leaf: Leaf) => Promise): Promise;
private paths;
private matcher;
private validateRoot;
private addAncestor;
private ancestorNamedObjects;
}