handsome-json
Version:
make your json strings handsome
78 lines (74 loc) • 1.78 kB
JavaScript
// Generated by CoffeeScript 1.10.0
var format, render;
render = function(element, last, name, depth) {
var i, indent, j, key, l, len, rendered, string, value;
if (last == null) {
last = false;
}
if (name == null) {
name = null;
}
if (depth == null) {
depth = 0;
}
rendered = '';
indent = ' '.repeat(depth);
if (name !== null) {
rendered += indent + "\"" + name + "\": ";
} else {
rendered += "" + indent;
}
if (element instanceof Array) {
rendered += "[\n";
i = 0;
l = false;
for (j = 0, len = element.length; j < len; j++) {
value = element[j];
i += 1;
if (i === element.length) {
l = true;
}
rendered += render(value, l, null, depth + 1);
}
rendered += indent + "]";
} else if (element instanceof Object) {
rendered += "{\n";
i = 0;
l = false;
for (key in element) {
value = element[key];
i += 1;
if (i === Object.keys(element).length) {
l = true;
}
rendered += render(value, l, key, depth + 1);
}
rendered += indent + "}";
} else {
if (typeof element === 'string') {
string = element.replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/"/g, '\\"');
rendered += "\"" + string + "\"";
} else if (typeof element === 'bool') {
rendered += element === true ? 'true' : 'false';
} else {
rendered += "" + element;
}
}
if (!last) {
rendered += ",\n";
} else {
rendered += "\n";
}
return rendered;
};
format = function(json) {
var error, error1, parsed;
try {
parsed = JSON.parse(json);
} catch (error1) {
error = error1;
throw new Error('invalid JSON string');
}
return render(parsed, true).trim();
};
module.exports = format;