bucklescript-tea
Version:
TEA for Bucklescript
1,694 lines (1,603 loc) • 46 kB
JavaScript
// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE
;
var List = require("bs-platform/lib/js/list.js");
var $$Array = require("bs-platform/lib/js/array.js");
var Block = require("bs-platform/lib/js/block.js");
var Curry = require("bs-platform/lib/js/curry.js");
var Js_dict = require("bs-platform/lib/js/js_dict.js");
var Web_json = require("./web_json.js");
var Caml_array = require("bs-platform/lib/js/caml_array.js");
var Pervasives = require("bs-platform/lib/js/pervasives.js");
var Tea_result = require("./tea_result.js");
var Caml_option = require("bs-platform/lib/js/caml_option.js");
var Caml_primitive = require("bs-platform/lib/js/caml_primitive.js");
var Caml_exceptions = require("bs-platform/lib/js/caml_exceptions.js");
var Caml_js_exceptions = require("bs-platform/lib/js/caml_js_exceptions.js");
var Caml_builtin_exceptions = require("bs-platform/lib/js/caml_builtin_exceptions.js");
function height(param) {
if (param) {
return param[/* h */4];
} else {
return 0;
}
}
function create(l, x, d, r) {
var hl = height(l);
var hr = height(r);
return /* Node */[
/* l */l,
/* v */x,
/* d */d,
/* r */r,
/* h */hl >= hr ? hl + 1 | 0 : hr + 1 | 0
];
}
function singleton(x, d) {
return /* Node */[
/* l : Empty */0,
/* v */x,
/* d */d,
/* r : Empty */0,
/* h */1
];
}
function bal(l, x, d, r) {
var hl = l ? l[/* h */4] : 0;
var hr = r ? r[/* h */4] : 0;
if (hl > (hr + 2 | 0)) {
if (l) {
var lr = l[/* r */3];
var ld = l[/* d */2];
var lv = l[/* v */1];
var ll = l[/* l */0];
if (height(ll) >= height(lr)) {
return create(ll, lv, ld, create(lr, x, d, r));
} else if (lr) {
return create(create(ll, lv, ld, lr[/* l */0]), lr[/* v */1], lr[/* d */2], create(lr[/* r */3], x, d, r));
} else {
throw [
Caml_builtin_exceptions.invalid_argument,
"Map.bal"
];
}
} else {
throw [
Caml_builtin_exceptions.invalid_argument,
"Map.bal"
];
}
} else if (hr > (hl + 2 | 0)) {
if (r) {
var rr = r[/* r */3];
var rd = r[/* d */2];
var rv = r[/* v */1];
var rl = r[/* l */0];
if (height(rr) >= height(rl)) {
return create(create(l, x, d, rl), rv, rd, rr);
} else if (rl) {
return create(create(l, x, d, rl[/* l */0]), rl[/* v */1], rl[/* d */2], create(rl[/* r */3], rv, rd, rr));
} else {
throw [
Caml_builtin_exceptions.invalid_argument,
"Map.bal"
];
}
} else {
throw [
Caml_builtin_exceptions.invalid_argument,
"Map.bal"
];
}
} else {
return /* Node */[
/* l */l,
/* v */x,
/* d */d,
/* r */r,
/* h */hl >= hr ? hl + 1 | 0 : hr + 1 | 0
];
}
}
function is_empty(param) {
if (param) {
return false;
} else {
return true;
}
}
function add(x, data, m) {
if (m) {
var r = m[/* r */3];
var d = m[/* d */2];
var v = m[/* v */1];
var l = m[/* l */0];
var c = Caml_primitive.caml_string_compare(x, v);
if (c === 0) {
if (d === data) {
return m;
} else {
return /* Node */[
/* l */l,
/* v */x,
/* d */data,
/* r */r,
/* h */m[/* h */4]
];
}
} else if (c < 0) {
var ll = add(x, data, l);
if (l === ll) {
return m;
} else {
return bal(ll, v, d, r);
}
} else {
var rr = add(x, data, r);
if (r === rr) {
return m;
} else {
return bal(l, v, d, rr);
}
}
} else {
return /* Node */[
/* l : Empty */0,
/* v */x,
/* d */data,
/* r : Empty */0,
/* h */1
];
}
}
function find(x, _param) {
while(true) {
var param = _param;
if (param) {
var c = Caml_primitive.caml_string_compare(x, param[/* v */1]);
if (c === 0) {
return param[/* d */2];
} else {
_param = c < 0 ? param[/* l */0] : param[/* r */3];
continue ;
}
} else {
throw Caml_builtin_exceptions.not_found;
}
};
}
function find_first(f, _param) {
while(true) {
var param = _param;
if (param) {
var v = param[/* v */1];
if (Curry._1(f, v)) {
var _v0 = v;
var _d0 = param[/* d */2];
var f$1 = f;
var _param$1 = param[/* l */0];
while(true) {
var param$1 = _param$1;
var d0 = _d0;
var v0 = _v0;
if (param$1) {
var v$1 = param$1[/* v */1];
if (Curry._1(f$1, v$1)) {
_param$1 = param$1[/* l */0];
_d0 = param$1[/* d */2];
_v0 = v$1;
continue ;
} else {
_param$1 = param$1[/* r */3];
continue ;
}
} else {
return /* tuple */[
v0,
d0
];
}
};
} else {
_param = param[/* r */3];
continue ;
}
} else {
throw Caml_builtin_exceptions.not_found;
}
};
}
function find_first_opt(f, _param) {
while(true) {
var param = _param;
if (param) {
var v = param[/* v */1];
if (Curry._1(f, v)) {
var _v0 = v;
var _d0 = param[/* d */2];
var f$1 = f;
var _param$1 = param[/* l */0];
while(true) {
var param$1 = _param$1;
var d0 = _d0;
var v0 = _v0;
if (param$1) {
var v$1 = param$1[/* v */1];
if (Curry._1(f$1, v$1)) {
_param$1 = param$1[/* l */0];
_d0 = param$1[/* d */2];
_v0 = v$1;
continue ;
} else {
_param$1 = param$1[/* r */3];
continue ;
}
} else {
return /* tuple */[
v0,
d0
];
}
};
} else {
_param = param[/* r */3];
continue ;
}
} else {
return ;
}
};
}
function find_last(f, _param) {
while(true) {
var param = _param;
if (param) {
var v = param[/* v */1];
if (Curry._1(f, v)) {
var _v0 = v;
var _d0 = param[/* d */2];
var f$1 = f;
var _param$1 = param[/* r */3];
while(true) {
var param$1 = _param$1;
var d0 = _d0;
var v0 = _v0;
if (param$1) {
var v$1 = param$1[/* v */1];
if (Curry._1(f$1, v$1)) {
_param$1 = param$1[/* r */3];
_d0 = param$1[/* d */2];
_v0 = v$1;
continue ;
} else {
_param$1 = param$1[/* l */0];
continue ;
}
} else {
return /* tuple */[
v0,
d0
];
}
};
} else {
_param = param[/* l */0];
continue ;
}
} else {
throw Caml_builtin_exceptions.not_found;
}
};
}
function find_last_opt(f, _param) {
while(true) {
var param = _param;
if (param) {
var v = param[/* v */1];
if (Curry._1(f, v)) {
var _v0 = v;
var _d0 = param[/* d */2];
var f$1 = f;
var _param$1 = param[/* r */3];
while(true) {
var param$1 = _param$1;
var d0 = _d0;
var v0 = _v0;
if (param$1) {
var v$1 = param$1[/* v */1];
if (Curry._1(f$1, v$1)) {
_param$1 = param$1[/* r */3];
_d0 = param$1[/* d */2];
_v0 = v$1;
continue ;
} else {
_param$1 = param$1[/* l */0];
continue ;
}
} else {
return /* tuple */[
v0,
d0
];
}
};
} else {
_param = param[/* l */0];
continue ;
}
} else {
return ;
}
};
}
function find_opt(x, _param) {
while(true) {
var param = _param;
if (param) {
var c = Caml_primitive.caml_string_compare(x, param[/* v */1]);
if (c === 0) {
return Caml_option.some(param[/* d */2]);
} else {
_param = c < 0 ? param[/* l */0] : param[/* r */3];
continue ;
}
} else {
return ;
}
};
}
function mem(x, _param) {
while(true) {
var param = _param;
if (param) {
var c = Caml_primitive.caml_string_compare(x, param[/* v */1]);
if (c === 0) {
return true;
} else {
_param = c < 0 ? param[/* l */0] : param[/* r */3];
continue ;
}
} else {
return false;
}
};
}
function min_binding(_param) {
while(true) {
var param = _param;
if (param) {
var l = param[/* l */0];
if (l) {
_param = l;
continue ;
} else {
return /* tuple */[
param[/* v */1],
param[/* d */2]
];
}
} else {
throw Caml_builtin_exceptions.not_found;
}
};
}
function min_binding_opt(_param) {
while(true) {
var param = _param;
if (param) {
var l = param[/* l */0];
if (l) {
_param = l;
continue ;
} else {
return /* tuple */[
param[/* v */1],
param[/* d */2]
];
}
} else {
return ;
}
};
}
function max_binding(_param) {
while(true) {
var param = _param;
if (param) {
var r = param[/* r */3];
if (r) {
_param = r;
continue ;
} else {
return /* tuple */[
param[/* v */1],
param[/* d */2]
];
}
} else {
throw Caml_builtin_exceptions.not_found;
}
};
}
function max_binding_opt(_param) {
while(true) {
var param = _param;
if (param) {
var r = param[/* r */3];
if (r) {
_param = r;
continue ;
} else {
return /* tuple */[
param[/* v */1],
param[/* d */2]
];
}
} else {
return ;
}
};
}
function remove_min_binding(param) {
if (param) {
var l = param[/* l */0];
if (l) {
return bal(remove_min_binding(l), param[/* v */1], param[/* d */2], param[/* r */3]);
} else {
return param[/* r */3];
}
} else {
throw [
Caml_builtin_exceptions.invalid_argument,
"Map.remove_min_elt"
];
}
}
function merge(t1, t2) {
if (t1) {
if (t2) {
var match = min_binding(t2);
return bal(t1, match[0], match[1], remove_min_binding(t2));
} else {
return t1;
}
} else {
return t2;
}
}
function remove(x, m) {
if (m) {
var r = m[/* r */3];
var d = m[/* d */2];
var v = m[/* v */1];
var l = m[/* l */0];
var c = Caml_primitive.caml_string_compare(x, v);
if (c === 0) {
return merge(l, r);
} else if (c < 0) {
var ll = remove(x, l);
if (l === ll) {
return m;
} else {
return bal(ll, v, d, r);
}
} else {
var rr = remove(x, r);
if (r === rr) {
return m;
} else {
return bal(l, v, d, rr);
}
}
} else {
return /* Empty */0;
}
}
function update(x, f, m) {
if (m) {
var r = m[/* r */3];
var d = m[/* d */2];
var v = m[/* v */1];
var l = m[/* l */0];
var c = Caml_primitive.caml_string_compare(x, v);
if (c === 0) {
var match = Curry._1(f, Caml_option.some(d));
if (match !== undefined) {
var data = Caml_option.valFromOption(match);
if (d === data) {
return m;
} else {
return /* Node */[
/* l */l,
/* v */x,
/* d */data,
/* r */r,
/* h */m[/* h */4]
];
}
} else {
return merge(l, r);
}
} else if (c < 0) {
var ll = update(x, f, l);
if (l === ll) {
return m;
} else {
return bal(ll, v, d, r);
}
} else {
var rr = update(x, f, r);
if (r === rr) {
return m;
} else {
return bal(l, v, d, rr);
}
}
} else {
var match$1 = Curry._1(f, undefined);
if (match$1 !== undefined) {
return /* Node */[
/* l : Empty */0,
/* v */x,
/* d */Caml_option.valFromOption(match$1),
/* r : Empty */0,
/* h */1
];
} else {
return /* Empty */0;
}
}
}
function iter(f, _param) {
while(true) {
var param = _param;
if (param) {
iter(f, param[/* l */0]);
Curry._2(f, param[/* v */1], param[/* d */2]);
_param = param[/* r */3];
continue ;
} else {
return /* () */0;
}
};
}
function map(f, param) {
if (param) {
var l$prime = map(f, param[/* l */0]);
var d$prime = Curry._1(f, param[/* d */2]);
var r$prime = map(f, param[/* r */3]);
return /* Node */[
/* l */l$prime,
/* v */param[/* v */1],
/* d */d$prime,
/* r */r$prime,
/* h */param[/* h */4]
];
} else {
return /* Empty */0;
}
}
function mapi(f, param) {
if (param) {
var v = param[/* v */1];
var l$prime = mapi(f, param[/* l */0]);
var d$prime = Curry._2(f, v, param[/* d */2]);
var r$prime = mapi(f, param[/* r */3]);
return /* Node */[
/* l */l$prime,
/* v */v,
/* d */d$prime,
/* r */r$prime,
/* h */param[/* h */4]
];
} else {
return /* Empty */0;
}
}
function fold(f, _m, _accu) {
while(true) {
var accu = _accu;
var m = _m;
if (m) {
_accu = Curry._3(f, m[/* v */1], m[/* d */2], fold(f, m[/* l */0], accu));
_m = m[/* r */3];
continue ;
} else {
return accu;
}
};
}
function for_all(p, _param) {
while(true) {
var param = _param;
if (param) {
if (Curry._2(p, param[/* v */1], param[/* d */2]) && for_all(p, param[/* l */0])) {
_param = param[/* r */3];
continue ;
} else {
return false;
}
} else {
return true;
}
};
}
function exists(p, _param) {
while(true) {
var param = _param;
if (param) {
if (Curry._2(p, param[/* v */1], param[/* d */2]) || exists(p, param[/* l */0])) {
return true;
} else {
_param = param[/* r */3];
continue ;
}
} else {
return false;
}
};
}
function add_min_binding(k, x, param) {
if (param) {
return bal(add_min_binding(k, x, param[/* l */0]), param[/* v */1], param[/* d */2], param[/* r */3]);
} else {
return singleton(k, x);
}
}
function add_max_binding(k, x, param) {
if (param) {
return bal(param[/* l */0], param[/* v */1], param[/* d */2], add_max_binding(k, x, param[/* r */3]));
} else {
return singleton(k, x);
}
}
function join(l, v, d, r) {
if (l) {
if (r) {
var rh = r[/* h */4];
var lh = l[/* h */4];
if (lh > (rh + 2 | 0)) {
return bal(l[/* l */0], l[/* v */1], l[/* d */2], join(l[/* r */3], v, d, r));
} else if (rh > (lh + 2 | 0)) {
return bal(join(l, v, d, r[/* l */0]), r[/* v */1], r[/* d */2], r[/* r */3]);
} else {
return create(l, v, d, r);
}
} else {
return add_max_binding(v, d, l);
}
} else {
return add_min_binding(v, d, r);
}
}
function concat(t1, t2) {
if (t1) {
if (t2) {
var match = min_binding(t2);
return join(t1, match[0], match[1], remove_min_binding(t2));
} else {
return t1;
}
} else {
return t2;
}
}
function concat_or_join(t1, v, d, t2) {
if (d !== undefined) {
return join(t1, v, Caml_option.valFromOption(d), t2);
} else {
return concat(t1, t2);
}
}
function split(x, param) {
if (param) {
var r = param[/* r */3];
var d = param[/* d */2];
var v = param[/* v */1];
var l = param[/* l */0];
var c = Caml_primitive.caml_string_compare(x, v);
if (c === 0) {
return /* tuple */[
l,
Caml_option.some(d),
r
];
} else if (c < 0) {
var match = split(x, l);
return /* tuple */[
match[0],
match[1],
join(match[2], v, d, r)
];
} else {
var match$1 = split(x, r);
return /* tuple */[
join(l, v, d, match$1[0]),
match$1[1],
match$1[2]
];
}
} else {
return /* tuple */[
/* Empty */0,
undefined,
/* Empty */0
];
}
}
function merge$1(f, s1, s2) {
if (s1) {
var v1 = s1[/* v */1];
if (s1[/* h */4] >= height(s2)) {
var match = split(v1, s2);
return concat_or_join(merge$1(f, s1[/* l */0], match[0]), v1, Curry._3(f, v1, Caml_option.some(s1[/* d */2]), match[1]), merge$1(f, s1[/* r */3], match[2]));
}
} else if (!s2) {
return /* Empty */0;
}
if (s2) {
var v2 = s2[/* v */1];
var match$1 = split(v2, s1);
return concat_or_join(merge$1(f, match$1[0], s2[/* l */0]), v2, Curry._3(f, v2, match$1[1], Caml_option.some(s2[/* d */2])), merge$1(f, match$1[2], s2[/* r */3]));
} else {
throw [
Caml_builtin_exceptions.assert_failure,
/* tuple */[
"map.ml",
393,
10
]
];
}
}
function union(f, s1, s2) {
if (s1) {
if (s2) {
var d2 = s2[/* d */2];
var v2 = s2[/* v */1];
var d1 = s1[/* d */2];
var v1 = s1[/* v */1];
if (s1[/* h */4] >= s2[/* h */4]) {
var match = split(v1, s2);
var d2$1 = match[1];
var l = union(f, s1[/* l */0], match[0]);
var r = union(f, s1[/* r */3], match[2]);
if (d2$1 !== undefined) {
return concat_or_join(l, v1, Curry._3(f, v1, d1, Caml_option.valFromOption(d2$1)), r);
} else {
return join(l, v1, d1, r);
}
} else {
var match$1 = split(v2, s1);
var d1$1 = match$1[1];
var l$1 = union(f, match$1[0], s2[/* l */0]);
var r$1 = union(f, match$1[2], s2[/* r */3]);
if (d1$1 !== undefined) {
return concat_or_join(l$1, v2, Curry._3(f, v2, Caml_option.valFromOption(d1$1), d2), r$1);
} else {
return join(l$1, v2, d2, r$1);
}
}
} else {
return s1;
}
} else {
return s2;
}
}
function filter(p, m) {
if (m) {
var r = m[/* r */3];
var d = m[/* d */2];
var v = m[/* v */1];
var l = m[/* l */0];
var l$prime = filter(p, l);
var pvd = Curry._2(p, v, d);
var r$prime = filter(p, r);
if (pvd) {
if (l === l$prime && r === r$prime) {
return m;
} else {
return join(l$prime, v, d, r$prime);
}
} else {
return concat(l$prime, r$prime);
}
} else {
return /* Empty */0;
}
}
function partition(p, param) {
if (param) {
var d = param[/* d */2];
var v = param[/* v */1];
var match = partition(p, param[/* l */0]);
var lf = match[1];
var lt = match[0];
var pvd = Curry._2(p, v, d);
var match$1 = partition(p, param[/* r */3]);
var rf = match$1[1];
var rt = match$1[0];
if (pvd) {
return /* tuple */[
join(lt, v, d, rt),
concat(lf, rf)
];
} else {
return /* tuple */[
concat(lt, rt),
join(lf, v, d, rf)
];
}
} else {
return /* tuple */[
/* Empty */0,
/* Empty */0
];
}
}
function cons_enum(_m, _e) {
while(true) {
var e = _e;
var m = _m;
if (m) {
_e = /* More */[
m[/* v */1],
m[/* d */2],
m[/* r */3],
e
];
_m = m[/* l */0];
continue ;
} else {
return e;
}
};
}
function compare(cmp, m1, m2) {
var _e1 = cons_enum(m1, /* End */0);
var _e2 = cons_enum(m2, /* End */0);
while(true) {
var e2 = _e2;
var e1 = _e1;
if (e1) {
if (e2) {
var c = Caml_primitive.caml_string_compare(e1[0], e2[0]);
if (c !== 0) {
return c;
} else {
var c$1 = Curry._2(cmp, e1[1], e2[1]);
if (c$1 !== 0) {
return c$1;
} else {
_e2 = cons_enum(e2[2], e2[3]);
_e1 = cons_enum(e1[2], e1[3]);
continue ;
}
}
} else {
return 1;
}
} else if (e2) {
return -1;
} else {
return 0;
}
};
}
function equal(cmp, m1, m2) {
var _e1 = cons_enum(m1, /* End */0);
var _e2 = cons_enum(m2, /* End */0);
while(true) {
var e2 = _e2;
var e1 = _e1;
if (e1) {
if (e2 && Caml_primitive.caml_string_compare(e1[0], e2[0]) === 0 && Curry._2(cmp, e1[1], e2[1])) {
_e2 = cons_enum(e2[2], e2[3]);
_e1 = cons_enum(e1[2], e1[3]);
continue ;
} else {
return false;
}
} else if (e2) {
return false;
} else {
return true;
}
};
}
function cardinal(param) {
if (param) {
return (cardinal(param[/* l */0]) + 1 | 0) + cardinal(param[/* r */3]) | 0;
} else {
return 0;
}
}
function bindings_aux(_accu, _param) {
while(true) {
var param = _param;
var accu = _accu;
if (param) {
_param = param[/* l */0];
_accu = /* :: */[
/* tuple */[
param[/* v */1],
param[/* d */2]
],
bindings_aux(accu, param[/* r */3])
];
continue ;
} else {
return accu;
}
};
}
function bindings(s) {
return bindings_aux(/* [] */0, s);
}
var ObjectDict = {
empty: /* Empty */0,
is_empty: is_empty,
mem: mem,
add: add,
update: update,
singleton: singleton,
remove: remove,
merge: merge$1,
union: union,
compare: compare,
equal: equal,
iter: iter,
fold: fold,
for_all: for_all,
exists: exists,
filter: filter,
partition: partition,
cardinal: cardinal,
bindings: bindings,
min_binding: min_binding,
min_binding_opt: min_binding_opt,
max_binding: max_binding,
max_binding_opt: max_binding_opt,
choose: min_binding,
choose_opt: min_binding_opt,
split: split,
find: find,
find_opt: find_opt,
find_first: find_first,
find_first_opt: find_first_opt,
find_last: find_last,
find_last_opt: find_last_opt,
map: map,
mapi: mapi
};
var ParseFail = Caml_exceptions.create("Tea_json.Decoder.ParseFail");
var string = /* Decoder */[(function (value) {
var match = Web_json.classify(value);
if (typeof match === "number" || match.tag) {
return /* Error */Block.__(1, ["Non-string value"]);
} else {
return /* Ok */Block.__(0, [match[0]]);
}
})];
var $$int = /* Decoder */[(function (value) {
var match = Web_json.classify(value);
if (typeof match === "number" || match.tag !== /* JSONNumber */1) {
return /* Error */Block.__(1, ["Non-int value"]);
} else {
var n = match[0];
if (n > Pervasives.min_int && n < Pervasives.max_int) {
return /* Ok */Block.__(0, [n | 0]);
} else {
return /* Error */Block.__(1, ["number out of int range"]);
}
}
})];
var $$float = /* Decoder */[(function (value) {
var match = Web_json.classify(value);
if (typeof match === "number" || match.tag !== /* JSONNumber */1) {
return /* Error */Block.__(1, ["Non-float-value"]);
} else {
return /* Ok */Block.__(0, [match[0]]);
}
})];
var bool = /* Decoder */[(function (value) {
var match = Web_json.classify(value);
if (typeof match === "number") {
switch (match) {
case /* JSONFalse */0 :
return /* Ok */Block.__(0, [false]);
case /* JSONTrue */1 :
return /* Ok */Block.__(0, [true]);
case /* JSONNull */2 :
return /* Error */Block.__(1, ["Non-boolean value"]);
}
} else {
return /* Error */Block.__(1, ["Non-boolean value"]);
}
})];
function $$null(v) {
return /* Decoder */[(function (value) {
var match = Web_json.classify(value);
if (typeof match === "number" && match >= 2) {
return /* Ok */Block.__(0, [v]);
} else {
return /* Error */Block.__(1, ["Non-null value"]);
}
})];
}
function list(param) {
var decoder = param[0];
return /* Decoder */[(function (value) {
var match = Web_json.classify(value);
if (typeof match === "number" || match.tag !== /* JSONArray */3) {
return /* Error */Block.__(1, ["Non-list value"]);
} else {
var parse = function (v) {
var match = Curry._1(decoder, v);
if (match.tag) {
throw [
ParseFail,
match[0]
];
} else {
return match[0];
}
};
try {
return /* Ok */Block.__(0, [List.map(parse, $$Array.to_list(match[0]))]);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn[0] === ParseFail) {
return /* Error */Block.__(1, ["list -> " + exn[1]]);
} else {
throw exn;
}
}
}
})];
}
function array(param) {
var decoder = param[0];
return /* Decoder */[(function (value) {
var match = Web_json.classify(value);
if (typeof match === "number" || match.tag !== /* JSONArray */3) {
return /* Error */Block.__(1, ["Non-array value"]);
} else {
var parse = function (v) {
var match = Curry._1(decoder, v);
if (match.tag) {
throw [
ParseFail,
match[0]
];
} else {
return match[0];
}
};
try {
return /* Ok */Block.__(0, [$$Array.map(parse, match[0])]);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn[0] === ParseFail) {
return /* Error */Block.__(1, ["array -> " + exn[1]]);
} else {
throw exn;
}
}
}
})];
}
function keyValuePairs(param) {
var decoder = param[0];
return /* Decoder */[(function (value) {
var match = Web_json.classify(value);
if (typeof match === "number" || match.tag !== /* JSONObject */2) {
return /* Error */Block.__(1, ["Non-keyValuePair value"]);
} else {
var o = match[0];
var keys = Object.keys(o);
var parse = function (k, l) {
var match = Js_dict.get(o, k);
if (match !== undefined) {
var match$1 = Curry._1(decoder, Caml_option.valFromOption(match));
if (match$1.tag) {
throw [
ParseFail,
match$1[0]
];
} else {
return /* :: */[
/* tuple */[
k,
match$1[0]
],
l
];
}
} else {
throw [
ParseFail,
"Key is undefined: " + k
];
}
};
try {
return /* Ok */Block.__(0, [$$Array.fold_right(parse, keys, /* [] */0)]);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn[0] === ParseFail) {
return /* Error */Block.__(1, ["Invalid keyValuePair parsing: " + exn[1]]);
} else {
throw exn;
}
}
}
})];
}
function dict(param) {
var decoder = param[0];
return /* Decoder */[(function (value) {
var match = Web_json.classify(value);
if (typeof match === "number" || match.tag !== /* JSONObject */2) {
return /* Error */Block.__(1, ["Non-dict value"]);
} else {
var o = match[0];
var keys = Object.keys(o);
var parse = function (k, d) {
var match = Js_dict.get(o, k);
if (match !== undefined) {
var match$1 = Curry._1(decoder, Caml_option.valFromOption(match));
if (match$1.tag) {
throw [
ParseFail,
match$1[0]
];
} else {
return add(k, match$1[0], d);
}
} else {
throw [
ParseFail,
"Key is undefined: " + k
];
}
};
try {
return /* Ok */Block.__(0, [$$Array.fold_right(parse, keys, /* Empty */0)]);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn[0] === ParseFail) {
return /* Error */Block.__(1, ["Invalid dict parsing: " + exn[1]]);
} else {
throw exn;
}
}
}
})];
}
function field(key, param) {
var decoder = param[0];
return /* Decoder */[(function (value) {
var match = Web_json.classify(value);
if (typeof match === "number" || match.tag !== /* JSONObject */2) {
return /* Error */Block.__(1, ["Non-fieldable value"]);
} else {
var match$1 = Js_dict.get(match[0], key);
if (match$1 !== undefined) {
var o = Curry._1(decoder, Caml_option.valFromOption(match$1));
if (o.tag) {
return /* Error */Block.__(1, ["field `" + (key + ("` -> " + o[0]))]);
} else {
return o;
}
} else {
return /* Error */Block.__(1, ["Field Value is undefined: " + key]);
}
}
})];
}
function at(fields, dec) {
return List.fold_right(field, fields, dec);
}
function index(idx, param) {
var decoder = param[0];
return /* Decoder */[(function (value) {
var match = Web_json.classify(value);
if (typeof match === "number" || match.tag !== /* JSONArray */3) {
return /* Error */Block.__(1, ["Non-array value"]);
} else {
var a = match[0];
if (idx < 0 || idx > a.length) {
return /* Error */Block.__(1, ["Array index out of range: " + String(idx)]);
} else {
return Curry._1(decoder, Caml_array.caml_array_get(a, idx));
}
}
})];
}
function maybe(param) {
var decoder = param[0];
return /* Decoder */[(function (value) {
var match = Curry._1(decoder, value);
if (match.tag) {
return /* Ok */Block.__(0, [undefined]);
} else {
return /* Ok */Block.__(0, [Caml_option.some(match[0])]);
}
})];
}
function oneOf(decoders) {
return /* Decoder */[(function (value) {
var parse = function (v, _param) {
while(true) {
var param = _param;
if (param) {
var rest = param[1];
try {
var ok = Curry._1(param[0][0], v);
if (ok.tag) {
return parse(v, rest);
} else {
return ok;
}
}
catch (exn){
_param = rest;
continue ;
}
} else {
return /* Error */Block.__(1, ["No one-of's matched"]);
}
};
};
return parse(value, decoders);
})];
}
function map$1(mapper, param) {
var decoder1 = param[0];
return /* Decoder */[(function (value) {
var match = Curry._1(decoder1, value);
if (match.tag) {
return /* Error */Block.__(1, ["map " + match[0]]);
} else {
return /* Ok */Block.__(0, [Curry._1(mapper, match[0])]);
}
})];
}
function map2(mapper, param, param$1) {
var decoder2 = param$1[0];
var decoder1 = param[0];
return /* Decoder */[(function (value) {
var match = Curry._1(decoder1, value);
var match$1 = Curry._1(decoder2, value);
if (!match.tag && !match$1.tag) {
return /* Ok */Block.__(0, [Curry._2(mapper, match[0], match$1[0])]);
}
var match$2 = Tea_result.error_of_first(match, match$1);
if (match$2 !== undefined) {
return /* Error */Block.__(1, ["map2 -> " + match$2]);
} else {
throw [
Caml_builtin_exceptions.failure,
"Impossible case"
];
}
})];
}
function map3(mapper, param, param$1, param$2) {
var decoder3 = param$2[0];
var decoder2 = param$1[0];
var decoder1 = param[0];
return /* Decoder */[(function (value) {
var match = Curry._1(decoder1, value);
var match$1 = Curry._1(decoder2, value);
var match$2 = Curry._1(decoder3, value);
if (!match.tag && !match$1.tag && !match$2.tag) {
return /* Ok */Block.__(0, [Curry._3(mapper, match[0], match$1[0], match$2[0])]);
}
var match$3 = Tea_result.first(match$2, Tea_result.first(match$1, match));
if (match$3.tag) {
return /* Error */Block.__(1, ["map3 -> " + match$3[0]]);
} else {
throw [
Caml_builtin_exceptions.failure,
"Impossible case"
];
}
})];
}
function map4(mapper, param, param$1, param$2, param$3) {
var decoder4 = param$3[0];
var decoder3 = param$2[0];
var decoder2 = param$1[0];
var decoder1 = param[0];
return /* Decoder */[(function (value) {
var match = Curry._1(decoder1, value);
var match$1 = Curry._1(decoder2, value);
var match$2 = Curry._1(decoder3, value);
var match$3 = Curry._1(decoder4, value);
if (!match.tag && !match$1.tag && !match$2.tag && !match$3.tag) {
return /* Ok */Block.__(0, [Curry._4(mapper, match[0], match$1[0], match$2[0], match$3[0])]);
}
var match$4 = Tea_result.first(match$3, Tea_result.first(match$2, Tea_result.first(match$1, match)));
if (match$4.tag) {
return /* Error */Block.__(1, ["map4 -> " + match$4[0]]);
} else {
throw [
Caml_builtin_exceptions.failure,
"Impossible case"
];
}
})];
}
function map5(mapper, param, param$1, param$2, param$3, param$4) {
var decoder5 = param$4[0];
var decoder4 = param$3[0];
var decoder3 = param$2[0];
var decoder2 = param$1[0];
var decoder1 = param[0];
return /* Decoder */[(function (value) {
var match = Curry._1(decoder1, value);
var match$1 = Curry._1(decoder2, value);
var match$2 = Curry._1(decoder3, value);
var match$3 = Curry._1(decoder4, value);
var match$4 = Curry._1(decoder5, value);
if (!match.tag && !match$1.tag && !match$2.tag && !match$3.tag && !match$4.tag) {
return /* Ok */Block.__(0, [Curry._5(mapper, match[0], match$1[0], match$2[0], match$3[0], match$4[0])]);
}
var match$5 = Tea_result.first(match$4, Tea_result.first(match$3, Tea_result.first(match$2, Tea_result.first(match$1, match))));
if (match$5.tag) {
return /* Error */Block.__(1, ["map5 -> " + match$5[0]]);
} else {
throw [
Caml_builtin_exceptions.failure,
"Impossible case"
];
}
})];
}
function map6(mapper, param, param$1, param$2, param$3, param$4, param$5) {
var decoder6 = param$5[0];
var decoder5 = param$4[0];
var decoder4 = param$3[0];
var decoder3 = param$2[0];
var decoder2 = param$1[0];
var decoder1 = param[0];
return /* Decoder */[(function (value) {
var match = Curry._1(decoder1, value);
var match$1 = Curry._1(decoder2, value);
var match$2 = Curry._1(decoder3, value);
var match$3 = Curry._1(decoder4, value);
var match$4 = Curry._1(decoder5, value);
var match$5 = Curry._1(decoder6, value);
if (!match.tag && !match$1.tag && !match$2.tag && !match$3.tag && !match$4.tag && !match$5.tag) {
return /* Ok */Block.__(0, [Curry._6(mapper, match[0], match$1[0], match$2[0], match$3[0], match$4[0], match$5[0])]);
}
var match$6 = Tea_result.first(match$5, Tea_result.first(match$4, Tea_result.first(match$3, Tea_result.first(match$2, Tea_result.first(match$1, match)))));
if (match$6.tag) {
return /* Error */Block.__(1, ["map6 -> " + match$6[0]]);
} else {
throw [
Caml_builtin_exceptions.failure,
"Impossible case"
];
}
})];
}
function map7(mapper, param, param$1, param$2, param$3, param$4, param$5, param$6) {
var decoder7 = param$6[0];
var decoder6 = param$5[0];
var decoder5 = param$4[0];
var decoder4 = param$3[0];
var decoder3 = param$2[0];
var decoder2 = param$1[0];
var decoder1 = param[0];
return /* Decoder */[(function (value) {
var match = Curry._1(decoder1, value);
var match$1 = Curry._1(decoder2, value);
var match$2 = Curry._1(decoder3, value);
var match$3 = Curry._1(decoder4, value);
var match$4 = Curry._1(decoder5, value);
var match$5 = Curry._1(decoder6, value);
var match$6 = Curry._1(decoder7, value);
if (!match.tag && !match$1.tag && !match$2.tag && !match$3.tag && !match$4.tag && !match$5.tag && !match$6.tag) {
return /* Ok */Block.__(0, [Curry._7(mapper, match[0], match$1[0], match$2[0], match$3[0], match$4[0], match$5[0], match$6[0])]);
}
var match$7 = Tea_result.first(match$6, Tea_result.first(match$5, Tea_result.first(match$4, Tea_result.first(match$3, Tea_result.first(match$2, Tea_result.first(match$1, match))))));
if (match$7.tag) {
return /* Error */Block.__(1, ["map7 -> " + match$7[0]]);
} else {
throw [
Caml_builtin_exceptions.failure,
"Impossible case"
];
}
})];
}
function map8(mapper, param, param$1, param$2, param$3, param$4, param$5, param$6, param$7) {
var decoder8 = param$7[0];
var decoder7 = param$6[0];
var decoder6 = param$5[0];
var decoder5 = param$4[0];
var decoder4 = param$3[0];
var decoder3 = param$2[0];
var decoder2 = param$1[0];
var decoder1 = param[0];
return /* Decoder */[(function (value) {
var match = Curry._1(decoder1, value);
var match$1 = Curry._1(decoder2, value);
var match$2 = Curry._1(decoder3, value);
var match$3 = Curry._1(decoder4, value);
var match$4 = Curry._1(decoder5, value);
var match$5 = Curry._1(decoder6, value);
var match$6 = Curry._1(decoder7, value);
var match$7 = Curry._1(decoder8, value);
if (!match.tag && !match$1.tag && !match$2.tag && !match$3.tag && !match$4.tag && !match$5.tag && !match$6.tag && !match$7.tag) {
return /* Ok */Block.__(0, [Curry._8(mapper, match[0], match$1[0], match$2[0], match$3[0], match$4[0], match$5[0], match$6[0], match$7[0])]);
}
var match$8 = Tea_result.first(match$7, Tea_result.first(match$6, Tea_result.first(match$5, Tea_result.first(match$4, Tea_result.first(match$3, Tea_result.first(match$2, Tea_result.first(match$1, match)))))));
if (match$8.tag) {
return /* Error */Block.__(1, ["map8 -> " + match$8[0]]);
} else {
throw [
Caml_builtin_exceptions.failure,
"Impossible case"
];
}
})];
}
function succeed(v) {
return /* Decoder */[(function (_value) {
return /* Ok */Block.__(0, [v]);
})];
}
function fail(e) {
return /* Decoder */[(function (_value) {
return /* Error */Block.__(1, [e]);
})];
}
var value = /* Decoder */[(function (value) {
return /* Ok */Block.__(0, [value]);
})];
function andThen(func, param) {
var decoder = param[0];
return /* Decoder */[(function (value) {
var err = Curry._1(decoder, value);
if (err.tag) {
return err;
} else {
var match = Curry._1(func, err[0]);
return Curry._1(match[0], value);
}
})];
}
function lazy_(func) {
return andThen(func, /* Decoder */[(function (_value) {
return /* Ok */Block.__(0, [/* () */0]);
})]);
}
function nullable(decoder) {
return oneOf(/* :: */[
$$null(undefined),
/* :: */[
map$1((function (v) {
return Caml_option.some(v);
}), decoder),
/* [] */0
]
]);
}
function decodeValue(param, value) {
try {
return Curry._1(param[0], value);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn[0] === ParseFail) {
return /* Error */Block.__(1, [exn[1]]);
} else {
return /* Error */Block.__(1, ["Unknown JSON parsing error"]);
}
}
}
function decodeEvent(param, value) {
try {
return Curry._1(param[0], value);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn[0] === ParseFail) {
return /* Error */Block.__(1, [exn[1]]);
} else {
return /* Error */Block.__(1, ["Unknown JSON parsing error"]);
}
}
}
function decodeString(decoder, string) {
try {
var value = JSON.parse(string);
return decodeValue(decoder, value);
}
catch (exn){
return /* Error */Block.__(1, ["Invalid JSON string"]);
}
}
var Decoder = {
ObjectDict: ObjectDict,
ParseFail: ParseFail,
string: string,
$$int: $$int,
$$float: $$float,
bool: bool,
$$null: $$null,
list: list,
array: array,
keyValuePairs: keyValuePairs,
dict: dict,
field: field,
at: at,
index: index,
maybe: maybe,
oneOf: oneOf,
map: map$1,
map2: map2,
map3: map3,
map4: map4,
map5: map5,
map6: map6,
map7: map7,
map8: map8,
succeed: succeed,
fail: fail,
value: value,
andThen: andThen,
lazy_: lazy_,
nullable: nullable,
decodeValue: decodeValue,
decodeEvent: decodeEvent,
decodeString: decodeString
};
function encode(indentLevel, value) {
return Web_json.string_of_json(indentLevel, value);
}
function string$1(v) {
return v;
}
function $$int$1(v) {
return v;
}
function $$float$1(v) {
return v;
}
function bool$1(v) {
return v;
}
function object_(v) {
var aux = function (o, param) {
o[param[0]] = param[1];
return o;
};
return List.fold_left(aux, { }, v);
}
function array$1(v) {
return v;
}
var list$1 = $$Array.of_list;
var Encoder = {
encode: encode,
string: string$1,
$$int: $$int$1,
$$float: $$float$1,
bool: bool$1,
$$null: Web_json.$$null,
object_: object_,
array: array$1,
list: list$1
};
exports.Decoder = Decoder;
exports.Encoder = Encoder;
/* No side effect */