decoders 1.26.0-beta2 → 2.0.0-beta3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/CHANGELOG.md +21 -5
  2. package/_esm/_guard.js +15 -0
  3. package/_esm/_guard.js.flow +20 -0
  4. package/_esm/_types.js +0 -0
  5. package/_esm/_types.js.flow +20 -0
  6. package/_esm/_utils.js +93 -0
  7. package/_esm/_utils.js.flow +97 -0
  8. package/_esm/annotate.js +144 -0
  9. package/_esm/annotate.js.flow +218 -0
  10. package/_esm/core/array.js +91 -0
  11. package/{cjs → _esm/core}/array.js.flow +22 -25
  12. package/_esm/core/boolean.js +28 -0
  13. package/{cjs → _esm/core}/boolean.js.flow +8 -7
  14. package/_esm/core/composition.js +42 -0
  15. package/{cjs/utils.js.flow → _esm/core/composition.js.flow} +7 -22
  16. package/_esm/core/constants.js +46 -0
  17. package/{cjs → _esm/core}/constants.js.flow +13 -12
  18. package/_esm/core/date.js +28 -0
  19. package/{cjs → _esm/core}/date.js.flow +9 -7
  20. package/{cjs → _esm/core}/describe.js +5 -11
  21. package/{cjs → _esm/core}/describe.js.flow +4 -4
  22. package/{cjs → _esm/core}/dispatch.js +8 -15
  23. package/{cjs → _esm/core}/dispatch.js.flow +6 -5
  24. package/_esm/core/either.js +90 -0
  25. package/{cjs → _esm/core}/either.js.flow +55 -35
  26. package/_esm/core/fail.js +11 -0
  27. package/_esm/core/fail.js.flow +12 -0
  28. package/_esm/core/instanceOf.js +8 -0
  29. package/{cjs → _esm/core}/instanceOf.js.flow +7 -8
  30. package/_esm/core/json.js +15 -0
  31. package/{cjs → _esm/core}/json.js.flow +4 -4
  32. package/_esm/core/lazy.js +11 -0
  33. package/{cjs → _esm/core}/lazy.js.flow +1 -1
  34. package/_esm/core/mapping.js +54 -0
  35. package/_esm/core/mapping.js.flow +54 -0
  36. package/_esm/core/number.js +25 -0
  37. package/{cjs → _esm/core}/number.js.flow +10 -11
  38. package/_esm/core/object.js +175 -0
  39. package/{cjs → _esm/core}/object.js.flow +44 -52
  40. package/_esm/core/optional.js +38 -0
  41. package/{cjs → _esm/core}/optional.js.flow +6 -7
  42. package/{cjs → _esm/core}/string.js +18 -35
  43. package/{cjs → _esm/core}/string.js.flow +13 -12
  44. package/_esm/core/tuple.js +155 -0
  45. package/{cjs → _esm/core}/tuple.js.flow +62 -63
  46. package/_esm/format/index.js +2 -0
  47. package/_esm/format/index.js.flow +4 -0
  48. package/_esm/format/inline.js +137 -0
  49. package/_esm/format/inline.js.flow +122 -0
  50. package/_esm/format/short.js +4 -0
  51. package/_esm/format/short.js.flow +8 -0
  52. package/_esm/index.js +37 -0
  53. package/{cjs → _esm}/index.js.flow +31 -24
  54. package/_esm/result.js +139 -0
  55. package/_esm/result.js.flow +166 -0
  56. package/_guard.js +26 -0
  57. package/_guard.js.flow +20 -0
  58. package/_types.js +1 -0
  59. package/_types.js.flow +20 -0
  60. package/_utils.js +108 -0
  61. package/_utils.js.flow +97 -0
  62. package/annotate.js +161 -0
  63. package/annotate.js.flow +218 -0
  64. package/core/array.js +108 -0
  65. package/core/array.js.flow +103 -0
  66. package/core/boolean.js +44 -0
  67. package/core/boolean.js.flow +29 -0
  68. package/core/composition.js +56 -0
  69. package/core/composition.js.flow +43 -0
  70. package/core/constants.js +69 -0
  71. package/core/constants.js.flow +46 -0
  72. package/core/date.js +46 -0
  73. package/core/date.js.flow +40 -0
  74. package/core/describe.js +26 -0
  75. package/core/describe.js.flow +17 -0
  76. package/core/dispatch.js +62 -0
  77. package/core/dispatch.js.flow +58 -0
  78. package/core/either.js +117 -0
  79. package/core/either.js.flow +151 -0
  80. package/core/fail.js +21 -0
  81. package/core/fail.js.flow +12 -0
  82. package/core/instanceOf.js +19 -0
  83. package/core/instanceOf.js.flow +20 -0
  84. package/{cjs → core}/json.js +3 -5
  85. package/core/json.js.flow +28 -0
  86. package/{cjs → core}/lazy.js +1 -3
  87. package/core/lazy.js.flow +15 -0
  88. package/core/mapping.js +67 -0
  89. package/core/mapping.js.flow +54 -0
  90. package/core/number.js +40 -0
  91. package/core/number.js.flow +34 -0
  92. package/core/object.js +194 -0
  93. package/core/object.js.flow +203 -0
  94. package/core/optional.js +54 -0
  95. package/core/optional.js.flow +41 -0
  96. package/core/string.js +98 -0
  97. package/core/string.js.flow +82 -0
  98. package/core/tuple.js +173 -0
  99. package/core/tuple.js.flow +220 -0
  100. package/format/index.js +12 -0
  101. package/format/index.js.flow +4 -0
  102. package/format/inline.js +146 -0
  103. package/format/inline.js.flow +122 -0
  104. package/format/short.js +10 -0
  105. package/format/short.js.flow +8 -0
  106. package/index.js +120 -0
  107. package/index.js.flow +63 -0
  108. package/package.json +3 -11
  109. package/result.js +172 -0
  110. package/result.js.flow +166 -0
  111. package/cjs/array.js +0 -133
  112. package/cjs/boolean.js +0 -42
  113. package/cjs/constants.js +0 -67
  114. package/cjs/date.js +0 -42
  115. package/cjs/either.js +0 -85
  116. package/cjs/fail.js +0 -19
  117. package/cjs/fail.js.flow +0 -13
  118. package/cjs/guard.js +0 -30
  119. package/cjs/guard.js.flow +0 -36
  120. package/cjs/index.js +0 -397
  121. package/cjs/instanceOf.js +0 -17
  122. package/cjs/mapping.js +0 -113
  123. package/cjs/mapping.js.flow +0 -71
  124. package/cjs/number.js +0 -38
  125. package/cjs/object.js +0 -254
  126. package/cjs/optional.js +0 -52
  127. package/cjs/tuple.js +0 -199
  128. package/cjs/types.js +0 -3
  129. package/cjs/types.js.flow +0 -26
  130. package/cjs/utils.js +0 -70
  131. package/es/index.js +0 -1039
  132. package/ts/array.d.ts +0 -5
  133. package/ts/boolean.d.ts +0 -5
  134. package/ts/constants.d.ts +0 -11
  135. package/ts/date.d.ts +0 -4
  136. package/ts/describe.d.ts +0 -3
  137. package/ts/dispatch.d.ts +0 -8
  138. package/ts/either.d.ts +0 -61
  139. package/ts/fail.d.ts +0 -3
  140. package/ts/guard.d.ts +0 -7
  141. package/ts/helpers.d.ts +0 -79
  142. package/ts/index.d.ts +0 -38
  143. package/ts/instanceOf.d.ts +0 -3
  144. package/ts/json.d.ts +0 -11
  145. package/ts/lazy.d.ts +0 -3
  146. package/ts/mapping.d.ts +0 -4
  147. package/ts/number.d.ts +0 -6
  148. package/ts/object.d.ts +0 -33
  149. package/ts/optional.d.ts +0 -5
  150. package/ts/string.d.ts +0 -7
  151. package/ts/tuple.d.ts +0 -30
  152. package/ts/types.d.ts +0 -18
  153. package/ts/utils.d.ts +0 -13
