declare const TypeSymbol: unique symbol; interface SchemaType { type: string; [TypeSymbol]: T; } declare type TypeOf = T extends SchemaType ? U : never; declare type ValidationIssue = { type: 'INVALID_SCHEMA' | 'INVALID_TYPE' | 'INVALID_VALUE'; message: string; path: string; } | { type: 'NO_UNION_TYPE_MATCH'; message: string; path: string; candidateIssues: ValidationIssue[][]; }; declare const validate: (schema: SchemaType, value: unknown) => ValidationIssue[]; declare const assert: >(schema: T, value: unknown) => asserts value is TypeOf; declare const code: (schema: SchemaType) => string; declare const is: >(schema: T, value: unknown) => value is TypeOf; interface ModifiedType> extends SchemaType { type: 'modified'; item: T; optional?: true; readonly?: true; } interface ReadonlyOptionalType extends ModifiedType { optional: true; readonly: true; } interface ReadonlyType extends ModifiedType { readonly: true; } declare type ReadonlyWrapped = T extends ReadonlyType ? T : T extends OptionalType ? ReadonlyOptionalType : ReadonlyType; declare const readonly: >(item: T) => ReadonlyWrapped; interface OptionalType extends ModifiedType | undefined> { optional: true; } declare type OptionalWrapped = T extends OptionalType ? T : T extends ReadonlyType ? ReadonlyOptionalType : OptionalType; declare const optional: >(item: T) => OptionalWrapped; interface AnyType extends SchemaType { type: 'any'; } declare const any: () => AnyType; interface ArrayType extends SchemaType[]> { type: 'array'; items: T; } declare const array: >(items: T) => ArrayType; interface BigintType extends SchemaType { type: 'bigint'; } declare const bigint: () => BigintType; interface BooleanType extends SchemaType { type: 'boolean'; } declare const boolean: () => BooleanType; declare type Tail = ((...t: T) => void) extends (h: any, ...r: infer R) => void ? R : never; declare type Last = T[Exclude>]; declare type Prepend = ((_: Addend, ..._1: Tuple) => any) extends (..._: infer Result) => any ? Result : never; declare type Reverse = { 0: Prefix; 1: ((..._: Tuple) => any) extends (_: infer First, ..._1: infer Next) => any ? Reverse> : never; }[Tuple extends [any, ...any[]] ? 1 : 0]; declare type TypeOfTuple = { [K in keyof T]: TypeOf; }; interface FunctionType extends SchemaType<(...args: Reverse>>>) => TypeOf>> { type: 'function'; args: Args; } declare const functionType: []>(...args: Args) => FunctionType; interface IntersectionType extends SchemaType & TypeOf> { type: 'intersection'; left: Left; right: Right; } declare const intersection: , Right extends SchemaType>(left: Left, right: Right) => IntersectionType; declare type PrimitiveType = bigint | boolean | null | number | string | undefined; declare type InferredLiteralType = U | { [name: string]: InferredLiteralType; } | [] | [InferredLiteralType] | [InferredLiteralType, ...InferredLiteralType[]]; interface LiteralType extends SchemaType { type: 'literal'; value: T; } declare const literal: >(value: T) => LiteralType; interface LiteralUnionType extends SchemaType { type: 'literalUnion'; values: T; } declare const literalUnion: []>(...values: T) => LiteralUnionType; interface NullType extends SchemaType { type: 'null'; } declare const nullType: () => NullType; interface NumberOptions { multipleOf?: number; maximum?: number; exclusiveMaximum?: number; minimum?: number; exclusiveMinimum?: number; } interface NumberType extends SchemaType { type: 'number'; options: NumberOptions; } declare const number: (options?: NumberOptions) => NumberType; declare type Identity = T; declare type Flatten = Identity<{ [k in keyof T]: T[k]; }>; declare type ObjectProperties = { [key: string]: SchemaType; }; declare type ReadonlyProps = { [K in keyof T]: T[K] extends ReadonlyType | ReadonlyOptionalType ? K : never; }[keyof T]; declare type TypeFromObjectProperties = Flatten<{ [K in keyof T]+?: TypeOf; } & { +readonly [K in ReadonlyProps]?: TypeOf; } & { [K in RequiredProps]: TypeOf; }>; declare type OptionalProps = { [K in keyof T]: T[K] extends OptionalType | ReadonlyOptionalType ? K : never; }[keyof T]; declare type RequiredProps = Exclude>; interface ObjectType extends SchemaType> { type: 'object'; properties: T; strict: boolean; } declare const object: (properties: T, strict?: boolean) => ObjectType; interface RecordType extends SchemaType>> { type: 'record'; additionalProperties: T; } declare const record: >(type: T) => RecordType; interface StringOptions { maxLength?: number; minLength?: number; pattern?: string; } interface StringType extends SchemaType { type: 'string'; options: StringOptions; } declare const string: (options?: StringOptions) => StringType; declare type TypeOfTuple$1 = { [K in keyof T]: TypeOf; }; interface TupleType extends SchemaType> { type: 'tuple'; items: T; } declare const tuple: []>(...items: T) => TupleType; interface UndefinedType extends SchemaType { type: 'undefined'; } declare const undefined$1: () => UndefinedType; declare type TypeOfUnion = { [K in keyof T]: TypeOf; }[number]; interface UnionType extends SchemaType> { type: 'union'; oneOf: T; } declare const union: []>(...items: T) => UnionType; interface UnknownType extends SchemaType { type: 'unknown'; } declare const unknown: () => UnknownType; interface VoidType extends SchemaType { type: 'void'; } declare const voidType: () => VoidType; export { AnyType, ArrayType, BigintType, BooleanType, FunctionType, IntersectionType, LiteralType, LiteralUnionType, ModifiedType, NullType, NumberType, ObjectProperties, ObjectType, OptionalType, ReadonlyOptionalType, ReadonlyType, RecordType, SchemaType, StringType, TupleType, TypeOf, UndefinedType, UnionType, UnknownType, ValidationIssue, VoidType, any, array, assert, bigint, boolean, code, functionType as function, intersection, is, literal, literalUnion, nullType as null, number, object, optional, readonly, record, string, tuple, undefined$1 as undefined, union, unknown, validate, voidType as void };