You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					69 lines
				
				2.0 KiB
			
		
		
			
		
	
	
					69 lines
				
				2.0 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports.canSkipRegexpu = canSkipRegexpu; | ||
|  | exports.generateRegexpuOptions = generateRegexpuOptions; | ||
|  | exports.transformFlags = transformFlags; | ||
|  | var _features = require("./features"); | ||
|  | 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") || feat("unicodeSetsFlag_syntax", "parse"), | ||
|  |     dotAllFlag: feat("dotAllFlag"), | ||
|  |     unicodePropertyEscapes: feat("unicodePropertyEscape"), | ||
|  |     namedGroups: feat("namedCaptureGroups") || featDuplicateNamedGroups(), | ||
|  |     onNamedGroup: () => {} | ||
|  |   }; | ||
|  | } | ||
|  | 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; | ||
|  |   } | ||
|  |   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
 |