serverless-spy
Version:
CDK-based library for writing elegant integration tests on AWS serverless architecture and an additional web console to monitor events in real time.
56 lines (49 loc) • 1.58 kB
JavaScript
var defaultColors = {
keyColor: 'dimgray',
numberColor: 'lightskyblue',
stringColor: 'lightcoral',
trueColor: 'lightseagreen',
falseColor: '#f66578',
nullColor: 'cornflowerblue'
};
var entityMap = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": ''',
'`': '`',
'=': '='
};
function escapeHtml(html) {
return String(html).replace(/[&<>"'`=]/g, function (s) {
return entityMap[s];
});
}
function index (json, colorOptions) {
if ( colorOptions === void 0 ) colorOptions = {};
var valueType = typeof json;
if (valueType !== 'string') {
json = JSON.stringify(json, null, 2) || valueType;
}
var colors = Object.assign({}, defaultColors, colorOptions);
json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+]?\d+)?)/g, function (match) {
var color = colors.numberColor;
var style = '';
if (/^"/.test(match)) {
if (/:$/.test(match)) {
color = colors.keyColor;
} else {
color = colors.stringColor;
match = '"' + escapeHtml(match.substr(1, match.length - 2)) + '"';
style = 'word-wrap:break-word;white-space:pre-wrap;';
}
} else {
color = /true/.test(match) ? colors.trueColor : /false/.test(match) ? colors.falseColor : /null/.test(match) ? colors.nullColor : color;
}
return ("<span style=\"" + style + "color:" + color + "\">" + match + "</span>");
});
}
module.exports = index;
;