UNPKG

@typed/fp

Version:

Data Structures and Resources for fp-ts

916 lines (608 loc) 14.2 kB
--- title: Decoder.ts nav_order: 10 parent: Modules --- ## Decoder overview Decoder is a data structure for representing runtime representations of your types. Added in v0.9.4 --- <h2 class="text-delta">Table of contents</h2> - [Combinator](#combinator) - [absolve](#absolve) - [absolveWhen](#absolvewhen) - [ap](#ap) - [apFirst](#apfirst) - [apS](#aps) - [apSecond](#apsecond) - [apT](#apt) - [bind](#bind) - [bindTo](#bindto) - [chain](#chain) - [chainFirst](#chainfirst) - [compose](#compose) - [condemmMissingKeys](#condemmmissingkeys) - [condemn](#condemn) - [condemnUnexpectedKeys](#condemnunexpectedkeys) - [condemnWhen](#condemnwhen) - [flap](#flap) - [getApplicativeMonoid](#getapplicativemonoid) - [intersect](#intersect) - [map](#map) - [nullable](#nullable) - [optional](#optional) - [refine](#refine) - [strict](#strict) - [tupled](#tupled) - [Constructor](#constructor) - [Chain](#chain) - [Do](#do) - [array](#array) - [boolean](#boolean) - [date](#date) - [fromArray](#fromarray) - [fromIO](#fromio) - [fromRecord](#fromrecord) - [fromRefinement](#fromrefinement) - [fromStruct](#fromstruct) - [fromTuple](#fromtuple) - [lazy](#lazy) - [literal](#literal) - [missingIndexes](#missingindexes) - [missingKeys](#missingkeys) - [number](#number) - [of](#of) - [record](#record) - [string](#string) - [struct](#struct) - [sum](#sum) - [tuple](#tuple) - [unexpectedIndexes](#unexpectedindexes) - [unexpectedKeys](#unexpectedkeys) - [union](#union) - [unknownArray](#unknownarray) - [unknownRecord](#unknownrecord) - [Decoder](#decoder) - [dateFromISOString](#datefromisostring) - [jsonParse](#jsonparse) - [jsonParseFromString](#jsonparsefromstring) - [Instance](#instance) - [Applicative](#applicative) - [Apply](#apply) - [Functor](#functor) - [Monad](#monad) - [Pointed](#pointed) - [Schemable](#schemable) - [WithRefine](#withrefine) - [WithUnion](#withunion) - [Interpreter](#interpreter) - [assert](#assert) - [assertStrict](#assertstrict) - [Model](#model) - [Decoder (interface)](#decoder-interface) - [Refinement](#refinement) - [isDate](#isdate) - [Type-level](#type-level) - [InputOf (type alias)](#inputof-type-alias) - [OutputOf (type alias)](#outputof-type-alias) - [Typeclass Constructor](#typeclass-constructor) - [getApplySemigroup](#getapplysemigroup) - [URI](#uri) - [URI](#uri-1) - [URI (type alias)](#uri-type-alias) --- # Combinator ## absolve **Signature** ```ts export declare const absolve: <I, A>(decoder: Decoder<I, A>) => Decoder<I, A> ``` Added in v0.9.4 ## absolveWhen **Signature** ```ts export declare function absolveWhen(predicate: Predicate<DE.DecodeError>) ``` Added in v0.9.4 ## ap **Signature** ```ts export declare const ap: <E, A>( fa: Decoder<E, A>, ) => <B>(fab: Decoder<E, (a: A) => B>) => Decoder<E, B> ``` Added in v0.9.4 ## apFirst **Signature** ```ts export declare const apFirst: <E, B>( second: Decoder<E, B>, ) => <A>(first: Decoder<E, A>) => Decoder<E, A> ``` Added in v0.9.4 ## apS **Signature** ```ts export declare const apS: <N, A, E, B>( name: Exclude<N, keyof A>, fb: Decoder<E, B>, ) => ( fa: Decoder<E, A>, ) => Decoder<E, { readonly [K in N | keyof A]: K extends keyof A ? A[K] : B }> ``` Added in v0.9.4 ## apSecond **Signature** ```ts export declare const apSecond: <E, B>( second: Decoder<E, B>, ) => <A>(first: Decoder<E, A>) => Decoder<E, B> ``` Added in v0.9.4 ## apT **Signature** ```ts export declare const apT: <E, B>( fb: Decoder<E, B>, ) => <A>(fas: Decoder<E, A>) => Decoder<E, readonly [...A, B]> ``` Added in v0.9.4 ## bind **Signature** ```ts export declare const bind: <N, A, E, B>( name: Exclude<N, keyof A>, f: (a: A) => Decoder<E, B>, ) => ( ma: Decoder<E, A>, ) => Decoder<E, { readonly [K in N | keyof A]: K extends keyof A ? A[K] : B }> ``` Added in v0.9.4 ## bindTo **Signature** ```ts export declare const bindTo: <N>( name: N, ) => <E, A>(fa: Decoder<E, A>) => Decoder<E, { readonly [K in N]: A }> ``` Added in v0.9.4 ## chain **Signature** ```ts export declare const chain: <A, I, B>( f: (a: A) => Decoder<I, B>, ) => (decoder: Decoder<I, A>) => Decoder<I, B> ``` Added in v0.9.4 ## chainFirst **Signature** ```ts export declare const chainFirst: <A, E, B>( f: (a: A) => Decoder<E, B>, ) => (first: Decoder<E, A>) => Decoder<E, A> ``` Added in v0.9.4 ## compose **Signature** ```ts export declare const compose: <A, O>( second: Decoder<A, O>, ) => <I>(first: Decoder<I, A>) => Decoder<I, O> ``` Added in v0.9.4 ## condemmMissingKeys **Signature** ```ts export declare const condemmMissingKeys: <I, A>( decoder: Decoder<I, A>, ) => Decoder<I, UndoPartial<A>> ``` Added in v0.9.4 ## condemn **Signature** ```ts export declare const condemn: <I, A>(decoder: Decoder<I, A>) => Decoder<I, A> ``` Added in v0.9.4 ## condemnUnexpectedKeys **Signature** ```ts export declare const condemnUnexpectedKeys: <I, A>(decoder: Decoder<I, A>) => Decoder<I, A> ``` Added in v0.9.4 ## condemnWhen **Signature** ```ts export declare function condemnWhen(predicate: Predicate<DE.DecodeError>) ``` Added in v0.9.4 ## flap **Signature** ```ts export declare const flap: <A>(a: A) => <E, B>(fab: Decoder<E, (a: A) => B>) => Decoder<E, B> ``` Added in v0.9.4 ## getApplicativeMonoid **Signature** ```ts export declare const getApplicativeMonoid: <A, E>(M: Monoid<A>) => Monoid<Decoder<E, A>> ``` Added in v0.9.4 ## intersect **Signature** ```ts export declare const intersect: <A, B>( second: Decoder<A, B>, ) => <C, D>(first: Decoder<C, D>) => Decoder<A & C, B & D> ``` Added in v0.9.6 ## map **Signature** ```ts export declare const map: <A, B>(f: (value: A) => B) => <I>(decoder: Decoder<I, A>) => Decoder<I, B> ``` Added in v0.9.4 ## nullable **Signature** ```ts export declare const nullable: <O2>(first: Decoder<unknown, O2>) => Decoder<unknown, O2 | null> ``` Added in v0.9.4 ## optional **Signature** ```ts export declare const optional: <O2>(first: Decoder<unknown, O2>) => Decoder<unknown, O2 | undefined> ``` Added in v0.9.4 ## refine **Signature** ```ts export declare const refine: <A, B>( refinement: Refinement<A, B>, id: string, ) => (from: Decoder<unknown, A>) => Decoder<unknown, B> ``` Added in v0.9.5 ## strict **Signature** ```ts export declare const strict: <I, A>(decoder: Decoder<I, A>) => Decoder<I, UndoPartial<A>> ``` Added in v0.9.4 ## tupled **Signature** ```ts export declare const tupled: <E, A>(fa: Decoder<E, A>) => Decoder<E, readonly [A]> ``` Added in v0.9.4 # Constructor ## Chain **Signature** ```ts export declare const Chain: Ch.Chain2<'@typed/fp/Decoder'> ``` Added in v0.9.4 ## Do **Signature** ```ts export declare const Do: Decoder<unknown, {}> ``` Added in v0.9.4 ## array **Signature** ```ts export declare const array: <O>(member: Decoder<unknown, O>) => Decoder<unknown, readonly O[]> ``` Added in v0.9.4 ## boolean **Signature** ```ts export declare const boolean: Decoder<unknown, boolean> ``` Added in v0.9.4 ## date **Signature** ```ts export declare const date: Decoder<unknown, Date> ``` Added in v0.9.6 ## fromArray **Signature** ```ts export declare const fromArray: <O>( member: Decoder<unknown, O>, ) => Decoder<readonly unknown[], readonly O[]> ``` Added in v0.9.4 ## fromIO **Signature** ```ts export declare const fromIO: <A>(io: IO<A>) => Decoder<unknown, {}> ``` Added in v0.9.4 ## fromRecord **Signature** ```ts export declare function fromRecord<A>( decoder: Decoder<unknown, A>, ): Decoder<Readonly<Record<string, unknown>>, Readonly<Record<string, A>>> ``` Added in v0.9.4 ## fromRefinement **Signature** ```ts export declare function fromRefinement<I, O extends I>( refinement: Refinement<I, O>, expected: string, ): Decoder<I, O> ``` Added in v0.9.4 ## fromStruct **Signature** ```ts export declare const fromStruct: <A extends { readonly [key: string]: Decoder<unknown, any> }>( properties: A, ) => Decoder< Readonly<Record<string, unknown>>, Partial<{ readonly [K in keyof A]: OutputOf<A[K]> }> > ``` Added in v0.9.4 ## fromTuple **Signature** ```ts export declare function fromTuple<A extends readonly unknown[]>( ...components: { readonly [K in keyof A]: Decoder<unknown, A[K]> } ): Decoder<readonly unknown[], A> ``` Added in v0.9.4 ## lazy **Signature** ```ts export declare const lazy: <I, O>(id: string, f: () => Decoder<I, O>) => Decoder<I, O> ``` Added in v0.9.6 ## literal **Signature** ```ts export declare const literal: <A extends readonly Literal[]>( ...literals: A ) => Decoder<unknown, A[number]> ``` Added in v0.9.6 ## missingIndexes **Signature** ```ts export declare function missingIndexes<A extends readonly unknown[]>( ...components: { readonly [K in keyof A]: Decoder<unknown, A[K]> } ): Decoder<readonly unknown[], readonly unknown[]> ``` Added in v0.9.4 ## missingKeys **Signature** ```ts export declare function missingKeys<A extends { readonly [key: string]: Decoder<unknown, any> }>( properties: A, ): Decoder<Readonly<Record<string, unknown>>, Partial<{ readonly [K in keyof A]: OutputOf<A[K]> }>> ``` Added in v0.9.4 ## number **Signature** ```ts export declare const number: Decoder<unknown, number> ``` Added in v0.9.4 ## of **Signature** ```ts export declare const of: <A>(value: A) => Decoder<unknown, A> ``` Added in v0.9.4 ## record **Signature** ```ts export declare const record: <O>( codomain: Decoder<unknown, O>, ) => Decoder<unknown, Readonly<Record<string, O>>> ``` Added in v0.9.6 ## string **Signature** ```ts export declare const string: Decoder<unknown, string> ``` Added in v0.9.4 ## struct **Signature** ```ts export declare function struct<A extends { readonly [key: string]: Decoder<unknown, any> }>( properties: A, ): Decoder<unknown, Partial<{ readonly [K in keyof A]: OutputOf<A[K]> }>> ``` Added in v0.9.4 ## sum **Signature** ```ts export declare const sum: <T extends string>( tag: T, ) => <A>( members: { [K in keyof A]: Decoder<unknown, A[K] & Record<T, K>> }, ) => Decoder<unknown, A[keyof A]> ``` Added in v0.9.6 ## tuple **Signature** ```ts export declare function tuple<A extends readonly unknown[]>( ...components: { readonly [K in keyof A]: Decoder<unknown, A[K]> } ): Decoder<unknown, A> ``` Added in v0.9.4 ## unexpectedIndexes **Signature** ```ts export declare function unexpectedIndexes<A extends readonly unknown[]>( ...components: { readonly [K in keyof A]: Decoder<unknown, A[K]> } ): Decoder<readonly unknown[], readonly unknown[]> ``` Added in v0.9.4 ## unexpectedKeys **Signature** ```ts export declare function unexpectedKeys<A extends { readonly [key: string]: Decoder<unknown, any> }>( properties: A, ): Decoder<Readonly<Record<string, unknown>>, Partial<{ readonly [K in keyof A]: OutputOf<A[K]> }>> ``` Added in v0.9.4 ## union **Signature** ```ts export declare const union: <I, O1>( second: Decoder<I, O1>, ) => <O2>(first: Decoder<I, O2>) => Decoder<I, O1 | O2> ``` Added in v0.9.4 ## unknownArray **Signature** ```ts export declare const unknownArray: Decoder<unknown, readonly unknown[]> ``` Added in v0.9.4 ## unknownRecord **Signature** ```ts export declare const unknownRecord: Decoder<unknown, { readonly [key: string]: unknown }> ``` Added in v0.9.4 # Decoder ## dateFromISOString **Signature** ```ts export declare const dateFromISOString: Decoder<string, Date> ``` Added in v0.9.5 ## jsonParse **Signature** ```ts export declare const jsonParse: Decoder<unknown, Json> ``` Added in v0.9.5 ## jsonParseFromString **Signature** ```ts export declare const jsonParseFromString: Decoder<string, Json> ``` Added in v0.9.5 # Instance ## Applicative **Signature** ```ts export declare const Applicative: App.Applicative2<'@typed/fp/Decoder'> ``` Added in v0.9.4 ## Apply **Signature** ```ts export declare const Apply: Ap.Apply2<'@typed/fp/Decoder'> ``` Added in v0.9.4 ## Functor **Signature** ```ts export declare const Functor: F.Functor2<'@typed/fp/Decoder'> ``` Added in v0.9.4 ## Monad **Signature** ```ts export declare const Monad: Monad2<'@typed/fp/Decoder'> ``` Added in v0.9.4 ## Pointed **Signature** ```ts export declare const Pointed: Pointed2<'@typed/fp/Decoder'> ``` Added in v0.9.4 ## Schemable **Signature** ```ts export declare const Schemable: Schemable2C<'@typed/fp/Decoder', unknown> ``` Added in v0.9.5 ## WithRefine **Signature** ```ts export declare const WithRefine: WithRefine2C<'@typed/fp/Decoder', unknown> ``` Added in v0.9.5 ## WithUnion **Signature** ```ts export declare const WithUnion: WithUnion2C<'@typed/fp/Decoder', unknown> ``` Added in v0.9.5 # Interpreter ## assert Throw if not a valid decoder. Absolves optional errors **Signature** ```ts export declare const assert: <I, O>(decoder: Decoder<I, O>) => (i: I) => O ``` Added in v0.9.5 ## assertStrict Throw if not a valid decoder. Condemns optional errors **Signature** ```ts export declare const assertStrict: <I, O>(decoder: Decoder<I, O>) => (i: I) => Required<O> ``` Added in v0.9.5 # Model ## Decoder (interface) **Signature** ```ts export interface Decoder<I, O> { readonly decode: (input: I) => T.These<DE.DecodeErrors, O> } ``` Added in v0.9.4 # Refinement ## isDate **Signature** ```ts export declare const isDate: (x: unknown) => x is Date ``` Added in v0.9.6 # Type-level ## InputOf (type alias) **Signature** ```ts export type InputOf<A> = [A] extends [Decoder<infer I, any>] ? I : never ``` Added in v0.9.4 ## OutputOf (type alias) **Signature** ```ts export type OutputOf<A> = [A] extends [Decoder<any, infer O>] ? O : never ``` Added in v0.9.4 # Typeclass Constructor ## getApplySemigroup **Signature** ```ts export declare const getApplySemigroup: <A, E>(S: Semigroup<A>) => Semigroup<Decoder<E, A>> ``` Added in v0.9.4 # URI ## URI **Signature** ```ts export declare const URI: '@typed/fp/Decoder' ``` Added in v0.9.4 ## URI (type alias) **Signature** ```ts export type URI = typeof URI ``` Added in v0.9.4