imrefazekas/connect-rest

View on GitHub
lib/util/Converter.js

Summary

Maintainability
B
4 hrs
Test Coverage
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)
}