| "use strict"; |
| |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.generateRegexpuOptions = generateRegexpuOptions; |
| |
| var _features = require("./features"); |
| |
| function generateRegexpuOptions(node, features) { |
| let useUnicodeFlag = false, |
| dotAllFlag = false, |
| unicodePropertyEscape = false, |
| namedGroup = false; |
| const { |
| flags, |
| pattern |
| } = node; |
| const flagsIncludesU = flags.includes("u"); |
| |
| if (flagsIncludesU) { |
| if (!(0, _features.hasFeature)(features, _features.FEATURES.unicodeFlag)) { |
| useUnicodeFlag = true; |
| } |
| |
| if ((0, _features.hasFeature)(features, _features.FEATURES.unicodePropertyEscape) && /\\[pP]{/.test(pattern)) { |
| unicodePropertyEscape = true; |
| } |
| } |
| |
| if ((0, _features.hasFeature)(features, _features.FEATURES.dotAllFlag) && flags.indexOf("s") >= 0) { |
| dotAllFlag = true; |
| } |
| |
| if ((0, _features.hasFeature)(features, _features.FEATURES.namedCaptureGroups) && /\(\?<(?![=!])/.test(pattern)) { |
| namedGroup = true; |
| } |
| |
| if (!namedGroup && !unicodePropertyEscape && !dotAllFlag && (!flagsIncludesU || useUnicodeFlag)) { |
| return null; |
| } |
| |
| if (flagsIncludesU && flags.indexOf("s") >= 0) { |
| dotAllFlag = true; |
| } |
| |
| return { |
| useUnicodeFlag, |
| onNamedGroup: () => {}, |
| namedGroup, |
| unicodePropertyEscape, |
| dotAllFlag, |
| lookbehind: true |
| }; |
| } |