|
|
- "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
- };
- }
|