UNPKG

4.09 kBJavaScriptView Raw
1import * as D from './Decoder';
2import * as E from './Encoder';
3import { identity } from 'fp-ts/es6/function';
4// -------------------------------------------------------------------------------------
5// constructors
6// -------------------------------------------------------------------------------------
7/**
8 * @since 2.2.3
9 */
10export function make(decoder, encoder) {
11 return {
12 decode: decoder.decode,
13 encode: encoder.encode
14 };
15}
16/**
17 * @since 2.2.3
18 */
19export function fromDecoder(decoder) {
20 return {
21 decode: decoder.decode,
22 encode: identity
23 };
24}
25/**
26 * @since 2.2.3
27 */
28export function literal() {
29 var values = [];
30 for (var _i = 0; _i < arguments.length; _i++) {
31 values[_i] = arguments[_i];
32 }
33 return fromDecoder(D.literal.apply(D, values));
34}
35// -------------------------------------------------------------------------------------
36// primitives
37// -------------------------------------------------------------------------------------
38/**
39 * @since 2.2.3
40 */
41export var string = fromDecoder(D.string);
42/**
43 * @since 2.2.3
44 */
45export var number = fromDecoder(D.number);
46/**
47 * @since 2.2.3
48 */
49export var boolean = fromDecoder(D.boolean);
50/**
51 * @since 2.2.3
52 */
53export var UnknownArray = fromDecoder(D.UnknownArray);
54/**
55 * @since 2.2.3
56 */
57export var UnknownRecord = fromDecoder(D.UnknownRecord);
58// -------------------------------------------------------------------------------------
59// combinators
60// -------------------------------------------------------------------------------------
61/**
62 * @since 2.2.3
63 */
64export function withExpected(codec, expected) {
65 return make(D.withExpected(codec, expected), codec);
66}
67/**
68 * @since 2.2.3
69 */
70export function refinement(from, refinement, expected) {
71 return make(D.refinement(from, refinement, expected), from);
72}
73/**
74 * @since 2.2.3
75 */
76export function nullable(or) {
77 return make(D.nullable(or), E.nullable(or));
78}
79/**
80 * @since 2.2.3
81 */
82export function type(properties) {
83 var decoder = D.type(properties);
84 return make(decoder, E.type(properties));
85}
86/**
87 * @since 2.2.3
88 */
89export function partial(properties) {
90 // these tow `any`s are required to make typescript@3.5 compile
91 // vvvvvv vvvvvv
92 return make(D.partial(properties), E.partial(properties));
93}
94/**
95 * @since 2.2.3
96 */
97export function record(codomain) {
98 return make(D.record(codomain), E.record(codomain));
99}
100/**
101 * @since 2.2.3
102 */
103export function array(items) {
104 return make(D.array(items), E.array(items));
105}
106/**
107 * @since 2.2.3
108 */
109export function tuple() {
110 var components = [];
111 for (var _i = 0; _i < arguments.length; _i++) {
112 components[_i] = arguments[_i];
113 }
114 var decoder = D.tuple.apply(D, components);
115 var encoder = E.tuple.apply(E, components);
116 return make(decoder, encoder);
117}
118/**
119 * @since 2.2.3
120 */
121export function intersection(left, right) {
122 return make(D.intersection(left, right), E.intersection(left, right));
123}
124/**
125 * @since 2.2.3
126 */
127export function sum(tag) {
128 var sumD = D.sum(tag);
129 var sumE = E.sum(tag);
130 return function (members) { return make(sumD(members), sumE(members)); };
131}
132/**
133 * @since 2.2.3
134 */
135export function lazy(id, f) {
136 return make(D.lazy(id, f), E.lazy(f));
137}
138// -------------------------------------------------------------------------------------
139// pipeables
140// -------------------------------------------------------------------------------------
141/**
142 * @since 2.2.3
143 */
144export var imap = function (f, g) { return function (fa) {
145 return imap_(fa, f, g);
146}; };
147var imap_ = function (fa, f, g) {
148 return make(D.functorDecoder.map(fa, f), E.contravariantEncoder.contramap(fa, g));
149};
150// -------------------------------------------------------------------------------------
151// instances
152// -------------------------------------------------------------------------------------
153/**
154 * @since 2.2.3
155 */
156export var URI = 'io-ts/Codec';
157/**
158 * @since 2.2.3
159 */
160export var invariantCodec = {
161 URI: URI,
162 imap: imap_
163};