all files / dom/attr/ parseJSON.compact.js

100% Statements 9/9
100% Branches 6/6
100% Functions 1/1
100% Lines 9/9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19                    
var rvalidchars = /^[\],:{}\s]*$/,
    rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
    rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
    rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g
 
export function compactParseJSON(data) {
    if (typeof data === 'string') {
        data = data.trim()
        if (data) {
            if (rvalidchars.test(data.replace(rvalidescape, '@')
                .replace(rvalidtokens, ']')
                .replace(rvalidbraces, ''))) {
                return (new Function('return ' + data))() // jshint ignore:line
            }
        }
        throw TypeError('Invalid JSON: [' + data + ']')
    }
    return data
}