export declare type Decoder = (input: unknown) => T; /** * Try all the given decoders and return the result of the first one not raising an error. * If none succeed, throws a {@link OneOfDecoderError} * * For example, this is how nullable is defined: * ```ts * const nullable = (decoder: Decoder) => decod.oneOf(decoder, decod.null_); * ``` * * @category Decoder combinators */ export declare function oneOf(d1: Decoder): Decoder; export declare function oneOf(d1: Decoder, d2: Decoder): Decoder; export declare function oneOf(d1: Decoder, d2: Decoder, d3: Decoder): Decoder; export declare function oneOf(d1: Decoder, d2: Decoder, d3: Decoder, d4: Decoder): Decoder; export declare function oneOf(d1: Decoder, d2: Decoder, d3: Decoder, d4: Decoder, d5: Decoder): Decoder; export declare function oneOf(d1: Decoder, d2: Decoder, d3: Decoder, d4: Decoder, d5: Decoder, d6: Decoder): Decoder; export declare function oneOf(d1: Decoder, d2: Decoder, d3: Decoder, d4: Decoder, d5: Decoder, d6: Decoder, d7: Decoder): Decoder; export declare function oneOf(d1: Decoder, d2: Decoder, d3: Decoder, d4: Decoder, d5: Decoder, d6: Decoder, d7: Decoder, d8: Decoder): Decoder; export declare function oneOf(d1: Decoder, d2: Decoder, d3: Decoder, d4: Decoder, d5: Decoder, d6: Decoder, d7: Decoder, d8: Decoder, d9: Decoder): Decoder; /** * Decode an `unknown` value as a `string`. * Otherwise, throws a {@link ScalarDecoderError}. * * @category Primitive decoders */ export declare const string: Decoder; /** * Decode an `unknown` value if it matches the expected value. * Otherwise, throws a {@link ScalarDecoderError}. * * It is mostly intended to be used in conjunction with {@link oneOf} for decoding groups of specific values. * * ```ts * const droidDecoder = decod.oneOf( * decod.is('r2d2'), * decod.is('c3po') * ); * ``` * * @category Primitive decoders */ export declare const is: (expectedValue: T) => Decoder; /** * Decode an `unknown` value as a `number`. * Otherwise, throws a {@link ScalarDecoderError}. * * @category Primitive decoders */ export declare const number: Decoder; /** * Decode an `unknown` value as a `null` value. * Otherwise, throws a {@link ScalarDecoderError}. * * @category Primitive decoders */ export declare const null_: Decoder; /** * Decode an `unknown` value as `undefined`. * Otherwise, throws a {@link ScalarDecoderError}. * * @category Primitive decoders */ export declare const undefined_: Decoder; /** * Transform a `Decoder` into a `Decoder`. * * @category Decoder combinators */ export declare const optional: (decoder: Decoder) => Decoder; /** * Transform a `Decoder` into a `Decoder`. * * @category Decoder combinators */ export declare const nullable: (decoder: Decoder) => Decoder; /** * Decode an `unknown` value as a `boolean`. * Otherwise, throws a {@link ScalarDecoderError}. * * @category Primitive decoders */ export declare const boolean: Decoder; /** * Decode an `unknown` value as a `Date`. * Otherwise, throws a {@link ScalarDecoderError}. * * @category Primitive decoders */ export declare const date: Decoder; /** * Apply the provided decoder at the specified path in a complex object. * Path can be either: * - a `string` (when querying a top level field) * - a `number` (when querying an array index) * - an `Array` (to query an arbitrarily nested field) * * @category Decoder combinators */ export declare const at: (path: string | number | (string | number)[], decoder: Decoder) => Decoder; /** * Transform a `Decoder` into a `Decoder>`. * * @category Decoder combinators */ export declare const array: (decoder: Decoder) => Decoder; /** * Try a decoder, and fallback to a specified value (if provided) if the decoder fails. * If no default value is specified, fallback to `undefined`. * * @category Decoder combinators */ export declare function try_(decoder: Decoder): Decoder; export declare function try_(decoder: Decoder, defaultValue: T): Decoder; /** * Synonym for {@link try_} * * @category Decoder combinators */ export declare const attempt: typeof try_; /** * Create a decoder for arbitrary key/value pairs from a key decoder and a value decoder. * Effectively transforms a `Decoder` and a `Decoder` into a `Decoder>`. * * @category Decoder combinators */ export declare const assoc: (keyDecoder: Decoder, valueDecoder: Decoder) => (input: T) => { key: K; value: V; }[]; /** * Create a decoder for some complex structure from an object where each value is a `Decoder` and the keys * correspond to the desired output structure. * * ```ts * const personDecoder = decod.props({ * first_name: decod.at('first_name', decod.string), * last_name: decod.at('last_name', decod.string), * age: decod.at('age', decod.number), * }); * ``` * * @category Decoder combinators */ export declare const props: ; }>(obj: T) => (input: unknown) => { [P in keyof T]: ReturnType; }; //# sourceMappingURL=decoders.d.ts.map