diff options
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.js | 71 |
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 |
