export declare type DecodeError = { type: 'RUNTIME_EXCEPTION'; error: Error; } | { type: 'ONE_OF'; errors: Array; } | { type: 'OPTIONAL'; error: DecodeError; } | { type: 'IN_FIELD'; name: string; error: DecodeError; } | { type: 'AT_INDEX'; position: number; error: DecodeError; } | { type: 'REQUIRED_FIELD'; name: string; source: Record; } | { type: 'REQUIRED_INDEX'; position: number; source: Array; } | { type: 'FAILURE'; message: string; source: unknown; } | { type: 'EXPECT_STRING'; source: unknown; } | { type: 'EXPECT_BOOLEAN'; source: unknown; } | { type: 'EXPECT_INT'; source: unknown; } | { type: 'EXPECT_FLOAT'; source: unknown; } | { type: 'EXPECT_OBJECT'; source: unknown; } | { type: 'EXPECT_ARRAY'; source: unknown; } | { type: 'EXPECT_EXACT'; value: string | number | boolean | null; source: unknown; }; export declare type DecodeJsonError = DecodeError | { type: 'INVALID_JSON'; error: SyntaxError; source: string; }; export declare type DecodeResult = { error: E; value?: never; } | { error?: never; value: T; }; export interface Decoder { map(fn: (value: T) => R): Decoder; chain(fn: (value: T) => Decoder): Decoder; decode(input: unknown): DecodeResult; decodeJSON(json: string): DecodeResult; } export interface DecodeOptional { string: Decoder; boolean: Decoder; int: Decoder; float: Decoder; list: MakeList; record: MakeRecord; keyValue: MakeKeyValue; field: MakeField; index: MakeIndex; } interface DecodePath { optional: DecodeOptional; unknown: Decoder; string: Decoder; boolean: Decoder; int: Decoder; float: Decoder; list: MakeList; record: MakeRecord; keyValue: MakeKeyValue; tuple: MakeTuple; shape: MakeShape; exact: MakeExact; oneOf: MakeOneOf; lazy: MakeLazy; field: MakeField; index: MakeIndex; of(decoder: Decoder): Decoder; } export declare type RequiredDecodePath = DecodePath; export declare type OptionalDecodePath = DecodePath; declare function fail(message: string): Decoder; declare function succeed(value: T): Decoder; interface MakeExact { (value: T): Decoder; (expect: string | number | boolean | null, value: T): Decoder; } declare type MakeRecord = (itemDecoder: Decoder) => Decoder : null | Record>; declare type MakeShape = >(schema: { [K in keyof T]: Decoder; }) => Decoder; declare type TupleSchema> = T extends [ infer A, ...infer R ] ? [Decoder, ...TupleSchema] : []; interface MakeTuple { (schema: [Decoder, Decoder]): Decoder; (_1: Decoder, _2: Decoder): Decoder; (schema: [Decoder, Decoder, Decoder]): Decoder; (_1: Decoder, _2: Decoder, _3: Decoder): Decoder; (schema: [Decoder, Decoder, Decoder, Decoder]): Decoder; (_1: Decoder, _2: Decoder, _3: Decoder, _4: Decoder): Decoder; (schema: [Decoder, Decoder, Decoder, Decoder, Decoder]): Decoder; (_1: Decoder, _2: Decoder, _3: Decoder, _4: Decoder, _5: Decoder): Decoder; (schema: [ Decoder, Decoder, Decoder, Decoder, Decoder, Decoder ]): Decoder; (_1: Decoder, _2: Decoder, _3: Decoder, _4: Decoder, _5: Decoder, _6: Decoder): Decoder; >(schema: TupleSchema): Decoder; >(...schema: TupleSchema): Decoder; } declare type MakeList = (itemDecoder: Decoder) => Decoder : null | Array>; interface MakeKeyValue { (itemDecoder: Decoder): Decoder : null | Array<[string, T]>>; (convertKey: (key: string) => DecodeResult, itemDecoder: Decoder): Decoder : null | Array<[K, T]>>; } interface MakeOneOf { (options: Array>): Decoder; (first: Decoder, second: Decoder, ...options: Array>): Decoder; } declare type MakeLazy = (lazyDecoder: () => Decoder) => Decoder; declare type MakeField = (fieldName: string) => X extends true ? RequiredDecodePath : OptionalDecodePath; declare type MakeIndex = (elementPosition: number) => X extends true ? RequiredDecodePath : OptionalDecodePath; declare const Decode: { optional: DecodeOptional; field: MakeField; index: MakeIndex; unknown: Decoder; string: Decoder; boolean: Decoder; int: Decoder; float: Decoder; exact: MakeExact; record: MakeRecord; list: MakeList; keyValue: MakeKeyValue; shape: MakeShape; tuple: MakeTuple; oneOf: MakeOneOf; lazy: MakeLazy; fail: typeof fail; succeed: typeof succeed; }; export default Decode;