UNPKG

bucklescript-tea

Version:
1,694 lines (1,603 loc) 46 kB
// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE 'use strict'; 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 */