@kaiko.io/rescript-deser 4.0.0-rc.3 → 4.0.0-rc.4

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.
@@ -0,0 +1,649 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+ 'use strict';
3
+
4
+ var Curry = require("rescript/lib/js/curry.js");
5
+ var Js_json = require("rescript/lib/js/js_json.js");
6
+ var Prelude = require("@kaiko.io/rescript-prelude/lib/js/src/Prelude.js");
7
+ var Caml_option = require("rescript/lib/js/caml_option.js");
8
+ var Caml_exceptions = require("rescript/lib/js/caml_exceptions.js");
9
+ var Caml_js_exceptions = require("rescript/lib/js/caml_js_exceptions.js");
10
+
11
+ var FieldValue = {};
12
+
13
+ var $$TypeError = /* @__PURE__ */Caml_exceptions.create("JSON.TypeError");
14
+
15
+ function usingString(f) {
16
+ return function (value) {
17
+ return f(value);
18
+ };
19
+ }
20
+
21
+ function usingInt(f) {
22
+ return function (value) {
23
+ return f(value);
24
+ };
25
+ }
26
+
27
+ function usingFloat(f) {
28
+ return function (value) {
29
+ return f(value);
30
+ };
31
+ }
32
+
33
+ function usingBoolean(f) {
34
+ return function (value) {
35
+ return f(value);
36
+ };
37
+ }
38
+
39
+ function usingArray(f) {
40
+ return function (value) {
41
+ return f(value);
42
+ };
43
+ }
44
+
45
+ function usingObject(f) {
46
+ return function (value) {
47
+ return f(value);
48
+ };
49
+ }
50
+
51
+ function variadicInt(hint, fromJs) {
52
+ return {
53
+ TAG: "Morphism",
54
+ _0: "Int",
55
+ _1: (function (value) {
56
+ var internalValue = fromJs(value);
57
+ if (internalValue !== undefined) {
58
+ return Caml_option.valFromOption(internalValue);
59
+ }
60
+ throw {
61
+ RE_EXN_ID: $$TypeError,
62
+ _1: "This Int(" + String(value) + ") not a valid value here. Hint: " + hint,
63
+ Error: new Error()
64
+ };
65
+ })
66
+ };
67
+ }
68
+
69
+ function variadicString(hint, fromJs) {
70
+ return {
71
+ TAG: "Morphism",
72
+ _0: "String",
73
+ _1: (function (value) {
74
+ var internalValue = fromJs(value);
75
+ if (internalValue !== undefined) {
76
+ return Caml_option.valFromOption(internalValue);
77
+ }
78
+ throw {
79
+ RE_EXN_ID: $$TypeError,
80
+ _1: "This String(\"" + value + "\") not a valid value here. Hint: " + hint,
81
+ Error: new Error()
82
+ };
83
+ })
84
+ };
85
+ }
86
+
87
+ function toString(type_) {
88
+ if (typeof type_ !== "object") {
89
+ switch (type_) {
90
+ case "Any" :
91
+ return "Any";
92
+ case "String" :
93
+ return "String";
94
+ case "Int" :
95
+ return "Integer";
96
+ case "Float" :
97
+ return "Float";
98
+ case "Boolean" :
99
+ return "Boolean";
100
+ case "Date" :
101
+ case "Datetime" :
102
+ return "Date";
103
+ case "Self" :
104
+ return "Self (recursive)";
105
+
106
+ }
107
+ } else {
108
+ switch (type_.TAG) {
109
+ case "Literal" :
110
+ return "Literal: " + type_._0;
111
+ case "Array" :
112
+ return "Array of " + toString(type_._0);
113
+ case "Tuple" :
114
+ return "Tuple of (" + type_._0.map(toString).join(", ") + ")";
115
+ case "Object" :
116
+ var desc = type_._0.map(function (param) {
117
+ return param[0] + ": " + toString(param[1]);
118
+ }).join(", ");
119
+ return "Object of {" + desc + "}";
120
+ case "Optional" :
121
+ case "OptionalWithDefault" :
122
+ return "Null of " + toString(type_._0);
123
+ case "Mapping" :
124
+ return "Mapping of " + toString(type_._0);
125
+ case "Deserializer" :
126
+ return type_._0.name;
127
+ case "Collection" :
128
+ return "Collection of " + type_._0.name;
129
+ case "DefaultWhenInvalid" :
130
+ return "Protected " + toString(type_._0);
131
+ case "Morphism" :
132
+ return toString(type_._0) + " to apply a morphism";
133
+
134
+ }
135
+ }
136
+ }
137
+
138
+ function _taggedToString(tagged) {
139
+ if (typeof tagged !== "object") {
140
+ switch (tagged) {
141
+ case "JSONFalse" :
142
+ return "Boolean(false)";
143
+ case "JSONTrue" :
144
+ return "Boolean(true)";
145
+ case "JSONNull" :
146
+ return "Null";
147
+
148
+ }
149
+ } else {
150
+ switch (tagged.TAG) {
151
+ case "JSONString" :
152
+ return "String(\"" + tagged._0 + "\")";
153
+ case "JSONNumber" :
154
+ return "Number(" + String(tagged._0) + ")";
155
+ case "JSONObject" :
156
+ return "Object(" + Prelude.default(JSON.stringify(tagged._0), "...") + ")";
157
+ case "JSONArray" :
158
+ return "Array(" + Prelude.default(JSON.stringify(tagged._0), "...") + ")";
159
+
160
+ }
161
+ }
162
+ }
163
+
164
+ function extractValue(values, field, shape, self) {
165
+ var value = Curry._2(Prelude.Dict.get, values, field);
166
+ if (value !== undefined) {
167
+ return fromUntagged(value, shape, self);
168
+ }
169
+ if (typeof shape === "object") {
170
+ switch (shape.TAG) {
171
+ case "OptionalWithDefault" :
172
+ return shape._1;
173
+ case "Optional" :
174
+ case "DefaultWhenInvalid" :
175
+ return fromUntagged(null, shape, self);
176
+ default:
177
+
178
+ }
179
+ }
180
+ throw {
181
+ RE_EXN_ID: $$TypeError,
182
+ _1: "Missing non-optional field '" + field + "'",
183
+ Error: new Error()
184
+ };
185
+ }
186
+
187
+ function fromUntagged(untagged, _shape, self) {
188
+ while(true) {
189
+ var shape = _shape;
190
+ var match = Js_json.classify(untagged);
191
+ var exit = 0;
192
+ var s;
193
+ var f;
194
+ if (typeof shape !== "object") {
195
+ switch (shape) {
196
+ case "Any" :
197
+ return untagged;
198
+ case "String" :
199
+ if (typeof match !== "object") {
200
+ exit = 1;
201
+ } else {
202
+ if (match.TAG === "JSONString") {
203
+ return match._0;
204
+ }
205
+ exit = 1;
206
+ }
207
+ break;
208
+ case "Int" :
209
+ if (typeof match !== "object") {
210
+ exit = 1;
211
+ } else {
212
+ if (match.TAG === "JSONNumber") {
213
+ return match._0 | 0;
214
+ }
215
+ exit = 1;
216
+ }
217
+ break;
218
+ case "Float" :
219
+ if (typeof match !== "object") {
220
+ exit = 1;
221
+ } else {
222
+ if (match.TAG === "JSONNumber") {
223
+ return match._0;
224
+ }
225
+ exit = 1;
226
+ }
227
+ break;
228
+ case "Boolean" :
229
+ if (typeof match !== "object") {
230
+ switch (match) {
231
+ case "JSONFalse" :
232
+ return false;
233
+ case "JSONTrue" :
234
+ return true;
235
+ default:
236
+ exit = 1;
237
+ }
238
+ } else {
239
+ exit = 1;
240
+ }
241
+ break;
242
+ case "Date" :
243
+ if (typeof match !== "object") {
244
+ exit = 1;
245
+ } else {
246
+ switch (match.TAG) {
247
+ case "JSONString" :
248
+ s = match._0;
249
+ exit = 2;
250
+ break;
251
+ case "JSONNumber" :
252
+ f = match._0;
253
+ exit = 3;
254
+ break;
255
+ default:
256
+ exit = 1;
257
+ }
258
+ }
259
+ break;
260
+ case "Datetime" :
261
+ if (typeof match !== "object") {
262
+ exit = 1;
263
+ } else {
264
+ switch (match.TAG) {
265
+ case "JSONString" :
266
+ s = match._0;
267
+ exit = 2;
268
+ break;
269
+ case "JSONNumber" :
270
+ f = match._0;
271
+ exit = 3;
272
+ break;
273
+ default:
274
+ exit = 1;
275
+ }
276
+ }
277
+ break;
278
+ case "Self" :
279
+ _shape = self;
280
+ continue ;
281
+
282
+ }
283
+ } else {
284
+ switch (shape.TAG) {
285
+ case "Literal" :
286
+ if (typeof match !== "object") {
287
+ exit = 1;
288
+ } else {
289
+ if (match.TAG === "JSONString") {
290
+ var text = match._0;
291
+ var expected = shape._0;
292
+ if (text === expected) {
293
+ return text;
294
+ }
295
+ throw {
296
+ RE_EXN_ID: $$TypeError,
297
+ _1: "Expecting literal " + expected + ", got " + text,
298
+ Error: new Error()
299
+ };
300
+ }
301
+ exit = 1;
302
+ }
303
+ break;
304
+ case "Array" :
305
+ if (typeof match !== "object") {
306
+ exit = 1;
307
+ } else {
308
+ if (match.TAG === "JSONArray") {
309
+ var shape$1 = shape._0;
310
+ return match._0.map((function(shape$1){
311
+ return function (item) {
312
+ return fromUntagged(item, shape$1, self);
313
+ }
314
+ }(shape$1)));
315
+ }
316
+ exit = 1;
317
+ }
318
+ break;
319
+ case "Tuple" :
320
+ if (typeof match !== "object") {
321
+ exit = 1;
322
+ } else {
323
+ if (match.TAG === "JSONArray") {
324
+ var items = match._0;
325
+ var bases = shape._0;
326
+ var lenbases = bases.length;
327
+ var lenitems = items.length;
328
+ if (lenbases === lenitems) {
329
+ return Curry._3(Prelude.$$Array.zipBy, items, bases, (function (i, b) {
330
+ return fromUntagged(i, b, self);
331
+ }));
332
+ }
333
+ throw {
334
+ RE_EXN_ID: $$TypeError,
335
+ _1: "Expecting " + String(lenbases) + " items, got " + String(lenitems),
336
+ Error: new Error()
337
+ };
338
+ }
339
+ exit = 1;
340
+ }
341
+ break;
342
+ case "Object" :
343
+ if (typeof match !== "object") {
344
+ exit = 1;
345
+ } else {
346
+ if (match.TAG === "JSONObject") {
347
+ var values = match._0;
348
+ return Curry._1(Prelude.Dict.fromArray, shape._0.map((function(values){
349
+ return function (param) {
350
+ var field = param[0];
351
+ var value;
352
+ try {
353
+ value = extractValue(values, field, param[1], self);
354
+ }
355
+ catch (raw_msg){
356
+ var msg = Caml_js_exceptions.internalToOCamlException(raw_msg);
357
+ if (msg.RE_EXN_ID === $$TypeError) {
358
+ throw {
359
+ RE_EXN_ID: $$TypeError,
360
+ _1: "Field \"" + field + "\": " + msg._1,
361
+ Error: new Error()
362
+ };
363
+ }
364
+ throw msg;
365
+ }
366
+ return [
367
+ field,
368
+ value
369
+ ];
370
+ }
371
+ }(values))));
372
+ }
373
+ exit = 1;
374
+ }
375
+ break;
376
+ case "Optional" :
377
+ var shape$2 = shape._0;
378
+ if (typeof match !== "object") {
379
+ if (match === "JSONNull") {
380
+ return undefined;
381
+ }
382
+ _shape = shape$2;
383
+ continue ;
384
+ } else {
385
+ _shape = shape$2;
386
+ continue ;
387
+ }
388
+ case "OptionalWithDefault" :
389
+ var shape$3 = shape._0;
390
+ if (typeof match !== "object") {
391
+ if (match === "JSONNull") {
392
+ return shape._1;
393
+ }
394
+ _shape = shape$3;
395
+ continue ;
396
+ } else {
397
+ _shape = shape$3;
398
+ continue ;
399
+ }
400
+ case "Mapping" :
401
+ if (typeof match !== "object") {
402
+ exit = 1;
403
+ } else {
404
+ if (match.TAG === "JSONObject") {
405
+ var f$1 = shape._0;
406
+ return Prelude.Dict.mapValues(match._0, (function(f$1){
407
+ return function (v) {
408
+ return fromUntagged(v, f$1, self);
409
+ }
410
+ }(f$1)));
411
+ }
412
+ exit = 1;
413
+ }
414
+ break;
415
+ case "Deserializer" :
416
+ var res = shape._0.fromJSON(untagged);
417
+ if (res.TAG === "Ok") {
418
+ return res._0;
419
+ }
420
+ throw {
421
+ RE_EXN_ID: $$TypeError,
422
+ _1: res._0,
423
+ Error: new Error()
424
+ };
425
+ case "Collection" :
426
+ if (typeof match !== "object") {
427
+ exit = 1;
428
+ } else {
429
+ if (match.TAG === "JSONArray") {
430
+ return Prelude.$$Array.keepSome(match._0.map((function(shape){
431
+ return function (param) {
432
+ return Curry._1(shape._0.fromJSON, param);
433
+ }
434
+ }(shape))).map(Prelude.Result.warn)).map(function (prim) {
435
+ return prim;
436
+ });
437
+ }
438
+ exit = 1;
439
+ }
440
+ break;
441
+ case "DefaultWhenInvalid" :
442
+ try {
443
+ return fromUntagged(untagged, shape._0, self);
444
+ }
445
+ catch (raw_msg){
446
+ var msg = Caml_js_exceptions.internalToOCamlException(raw_msg);
447
+ if (msg.RE_EXN_ID === $$TypeError) {
448
+ console.warn("Detected and ignore (with default): ", msg._1);
449
+ return shape._1;
450
+ }
451
+ throw msg;
452
+ }
453
+ case "Morphism" :
454
+ return shape._1(fromUntagged(untagged, shape._0, self));
455
+
456
+ }
457
+ }
458
+ switch (exit) {
459
+ case 1 :
460
+ throw {
461
+ RE_EXN_ID: $$TypeError,
462
+ _1: "Expected " + toString(shape) + ", but got " + _taggedToString(match) + " instead",
463
+ Error: new Error()
464
+ };
465
+ case 2 :
466
+ var r = new Date(s);
467
+ if (Number.isNaN(r.getDate())) {
468
+ throw {
469
+ RE_EXN_ID: $$TypeError,
470
+ _1: "Invalid date " + s,
471
+ Error: new Error()
472
+ };
473
+ }
474
+ return r;
475
+ case 3 :
476
+ var r$1 = new Date(f);
477
+ if (Number.isNaN(r$1.getDate())) {
478
+ throw {
479
+ RE_EXN_ID: $$TypeError,
480
+ _1: "Invalid date " + f.toString(),
481
+ Error: new Error()
482
+ };
483
+ }
484
+ return r$1;
485
+
486
+ }
487
+ };
488
+ }
489
+
490
+ function checkFieldsSanity(name, _fields, _optional) {
491
+ while(true) {
492
+ var optional = _optional;
493
+ var fields = _fields;
494
+ var exit = 0;
495
+ if (typeof fields !== "object") {
496
+ switch (fields) {
497
+ case "Any" :
498
+ case "Boolean" :
499
+ case "Date" :
500
+ case "Datetime" :
501
+ return {
502
+ TAG: "Ok",
503
+ _0: undefined
504
+ };
505
+ case "Self" :
506
+ if (optional) {
507
+ return {
508
+ TAG: "Ok",
509
+ _0: undefined
510
+ };
511
+ } else {
512
+ return {
513
+ TAG: "Error",
514
+ _0: name + ": Trivial infinite recursion 'let fields = Self'"
515
+ };
516
+ }
517
+ default:
518
+ return {
519
+ TAG: "Ok",
520
+ _0: undefined
521
+ };
522
+ }
523
+ } else {
524
+ switch (fields.TAG) {
525
+ case "Tuple" :
526
+ return Curry._2(Prelude.ManyResults.map, Prelude.ManyResults.bailU(fields._0.map((function(optional){
527
+ return function (field, index) {
528
+ return function () {
529
+ return checkFieldsSanity(name + "[" + String(index) + "]", field, optional);
530
+ };
531
+ }
532
+ }(optional)))), (function (param) {
533
+
534
+ }));
535
+ case "Object" :
536
+ return Curry._2(Prelude.ManyResults.map, Prelude.ManyResults.bailU(fields._0.map((function(optional){
537
+ return function (param) {
538
+ var field = param[1];
539
+ var fieldName = param[0];
540
+ return function () {
541
+ return checkFieldsSanity(name + "::" + fieldName, field, optional);
542
+ };
543
+ }
544
+ }(optional)))), (function (param) {
545
+
546
+ }));
547
+ case "Array" :
548
+ case "Mapping" :
549
+ _optional = true;
550
+ _fields = fields._0;
551
+ continue ;
552
+ case "Deserializer" :
553
+ case "Collection" :
554
+ exit = 2;
555
+ break;
556
+ case "Optional" :
557
+ case "OptionalWithDefault" :
558
+ case "DefaultWhenInvalid" :
559
+ exit = 1;
560
+ break;
561
+ case "Morphism" :
562
+ return {
563
+ TAG: "Ok",
564
+ _0: undefined
565
+ };
566
+ default:
567
+ return {
568
+ TAG: "Ok",
569
+ _0: undefined
570
+ };
571
+ }
572
+ }
573
+ switch (exit) {
574
+ case 1 :
575
+ _optional = true;
576
+ _fields = fields._0;
577
+ continue ;
578
+ case 2 :
579
+ var msg = fields._0.checkFieldsSanity();
580
+ if (msg.TAG === "Ok") {
581
+ return {
582
+ TAG: "Ok",
583
+ _0: undefined
584
+ };
585
+ } else {
586
+ return {
587
+ TAG: "Error",
588
+ _0: name + "/ " + msg._0
589
+ };
590
+ }
591
+
592
+ }
593
+ };
594
+ }
595
+
596
+ var Field = {
597
+ usingString: usingString,
598
+ usingInt: usingInt,
599
+ usingFloat: usingFloat,
600
+ usingBoolean: usingBoolean,
601
+ usingArray: usingArray,
602
+ usingObject: usingObject,
603
+ variadicInt: variadicInt,
604
+ variadicString: variadicString,
605
+ toString: toString,
606
+ _taggedToString: _taggedToString,
607
+ extractValue: extractValue,
608
+ fromUntagged: fromUntagged,
609
+ checkFieldsSanity: checkFieldsSanity
610
+ };
611
+
612
+ function MakeDeserializer(S) {
613
+ var fields = S.fields;
614
+ var name = "Deserializer " + "JSON" + ", " + "File \"JSON.res\", line 320, characters 39-47";
615
+ var checkFieldsSanity$1 = function () {
616
+ return checkFieldsSanity(name, fields, false);
617
+ };
618
+ var fromJSON = function (json) {
619
+ var res;
620
+ try {
621
+ res = fromUntagged(json, fields, fields);
622
+ }
623
+ catch (raw_e){
624
+ var e = Caml_js_exceptions.internalToOCamlException(raw_e);
625
+ if (e.RE_EXN_ID === $$TypeError) {
626
+ return {
627
+ TAG: "Error",
628
+ _0: e._1
629
+ };
630
+ }
631
+ throw e;
632
+ }
633
+ return {
634
+ TAG: "Ok",
635
+ _0: res
636
+ };
637
+ };
638
+ return {
639
+ name: name,
640
+ fromJSON: fromJSON,
641
+ checkFieldsSanity: checkFieldsSanity$1
642
+ };
643
+ }
644
+
645
+ exports.FieldValue = FieldValue;
646
+ exports.$$TypeError = $$TypeError;
647
+ exports.Field = Field;
648
+ exports.MakeDeserializer = MakeDeserializer;
649
+ /* No side effect */
@@ -0,0 +1,2 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+ /* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */