@kaiko.io/rescript-deser 4.0.0-rc.3 → 4.0.0-rc.5
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 +7 -6
- package/lib/bs/.compiler.log +2 -2
- package/lib/bs/.ninja_log +18 -5
- package/lib/bs/.sourcedirs.json +1 -0
- package/lib/bs/build.ninja +18 -5
- 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/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 +1 -0
- package/lib/es6/src/JSON.js +15 -11
- package/lib/es6/tests/QUnit.js +2 -0
- package/lib/es6/tests/index.js +284 -0
- package/lib/js/src/JSON.js +649 -0
- package/lib/js/tests/QUnit.js +2 -0
- package/lib/js/tests/index.js +283 -0
- package/package.json +3 -3
- package/lib/ocaml/.compiler.log +0 -2
- package/lib/ocaml/.ninja_log +0 -6
- 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 +0 -343
- /package/lib/{ocaml/install.stamp → bs/tests/QUnit.d} +0 -0
package/lib/bs/.bsbuild
CHANGED
|
Binary file
|
package/lib/bs/.bsdeps
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
11.0.0-rc.
|
|
2
|
-
/home/manu/src/
|
|
3
|
-
|
|
4
|
-
rescript.json 0x1.
|
|
5
|
-
|
|
1
|
+
11.0.0-rc.7
|
|
2
|
+
/home/manu/src/kaiko/rescript-deser
|
|
3
|
+
0
|
|
4
|
+
rescript.json 0x1.95f132e38e01fp+30
|
|
5
|
+
tests 0x1.93fb8b23e3f01p+30
|
|
6
|
+
src/ 0x1.95f132e38e01fp+30
|
|
6
7
|
===
|
|
7
|
-
/home/manu/src/
|
|
8
|
+
/home/manu/src/kaiko/rescript-deser/node_modules/rescript/linux/rescript.exe 0x1.95f128136353bp+30
|
package/lib/bs/.compiler.log
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
#Start(
|
|
2
|
-
#Done(
|
|
1
|
+
#Start(1702644950015)
|
|
2
|
+
#Done(1702644950052)
|
package/lib/bs/.ninja_log
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
# ninja log v6
|
|
2
|
-
0
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
9
|
|
2
|
+
0 6 1702644950019435248 tests/QUnit.ast 7223a540e3832541
|
|
3
|
+
1 6 1702644950019435248 tests/index.ast c5f8a64ed4e3d886
|
|
4
|
+
0 7 1702644950019435248 src/JSON.ast e5463df0847655c1
|
|
5
|
+
6 8 1702644950022768668 tests/QUnit.d 4a2631c992d93ce7
|
|
6
|
+
6 9 1702644950022768668 tests/index.d 5a4db9cdecd186b3
|
|
7
|
+
8 10 1702644950022768668 src/JSON.d cd2d6773c781340f
|
|
8
|
+
9 15 1702644950029435508 tests/QUnit.cmj 2795770c04d7b464
|
|
9
|
+
9 15 1702644950029435508 tests/QUnit.cmi 2795770c04d7b464
|
|
10
|
+
9 15 1702644950029435508 ../es6/tests/QUnit.js 2795770c04d7b464
|
|
11
|
+
9 15 1702644950029435508 ../js/tests/QUnit.js 2795770c04d7b464
|
|
12
|
+
10 27 1702644950039435767 src/JSON.cmj 7dad91a190b50ccb
|
|
13
|
+
10 27 1702644950039435767 src/JSON.cmi 7dad91a190b50ccb
|
|
14
|
+
10 27 1702644950039435767 ../es6/src/JSON.js 7dad91a190b50ccb
|
|
15
|
+
10 27 1702644950039435767 ../js/src/JSON.js 7dad91a190b50ccb
|
|
16
|
+
27 37 1702644950049436026 tests/index.cmj df4ef497c56ee724
|
|
17
|
+
27 37 1702644950049436026 tests/index.cmi df4ef497c56ee724
|
|
18
|
+
27 37 1702644950049436026 ../es6/tests/index.js df4ef497c56ee724
|
|
19
|
+
27 37 1702644950049436026 ../js/tests/index.js df4ef497c56ee724
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "dirs" : [ "tests" , "src/" ] , "pkgs" : [ [ "@kaiko.io/rescript-prelude" , "/home/manu/src/kaiko/rescript-deser/node_modules/@kaiko.io/rescript-prelude" ] ] , "generated" : [] }
|
package/lib/bs/build.ninja
CHANGED
|
@@ -1,14 +1,27 @@
|
|
|
1
1
|
rescript = 1
|
|
2
|
-
g_finger := /home/manu/src/
|
|
2
|
+
g_finger := /home/manu/src/kaiko/rescript-deser/node_modules/@kaiko.io/rescript-prelude/lib/ocaml/install.stamp
|
|
3
3
|
rule astj
|
|
4
|
-
command = /home/manu/src/
|
|
4
|
+
command = /home/manu/src/kaiko/rescript-deser/node_modules/rescript/linux/bsc.exe -warn-error +8+11+26+27+33+56 -bs-v 11.0.0-rc.7 -uncurried -absname -bs-ast -o $out $i
|
|
5
|
+
o tests/index.ast : astj ../../tests/index.res
|
|
6
|
+
rule deps_dev
|
|
7
|
+
command = /home/manu/src/kaiko/rescript-deser/node_modules/rescript/linux/bsb_helper.exe -g -hash 84aecc33f8594375b23a1a137b057f93 $in
|
|
8
|
+
restat = 1
|
|
9
|
+
o tests/index.d : deps_dev tests/index.ast
|
|
10
|
+
rule mij_dev
|
|
11
|
+
command = /home/manu/src/kaiko/rescript-deser/node_modules/rescript/linux/bsc.exe -I tests -I src/ -I /home/manu/src/kaiko/rescript-deser/node_modules/@kaiko.io/rescript-prelude/lib/ocaml -warn-error +8+11+26+27+33+56 -uncurried -bs-package-name @kaiko.io/rescript-deser -bs-package-output commonjs:lib/js/$in_d:.js -bs-package-output es6:lib/es6/$in_d:.js -bs-v $g_finger $i
|
|
12
|
+
dyndep = 1
|
|
13
|
+
restat = 1
|
|
14
|
+
o tests/index.cmj tests/index.cmi ../es6/tests/index.js ../js/tests/index.js : mij_dev tests/index.ast
|
|
15
|
+
o tests/QUnit.ast : astj ../../tests/QUnit.res
|
|
16
|
+
o tests/QUnit.d : deps_dev tests/QUnit.ast
|
|
17
|
+
o tests/QUnit.cmj tests/QUnit.cmi ../es6/tests/QUnit.js ../js/tests/QUnit.js : mij_dev tests/QUnit.ast
|
|
5
18
|
o src/JSON.ast : astj ../../src/JSON.res
|
|
6
19
|
rule deps
|
|
7
|
-
command = /home/manu/src/
|
|
20
|
+
command = /home/manu/src/kaiko/rescript-deser/node_modules/rescript/linux/bsb_helper.exe -hash 84aecc33f8594375b23a1a137b057f93 $in
|
|
8
21
|
restat = 1
|
|
9
22
|
o src/JSON.d : deps src/JSON.ast
|
|
10
23
|
rule mij
|
|
11
|
-
command = /home/manu/src/
|
|
24
|
+
command = /home/manu/src/kaiko/rescript-deser/node_modules/rescript/linux/bsc.exe -I src/ -I /home/manu/src/kaiko/rescript-deser/node_modules/@kaiko.io/rescript-prelude/lib/ocaml -warn-error +8+11+26+27+33+56 -uncurried -bs-package-name @kaiko.io/rescript-deser -bs-package-output commonjs:lib/js/$in_d:.js -bs-package-output es6:lib/es6/$in_d:.js -bs-v $g_finger $i
|
|
12
25
|
dyndep = 1
|
|
13
26
|
restat = 1
|
|
14
|
-
o src/JSON.cmj src/JSON.cmi ../es6/src/JSON.js : mij src/JSON.ast
|
|
27
|
+
o src/JSON.cmj src/JSON.cmi ../es6/src/JSON.js ../js/src/JSON.js : mij src/JSON.ast
|
package/lib/bs/src/JSON.ast
CHANGED
|
Binary file
|
package/lib/bs/src/JSON.cmi
CHANGED
|
Binary file
|
package/lib/bs/src/JSON.cmj
CHANGED
|
Binary file
|
package/lib/bs/src/JSON.cmt
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
tests/index.cmj : src/JSON.cmj src/JSON.cmi tests/QUnit.cmj tests/QUnit.cmi
|
package/lib/es6/src/JSON.js
CHANGED
|
@@ -110,11 +110,11 @@ function toString(type_) {
|
|
|
110
110
|
case "Array" :
|
|
111
111
|
return "Array of " + toString(type_._0);
|
|
112
112
|
case "Tuple" :
|
|
113
|
-
return "Tuple of (" +
|
|
113
|
+
return "Tuple of (" + type_._0.map(toString).join(", ") + ")";
|
|
114
114
|
case "Object" :
|
|
115
|
-
var desc =
|
|
116
|
-
|
|
117
|
-
|
|
115
|
+
var desc = type_._0.map(function (param) {
|
|
116
|
+
return param[0] + ": " + toString(param[1]);
|
|
117
|
+
}).join(", ");
|
|
118
118
|
return "Object of {" + desc + "}";
|
|
119
119
|
case "Optional" :
|
|
120
120
|
case "OptionalWithDefault" :
|
|
@@ -306,7 +306,7 @@ function fromUntagged(untagged, _shape, self) {
|
|
|
306
306
|
} else {
|
|
307
307
|
if (match.TAG === "JSONArray") {
|
|
308
308
|
var shape$1 = shape._0;
|
|
309
|
-
return
|
|
309
|
+
return match._0.map((function(shape$1){
|
|
310
310
|
return function (item) {
|
|
311
311
|
return fromUntagged(item, shape$1, self);
|
|
312
312
|
}
|
|
@@ -344,7 +344,7 @@ function fromUntagged(untagged, _shape, self) {
|
|
|
344
344
|
} else {
|
|
345
345
|
if (match.TAG === "JSONObject") {
|
|
346
346
|
var values = match._0;
|
|
347
|
-
return Curry._1(Prelude.Dict.fromArray,
|
|
347
|
+
return Curry._1(Prelude.Dict.fromArray, shape._0.map((function(values){
|
|
348
348
|
return function (param) {
|
|
349
349
|
var field = param[0];
|
|
350
350
|
var value;
|
|
@@ -426,9 +426,13 @@ function fromUntagged(untagged, _shape, self) {
|
|
|
426
426
|
exit = 1;
|
|
427
427
|
} else {
|
|
428
428
|
if (match.TAG === "JSONArray") {
|
|
429
|
-
return Prelude.$$Array.
|
|
430
|
-
|
|
431
|
-
|
|
429
|
+
return Prelude.$$Array.keepSome(match._0.map((function(shape){
|
|
430
|
+
return function (param) {
|
|
431
|
+
return Curry._1(shape._0.fromJSON, param);
|
|
432
|
+
}
|
|
433
|
+
}(shape))).map(Prelude.Result.warn)).map(function (prim) {
|
|
434
|
+
return prim;
|
|
435
|
+
});
|
|
432
436
|
}
|
|
433
437
|
exit = 1;
|
|
434
438
|
}
|
|
@@ -518,7 +522,7 @@ function checkFieldsSanity(name, _fields, _optional) {
|
|
|
518
522
|
} else {
|
|
519
523
|
switch (fields.TAG) {
|
|
520
524
|
case "Tuple" :
|
|
521
|
-
return Curry._2(Prelude.ManyResults.map, Prelude.ManyResults.bailU(
|
|
525
|
+
return Curry._2(Prelude.ManyResults.map, Prelude.ManyResults.bailU(fields._0.map((function(optional){
|
|
522
526
|
return function (field, index) {
|
|
523
527
|
return function () {
|
|
524
528
|
return checkFieldsSanity(name + "[" + String(index) + "]", field, optional);
|
|
@@ -528,7 +532,7 @@ function checkFieldsSanity(name, _fields, _optional) {
|
|
|
528
532
|
|
|
529
533
|
}));
|
|
530
534
|
case "Object" :
|
|
531
|
-
return Curry._2(Prelude.ManyResults.map, Prelude.ManyResults.bailU(
|
|
535
|
+
return Curry._2(Prelude.ManyResults.map, Prelude.ManyResults.bailU(fields._0.map((function(optional){
|
|
532
536
|
return function (param) {
|
|
533
537
|
var field = param[1];
|
|
534
538
|
var fieldName = param[0];
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
|
|
3
|
+
import * as $$JSON from "../src/JSON.js";
|
|
4
|
+
import * as Curry from "rescript/lib/es6/curry.js";
|
|
5
|
+
import * as Qunit from "qunit";
|
|
6
|
+
import * as Prelude from "@kaiko.io/rescript-prelude/lib/es6/src/Prelude.js";
|
|
7
|
+
|
|
8
|
+
var fields = {
|
|
9
|
+
TAG: "Object",
|
|
10
|
+
_0: [
|
|
11
|
+
[
|
|
12
|
+
"note",
|
|
13
|
+
"String"
|
|
14
|
+
],
|
|
15
|
+
[
|
|
16
|
+
"date",
|
|
17
|
+
"Date"
|
|
18
|
+
],
|
|
19
|
+
[
|
|
20
|
+
"extra",
|
|
21
|
+
{
|
|
22
|
+
TAG: "Optional",
|
|
23
|
+
_0: "String"
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
]
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
var Deserializer = $$JSON.MakeDeserializer({
|
|
30
|
+
fields: fields
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
var Appointment = {
|
|
34
|
+
Deserializer: Deserializer
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
Qunit.module("Basic deserializer", (function (param) {
|
|
38
|
+
var valid = [
|
|
39
|
+
[
|
|
40
|
+
{"note": "Bicentennial doctor's appointment", "date": "2100-01-01"},
|
|
41
|
+
{
|
|
42
|
+
note: "Bicentennial doctor's appointment",
|
|
43
|
+
date: new Date("2100-01-01"),
|
|
44
|
+
extra: undefined
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
{
|
|
49
|
+
"note": "Bicentennial doctor's appointment",
|
|
50
|
+
"date": "2100-01-01",
|
|
51
|
+
"extra": "Don't take your stop-aging pills the night before the appointment",
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
note: "Bicentennial doctor's appointment",
|
|
55
|
+
date: new Date("2100-01-01"),
|
|
56
|
+
extra: "Don't take your stop-aging pills the night before the appointment"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
];
|
|
60
|
+
Qunit.test("Correctly deserializes data", (function (qunit) {
|
|
61
|
+
qunit.expect(valid.length);
|
|
62
|
+
Curry._2(Prelude.$$Array.forEach, valid, (function (param) {
|
|
63
|
+
var data = param[0];
|
|
64
|
+
console.log("Running sample", data);
|
|
65
|
+
var result = Deserializer.fromJSON(data);
|
|
66
|
+
if (result.TAG === "Ok") {
|
|
67
|
+
qunit.deepEqual(result._0, param[1], "result == expected");
|
|
68
|
+
return ;
|
|
69
|
+
}
|
|
70
|
+
console.error(result._0);
|
|
71
|
+
}));
|
|
72
|
+
}));
|
|
73
|
+
var invalid = [[
|
|
74
|
+
"Missing non-optional field",
|
|
75
|
+
{"extra": "Bicentennial doctor's appointment", "date": "2100-01-01"}
|
|
76
|
+
]];
|
|
77
|
+
Qunit.test("Correctly catches invalid data", (function (qunit) {
|
|
78
|
+
qunit.expect(invalid.length);
|
|
79
|
+
Curry._2(Prelude.$$Array.forEach, invalid, (function (param) {
|
|
80
|
+
var data = param[1];
|
|
81
|
+
console.log("Running sample", param[0], data);
|
|
82
|
+
var result = Deserializer.fromJSON(data);
|
|
83
|
+
if (result.TAG === "Ok") {
|
|
84
|
+
console.error("Invalid being accepted: ", result._0);
|
|
85
|
+
return ;
|
|
86
|
+
}
|
|
87
|
+
console.log("Correctly detected:", result._0);
|
|
88
|
+
qunit.ok(true, true);
|
|
89
|
+
}));
|
|
90
|
+
}));
|
|
91
|
+
}));
|
|
92
|
+
|
|
93
|
+
Qunit.module("Recursive deserializer", (function (param) {
|
|
94
|
+
var fields = {
|
|
95
|
+
TAG: "Object",
|
|
96
|
+
_0: [
|
|
97
|
+
[
|
|
98
|
+
"data",
|
|
99
|
+
"Any"
|
|
100
|
+
],
|
|
101
|
+
[
|
|
102
|
+
"children",
|
|
103
|
+
{
|
|
104
|
+
TAG: "Array",
|
|
105
|
+
_0: "Self"
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
]
|
|
109
|
+
};
|
|
110
|
+
var DeserializerImpl = $$JSON.MakeDeserializer({
|
|
111
|
+
fields: fields
|
|
112
|
+
});
|
|
113
|
+
var checkFieldsSanity = DeserializerImpl.checkFieldsSanity;
|
|
114
|
+
var fromJSON = function (data) {
|
|
115
|
+
return Curry._2(Prelude.Result.map, DeserializerImpl.fromJSON(data), (function (prim) {
|
|
116
|
+
return prim;
|
|
117
|
+
}));
|
|
118
|
+
};
|
|
119
|
+
var valid = [[
|
|
120
|
+
{"data": "A", "children": [{"data": "A1", "children": []}, {"data": "B", "children": [{"data": "C", "children": []}, {"data": "D", "children": []}]}]},
|
|
121
|
+
{
|
|
122
|
+
data: "A",
|
|
123
|
+
children: [
|
|
124
|
+
{
|
|
125
|
+
data: "A1",
|
|
126
|
+
children: []
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
data: "B",
|
|
130
|
+
children: [
|
|
131
|
+
{
|
|
132
|
+
data: "C",
|
|
133
|
+
children: []
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
data: "D",
|
|
137
|
+
children: []
|
|
138
|
+
}
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
]];
|
|
144
|
+
Qunit.test("Trivial recursion detection: Ok", (function (qunit) {
|
|
145
|
+
qunit.expect(1);
|
|
146
|
+
qunit.deepEqual(checkFieldsSanity(), {
|
|
147
|
+
TAG: "Ok",
|
|
148
|
+
_0: undefined
|
|
149
|
+
}, "Ok");
|
|
150
|
+
}));
|
|
151
|
+
Qunit.test("Infinite list", (function (qunit) {
|
|
152
|
+
var fields = {
|
|
153
|
+
TAG: "Object",
|
|
154
|
+
_0: [
|
|
155
|
+
[
|
|
156
|
+
"head",
|
|
157
|
+
"String"
|
|
158
|
+
],
|
|
159
|
+
[
|
|
160
|
+
"tail",
|
|
161
|
+
"Self"
|
|
162
|
+
]
|
|
163
|
+
]
|
|
164
|
+
};
|
|
165
|
+
var InfiniteList = $$JSON.MakeDeserializer({
|
|
166
|
+
fields: fields
|
|
167
|
+
});
|
|
168
|
+
qunit.expect(1);
|
|
169
|
+
qunit.deepEqual(Curry._1(Prelude.Result.isError, InfiniteList.checkFieldsSanity()), true, "Ok");
|
|
170
|
+
}));
|
|
171
|
+
Qunit.test("Finite list", (function (qunit) {
|
|
172
|
+
var fields = {
|
|
173
|
+
TAG: "Object",
|
|
174
|
+
_0: [
|
|
175
|
+
[
|
|
176
|
+
"head",
|
|
177
|
+
"String"
|
|
178
|
+
],
|
|
179
|
+
[
|
|
180
|
+
"tail",
|
|
181
|
+
{
|
|
182
|
+
TAG: "Optional",
|
|
183
|
+
_0: "Self"
|
|
184
|
+
}
|
|
185
|
+
]
|
|
186
|
+
]
|
|
187
|
+
};
|
|
188
|
+
var List = $$JSON.MakeDeserializer({
|
|
189
|
+
fields: fields
|
|
190
|
+
});
|
|
191
|
+
qunit.expect(1);
|
|
192
|
+
qunit.deepEqual(List.checkFieldsSanity(), {
|
|
193
|
+
TAG: "Ok",
|
|
194
|
+
_0: undefined
|
|
195
|
+
}, "Ok");
|
|
196
|
+
}));
|
|
197
|
+
Qunit.test("Correctly deserializes recursive data", (function (qunit) {
|
|
198
|
+
qunit.expect(valid.length);
|
|
199
|
+
Curry._2(Prelude.$$Array.forEach, valid, (function (param) {
|
|
200
|
+
var data = param[0];
|
|
201
|
+
console.log("Running sample", data);
|
|
202
|
+
var result = fromJSON(data);
|
|
203
|
+
if (result.TAG === "Ok") {
|
|
204
|
+
qunit.deepEqual(result._0, param[1], "result == expected");
|
|
205
|
+
return ;
|
|
206
|
+
}
|
|
207
|
+
console.error(result._0);
|
|
208
|
+
}));
|
|
209
|
+
}));
|
|
210
|
+
Qunit.test("Recursion in sub-deserializer", (function (qunit) {
|
|
211
|
+
var fields = {
|
|
212
|
+
TAG: "Object",
|
|
213
|
+
_0: [
|
|
214
|
+
[
|
|
215
|
+
"head",
|
|
216
|
+
"String"
|
|
217
|
+
],
|
|
218
|
+
[
|
|
219
|
+
"tail",
|
|
220
|
+
{
|
|
221
|
+
TAG: "Optional",
|
|
222
|
+
_0: "Self"
|
|
223
|
+
}
|
|
224
|
+
]
|
|
225
|
+
]
|
|
226
|
+
};
|
|
227
|
+
var List = $$JSON.MakeDeserializer({
|
|
228
|
+
fields: fields
|
|
229
|
+
});
|
|
230
|
+
var fields$1 = {
|
|
231
|
+
TAG: "Object",
|
|
232
|
+
_0: [
|
|
233
|
+
[
|
|
234
|
+
"records",
|
|
235
|
+
{
|
|
236
|
+
TAG: "Deserializer",
|
|
237
|
+
_0: List
|
|
238
|
+
}
|
|
239
|
+
],
|
|
240
|
+
[
|
|
241
|
+
"next",
|
|
242
|
+
{
|
|
243
|
+
TAG: "Optional",
|
|
244
|
+
_0: "Self"
|
|
245
|
+
}
|
|
246
|
+
]
|
|
247
|
+
]
|
|
248
|
+
};
|
|
249
|
+
var Ledger = $$JSON.MakeDeserializer({
|
|
250
|
+
fields: fields$1
|
|
251
|
+
});
|
|
252
|
+
var data = {"records": {"head": "A", "tail": {"head": "B"}},
|
|
253
|
+
"next": {"records": {"head": "A", "tail": {"head": "B"}}}};
|
|
254
|
+
var expected = {
|
|
255
|
+
records: {
|
|
256
|
+
head: "A",
|
|
257
|
+
tail: {
|
|
258
|
+
head: "B",
|
|
259
|
+
tail: undefined
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
next: {
|
|
263
|
+
records: {
|
|
264
|
+
head: "A",
|
|
265
|
+
tail: {
|
|
266
|
+
head: "B",
|
|
267
|
+
tail: undefined
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
next: undefined
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
qunit.expect(1);
|
|
274
|
+
qunit.deepEqual(Ledger.fromJSON(data), {
|
|
275
|
+
TAG: "Ok",
|
|
276
|
+
_0: expected
|
|
277
|
+
}, "nice ledger");
|
|
278
|
+
}));
|
|
279
|
+
}));
|
|
280
|
+
|
|
281
|
+
export {
|
|
282
|
+
Appointment ,
|
|
283
|
+
}
|
|
284
|
+
/* Deserializer Not a pure module */
|