feat: initial commit
This commit is contained in:
71
node_modules/@babel/helper-create-regexp-features-plugin/lib/util.js
generated
vendored
Normal file
71
node_modules/@babel/helper-create-regexp-features-plugin/lib/util.js
generated
vendored
Normal file
@ -0,0 +1,71 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.canSkipRegexpu = canSkipRegexpu;
|
||||
exports.generateRegexpuOptions = generateRegexpuOptions;
|
||||
exports.transformFlags = transformFlags;
|
||||
var _features = require("./features.js");
|
||||
function generateRegexpuOptions(pattern, toTransform) {
|
||||
const feat = (name, ok = "transform") => {
|
||||
return (0, _features.hasFeature)(toTransform, _features.FEATURES[name]) ? ok : false;
|
||||
};
|
||||
const featDuplicateNamedGroups = () => {
|
||||
if (!feat("duplicateNamedCaptureGroups")) return false;
|
||||
const regex = /\(\?<([^>]+)>/g;
|
||||
const seen = new Set();
|
||||
for (let match; match = regex.exec(pattern); seen.add(match[1])) {
|
||||
if (seen.has(match[1])) return "transform";
|
||||
}
|
||||
return false;
|
||||
};
|
||||
return {
|
||||
unicodeFlag: feat("unicodeFlag"),
|
||||
unicodeSetsFlag: feat("unicodeSetsFlag") || "parse",
|
||||
dotAllFlag: feat("dotAllFlag"),
|
||||
unicodePropertyEscapes: feat("unicodePropertyEscape"),
|
||||
namedGroups: feat("namedCaptureGroups") || featDuplicateNamedGroups(),
|
||||
onNamedGroup: () => {},
|
||||
modifiers: feat("modifiers")
|
||||
};
|
||||
}
|
||||
function canSkipRegexpu(node, options) {
|
||||
const {
|
||||
flags,
|
||||
pattern
|
||||
} = node;
|
||||
if (flags.includes("v")) {
|
||||
if (options.unicodeSetsFlag === "transform") return false;
|
||||
}
|
||||
if (flags.includes("u")) {
|
||||
if (options.unicodeFlag === "transform") return false;
|
||||
if (options.unicodePropertyEscapes === "transform" && /\\p\{/i.test(pattern)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (flags.includes("s")) {
|
||||
if (options.dotAllFlag === "transform") return false;
|
||||
}
|
||||
if (options.namedGroups === "transform" && /\(\?<(?![=!])/.test(pattern)) {
|
||||
return false;
|
||||
}
|
||||
if (options.modifiers === "transform" && /\(\?[\w-]+:/.test(pattern)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function transformFlags(regexpuOptions, flags) {
|
||||
if (regexpuOptions.unicodeSetsFlag === "transform") {
|
||||
flags = flags.replace("v", "u");
|
||||
}
|
||||
if (regexpuOptions.unicodeFlag === "transform") {
|
||||
flags = flags.replace("u", "");
|
||||
}
|
||||
if (regexpuOptions.dotAllFlag === "transform") {
|
||||
flags = flags.replace("s", "");
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
|
||||
//# sourceMappingURL=util.js.map
|
Reference in New Issue
Block a user