UNPKG

foop

Version:

interfaces that describe their intentions.

88 lines (74 loc) 8.14 kB
var getIncludesCount = require('../fp/includesCount') var isEven = require('../math/even') var isArray = require('./array') var isNumber = require('./numberPrimitive') var isString = require('./stringPrimitive') var isTrue = require('./true') // http://documentcloud.github.io/underscore-contrib/#isjson // https://github.com/chriso/validator.js/blob/master/src/lib/isJSON.js // https://bitsrc.io/amit/json/global/json-validator/code // // const onlyLettersAndSpaces = /^([\sa-z]+)*$/gim // const regexp = /[\"|\{|\[|\}|]+/ // const chars = ['[', '"', '{', ']', '}'] // const nums = [91, 34] // const map = { // '"': 34, // '{': 123, // '}': 125, // ']': 93, // '[': 91, // } // @TODO everything like this (with numbers) // eslint-disable-next-line no-useless-escape var JSONAlphaOmega = function (x) { return x === 93 || x === 91 || x === 125 || x === 123 || x === 34; } function hasWith(x, fn, symbol) { if (isArray(symbol)) { return symbol.map(function (s) { return hasWith(x, fn, s); }).every(isTrue) } else { return fn(getIncludesCount(x.split(''), symbol)) } } var isValidJSONLine = function (subString) { var trimmed = subString.trim() var start = trimmed.charCodeAt(0) var end = trimmed.charCodeAt(trimmed.length - 1) return JSONAlphaOmega(start) && JSONAlphaOmega(end) } /* prettier-ignore */ /** * @desc isJSON, without tryCatch * @param {*} x value to check * @return {boolean} x isJSON * * @example * isJSON('{}') * //=> true * * isJSON('') * //=> false * * isJSON('[]') * //=> true */ function isJSON(x) { return isString(x) && x.split(',').every(isValidJSONLine) } function isJSONSafe(x) { return isJSON(x) && hasWith(x, isEven, ['[', ']', '{', '}', '"']) } // https://github.com/mootools/mootools-core/blob/master/Source/Utilities/JSON.js var reValidJSON = /^[\],:{}\s]*$/ var reProps = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g var reVals = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g var reColons = /(?:^|:|,)(?:\s*\[)+/g // const replacements = [ // replace(reProps, '@'), // replace(reVals, ']'), // replace(reColons, ':'), // ] // const replaceAll = pipe(replacements) function isValidJSON(string) { reValidJSON.test( string.replace(reProps, '@').replace(reVals, ']').replace(reColons, '') ) } module.exports = isJSON //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSlNPTi5qcyIsInNvdXJjZXMiOlsiSlNPTi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBnZXRJbmNsdWRlc0NvdW50ID0gcmVxdWlyZSgnLi4vZnAvaW5jbHVkZXNDb3VudCcpXG5jb25zdCBpc0V2ZW4gPSByZXF1aXJlKCcuLi9tYXRoL2V2ZW4nKVxuY29uc3QgaXNBcnJheSA9IHJlcXVpcmUoJy4vYXJyYXknKVxuY29uc3QgaXNOdW1iZXIgPSByZXF1aXJlKCcuL251bWJlclByaW1pdGl2ZScpXG5jb25zdCBpc1N0cmluZyA9IHJlcXVpcmUoJy4vc3RyaW5nUHJpbWl0aXZlJylcbmNvbnN0IGlzVHJ1ZSA9IHJlcXVpcmUoJy4vdHJ1ZScpXG5cbi8vIGh0dHA6Ly9kb2N1bWVudGNsb3VkLmdpdGh1Yi5pby91bmRlcnNjb3JlLWNvbnRyaWIvI2lzanNvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Nocmlzby92YWxpZGF0b3IuanMvYmxvYi9tYXN0ZXIvc3JjL2xpYi9pc0pTT04uanNcbi8vIGh0dHBzOi8vYml0c3JjLmlvL2FtaXQvanNvbi9nbG9iYWwvanNvbi12YWxpZGF0b3IvY29kZVxuLy9cbi8vIGNvbnN0IG9ubHlMZXR0ZXJzQW5kU3BhY2VzID0gL14oW1xcc2Etel0rKSokL2dpbVxuLy8gY29uc3QgcmVnZXhwID0gL1tcXFwifFxce3xcXFt8XFx9fF0rL1xuLy8gY29uc3QgY2hhcnMgPSBbJ1snLCAnXCInLCAneycsICddJywgJ30nXVxuLy8gY29uc3QgbnVtcyA9IFs5MSwgMzRdXG4vLyBjb25zdCBtYXAgPSB7XG4vLyAgICdcIic6IDM0LFxuLy8gICAneyc6IDEyMyxcbi8vICAgJ30nOiAxMjUsXG4vLyAgICddJzogOTMsXG4vLyAgICdbJzogOTEsXG4vLyB9XG5cblxuLy8gQFRPRE8gZXZlcnl0aGluZyBsaWtlIHRoaXMgKHdpdGggbnVtYmVycylcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuY29uc3QgSlNPTkFscGhhT21lZ2EgPSB4ID0+XG4gIHggPT09IDkzIHx8IHggPT09IDkxIHx8IHggPT09IDEyNSB8fCB4ID09PSAxMjMgfHwgeCA9PT0gMzRcblxuXG5mdW5jdGlvbiBoYXNXaXRoKHgsIGZuLCBzeW1ib2wpIHtcbiAgaWYgKGlzQXJyYXkoc3ltYm9sKSkgcmV0dXJuIHN5bWJvbC5tYXAocyA9PiBoYXNXaXRoKHgsIGZuLCBzKSkuZXZlcnkoaXNUcnVlKVxuICBlbHNlIHJldHVybiBmbihnZXRJbmNsdWRlc0NvdW50KHguc3BsaXQoJycpLCBzeW1ib2wpKVxufVxuXG5jb25zdCBpc1ZhbGlkSlNPTkxpbmUgPSBzdWJTdHJpbmcgPT4ge1xuICBjb25zdCB0cmltbWVkID0gc3ViU3RyaW5nLnRyaW0oKVxuICBjb25zdCBzdGFydCA9IHRyaW1tZWQuY2hhckNvZGVBdCgwKVxuICBjb25zdCBlbmQgPSB0cmltbWVkLmNoYXJDb2RlQXQodHJpbW1lZC5sZW5ndGggLSAxKVxuICByZXR1cm4gSlNPTkFscGhhT21lZ2Eoc3RhcnQpICYmIEpTT05BbHBoYU9tZWdhKGVuZClcbn1cblxuLyogcHJldHRpZXItaWdub3JlICovXG4vKipcbiAqIEBkZXNjIGlzSlNPTiwgd2l0aG91dCB0cnlDYXRjaFxuICogQHBhcmFtICB7Kn0geCB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybiB7Ym9vbGVhbn0geCBpc0pTT05cbiAqXG4gKiBAZXhhbXBsZVxuICogICAgaXNKU09OKCd7fScpXG4gKiAgICAvLz0+IHRydWVcbiAqXG4gKiAgICBpc0pTT04oJycpXG4gKiAgICAvLz0+IGZhbHNlXG4gKlxuICogICAgaXNKU09OKCdbXScpXG4gKiAgICAvLz0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNKU09OKHgpIHtcbiAgcmV0dXJuIGlzU3RyaW5nKHgpICYmIHguc3BsaXQoJywnKS5ldmVyeShpc1ZhbGlkSlNPTkxpbmUpXG59XG5cbmZ1bmN0aW9uIGlzSlNPTlNhZmUoeCkge1xuICByZXR1cm4gaXNKU09OKHgpICYmIGhhc1dpdGgoeCwgaXNFdmVuLCBbJ1snLCAnXScsICd7JywgJ30nLCAnXCInXSlcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21vb3Rvb2xzL21vb3Rvb2xzLWNvcmUvYmxvYi9tYXN0ZXIvU291cmNlL1V0aWxpdGllcy9KU09OLmpzXG5cbmNvbnN0IHJlVmFsaWRKU09OID0gL15bXFxdLDp7fVxcc10qJC9cbmNvbnN0IHJlUHJvcHMgPSAvXFxcXCg/OltcIlxcXFxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nXG5jb25zdCByZVZhbHMgPSAvXCJbXlwiXFxcXFxcblxccl0qXCJ8dHJ1ZXxmYWxzZXxudWxsfC0/XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxkKyk/L2dcbmNvbnN0IHJlQ29sb25zID0gLyg/Ol58OnwsKSg/OlxccypcXFspKy9nXG5cbi8vIGNvbnN0IHJlcGxhY2VtZW50cyA9IFtcbi8vICAgcmVwbGFjZShyZVByb3BzLCAnQCcpLFxuLy8gICByZXBsYWNlKHJlVmFscywgJ10nKSxcbi8vICAgcmVwbGFjZShyZUNvbG9ucywgJzonKSxcbi8vIF1cbi8vIGNvbnN0IHJlcGxhY2VBbGwgPSBwaXBlKHJlcGxhY2VtZW50cylcblxuZnVuY3Rpb24gaXNWYWxpZEpTT04oc3RyaW5nKSB7XG4gIHJlVmFsaWRKU09OLnRlc3QoXG4gICAgc3RyaW5nLnJlcGxhY2UocmVQcm9wcywgJ0AnKS5yZXBsYWNlKHJlVmFscywgJ10nKS5yZXBsYWNlKHJlQ29sb25zLCAnJylcbiAgKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSlNPTlxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztBQUN2REEsR0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO0FBQ3RDQSxHQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDbENBLEdBQUssQ0FB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