UNPKG

9.29 kBTypeScriptView Raw
1/**
2 * **This module is experimental**
3 *
4 * Experimental features are published in order to get early feedback from the community, see these tracking
5 * [issues](https://github.com/gcanti/io-ts/issues?q=label%3Av2.2+) for further discussions and enhancements.
6 *
7 * A feature tagged as _Experimental_ is in a high state of flux, you're at risk of it changing without notice.
8 *
9 * @since 2.2.7
10 */
11import { Alt2 } from 'fp-ts/lib/Alt'
12import { Category2 } from 'fp-ts/lib/Category'
13import { Refinement } from 'fp-ts/lib/function'
14import { Functor2 } from 'fp-ts/lib/Functor'
15import * as TE from 'fp-ts/lib/TaskEither'
16import * as DE from './DecodeError'
17import * as D from './Decoder'
18import * as FS from './FreeSemigroup'
19import * as G from './Guard'
20import * as K from './Kleisli'
21import * as S from './Schemable'
22/**
23 * @category model
24 * @since 2.2.8
25 */
26export interface TaskDecoder<I, A> extends K.Kleisli<TE.URI, I, DecodeError, A> {}
27/**
28 * @category DecodeError
29 * @since 2.2.7
30 */
31export declare type DecodeError = D.DecodeError
32/**
33 * @category DecodeError
34 * @since 2.2.7
35 */
36export declare const error: (actual: unknown, message: string) => DecodeError
37/**
38 * @category DecodeError
39 * @since 2.2.7
40 */
41export declare const success: <A>(a: A) => TE.TaskEither<DecodeError, A>
42/**
43 * @category DecodeError
44 * @since 2.2.7
45 */
46export declare const failure: <A = never>(
47 actual: unknown,
48 message: string
49) => TE.TaskEither<FS.FreeSemigroup<DE.DecodeError<string>>, A>
50/**
51 * @category constructors
52 * @since 2.2.7
53 */
54export declare const fromDecoder: <I, A>(decoder: D.Decoder<I, A>) => TaskDecoder<I, A>
55/**
56 * @category constructors
57 * @since 2.2.8
58 */
59export declare const fromRefinement: <I, A extends I>(
60 refinement: Refinement<I, A>,
61 expected: string
62) => TaskDecoder<I, A>
63/**
64 * @category constructors
65 * @since 2.2.7
66 */
67export declare const fromGuard: <I, A extends I>(guard: G.Guard<I, A>, expected: string) => TaskDecoder<I, A>
68/**
69 * @category constructors
70 * @since 2.2.7
71 */
72export declare const literal: <A extends readonly [S.Literal, ...Array<S.Literal>]>(
73 ...values: A
74) => TaskDecoder<unknown, A[number]>
75/**
76 * @category primitives
77 * @since 2.2.7
78 */
79export declare const string: TaskDecoder<unknown, string>
80/**
81 * @category primitives
82 * @since 2.2.7
83 */
84export declare const number: TaskDecoder<unknown, number>
85/**
86 * @category primitives
87 * @since 2.2.7
88 */
89export declare const boolean: TaskDecoder<unknown, boolean>
90/**
91 * @category primitives
92 * @since 2.2.7
93 */
94export declare const UnknownArray: TaskDecoder<unknown, Array<unknown>>
95/**
96 * @category primitives
97 * @since 2.2.7
98 */
99export declare const UnknownRecord: TaskDecoder<unknown, Record<string, unknown>>
100/**
101 * @category combinators
102 * @since 2.2.7
103 */
104export declare const mapLeftWithInput: <I>(
105 f: (input: I, e: DecodeError) => DecodeError
106) => <A>(decoder: TaskDecoder<I, A>) => TaskDecoder<I, A>
107/**
108 * @category combinators
109 * @since 2.2.9
110 */
111export declare const withMessage: <I>(
112 message: (input: I, e: DecodeError) => string
113) => <A>(decoder: TaskDecoder<I, A>) => TaskDecoder<I, A>
114/**
115 * @category combinators
116 * @since 2.2.7
117 */
118export declare const refine: <A, B extends A>(
119 refinement: Refinement<A, B>,
120 id: string
121) => <I>(from: TaskDecoder<I, A>) => TaskDecoder<I, B>
122/**
123 * @category combinators
124 * @since 2.2.7
125 */
126export declare const parse: <A, B>(
127 parser: (a: A) => TE.TaskEither<DecodeError, B>
128) => <I>(from: TaskDecoder<I, A>) => TaskDecoder<I, B>
129/**
130 * @category combinators
131 * @since 2.2.7
132 */
133export declare const nullable: <I, A>(or: TaskDecoder<I, A>) => TaskDecoder<null | I, null | A>
134/**
135 * @category combinators
136 * @since 2.2.15
137 */
138export declare const fromStruct: <P extends Record<string, TaskDecoder<any, any>>>(
139 properties: P
140) => TaskDecoder<
141 { [K in keyof P]: K.InputOf<'TaskEither', P[K]> },
142 { [K_1 in keyof P]: K.TypeOf<'TaskEither', P[K_1]> }
143>
144/**
145 * Use `fromStruct` instead.
146 *
147 * @category combinators
148 * @since 2.2.8
149 * @deprecated
150 */
151export declare const fromType: <P extends Record<string, TaskDecoder<any, any>>>(
152 properties: P
153) => TaskDecoder<
154 { [K in keyof P]: K.InputOf<'TaskEither', P[K]> },
155 { [K_1 in keyof P]: K.TypeOf<'TaskEither', P[K_1]> }
156>
157/**
158 * @category combinators
159 * @since 2.2.15
160 */
161export declare const struct: <A>(
162 properties: { [K in keyof A]: TaskDecoder<unknown, A[K]> }
163) => TaskDecoder<unknown, { [K_1 in keyof A]: A[K_1] }>
164/**
165 * Use `struct` instead.
166 *
167 * @category combinators
168 * @since 2.2.7
169 * @deprecated
170 */
171export declare const type: <A>(
172 properties: { [K in keyof A]: TaskDecoder<unknown, A[K]> }
173) => TaskDecoder<unknown, { [K_1 in keyof A]: A[K_1] }>
174/**
175 * @category combinators
176 * @since 2.2.8
177 */
178export declare const fromPartial: <P extends Record<string, TaskDecoder<any, any>>>(
179 properties: P
180) => TaskDecoder<
181 Partial<{ [K in keyof P]: K.InputOf<'TaskEither', P[K]> }>,
182 Partial<{ [K_1 in keyof P]: K.TypeOf<'TaskEither', P[K_1]> }>
183>
184/**
185 * @category combinators
186 * @since 2.2.7
187 */
188export declare const partial: <A>(
189 properties: { [K in keyof A]: TaskDecoder<unknown, A[K]> }
190) => TaskDecoder<unknown, Partial<{ [K_1 in keyof A]: A[K_1] }>>
191/**
192 * @category combinators
193 * @since 2.2.8
194 */
195export declare const fromArray: <I, A>(item: TaskDecoder<I, A>) => TaskDecoder<I[], A[]>
196/**
197 * @category combinators
198 * @since 2.2.7
199 */
200export declare const array: <A>(item: TaskDecoder<unknown, A>) => TaskDecoder<unknown, A[]>
201/**
202 * @category combinators
203 * @since 2.2.8
204 */
205export declare const fromRecord: <I, A>(
206 codomain: TaskDecoder<I, A>
207) => TaskDecoder<Record<string, I>, Record<string, A>>
208/**
209 * @category combinators
210 * @since 2.2.7
211 */
212export declare const record: <A>(codomain: TaskDecoder<unknown, A>) => TaskDecoder<unknown, Record<string, A>>
213/**
214 * @category combinators
215 * @since 2.2.8
216 */
217export declare const fromTuple: <C extends readonly TaskDecoder<any, any>[]>(
218 ...components: C
219) => TaskDecoder<
220 { [K in keyof C]: K.InputOf<'TaskEither', C[K]> },
221 { [K_1 in keyof C]: K.TypeOf<'TaskEither', C[K_1]> }
222>
223/**
224 * @category combinators
225 * @since 2.2.7
226 */
227export declare const tuple: <A extends readonly unknown[]>(
228 ...components: { [K in keyof A]: TaskDecoder<unknown, A[K]> }
229) => TaskDecoder<unknown, A>
230/**
231 * @category combinators
232 * @since 2.2.7
233 */
234export declare const union: <MS extends readonly [TaskDecoder<any, any>, ...Array<TaskDecoder<any, any>>]>(
235 ...members: MS
236) => TaskDecoder<InputOf<MS[keyof MS]>, TypeOf<MS[keyof MS]>>
237/**
238 * @category combinators
239 * @since 2.2.7
240 */
241export declare const intersect: <IB, B>(
242 right: TaskDecoder<IB, B>
243) => <IA, A>(left: TaskDecoder<IA, A>) => TaskDecoder<IA & IB, A & B>
244/**
245 * @category combinators
246 * @since 2.2.8
247 */
248export declare const fromSum: <T extends string>(
249 tag: T
250) => <MS extends Record<string, TaskDecoder<any, any>>>(
251 members: MS
252) => TaskDecoder<K.InputOf<'TaskEither', MS[keyof MS]>, K.TypeOf<'TaskEither', MS[keyof MS]>>
253/**
254 * @category combinators
255 * @since 2.2.7
256 */
257export declare const sum: <T extends string>(
258 tag: T
259) => <A>(members: { [K in keyof A]: TaskDecoder<unknown, A[K] & Record<T, K>> }) => TaskDecoder<unknown, A[keyof A]>
260/**
261 * @category combinators
262 * @since 2.2.7
263 */
264export declare const lazy: <I, A>(id: string, f: () => TaskDecoder<I, A>) => TaskDecoder<I, A>
265/**
266 * @category combinators
267 * @since 2.2.15
268 */
269export declare const readonly: <I, A>(decoder: TaskDecoder<I, A>) => TaskDecoder<I, Readonly<A>>
270/**
271 * @category Functor
272 * @since 2.2.7
273 */
274export declare const map: <A, B>(f: (a: A) => B) => <I>(fa: TaskDecoder<I, A>) => TaskDecoder<I, B>
275/**
276 * @category Alt
277 * @since 2.2.7
278 */
279export declare const alt: <I, A>(that: () => TaskDecoder<I, A>) => (me: TaskDecoder<I, A>) => TaskDecoder<I, A>
280/**
281 * @category Semigroupoid
282 * @since 2.2.8
283 */
284export declare const compose: <A, B>(to: TaskDecoder<A, B>) => <I>(from: TaskDecoder<I, A>) => TaskDecoder<I, B>
285/**
286 * @category Category
287 * @since 2.2.8
288 */
289export declare const id: <A>() => TaskDecoder<A, A>
290/**
291 * @category instances
292 * @since 2.2.7
293 */
294export declare const URI = 'io-ts/TaskDecoder'
295/**
296 * @category instances
297 * @since 2.2.7
298 */
299export declare type URI = typeof URI
300declare module 'fp-ts/lib/HKT' {
301 interface URItoKind2<E, A> {
302 readonly [URI]: TaskDecoder<E, A>
303 }
304}
305/**
306 * @category instances
307 * @since 2.2.8
308 */
309export declare const Functor: Functor2<URI>
310/**
311 * @category instances
312 * @since 2.2.8
313 */
314export declare const Alt: Alt2<URI>
315/**
316 * @category instances
317 * @since 2.2.8
318 */
319export declare const Category: Category2<URI>
320/**
321 * @category instances
322 * @since 2.2.8
323 */
324export declare const Schemable: S.Schemable2C<URI, unknown>
325/**
326 * @category instances
327 * @since 2.2.8
328 */
329export declare const WithUnknownContainers: S.WithUnknownContainers2C<URI, unknown>
330/**
331 * @category instances
332 * @since 2.2.8
333 */
334export declare const WithUnion: S.WithUnion2C<URI, unknown>
335/**
336 * @category instances
337 * @since 2.2.8
338 */
339export declare const WithRefine: S.WithRefine2C<URI, unknown>
340/**
341 * @since 2.2.7
342 */
343export declare type TypeOf<KTD> = K.TypeOf<TE.URI, KTD>
344/**
345 * @since 2.2.8
346 */
347export declare type InputOf<KTD> = K.InputOf<TE.URI, KTD>
348/**
349 * @since 2.2.7
350 */
351export declare const draw: (e: DecodeError) => string