@kaiko.io/rescript-deser 7.0.0-alpha.1 → 7.0.0

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.
Files changed (61) hide show
  1. package/README.md +13 -2
  2. package/lib/bs/.compiler.log +2 -2
  3. package/lib/bs/build.ninja +0 -27
  4. package/lib/bs/compiler-info.json +8 -0
  5. package/lib/bs/src/Deser.ast +0 -0
  6. package/lib/bs/src/Deser.cmi +0 -0
  7. package/lib/bs/src/Deser.cmj +0 -0
  8. package/lib/bs/src/Deser.cmt +0 -0
  9. package/lib/bs/{___incremental → src}/Deser.res +19 -29
  10. package/lib/bs/tests/QUnit.ast +0 -0
  11. package/lib/bs/tests/QUnit.cmi +0 -0
  12. package/lib/bs/tests/QUnit.cmj +0 -0
  13. package/lib/bs/tests/QUnit.cmt +0 -0
  14. package/lib/bs/tests/QUnit.res +72 -0
  15. package/lib/bs/tests/index.ast +0 -0
  16. package/lib/bs/tests/index.cmi +0 -0
  17. package/lib/bs/tests/index.cmj +0 -0
  18. package/lib/bs/tests/index.cmt +0 -0
  19. package/lib/bs/{___incremental → tests}/index.res +24 -1
  20. package/lib/es6/src/Deser.js +297 -365
  21. package/lib/es6/tests/index.js +260 -241
  22. package/lib/js/src/Deser.js +293 -361
  23. package/lib/js/tests/index.js +261 -242
  24. package/lib/ocaml/.compiler.log +2 -0
  25. package/lib/ocaml/Deser.ast +0 -0
  26. package/lib/ocaml/Deser.cmi +0 -0
  27. package/lib/ocaml/Deser.cmj +0 -0
  28. package/lib/ocaml/Deser.cmt +0 -0
  29. package/lib/ocaml/Deser.res +341 -0
  30. package/lib/ocaml/QUnit.ast +0 -0
  31. package/lib/ocaml/QUnit.cmi +0 -0
  32. package/lib/ocaml/QUnit.cmj +0 -0
  33. package/lib/ocaml/QUnit.cmt +0 -0
  34. package/lib/ocaml/QUnit.res +72 -0
  35. package/lib/ocaml/index.ast +0 -0
  36. package/lib/ocaml/index.cmi +0 -0
  37. package/lib/ocaml/index.cmj +0 -0
  38. package/lib/ocaml/index.cmt +0 -0
  39. package/lib/ocaml/index.res +212 -0
  40. package/lib/rescript.lock +1 -0
  41. package/package.json +4 -6
  42. package/rescript.json +4 -6
  43. package/src/Deser.res +19 -29
  44. package/tests/QUnit.res +4 -4
  45. package/tests/index.res +24 -1
  46. package/yarn.lock +683 -0
  47. package/lib/bs/.bsbuild +0 -0
  48. package/lib/bs/.bsdeps +0 -9
  49. package/lib/bs/.ninja_log +0 -57
  50. package/lib/bs/.project-files-cache +0 -0
  51. package/lib/bs/.sourcedirs.json +0 -1
  52. package/lib/bs/___incremental/Deser.cmi +0 -0
  53. package/lib/bs/___incremental/Deser.cmj +0 -0
  54. package/lib/bs/___incremental/Deser.cmt +0 -0
  55. package/lib/bs/___incremental/index.cmi +0 -0
  56. package/lib/bs/___incremental/index.cmj +0 -0
  57. package/lib/bs/___incremental/index.cmt +0 -0
  58. package/lib/bs/install.ninja +0 -10
  59. package/lib/bs/src/Deser.d +0 -0
  60. package/lib/bs/tests/QUnit.d +0 -0
  61. package/lib/bs/tests/index.d +0 -1
@@ -1,11 +1,12 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
  'use strict';
3
3
 
4
- var Deser = require("../src/Deser.js");
5
- var Qunit = require("qunit");
6
- var Core__Result = require("@rescript/core/lib/js/src/Core__Result.js");
4
+ let Deser = require("../src/Deser.js");
5
+ let Qunit = require("qunit");
6
+ let Stdlib_Result = require("@rescript/runtime/lib/js/Stdlib_Result.js");
7
+ let Primitive_exceptions = require("@rescript/runtime/lib/js/Primitive_exceptions.js");
7
8
 
