blob: 8a365c8b01bedeb4f06b6169fbcb5a33464d44bc [file] [log] [blame]
"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
};
}