UNPKG

prettify-xml

Version:
50 lines (41 loc) 1.45 kB
'use strict'; var _os = require('os'); var stringTimesN = function stringTimesN(n, char) { return Array(n + 1).join(char); }; // Adapted from https://gist.github.com/sente/1083506 function prettifyXml(xmlInput) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var _options$indent = options.indent, indentOption = _options$indent === undefined ? 2 : _options$indent, _options$newline = options.newline, newlineOption = _options$newline === undefined ? _os.EOL : _options$newline; var indentString = stringTimesN(indentOption, ' '); var formatted = ''; var regex = /(>)(<)(\/*)/g; var xml = xmlInput.replace(regex, '$1' + newlineOption + '$2$3'); var pad = 0; xml.split(/\r?\n/).forEach(function (l) { var line = l.trim(); var indent = 0; if (line.match(/.+<\/\w[^>]*>$/)) { indent = 0; } else if (line.match(/^<\/\w/)) { // Somehow istanbul doesn't see the else case as covered, although it is. Skip it. /* istanbul ignore else */ if (pad !== 0) { pad -= 1; } } else if (line.match(/^<\w([^>]*[^\/])?>.*$/)) { indent = 1; } else { indent = 0; } var padding = stringTimesN(pad, indentString); formatted += padding + line + newlineOption; // eslint-disable-line prefer-template pad += indent; }); return formatted.trim(); } // For non-es2015 usage module.exports = prettifyXml;