UNPKG

3.56 kBTypeScriptView Raw
1/**
2 * @since 2.2.3
3 */
4import { Invariant2 } from 'fp-ts/es6/Invariant';
5import * as D from './Decoder';
6import * as E from './Encoder';
7import { Literal } from './Schemable';
8/**
9 * Laws:
10 *
11 * 1. `pipe(codec.decode(u), E.fold(() => u, codec.encode)) = u` for all `u` in `unknown`
12 * 2. `codec.decode(codec.encode(a)) = E.right(a)` for all `a` in `A`
13 *
14 * @since 2.2.3
15 */
16export interface Codec<O, A> extends D.Decoder<A>, E.Encoder<O, A> {
17}
18/**
19 * @since 2.2.3
20 */
21export declare type TypeOf<C> = E.TypeOf<C>;
22/**
23 * @since 2.2.3
24 */
25export declare type OutputOf<C> = E.OutputOf<C>;
26/**
27 * @since 2.2.3
28 */
29export declare function make<O, A>(decoder: D.Decoder<A>, encoder: E.Encoder<O, A>): Codec<O, A>;
30/**
31 * @since 2.2.3
32 */
33export declare function fromDecoder<A>(decoder: D.Decoder<A>): Codec<A, A>;
34/**
35 * @since 2.2.3
36 */
37export declare function literal<A extends ReadonlyArray<Literal>>(...values: A): Codec<A[number], A[number]>;
38/**
39 * @since 2.2.3
40 */
41export declare const string: Codec<string, string>;
42/**
43 * @since 2.2.3
44 */
45export declare const number: Codec<number, number>;
46/**
47 * @since 2.2.3
48 */
49export declare const boolean: Codec<boolean, boolean>;
50/**
51 * @since 2.2.3
52 */
53export declare const UnknownArray: Codec<Array<unknown>, Array<unknown>>;
54/**
55 * @since 2.2.3
56 */
57export declare const UnknownRecord: Codec<Record<string, unknown>, Record<string, unknown>>;
58/**
59 * @since 2.2.3
60 */
61export declare function withExpected<O, A>(codec: Codec<O, A>, expected: (actual: unknown, e: D.DecodeError) => D.DecodeError): Codec<O, A>;
62/**
63 * @since 2.2.3
64 */
65export declare function refinement<O, A, B extends A>(from: Codec<O, A>, refinement: (a: A) => a is B, expected: string): Codec<O, B>;
66/**
67 * @since 2.2.3
68 */
69export declare function nullable<O, A>(or: Codec<O, A>): Codec<null | O, null | A>;
70/**
71 * @since 2.2.3
72 */
73export declare function type<P extends Record<string, Codec<any, any>>>(properties: P): Codec<{
74 [K in keyof P]: OutputOf<P[K]>;
75}, {
76 [K in keyof P]: TypeOf<P[K]>;
77}>;
78/**
79 * @since 2.2.3
80 */
81export declare function partial<P extends Record<string, Codec<any, any>>>(properties: P): Codec<Partial<{
82 [K in keyof P]: OutputOf<P[K]>;
83}>, Partial<{
84 [K in keyof P]: TypeOf<P[K]>;
85}>>;
86/**
87 * @since 2.2.3
88 */
89export declare function record<O, A>(codomain: Codec<O, A>): Codec<Record<string, O>, Record<string, A>>;
90/**
91 * @since 2.2.3
92 */
93export declare function array<O, A>(items: Codec<O, A>): Codec<Array<O>, Array<A>>;
94/**
95 * @since 2.2.3
96 */
97export declare function tuple<C extends ReadonlyArray<Codec<any, any>>>(...components: C): Codec<{
98 [K in keyof C]: OutputOf<C[K]>;
99}, {
100 [K in keyof C]: TypeOf<C[K]>;
101}>;
102/**
103 * @since 2.2.3
104 */
105export declare function intersection<O, A, P, B>(left: Codec<O, A>, right: Codec<P, B>): Codec<O & P, A & B>;
106/**
107 * @since 2.2.3
108 */
109export declare function sum<T extends string>(tag: T): <M extends Record<string, Codec<any, any>>>(members: M) => Codec<OutputOf<M[keyof M]>, TypeOf<M[keyof M]>>;
110/**
111 * @since 2.2.3
112 */
113export declare function lazy<O, A>(id: string, f: () => Codec<O, A>): Codec<O, A>;
114/**
115 * @since 2.2.3
116 */
117export declare const imap: <E, A, B>(f: (a: A) => B, g: (b: B) => A) => (fa: Codec<E, A>) => Codec<E, B>;
118/**
119 * @since 2.2.3
120 */
121export declare const URI = "io-ts/Codec";
122/**
123 * @since 2.2.3
124 */
125export declare type URI = typeof URI;
126declare module 'fp-ts/es6/HKT' {
127 interface URItoKind2<E, A> {
128 readonly [URI]: Codec<E, A>;
129 }
130}
131/**
132 * @since 2.2.3
133 */
134export declare const invariantCodec: Invariant2<URI>;