futurescript
Version:
A functional style, but highly readable language that compiles to JavaScript.
67 lines (64 loc) • 2.16 kB
JavaScript
export let printObject = function(obj, type, level) {
return type.name + " {\n" +
Object.keys(obj).sort().map(key => {
if (key.startsWith("_")) {
return "";
}
else if (obj[key] === undefined) {
return "";
}
else if (obj[key] === null) {
return " ".repeat(level + 1) + key + ": null\n";
}
else if (obj[key] === false) {
return " ".repeat(level + 1) + key + ": false\n";
}
else if (obj[key] === true) {
return " ".repeat(level + 1) + key + ": true\n";
}
else if (typeof obj[key] === "string") {
return " ".repeat(level + 1) + key + ": " + JSON.stringify(obj[key]) + "\n";
}
else if (typeof obj[key] === "number") {
return " ".repeat(level + 1) + key + ": " + obj[key].toString() + "\n";
}
else {
return " ".repeat(level + 1) + key + ": " + obj[key].toString(level + 1);
}
}).join("") +
" ".repeat(level) + "}\n";
};
// Array can't have undefined element.
export let printArray = function(arr, type, level) {
return type.name + " [\n" +
arr.map(element => {
let s = null;
if (element === null) {
s = "null\n";
}
else if (element === false) {
s = "false\n";
}
else if (element === true) {
s = "true\n";
}
else if (typeof element === "string") {
s = JSON.stringify(element) + "\n";
}
else if (typeof element === "number") {
s = element.toString() + "\n";
}
else {
s = element.toString(level + 1);
}
return " ".repeat(level + 1) + s;
}).join("") + " ".repeat(level) + "]\n";
};
export let printAtom = function(thing) {
if (thing.value === undefined) {
return thing.constructor.name + "\n";
}
else {
return thing.constructor.name + " " + JSON.stringify(thing.value) + "\n";
}
};