time-to-botec/squiggle/node_modules/@rescript/std/lib/es6/js_json.js

173 lines
3.3 KiB
JavaScript
Raw Normal View History

import * as Caml_option from "./caml_option.js";
function classify(x) {
var ty = typeof x;
if (ty === "string") {
return {
TAG: /* JSONString */0,
_0: x
};
} else if (ty === "number") {
return {
TAG: /* JSONNumber */1,
_0: x
};
} else if (ty === "boolean") {
if (x === true) {
return /* JSONTrue */1;
} else {
return /* JSONFalse */0;
}
} else if (x === null) {
return /* JSONNull */2;
} else if (Array.isArray(x)) {
return {
TAG: /* JSONArray */3,
_0: x
};
} else {
return {
TAG: /* JSONObject */2,
_0: x
};
}
}
function test(x, v) {
switch (v) {
case /* String */0 :
return typeof x === "string";
case /* Number */1 :
return typeof x === "number";
case /* Object */2 :
if (x !== null && typeof x === "object") {
return !Array.isArray(x);
} else {
return false;
}
case /* Array */3 :
return Array.isArray(x);
case /* Boolean */4 :
return typeof x === "boolean";
case /* Null */5 :
return x === null;
}
}
function decodeString(json) {
if (typeof json === "string") {
return json;
}
}
function decodeNumber(json) {
if (typeof json === "number") {
return json;
}
}
function decodeObject(json) {
if (typeof json === "object" && !Array.isArray(json) && json !== null) {
return Caml_option.some(json);
}
}
function decodeArray(json) {
if (Array.isArray(json)) {
return json;
}
}
function decodeBoolean(json) {
if (typeof json === "boolean") {
return json;
}
}
function decodeNull(json) {
if (json === null) {
return null;
}
}
var patch = (function (json) {
var x = [json];
var q = [{ kind: 0, i: 0, parent: x }];
while (q.length !== 0) {
// begin pop the stack
var cur = q[q.length - 1];
if (cur.kind === 0) {
cur.val = cur.parent[cur.i]; // patch the undefined value for array
if (++cur.i === cur.parent.length) {
q.pop();
}
} else {
q.pop();
}
// finish
var task = cur.val;
if (typeof task === "object") {
if (Array.isArray(task) && task.length !== 0) {
q.push({ kind: 0, i: 0, parent: task, val: undefined });
} else {
for (var k in task) {
if (k === "RE_PRIVATE_NONE") {
if (cur.kind === 0) {
cur.parent[cur.i - 1] = undefined;
} else {
cur.parent[cur.i] = undefined;
}
continue;
}
q.push({ kind: 1, i: k, parent: task, val: task[k] });
}
}
}
}
return x[0];
});
function serializeExn(x) {
return (function(obj){
var output= JSON.stringify(obj,function(_,value){
if(value===undefined){
return {RE_PRIVATE_NONE : true}
}
return value
});
if(output === undefined){
// JSON.stringify will raise TypeError when it detects cylic objects
throw new TypeError("output is undefined")
}
return output
})(x);
}
function deserializeUnsafe(s) {
return patch(JSON.parse(s));
}
export {
classify ,
test ,
decodeString ,
decodeNumber ,
decodeObject ,
decodeArray ,
decodeBoolean ,
decodeNull ,
deserializeUnsafe ,
serializeExn ,
}
/* No side effect */