package/cjs/index.js DELETED
@@ -1,397 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "array", {
7
- enumerable: true,
8
- get: function get() {
9
- return _array.array;
10
- }
11
- });
12
- Object.defineProperty(exports, "boolean", {
13
- enumerable: true,
14
- get: function get() {
15
- return _boolean["boolean"];
16
- }
17
- });
18
- Object.defineProperty(exports, "compose", {
19
- enumerable: true,
20
- get: function get() {
21
- return _utils.compose;
22
- }
23
- });
24
- Object.defineProperty(exports, "constant", {
25
- enumerable: true,
26
- get: function get() {
27
- return _constants.constant;
28
- }
29
- });
30
- Object.defineProperty(exports, "date", {
31
- enumerable: true,
32
- get: function get() {
33
- return _date.date;
34
- }
35
- });
36
- Object.defineProperty(exports, "describe", {
37
- enumerable: true,
38
- get: function get() {
39
- return _describe.describe;
40
- }
41
- });
42
- Object.defineProperty(exports, "dict", {
43
- enumerable: true,
44
- get: function get() {
45
- return _mapping.dict;
46
- }
47
- });
48
- Object.defineProperty(exports, "dispatch", {
49
- enumerable: true,
50
- get: function get() {
51
- return _dispatch.dispatch;
52
- }
53
- });
54
- Object.defineProperty(exports, "either", {
55
- enumerable: true,
56
- get: function get() {
57
- return _either.either;
58
- }
59
- });
60
- Object.defineProperty(exports, "either3", {
61
- enumerable: true,
62
- get: function get() {
63
- return _either.either3;
64
- }
65
- });
66
- Object.defineProperty(exports, "either4", {
67
- enumerable: true,
68
- get: function get() {
69
- return _either.either4;
70
- }
71
- });
72
- Object.defineProperty(exports, "either5", {
73
- enumerable: true,
74
- get: function get() {
75
- return _either.either5;
76
- }
77
- });
78
- Object.defineProperty(exports, "either6", {
79
- enumerable: true,
80
- get: function get() {
81
- return _either.either6;
82
- }
83
- });
84
- Object.defineProperty(exports, "either7", {
85
- enumerable: true,
86
- get: function get() {
87
- return _either.either7;
88
- }
89
- });
90
- Object.defineProperty(exports, "either8", {
91
- enumerable: true,
92
- get: function get() {
93
- return _either.either8;
94
- }
95
- });
96
- Object.defineProperty(exports, "either9", {
97
- enumerable: true,
98
- get: function get() {
99
- return _either.either9;
100
- }
101
- });
102
- Object.defineProperty(exports, "email", {
103
- enumerable: true,
104
- get: function get() {
105
- return _string.email;
106
- }
107
- });
108
- Object.defineProperty(exports, "exact", {
109
- enumerable: true,
110
- get: function get() {
111
- return _object.exact;
112
- }
113
- });
114
- Object.defineProperty(exports, "fail", {
115
- enumerable: true,
116
- get: function get() {
117
- return _fail.fail;
118
- }
119
- });
120
- Object.defineProperty(exports, "guard", {
121
- enumerable: true,
122
- get: function get() {
123
- return _guard.guard;
124
- }
125
- });
126
- Object.defineProperty(exports, "hardcoded", {
127
- enumerable: true,
128
- get: function get() {
129
- return _constants.hardcoded;
130
- }
131
- });
132
- Object.defineProperty(exports, "inexact", {
133
- enumerable: true,
134
- get: function get() {
135
- return _object.inexact;
136
- }
137
- });
138
- Object.defineProperty(exports, "instanceOf", {
139
- enumerable: true,
140
- get: function get() {
141
- return _instanceOf.instanceOf;
142
- }
143
- });
144
- Object.defineProperty(exports, "integer", {
145
- enumerable: true,
146
- get: function get() {
147
- return _number.integer;
148
- }
149
- });
150
- Object.defineProperty(exports, "iso8601", {
151
- enumerable: true,
152
- get: function get() {
153
- return _date.iso8601;
154
- }
155
- });
156
- Object.defineProperty(exports, "json", {
157
- enumerable: true,
158
- get: function get() {
159
- return _json.json;
160
- }
161
- });
162
- Object.defineProperty(exports, "jsonArray", {
163
- enumerable: true,
164
- get: function get() {
165
- return _json.jsonArray;
166
- }
167
- });
168
- Object.defineProperty(exports, "jsonObject", {
169
- enumerable: true,
170
- get: function get() {
171
- return _json.jsonObject;
172
- }
173
- });
174
- Object.defineProperty(exports, "lazy", {
175
- enumerable: true,
176
- get: function get() {
177
- return _lazy.lazy;
178
- }
179
- });
180
- Object.defineProperty(exports, "map", {
181
- enumerable: true,
182
- get: function get() {
183
- return _utils.map;
184
- }
185
- });
186
- Object.defineProperty(exports, "mapping", {
187
- enumerable: true,
188
- get: function get() {
189
- return _mapping.mapping;
190
- }
191
- });
192
- Object.defineProperty(exports, "maybe", {
193
- enumerable: true,
194
- get: function get() {
195
- return _optional.maybe;
196
- }
197
- });
198
- Object.defineProperty(exports, "mixed", {
199
- enumerable: true,
200
- get: function get() {
201
- return _constants.mixed;
202
- }
203
- });
204
- Object.defineProperty(exports, "nonEmptyArray", {
205
- enumerable: true,
206
- get: function get() {
207
- return _array.nonEmptyArray;
208
- }
209
- });
210
- Object.defineProperty(exports, "nonEmptyString", {
211
- enumerable: true,
212
- get: function get() {
213
- return _string.nonEmptyString;
214
- }
215
- });
216
- Object.defineProperty(exports, "null_", {
217
- enumerable: true,
218
- get: function get() {
219
- return _constants.null_;
220
- }
221
- });
222
- Object.defineProperty(exports, "nullable", {
223
- enumerable: true,
224
- get: function get() {
225
- return _optional.nullable;
226
- }
227
- });
228
- Object.defineProperty(exports, "number", {
229
- enumerable: true,
230
- get: function get() {
231
- return _number.number;
232
- }
233
- });
234
- Object.defineProperty(exports, "numericBoolean", {
235
- enumerable: true,
236
- get: function get() {
237
- return _boolean.numericBoolean;
238
- }
239
- });
240
- Object.defineProperty(exports, "object", {
241
- enumerable: true,
242
- get: function get() {
243
- return _object.object;
244
- }
245
- });
246
- Object.defineProperty(exports, "oneOf", {
247
- enumerable: true,
248
- get: function get() {
249
- return _either.oneOf;
250
- }
251
- });
252
- Object.defineProperty(exports, "optional", {
253
- enumerable: true,
254
- get: function get() {
255
- return _optional.optional;
256
- }
257
- });
258
- Object.defineProperty(exports, "poja", {
259
- enumerable: true,
260
- get: function get() {
261
- return _array.poja;
262
- }
263
- });
264
- Object.defineProperty(exports, "pojo", {
265
- enumerable: true,
266
- get: function get() {
267
- return _object.pojo;
268
- }
269
- });
270
- Object.defineProperty(exports, "positiveInteger", {
271
- enumerable: true,
272
- get: function get() {
273
- return _number.positiveInteger;
274
- }
275
- });
276
- Object.defineProperty(exports, "positiveNumber", {
277
- enumerable: true,
278
- get: function get() {
279
- return _number.positiveNumber;
280
- }
281
- });
282
- Object.defineProperty(exports, "predicate", {
283
- enumerable: true,
284
- get: function get() {
285
- return _utils.predicate;
286
- }
287
- });
288
- Object.defineProperty(exports, "regex", {
289
- enumerable: true,
290
- get: function get() {
291
- return _string.regex;
292
- }
293
- });
294
- Object.defineProperty(exports, "string", {
295
- enumerable: true,
296
- get: function get() {
297
- return _string.string;
298
- }
299
- });
300
- Object.defineProperty(exports, "truthy", {
301
- enumerable: true,
302
- get: function get() {
303
- return _boolean.truthy;
304
- }
305
- });
306
- Object.defineProperty(exports, "tuple1", {
307
- enumerable: true,
308
- get: function get() {
309
- return _tuple.tuple1;
310
- }
311
- });
312
- Object.defineProperty(exports, "tuple2", {
313
- enumerable: true,
314
- get: function get() {
315
- return _tuple.tuple2;
316
- }
317
- });
318
- Object.defineProperty(exports, "tuple3", {
319
- enumerable: true,
320
- get: function get() {
321
- return _tuple.tuple3;
322
- }
323
- });
324
- Object.defineProperty(exports, "tuple4", {
325
- enumerable: true,
326
- get: function get() {
327
- return _tuple.tuple4;
328
- }
329
- });
330
- Object.defineProperty(exports, "tuple5", {
331
- enumerable: true,
332
- get: function get() {
333
- return _tuple.tuple5;
334
- }
335
- });
336
- Object.defineProperty(exports, "tuple6", {
337
- enumerable: true,
338
- get: function get() {
339
- return _tuple.tuple6;
340
- }
341
- });
342
- Object.defineProperty(exports, "undefined_", {
343
- enumerable: true,
344
- get: function get() {
345
- return _constants.undefined_;
346
- }
347
- });
348
- Object.defineProperty(exports, "unknown", {
349
- enumerable: true,
350
- get: function get() {
351
- return _constants.unknown;
352
- }
353
- });
354
- Object.defineProperty(exports, "url", {
355
- enumerable: true,
356
- get: function get() {
357
- return _string.url;
358
- }
359
- });
360
-
361
- var _guard = require("./guard");
362
-
363
- var _utils = require("./utils");
364
-
365
- var _array = require("./array");
366
-
367
- var _boolean = require("./boolean");
368
-
369
- var _constants = require("./constants");
370
-
371
- var _date = require("./date");
372
-
373
- var _describe = require("./describe");
374
-
375
- var _dispatch = require("./dispatch");
376
-
377
- var _either = require("./either");
378
-
379
- var _fail = require("./fail");
380
-
381
- var _instanceOf = require("./instanceOf");
382
-
383
- var _json = require("./json");
384
-
385
- var _lazy = require("./lazy");
386
-
387
- var _mapping = require("./mapping");
388
-
389
- var _number = require("./number");
390
-
391
- var _object = require("./object");
392
-
393
- var _optional = require("./optional");
394
-
395
- var _string = require("./string");
396
-
397
- var _tuple = require("./tuple");
package/cjs/instanceOf.js DELETED
@@ -1,17 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.instanceOf = instanceOf;
7
-
8
- var _debrief = require("debrief");
9
-
10
- var _lemons = require("lemons");
11
-
12
- function instanceOf(klass) {
13
- return function (blob) {
14
- return blob instanceof klass ? (0, _lemons.Ok)(blob) : (0, _lemons.Err)((0, _debrief.annotate)(blob, "Must be ".concat( // $FlowFixMe[incompatible-use] - klass.name is fine?
15
- klass.name, " instance")));
16
- };
17
- }
package/cjs/mapping.js DELETED
@@ -1,113 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.dict = dict;
7
- exports.mapping = mapping;
8
-
9
- var _debrief = require("debrief");
10
-
11
- var _lemons = require("lemons");
12
-
13
- var _object = require("./object");
14
-
15
- var _utils = require("./utils");
16
-
17
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
18
-
19
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
20
-
21
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
22
-
23
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
24
-
25
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
26
-
27
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
28
-
29
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
30
-
31
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
32
-
33
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
34
-
35
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
36
-
37
- /**
38
- * Given an object, will decode a Map of string keys to whatever values.
39
- *
40
- * For example, given a decoder for a Person, we can verify a Person lookup
41
- * table structure (of type Map<string, Person>) like so:
42
- *
43
- * mapping(person)
44
- *
45
- */
46
- function mapping(decoder) {
47
- return (0, _utils.compose)(_object.pojo, // $FlowFixMe[unclear-type] (not really an issue) - deliberate use of Object here
48
- function (blob) {
49
- var tuples = [];
50
- var errors = [];
51
- Object.keys(blob).forEach(function (key) {
52
- var value = blob[key];
53
- var result = decoder(value);
54
-
55
- try {
56
- var okValue = result.unwrap();
57
-
58
- if (errors.length === 0) {
59
- tuples.push([key, okValue]);
60
- }
61
- } catch (e) {
62
- /* istanbul ignore else */
63
- if ((0, _debrief.isAnnotation)(e)) {
64
- tuples.length = 0; // Clear the tuples array
65
-
66
- errors.push([key, e]);
67
- } else {
68
- // Otherwise, simply rethrow it
69
-
70
- /* istanbul ignore next */
71
- throw e;
72
- }
73
- }
74
- });
75
-
76
- if (errors.length > 0) {
77
- return (0, _lemons.Err)((0, _debrief.annotateFields)(blob, errors));
78
- } else {
79
- return (0, _lemons.Ok)(new Map(tuples));
80
- }
81
- });
82
- }
83
-
84
- function mapToObject(mapping) {
85
- var result = _objectSpread({}, null);
86
-
87
- var _iterator = _createForOfIteratorHelper(mapping.entries()),
88
- _step;
89
-
90
- try {
91
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
92
- var _step$value = _slicedToArray(_step.value, 2),
93
- k = _step$value[0],
94
- v = _step$value[1];
95
-
96
- result[k] = v;
97
- }
98
- } catch (err) {
99
- _iterator.e(err);
100
- } finally {
101
- _iterator.f();
102
- }
103
-
104
- return result;
105
- }
106
- /**
107
- * Like mapping(), but returns an object rather than a Map instance.
108
- */
109
-
110
-
111
- function dict(decoder) {
112
- return (0, _utils.map)(mapping(decoder), mapToObject);
113
- }
@@ -1,71 +0,0 @@
1
- // @flow strict
2
-
3
- import type { Annotation } from 'debrief';
4
- import { annotateFields, isAnnotation } from 'debrief';
5
- import { Err, Ok } from 'lemons';
6
-
7
- import { pojo } from './object';
8
- import type { Decoder } from './types';
9
- import { compose, map } from './utils';
10
-
11
- /**
12
- * Given an object, will decode a Map of string keys to whatever values.
13
- *
14
- * For example, given a decoder for a Person, we can verify a Person lookup
15
- * table structure (of type Map<string, Person>) like so:
16
- *
17
- * mapping(person)
18
- *
19
- */
20
- export function mapping<T>(decoder: Decoder<T>): Decoder<Map<string, T>> {
21
- return compose(
22
- pojo,
23
- // $FlowFixMe[unclear-type] (not really an issue) - deliberate use of Object here
24
- (blob: Object) => {
25
- let tuples: Array<[string, T]> = [];
26
- let errors: Array<[string, string | Annotation]> = [];
27
-
28
- Object.keys(blob).forEach((key: string) => {
29
- const value: T = blob[key];
30
- const result = decoder(value);
31
- try {
32
- const okValue = result.unwrap();
33
- if (errors.length === 0) {
34
- tuples.push([key, okValue]);
35
- }
36
- } catch (e) {
37
- /* istanbul ignore else */
38
- if (isAnnotation(e)) {
39
- tuples.length = 0; // Clear the tuples array
40
- errors.push([key, e]);
41
- } else {
42
- // Otherwise, simply rethrow it
43
- /* istanbul ignore next */
44
- throw e;
45
- }
46
- }
47
- });
48
-
49
- if (errors.length > 0) {
50
- return Err(annotateFields(blob, errors));
51
- } else {
52
- return Ok(new Map(tuples));
53
- }
54
- }
55
- );
56
- }
57
-
58
- function mapToObject<T>(mapping: Map<string, T>): { [string]: T } {
59
- const result: { [string]: T } = { ...null };
60
- for (const [k, v] of mapping.entries()) {
61
- result[k] = v;
62
- }
63
- return result;
64
- }
65
-
66
- /**
67
- * Like mapping(), but returns an object rather than a Map instance.
68
- */
69
- export function dict<T>(decoder: Decoder<T>): Decoder<{ [string]: T }> {
70
- return map(mapping(decoder), mapToObject);
71
- }
package/cjs/number.js DELETED
@@ -1,38 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.positiveNumber = exports.positiveInteger = exports.number = exports.integer = void 0;
7
-
8
- var _debrief = require("debrief");
9
-
10
- var _lemons = require("lemons");
11
-
12
- var _utils = require("./utils");
13
-
14
- var anyNumber = function anyNumber(blob) {
15
- return typeof blob === 'number' && !Number.isNaN(blob) ? (0, _lemons.Ok)(blob) : (0, _lemons.Err)((0, _debrief.annotate)(blob, 'Must be number'));
16
- };
17
-
18
- var isInteger = function isInteger(n) {
19
- return Number.isInteger(n);
20
- };
21
-
22
- var isFinite = function isFinite(n) {
23
- return Number.isFinite(n);
24
- };
25
-
26
- var number = (0, _utils.compose)(anyNumber, (0, _utils.predicate)(isFinite, 'Number must be finite'));
27
- exports.number = number;
28
- var positiveNumber = (0, _utils.compose)(number, (0, _utils.predicate)(function (n) {
29
- return n >= 0;
30
- }, 'Number must be positive')); // Integers
31
-
32
- exports.positiveNumber = positiveNumber;
33
- var integer = (0, _utils.compose)(number, (0, _utils.predicate)(isInteger, 'Number must be an integer'));
34
- exports.integer = integer;
35
- var positiveInteger = (0, _utils.compose)(integer, (0, _utils.predicate)(function (n) {
36
- return n >= 0;
37
- }, 'Number must be positive'));
38
- exports.positiveInteger = positiveInteger;