summaryrefslogtreecommitdiff
path: root/node_modules/@babel/helper-create-regexp-features-plugin/lib/util.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:31:11 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:31:11 +0800
commitaa773172311dcada759dfbaac485f4bc6e00bc21 (patch)
treeca6d9a5eff3ab8f689f9acb4f0df791d9486813d /node_modules/@babel/helper-create-regexp-features-plugin/lib/util.js
parentc5a5384e846f242e901e859fe600d695d8990a9a (diff)
added babel
Diffstat (limited to 'node_modules/@babel/helper-create-regexp-features-plugin/lib/util.js')
-rw-r--r--node_modules/@babel/helper-create-regexp-features-plugin/lib/util.js71
1 files changed, 71 insertions, 0 deletions
diff --git a/node_modules/@babel/helper-create-regexp-features-plugin/lib/util.js b/node_modules/@babel/helper-create-regexp-features-plugin/lib/util.js
new file mode 100644
index 00000000..7409090c
--- /dev/null
+++ b/node_modules/@babel/helper-create-regexp-features-plugin/lib/util.js
@@ -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" && /\\[pP]{/.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