/** * @fileoverview Common utils for regular expressions. * @author Josh Goldberg * @author Toru Nagashima */ "use strict"; const { RegExpValidator } = require("@eslint-community/regexpp"); const REGEXPP_LATEST_ECMA_VERSION = 2025; /** * Checks if the given regular expression pattern would be valid with the `u` flag. * @param {number} ecmaVersion ECMAScript version to parse in. * @param {string} pattern The regular expression pattern to verify. * @param {"u"|"v"} flag The type of Unicode flag * @returns {boolean} `true` if the pattern would be valid with the `u` flag. * `false` if the pattern would be invalid with the `u` flag or the configured * ecmaVersion doesn't support the `u` flag. */ function isValidWithUnicodeFlag(ecmaVersion, pattern, flag = "u") { if (flag === "u" && ecmaVersion <= 5) { // ecmaVersion <= 5 doesn't support the 'u' flag return false; } if (flag === "v" && ecmaVersion <= 2023) { return false; } const validator = new RegExpValidator({ ecmaVersion: Math.min(ecmaVersion, REGEXPP_LATEST_ECMA_VERSION) }); try { validator.validatePattern(pattern, void 0, void 0, flag === "u" ? { unicode: /* uFlag = */ true } : { unicodeSets: true }); } catch { return false; } return true; } module.exports = { isValidWithUnicodeFlag, REGEXPP_LATEST_ECMA_VERSION };