{"version":3,"sources":["jsdelivr-header.js","/npm/@putout/plugin-remove-useless-escape@7.0.0/lib/remove-useless-escape.js"],"names":[],"mappings":"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","file":"/npm/@putout/plugin-remove-useless-escape@7.0.0/lib/remove-useless-escape.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@putout/plugin-remove-useless-escape@7.0.0/lib/remove-useless-escape.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\n\nconst emojiRegex = require('emoji-regex');\n\nconst {types, operator} = require('putout');\n\nconst {replaceWith} = operator;\nconst {RegExpLiteral} = types;\nconst {assign} = Object;\n\nmodule.exports.report = () => 'Unnecessary escape character';\n\nmodule.exports.fix = (path) => {\n    if (path.isStringLiteral()) {\n        const {raw} = path.node;\n        \n        path.node.raw = unEscape(raw);\n        \n        return;\n    }\n    \n    if (path.isRegExpLiteral()) {\n        const {pattern, flags} = path.node;\n        \n        const unescaped = unescapeRegExp(pattern);\n        const raw = `/${unescaped}/`;\n        \n        const regExpNode = assign(RegExpLiteral(unescaped, flags), {\n            value: unescaped,\n            raw,\n            extra: {\n                raw,\n                rawValue: unescaped,\n            },\n        });\n        \n        replaceWith(path, regExpNode);\n        return;\n    }\n    \n    for (const tmpl of path.node.quasis) {\n        const {raw} = tmpl.value;\n        tmpl.value.raw = unEscape(raw);\n    }\n};\n\nmodule.exports.traverse = ({push}) => ({\n    'RegExpLiteral'(path) {\n        const {raw} = path.node;\n        \n        if (isEscapedRegExp(raw))\n            push(path);\n    },\n    '\"__\"'(path) {\n        const {raw} = path.node;\n        \n        if (isEscaped(raw))\n            push(path);\n    },\n    \n    '`__`'(path) {\n        for (const tmpl of path.node.quasis) {\n            const {raw} = tmpl.value;\n            \n            if (isEscaped(raw))\n                return push(path);\n            \n            if (hasQuote(raw))\n                return push(path);\n            \n            if (raw.includes('\\\\\"') && !raw.includes(`\\\\\\\\\"`))\n                return push(path);\n            \n            if (raw.includes(`\\\\'`) && !raw.includes(`\\\\\\\\'`))\n                return push(path);\n        }\n    },\n});\n\nconst createCheckRegExp = (a) => RegExp(`^((?!\\\\\\\\).)*\\\\\\\\${a}.`);\n\nconst match = (a) => a.match(emojiRegex()) || [];\nconst hasA = (a) => /\\\\\\^/.test(a);\nconst hasDoubleQuote = (a) => createCheckRegExp('\"').test(a);\nconst hasQuote = (a) => createCheckRegExp(`'`).test(a);\nconst hasComa = (a) => createCheckRegExp(',').test(a);\n\nconst hasEmoji = (a) => {\n    for (const emoji of match(a)) {\n        if (a.includes(`\\\\${emoji}`))\n            return true;\n    }\n    \n    return false;\n};\n\nfunction isEscaped(raw) {\n    if (!raw)\n        return false;\n    \n    if (!raw.includes('\\\\'))\n        return false;\n    \n    if (raw.includes('\\\\h') && !raw.includes('\\\\\\\\h'))\n        return true;\n    \n    if (/\\\\\\\\/g.test(raw))\n        return false;\n    \n    if (/\\\\\\//g.test(raw))\n        return true;\n    \n    if (raw.includes('\\\\$'))\n        return true;\n    \n    if (raw.includes('\\\\.'))\n        return true;\n    \n    if (raw.includes('\\\\{'))\n        return true;\n    \n    if (raw.includes('\\\\+') && !raw.includes('\\\\\\\\+'))\n        return true;\n    \n    if (hasDoubleQuote(raw))\n        return true;\n    \n    if (hasEmoji(raw))\n        return true;\n    \n    if (hasA(raw))\n        return true;\n    \n    return hasComa(raw);\n}\n\nconst createEncodedRegExp = (a) => RegExp(`\\\\\\\\${a}`, 'g');\n\nfunction unEscape(raw) {\n    raw = raw\n        .replaceAll(`\\\\'`, `'`)\n        .replaceAll('\\\\/', '/')\n        .replaceAll('\\\\+', '+')\n        .replace(createEncodedRegExp(`\"`), '\"')\n        .replaceAll('\\\\^', '^')\n        .replaceAll('\\\\$', '$')\n        .replaceAll('\\\\{', '{')\n        .replaceAll('\\\\.', '.')\n        .replace(/(\\\\),/, ',')\n        .replaceAll('\\\\h', 'h');\n    \n    for (const emoji of match(raw)) {\n        raw = raw.replace(createEncodedRegExp(emoji), emoji);\n    }\n    \n    return raw;\n}\n\nconst unescapeRegExp = (raw) => raw\n    .replaceAll('\\\\:', ':')\n    .replaceAll('\\\\+\\\\/', '+/')\n    .replaceAll('\\\\,', ',')\n    .replaceAll('\\\\`', '`');\n\nconst is = (a) => (b) => b.includes(`\\\\${a}`) && !b.includes(`\\\\\\\\${a}`);\nconst isRegExpColon = is(':');\nconst isComa = is(',');\nconst isRegExpSlash = (a) => a.includes('\\\\\\\\\\\\\\\\');\n\nfunction isEscapedRegExp(raw) {\n    if (raw.includes('\\\\/'))\n        return false;\n    \n    if (raw.includes('\\\\`'))\n        return true;\n    \n    return isRegExpColon(raw) || isRegExpSlash(raw) || isComa(raw);\n}\n"]}