@kaiko.io/rescript-deser 4.0.0-rc.1 → 4.0.0-rc.3
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.
- package/lib/bs/.bsbuild +0 -0
- package/lib/bs/.bsdeps +5 -6
- package/lib/bs/.compiler.log +2 -2
- package/lib/bs/.ninja_log +5 -18
- package/lib/bs/build.ninja +5 -18
- package/lib/bs/src/JSON.ast +0 -0
- package/lib/bs/src/JSON.cmi +0 -0
- package/lib/bs/src/JSON.cmj +0 -0
- package/lib/bs/src/JSON.cmt +0 -0
- package/lib/es6/src/JSON.js +1 -27
- package/lib/ocaml/.compiler.log +2 -0
- package/lib/ocaml/.ninja_log +6 -0
- package/lib/ocaml/JSON.cmi +0 -0
- package/lib/ocaml/JSON.cmj +0 -0
- package/lib/ocaml/JSON.cmt +0 -0
- package/lib/ocaml/JSON.res +343 -0
- package/package.json +4 -4
- package/src/JSON.res +9 -37
- package/lib/bs/.sourcedirs.json +0 -1
- package/lib/bs/tests/QUnit.ast +0 -0
- package/lib/bs/tests/QUnit.cmi +0 -0
- package/lib/bs/tests/QUnit.cmj +0 -0
- package/lib/bs/tests/QUnit.cmt +0 -0
- package/lib/bs/tests/index.ast +0 -0
- package/lib/bs/tests/index.cmi +0 -0
- package/lib/bs/tests/index.cmj +0 -0
- package/lib/bs/tests/index.cmt +0 -0
- package/lib/bs/tests/index.d +0 -1
- package/lib/es6/tests/QUnit.js +0 -2
- package/lib/es6/tests/index.js +0 -288
- package/lib/js/src/JSON.js +0 -671
- package/lib/js/tests/QUnit.js +0 -2
- package/lib/js/tests/index.js +0 -287
- /package/lib/{bs/tests/QUnit.d → ocaml/install.stamp} +0 -0
package/lib/js/src/JSON.js
DELETED
|
@@ -1,671 +0,0 @@
|
|
|
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 (" + Prelude.$$Array.map(type_._0, toString).join(", ") + ")";
|
|
115
|
-
case "Object" :
|
|
116
|
-
var desc = Prelude.$$Array.map(type_._0, (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 Prelude.$$Array.map(match._0, (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, Prelude.$$Array.map(shape._0, (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.map(Prelude.$$Array.keepSome(Prelude.$$Array.map(Prelude.$$Array.map(match._0, shape._0.fromJSON), Prelude.Result.warn)), (function (prim) {
|
|
431
|
-
return prim;
|
|
432
|
-
}));
|
|
433
|
-
}
|
|
434
|
-
exit = 1;
|
|
435
|
-
}
|
|
436
|
-
break;
|
|
437
|
-
case "DefaultWhenInvalid" :
|
|
438
|
-
try {
|
|
439
|
-
return fromUntagged(untagged, shape._0, self);
|
|
440
|
-
}
|
|
441
|
-
catch (raw_msg){
|
|
442
|
-
var msg = Caml_js_exceptions.internalToOCamlException(raw_msg);
|
|
443
|
-
if (msg.RE_EXN_ID === $$TypeError) {
|
|
444
|
-
console.warn("Detected and ignore (with default): ", msg._1);
|
|
445
|
-
return shape._1;
|
|
446
|
-
}
|
|
447
|
-
throw msg;
|
|
448
|
-
}
|
|
449
|
-
case "Morphism" :
|
|
450
|
-
return shape._1(fromUntagged(untagged, shape._0, self));
|
|
451
|
-
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
switch (exit) {
|
|
455
|
-
case 1 :
|
|
456
|
-
throw {
|
|
457
|
-
RE_EXN_ID: $$TypeError,
|
|
458
|
-
_1: "Expected " + toString(shape) + ", but got " + _taggedToString(match) + " instead",
|
|
459
|
-
Error: new Error()
|
|
460
|
-
};
|
|
461
|
-
case 2 :
|
|
462
|
-
var r = new Date(s);
|
|
463
|
-
if (Number.isNaN(r.getDate())) {
|
|
464
|
-
throw {
|
|
465
|
-
RE_EXN_ID: $$TypeError,
|
|
466
|
-
_1: "Invalid date " + s,
|
|
467
|
-
Error: new Error()
|
|
468
|
-
};
|
|
469
|
-
}
|
|
470
|
-
return r;
|
|
471
|
-
case 3 :
|
|
472
|
-
var r$1 = new Date(f);
|
|
473
|
-
if (Number.isNaN(r$1.getDate())) {
|
|
474
|
-
throw {
|
|
475
|
-
RE_EXN_ID: $$TypeError,
|
|
476
|
-
_1: "Invalid date " + f.toString(),
|
|
477
|
-
Error: new Error()
|
|
478
|
-
};
|
|
479
|
-
}
|
|
480
|
-
return r$1;
|
|
481
|
-
|
|
482
|
-
}
|
|
483
|
-
};
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
function checkFieldsSanity(name, _fields, _optional) {
|
|
487
|
-
while(true) {
|
|
488
|
-
var optional = _optional;
|
|
489
|
-
var fields = _fields;
|
|
490
|
-
var exit = 0;
|
|
491
|
-
if (typeof fields !== "object") {
|
|
492
|
-
switch (fields) {
|
|
493
|
-
case "Any" :
|
|
494
|
-
case "Boolean" :
|
|
495
|
-
case "Date" :
|
|
496
|
-
case "Datetime" :
|
|
497
|
-
return {
|
|
498
|
-
TAG: "Ok",
|
|
499
|
-
_0: undefined
|
|
500
|
-
};
|
|
501
|
-
case "Self" :
|
|
502
|
-
if (optional) {
|
|
503
|
-
return {
|
|
504
|
-
TAG: "Ok",
|
|
505
|
-
_0: undefined
|
|
506
|
-
};
|
|
507
|
-
} else {
|
|
508
|
-
return {
|
|
509
|
-
TAG: "Error",
|
|
510
|
-
_0: name + ": Trivial infinite recursion 'let fields = Self'"
|
|
511
|
-
};
|
|
512
|
-
}
|
|
513
|
-
default:
|
|
514
|
-
return {
|
|
515
|
-
TAG: "Ok",
|
|
516
|
-
_0: undefined
|
|
517
|
-
};
|
|
518
|
-
}
|
|
519
|
-
} else {
|
|
520
|
-
switch (fields.TAG) {
|
|
521
|
-
case "Tuple" :
|
|
522
|
-
return Curry._2(Prelude.ManyResults.map, Prelude.ManyResults.bailU(Prelude.$$Array.mapWithIndex(fields._0, (function(optional){
|
|
523
|
-
return function (field, index) {
|
|
524
|
-
return function () {
|
|
525
|
-
return checkFieldsSanity(name + "[" + String(index) + "]", field, optional);
|
|
526
|
-
};
|
|
527
|
-
}
|
|
528
|
-
}(optional)))), (function (param) {
|
|
529
|
-
|
|
530
|
-
}));
|
|
531
|
-
case "Object" :
|
|
532
|
-
return Curry._2(Prelude.ManyResults.map, Prelude.ManyResults.bailU(Prelude.$$Array.map(fields._0, (function(optional){
|
|
533
|
-
return function (param) {
|
|
534
|
-
var field = param[1];
|
|
535
|
-
var fieldName = param[0];
|
|
536
|
-
return function () {
|
|
537
|
-
return checkFieldsSanity(name + "::" + fieldName, field, optional);
|
|
538
|
-
};
|
|
539
|
-
}
|
|
540
|
-
}(optional)))), (function (param) {
|
|
541
|
-
|
|
542
|
-
}));
|
|
543
|
-
case "Array" :
|
|
544
|
-
case "Mapping" :
|
|
545
|
-
_optional = true;
|
|
546
|
-
_fields = fields._0;
|
|
547
|
-
continue ;
|
|
548
|
-
case "Deserializer" :
|
|
549
|
-
case "Collection" :
|
|
550
|
-
exit = 2;
|
|
551
|
-
break;
|
|
552
|
-
case "Optional" :
|
|
553
|
-
case "OptionalWithDefault" :
|
|
554
|
-
case "DefaultWhenInvalid" :
|
|
555
|
-
exit = 1;
|
|
556
|
-
break;
|
|
557
|
-
case "Morphism" :
|
|
558
|
-
return {
|
|
559
|
-
TAG: "Ok",
|
|
560
|
-
_0: undefined
|
|
561
|
-
};
|
|
562
|
-
default:
|
|
563
|
-
return {
|
|
564
|
-
TAG: "Ok",
|
|
565
|
-
_0: undefined
|
|
566
|
-
};
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
switch (exit) {
|
|
570
|
-
case 1 :
|
|
571
|
-
_optional = true;
|
|
572
|
-
_fields = fields._0;
|
|
573
|
-
continue ;
|
|
574
|
-
case 2 :
|
|
575
|
-
var msg = fields._0.checkFieldsSanity();
|
|
576
|
-
if (msg.TAG === "Ok") {
|
|
577
|
-
return {
|
|
578
|
-
TAG: "Ok",
|
|
579
|
-
_0: undefined
|
|
580
|
-
};
|
|
581
|
-
} else {
|
|
582
|
-
return {
|
|
583
|
-
TAG: "Error",
|
|
584
|
-
_0: name + "/ " + msg._0
|
|
585
|
-
};
|
|
586
|
-
}
|
|
587
|
-
|
|
588
|
-
}
|
|
589
|
-
};
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
var Field = {
|
|
593
|
-
usingString: usingString,
|
|
594
|
-
usingInt: usingInt,
|
|
595
|
-
usingFloat: usingFloat,
|
|
596
|
-
usingBoolean: usingBoolean,
|
|
597
|
-
usingArray: usingArray,
|
|
598
|
-
usingObject: usingObject,
|
|
599
|
-
variadicInt: variadicInt,
|
|
600
|
-
variadicString: variadicString,
|
|
601
|
-
toString: toString,
|
|
602
|
-
_taggedToString: _taggedToString,
|
|
603
|
-
extractValue: extractValue,
|
|
604
|
-
fromUntagged: fromUntagged,
|
|
605
|
-
checkFieldsSanity: checkFieldsSanity
|
|
606
|
-
};
|
|
607
|
-
|
|
608
|
-
function MakeDeserializer(S) {
|
|
609
|
-
var fields = S.fields;
|
|
610
|
-
var name = "Deserializer " + "JSON" + ", " + "File \"JSON.res\", line 329, characters 39-47";
|
|
611
|
-
var checkFieldsSanity$1 = function () {
|
|
612
|
-
return checkFieldsSanity(name, fields, false);
|
|
613
|
-
};
|
|
614
|
-
var fromJSON = function (json) {
|
|
615
|
-
var res;
|
|
616
|
-
try {
|
|
617
|
-
res = fromUntagged(json, fields, fields);
|
|
618
|
-
}
|
|
619
|
-
catch (raw_e){
|
|
620
|
-
var e = Caml_js_exceptions.internalToOCamlException(raw_e);
|
|
621
|
-
if (e.RE_EXN_ID === $$TypeError) {
|
|
622
|
-
return {
|
|
623
|
-
TAG: "Error",
|
|
624
|
-
_0: e._1
|
|
625
|
-
};
|
|
626
|
-
}
|
|
627
|
-
throw e;
|
|
628
|
-
}
|
|
629
|
-
return {
|
|
630
|
-
TAG: "Ok",
|
|
631
|
-
_0: res
|
|
632
|
-
};
|
|
633
|
-
};
|
|
634
|
-
var fromAny = function (any) {
|
|
635
|
-
var match = typeof any;
|
|
636
|
-
if (match === "string") {
|
|
637
|
-
var parsed;
|
|
638
|
-
try {
|
|
639
|
-
parsed = JSON.parse(any);
|
|
640
|
-
}
|
|
641
|
-
catch (exn){
|
|
642
|
-
return {
|
|
643
|
-
TAG: "Error",
|
|
644
|
-
_0: "Could parse string as JSON"
|
|
645
|
-
};
|
|
646
|
-
}
|
|
647
|
-
return fromJSON(parsed);
|
|
648
|
-
}
|
|
649
|
-
try {
|
|
650
|
-
return fromJSON(any);
|
|
651
|
-
}
|
|
652
|
-
catch (exn$1){
|
|
653
|
-
return {
|
|
654
|
-
TAG: "Error",
|
|
655
|
-
_0: "Could not deserialize the data"
|
|
656
|
-
};
|
|
657
|
-
}
|
|
658
|
-
};
|
|
659
|
-
return {
|
|
660
|
-
name: name,
|
|
661
|
-
fromJSON: fromJSON,
|
|
662
|
-
fromAny: fromAny,
|
|
663
|
-
checkFieldsSanity: checkFieldsSanity$1
|
|
664
|
-
};
|
|
665
|
-
}
|
|
666
|
-
|
|
667
|
-
exports.FieldValue = FieldValue;
|
|
668
|
-
exports.$$TypeError = $$TypeError;
|
|
669
|
-
exports.Field = Field;
|
|
670
|
-
exports.MakeDeserializer = MakeDeserializer;
|
|
671
|
-
/* No side effect */
|
package/lib/js/tests/QUnit.js
DELETED