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