1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | import * as A from 'fp-ts/es6/Array';
|
12 | import * as E from 'fp-ts/es6/Eq';
|
13 | import { identity } from 'fp-ts/es6/function';
|
14 | import * as R from 'fp-ts/es6/Record';
|
15 | import { memoize } from './Schemable';
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 | export var string = E.eqString;
|
24 |
|
25 |
|
26 |
|
27 |
|
28 | export var number = E.eqNumber;
|
29 |
|
30 |
|
31 |
|
32 |
|
33 | export var boolean = E.eqBoolean;
|
34 |
|
35 |
|
36 |
|
37 |
|
38 | export var UnknownArray = E.fromEquals(function (x, y) { return x.length === y.length; });
|
39 |
|
40 |
|
41 |
|
42 |
|
43 | export var UnknownRecord = E.fromEquals(function (x, y) {
|
44 | for (var k in x) {
|
45 | if (!(k in y)) {
|
46 | return false;
|
47 | }
|
48 | }
|
49 | for (var k in y) {
|
50 | if (!(k in x)) {
|
51 | return false;
|
52 | }
|
53 | }
|
54 | return true;
|
55 | });
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 | export function nullable(or) {
|
64 | return {
|
65 | equals: function (x, y) { return (x === null || y === null ? x === y : or.equals(x, y)); }
|
66 | };
|
67 | }
|
68 |
|
69 |
|
70 |
|
71 |
|
72 | export var struct = E.getStructEq;
|
73 |
|
74 |
|
75 |
|
76 |
|
77 |
|
78 |
|
79 |
|
80 | export var type = struct;
|
81 |
|
82 |
|
83 |
|
84 |
|
85 | export function partial(properties) {
|
86 | return {
|
87 | equals: function (x, y) {
|
88 | for (var k in properties) {
|
89 | var xk = x[k];
|
90 | var yk = y[k];
|
91 | if (!(xk === undefined || yk === undefined ? xk === yk : properties[k].equals(xk, yk))) {
|
92 | return false;
|
93 | }
|
94 | }
|
95 | return true;
|
96 | }
|
97 | };
|
98 | }
|
99 |
|
100 |
|
101 |
|
102 |
|
103 | export var record = R.getEq;
|
104 |
|
105 |
|
106 |
|
107 |
|
108 | export var array = A.getEq;
|
109 |
|
110 |
|
111 |
|
112 |
|
113 | export var tuple = E.getTupleEq;
|
114 |
|
115 |
|
116 |
|
117 |
|
118 | export var intersect = function (right) { return function (left) { return ({
|
119 | equals: function (x, y) { return left.equals(x, y) && right.equals(x, y); }
|
120 | }); }; };
|
121 |
|
122 |
|
123 |
|
124 |
|
125 | export function sum(tag) {
|
126 | return function (members) {
|
127 | return {
|
128 | equals: function (x, y) {
|
129 | var vx = x[tag];
|
130 | var vy = y[tag];
|
131 | if (vx !== vy) {
|
132 | return false;
|
133 | }
|
134 | return members[vx].equals(x, y);
|
135 | }
|
136 | };
|
137 | };
|
138 | }
|
139 |
|
140 |
|
141 |
|
142 |
|
143 | export function lazy(f) {
|
144 | var get = memoize(f);
|
145 | return {
|
146 | equals: function (x, y) { return get().equals(x, y); }
|
147 | };
|
148 | }
|
149 | /**
|
150 | * @category combinators
|
151 | * @since 2.2.15
|
152 | */
|
153 | export var readonly = identity;
|
154 | // -------------------------------------------------------------------------------------
|
155 | // instances
|
156 | // -------------------------------------------------------------------------------------
|
157 | /**
|
158 | * @category instances
|
159 | * @since 2.2.8
|
160 | */
|
161 | export var Schemable = {
|
162 | URI: E.URI,
|
163 | literal: function () { return E.eqStrict; },
|
164 | string: string,
|
165 | number: number,
|
166 | boolean: boolean,
|
167 | nullable: nullable,
|
168 | type: type,
|
169 | struct: struct,
|
170 | partial: partial,
|
171 | record: record,
|
172 | array: array,
|
173 | tuple: tuple,
|
174 | intersect: intersect,
|
175 | sum: sum,
|
176 | lazy: function (_, f) { return lazy(f); },
|
177 | readonly: readonly
|
178 | };
|
179 |
|
180 |
|
181 |
|
182 |
|
183 | export var WithUnknownContainers = {
|
184 | UnknownArray: UnknownArray,
|
185 | UnknownRecord: UnknownRecord
|
186 | };
|
187 |
|
188 |
|
189 |
|
190 |
|
191 | export var WithRefine = {
|
192 | refine: function () { return function (from) { return from; }; }
|
193 | };
|