lib/util/Converter.js
exports.minify = function (json) {
let tokenizer = /"|'|(\/\*)|(\*\/)|(\/\/)|\n|\r/g,
in_string = false,
in_multiline_comment = false,
in_singleline_comment = false,
tmp, tmp2, new_str = [], ns = 0, from = 0, lc, rc
tokenizer.lastIndex = 0
while ( (tmp = tokenizer.exec(json)) ) {
lc = RegExp.leftContext
rc = RegExp.rightContext
if (!in_multiline_comment && !in_singleline_comment) {
tmp2 = lc.substring(from)
if (!in_string) {
tmp2 = tmp2.replace( /(\n|\r|\s)*/g, '')
}
new_str[ns] = tmp2
ns += 1
}
from = tokenizer.lastIndex
if (tmp[0] === '\"' && !in_multiline_comment && !in_singleline_comment) {
tmp2 = lc.match(/(\\)*$/)
if (!in_string || !tmp2 || (tmp2[0].length % 2) === 0) { // start of string with ", or unescaped " character found to end string
in_string = !in_string
}
from -= 1 // include " character in next catch
rc = json.substring(from)
}
else if (tmp[0] === '/*' && !in_string && !in_multiline_comment && !in_singleline_comment) {
in_multiline_comment = true
}
else if (tmp[0] === '*/' && !in_string && in_multiline_comment && !in_singleline_comment) {
in_multiline_comment = false
}
else if (tmp[0] === '//' && !in_string && !in_multiline_comment && !in_singleline_comment) {
in_singleline_comment = true
}
else if ((tmp[0] === '\n' || tmp[0] === '\r') && !in_string && !in_multiline_comment && in_singleline_comment) {
in_singleline_comment = false
}
else if (!in_multiline_comment && !in_singleline_comment && !(/\n|\r|\s/.test(tmp[0]))) {
new_str[ns] = tmp[0]
ns += 1
}
}
new_str[ns] = rc
ns += 1
return new_str.join( '' )
}
exports.stringify = function ( obj, minify, _ ) {
return minify && _.isString(obj) ? exports.minify( obj ) : JSON.stringify(obj)
}