| /** |
| * @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, |
| }; |