UNPKG

@crashmax/json-format-highlight

Version:
75 lines (66 loc) 2.23 kB
'use strict'; var defaultColors = { keyColor: '#9cdcfe', nullColor: '#569cd6', trueColor: '#569cd6', falseColor: '#569cd6', numberColor: '#b5cea8', stringColor: '#ce9178', bracketsColor: '#d4d4d4', backgroundColor: '#1e1e1e' }; var entityMap = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;', '`': '&#x60;', '=': '&#x3D;' }; function escapeHtml(html) { return String(html).replace(/[&<>"'`=]/g, function (s) { return entityMap[s]; }); } function formatHighlight(json, ref) { if ( ref === void 0 ) ref = {}; var tagPre = ref.tagPre; if ( tagPre === void 0 ) tagPre = false; var wordWrap = ref.wordWrap; if ( wordWrap === void 0 ) wordWrap = false; var colors = ref.colors; var valueType = typeof json; if (valueType !== 'string') { json = JSON.stringify(json, null, 2) || valueType; } colors = Object.assign({}, defaultColors, colors); json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); var formatJson = 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 cls = ''; var style = ''; if (/^"/.test(match)) { if (/:$/.test(match)) { cls = 'key'; color = colors.keyColor; } else { cls = ''; color = colors.stringColor; match = '"' + escapeHtml(match.substr(1, match.length - 2)) + '"'; style = wordWrap ? '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; } if (cls === 'key') { return ("<span style=\"" + style + "color:" + color + "\">" + (match.slice(0, -1)) + "</span>:"); } else { return ("<span style=\"" + style + "color:" + color + "\">" + match + "</span>"); } }); if (tagPre) { return ("<pre style=\"color:" + (colors.bracketsColor) + ";background:" + (colors.backgroundColor) + (!wordWrap ? ';overflow:auto' : '') + "\">" + formatJson + "</pre>"); } else { return formatJson; } } module.exports = formatHighlight;