8
- var fields = {
9
+ let fields = {
9
10
  TAG: "Object",
10
11
  _0: [
11
12
  [
@@ -26,257 +27,275 @@ var fields = {
26
27
  ]
27
28
  };
28
29
 
29
- var Deserializer = Deser.MakeDeserializer({
30
- fields: fields
31
- });
30
+ let Deserializer = Deser.MakeDeserializer({
31
+ fields: fields
32
+ });
32
33
 
33
- var Appointment = {
34
+ let Appointment = {
34
35
  Deserializer: Deserializer
35
36
  };
36
37
 
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
- {
38
+ Qunit.module("Basic deserializer", param => {
39
+ let valid = [
40
+ [
41
+ {"note": "Bicentennial doctor's appointment", "date": "2100-01-01"},
42
+ {
43
+ note: "Bicentennial doctor's appointment",
44
+ date: new Date("2100-01-01"),
45
+ extra: undefined
46
+ }
47
+ ],
48
+ [
49
+ {
49
50
  "note": "Bicentennial doctor's appointment",
50
51
  "date": "2100-01-01",
51
52
  "extra": "Don't take your stop-aging pills the night before the appointment",
52
53
  },
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
- valid.forEach(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
- invalid.forEach(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
- }));
54
+ {
55
+ note: "Bicentennial doctor's appointment",
56
+ date: new Date("2100-01-01"),
57
+ extra: "Don't take your stop-aging pills the night before the appointment"
58
+ }
59
+ ]
60
+ ];
61
+ Qunit.test("Correctly deserializes data", qunit => {
62
+ qunit.expect(valid.length);
63
+ valid.forEach(param => {
64
+ let data = param[0];
65
+ console.log("Running sample", data);
66
+ let result = Deserializer.fromJSON(data);
67
+ if (result.TAG === "Ok") {
68
+ qunit.deepEqual(result._0, param[1], "result == expected");
69
+ return;
70
+ }
71
+ console.error(result._0);
72
+ });
73
+ });
74
+ let invalid = [[
75
+ "Missing non-optional field",
76
+ {"extra": "Bicentennial doctor's appointment", "date": "2100-01-01"}
77
+ ]];
78
+ Qunit.test("Correctly catches invalid data", qunit => {
79
+ qunit.expect(invalid.length);
80
+ invalid.forEach(param => {
81
+ let data = param[1];
82
+ console.log("Running sample", param[0], data);
83
+ let result = Deserializer.fromJSON(data);
84
+ if (result.TAG === "Ok") {
85
+ console.error("Invalid being accepted: ", result._0);
86
+ return;
87
+ }
88
+ console.log("Correctly detected:", result._0);
89
+ qunit.ok(true, true);
90
+ });
91
+ });
92
+ });
92
93
 
93
- Qunit.module("Recursive deserializer", (function (param) {
94
- var fields = {
95
- TAG: "Object",
96
- _0: [
97
- [
98
- "data",
99
- "Any"
100
- ],
101
- [
102
- "children",
94
+ Qunit.module("Recursive deserializer", param => {
95
+ let fields = {
96
+ TAG: "Object",
97
+ _0: [
98
+ [
99
+ "data",
100
+ "Any"
101
+ ],
102
+ [
103
+ "children",
104
+ {
105
+ TAG: "Array",
106
+ _0: "Self"
107
+ }
108
+ ]
109
+ ]
110
+ };
111
+ let DeserializerImpl = Deser.MakeDeserializer({
112
+ fields: fields
113
+ });
114
+ let checkFieldsSanity = DeserializerImpl.checkFieldsSanity;
115
+ let valid = [[
116
+ {"data": "A", "children": [{"data": "A1", "children": []}, {"data": "B", "children": [{"data": "C", "children": []}, {"data": "D", "children": []}]}]},
117
+ {
118
+ data: "A",
119
+ children: [
120
+ {
121
+ data: "A1",
122
+ children: []
123
+ },
124
+ {
125
+ data: "B",
126
+ children: [
103
127
  {
104
- TAG: "Array",
105
- _0: "Self"
128
+ data: "C",
129
+ children: []
130
+ },
131
+ {
132
+ data: "D",
133
+ children: []
106
134
  }
107
135
  ]
108
- ]
109
- };
110
- var DeserializerImpl = Deser.MakeDeserializer({
111
- fields: fields
112
- });
113
- var checkFieldsSanity = DeserializerImpl.checkFieldsSanity;
114
- var fromJSON = function (data) {
115
- return Core__Result.map(DeserializerImpl.fromJSON(data), (function (x) {
116
- return x;
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 = Deser.MakeDeserializer({
166
- fields: fields
167
- });
168
- qunit.expect(1);
169
- qunit.deepEqual(Core__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 = Deser.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
- valid.forEach(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 = Deser.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 = Deser.MakeDeserializer({
250
- fields: fields$1
251
- });
252
- var data = {"records": {"head": "A", "tail": {"head": "B"}},
136
+ }
137
+ ]
138
+ }
139
+ ]];
140
+ Qunit.test("Trivial recursion detection: Ok", qunit => {
141
+ qunit.expect(1);
142
+ qunit.deepEqual(checkFieldsSanity(), {
143
+ TAG: "Ok",
144
+ _0: undefined
145
+ }, "Ok");
146
+ });
147
+ Qunit.test("Infinite list", qunit => {
148
+ let fields = {
149
+ TAG: "Object",
150
+ _0: [
151
+ [
152
+ "head",
153
+ "String"
154
+ ],
155
+ [
156
+ "tail",
157
+ "Self"
158
+ ]
159
+ ]
160
+ };
161
+ let InfiniteList = Deser.MakeDeserializer({
162
+ fields: fields
163
+ });
164
+ qunit.expect(1);
165
+ qunit.deepEqual(Stdlib_Result.isError(InfiniteList.checkFieldsSanity()), true, "Ok");
166
+ });
167
+ Qunit.test("Finite list", qunit => {
168
+ let fields = {
169
+ TAG: "Object",
170
+ _0: [
171
+ [
172
+ "head",
173
+ "String"
174
+ ],
175
+ [
176
+ "tail",
177
+ {
178
+ TAG: "Optional",
179
+ _0: "Self"
180
+ }
181
+ ]
182
+ ]
183
+ };
184
+ let List = Deser.MakeDeserializer({
185
+ fields: fields
186
+ });
187
+ qunit.expect(1);
188
+ qunit.deepEqual(List.checkFieldsSanity(), {
189
+ TAG: "Ok",
190
+ _0: undefined
191
+ }, "Ok");
192
+ });
193
+ Qunit.test("Correctly deserializes recursive data", qunit => {
194
+ qunit.expect(valid.length);
195
+ valid.forEach(param => {
196
+ let data = param[0];
197
+ console.log("Running sample", data);
198
+ let result = Stdlib_Result.map(DeserializerImpl.fromJSON(data), x => x);
199
+ if (result.TAG === "Ok") {
200
+ qunit.deepEqual(result._0, param[1], "result == expected");
201
+ return;
202
+ }
203
+ console.error(result._0);
204
+ });
205
+ });
206
+ Qunit.test("Recursion in sub-deserializer", qunit => {
207
+ let fields = {
208
+ TAG: "Object",
209
+ _0: [
210
+ [
211
+ "head",
212
+ "String"
213
+ ],
214
+ [
215
+ "tail",
216
+ {
217
+ TAG: "Optional",
218
+ _0: "Self"
219
+ }
220
+ ]
221
+ ]
222
+ };
223
+ let List = Deser.MakeDeserializer({
224
+ fields: fields
225
+ });
226
+ let fields$1 = {
227
+ TAG: "Object",
228
+ _0: [
229
+ [
230
+ "records",
231
+ {
232
+ TAG: "Deserializer",
233
+ _0: List
234
+ }
235
+ ],
236
+ [
237
+ "next",
238
+ {
239
+ TAG: "Optional",
240
+ _0: "Self"
241
+ }
242
+ ]
243
+ ]
244
+ };
245
+ let Ledger = Deser.MakeDeserializer({
246
+ fields: fields$1
247
+ });
248
+ let data = {"records": {"head": "A", "tail": {"head": "B"}},
253
249
  "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
- }));
250
+ let expected = {
251
+ records: {
252
+ head: "A",
253
+ tail: {
254
+ head: "B",
255
+ tail: undefined
256
+ }
257
+ },
258
+ next: {
259
+ records: {
260
+ head: "A",
261
+ tail: {
262
+ head: "B",
263
+ tail: undefined
264
+ }
265
+ },
266
+ next: undefined
267
+ }
268
+ };
269
+ qunit.expect(1);
270
+ qunit.deepEqual(Ledger.fromJSON(data), {
271
+ TAG: "Ok",
272
+ _0: expected
273
+ }, "nice ledger");
274
+ });
275
+ });
276
+
277
+ Qunit.module("Type safety limits", param => {
278
+ Qunit.test("ill-defined deserializer can cheat the type system", qunit => {
279
+ let X = Deser.MakeDeserializer({
280
+ fields: {
281
+ TAG: "Array",
282
+ _0: "Int"
283
+ }
284
+ });
285
+ let data = [1];
286
+ qunit.throws(param => {
287
+ let illString = Stdlib_Result.getOr(X.fromJSON(data), "");
288
+ try {
289
+ console.info("Index", "This will fail with a type error", illString.charAt(0));
290
+ return;
291
+ } catch (raw_e) {
292
+ let e = Primitive_exceptions.internalToException(raw_e);
293
+ console.error(e);
294
+ throw e;
295
+ }
296
+ }, "Expected: TypeError: illString.charAt is not a function");
297
+ });
298
+ });
280
299
 
281
300
  exports.Appointment = Appointment;
282
301
  /* Deserializer Not a pure module */
@@ -0,0 +1,2 @@
1
+ #Start(1766181917581)
2
+ #Done(1766181917581)
Binary file
Binary file
Binary file
Binary file