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
							 |