/** * **This module is experimental** * * Experimental features are published in order to get early feedback from the community, see these tracking * [issues](https://github.com/gcanti/io-ts/issues?q=label%3Av2.2+) for further discussions and enhancements. * * A feature tagged as _Experimental_ is in a high state of flux, you're at risk of it changing without notice. * * @since 2.2.3 */ import { Invariant2 } from 'fp-ts/es6/Invariant'; import * as D from './Decoder'; import * as E from './Encoder'; import { Literal } from './Schemable'; /** * Laws: * * 1. `pipe(codec.decode(u), E.fold(() => u, codec.encode)) = u` for all `u` in `unknown` * 2. `codec.decode(codec.encode(a)) = E.right(a)` for all `a` in `A` * * @category model * @since 2.2.3 */ export interface Codec extends D.Decoder, E.Encoder { } /** * @since 2.2.3 */ export declare type TypeOf = E.TypeOf; /** * @since 2.2.3 */ export declare type OutputOf = E.OutputOf; /** * @category constructors * @since 2.2.3 */ export declare function make(decoder: D.Decoder, encoder: E.Encoder): Codec; /** * @category constructors * @since 2.2.3 */ export declare function fromDecoder(decoder: D.Decoder): Codec; /** * @category constructors * @since 2.2.3 */ export declare function literal]>(...values: A): Codec; /** * @category primitives * @since 2.2.3 */ export declare const string: Codec; /** * @category primitives * @since 2.2.3 */ export declare const number: Codec; /** * @category primitives * @since 2.2.3 */ export declare const boolean: Codec; /** * @category primitives * @since 2.2.3 */ export declare const UnknownArray: Codec, Array>; /** * @category primitives * @since 2.2.3 */ export declare const UnknownRecord: Codec, Record>; /** * @category combinators * @since 2.2.3 */ export declare const mapLeftWithInput: (f: (actual: unknown, e: D.DecodeError) => D.DecodeError) => (codec: Codec) => Codec; /** * @category combinators * @since 2.2.3 */ export declare const refine: (refinement: (a: A) => a is B, id: string) => (from: Codec) => Codec; /** * @category combinators * @since 2.2.3 */ export declare function nullable(or: Codec): Codec; /** * @category combinators * @since 2.2.3 */ export declare function type

>>(properties: P): Codec<{ [K in keyof P]: OutputOf; }, { [K in keyof P]: TypeOf; }>; /** * @category combinators * @since 2.2.3 */ export declare function partial

>>(properties: P): Codec; }>, Partial<{ [K in keyof P]: TypeOf; }>>; /** * @category combinators * @since 2.2.3 */ export declare function record(codomain: Codec): Codec, Record>; /** * @category combinators * @since 2.2.3 */ export declare function array(items: Codec): Codec, Array>; /** * @category combinators * @since 2.2.3 */ export declare function tuple>>(...components: C): Codec<{ [K in keyof C]: OutputOf; }, { [K in keyof C]: TypeOf; }>; /** * @category combinators * @since 2.2.3 */ export declare const intersect: (right: Codec) => (left: Codec) => Codec; /** * @category combinators * @since 2.2.3 */ export declare function sum(tag: T): >>(members: M) => Codec, TypeOf>; /** * @category combinators * @since 2.2.3 */ export declare function lazy(id: string, f: () => Codec): Codec; /** * @category Invariant * @since 2.2.3 */ export declare const imap: (f: (a: A) => B, g: (b: B) => A) => (fa: Codec) => Codec; /** * @category instances * @since 2.2.3 */ export declare const URI = "io-ts/Codec"; /** * @category instances * @since 2.2.3 */ export declare type URI = typeof URI; declare module 'fp-ts/es6/HKT' { interface URItoKind2 { readonly [URI]: Codec; } } /** * @category instances * @since 2.2.3 */ export declare const invariantCodec: Invariant2;