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