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.
		
		
		
		
		
			
		
			
				
					81 lines
				
				2.3 KiB
			
		
		
			
		
	
	
					81 lines
				
				2.3 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | exports.__esModule = true; | ||
|  | exports.applyMissingDependenciesDefaults = applyMissingDependenciesDefaults; | ||
|  | exports.validateIncludeExclude = validateIncludeExclude; | ||
|  | 
 | ||
|  | var _utils = require("./utils"); | ||
|  | 
 | ||
|  | function patternToRegExp(pattern) { | ||
|  |   if (pattern instanceof RegExp) return pattern; | ||
|  | 
 | ||
|  |   try { | ||
|  |     return new RegExp(`^${pattern}$`); | ||
|  |   } catch (_unused) { | ||
|  |     return null; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | function buildUnusedError(label, unused) { | ||
|  |   if (!unused.length) return ""; | ||
|  |   return `  - The following "${label}" patterns didn't match any polyfill:\n` + unused.map(original => `    ${String(original)}\n`).join(""); | ||
|  | } | ||
|  | 
 | ||
|  | function buldDuplicatesError(duplicates) { | ||
|  |   if (!duplicates.size) return ""; | ||
|  |   return `  - The following polyfills were matched both by "include" and "exclude" patterns:\n` + Array.from(duplicates, name => `    ${name}\n`).join(""); | ||
|  | } | ||
|  | 
 | ||
|  | function validateIncludeExclude(provider, polyfills, includePatterns, excludePatterns) { | ||
|  |   let current; | ||
|  | 
 | ||
|  |   const filter = pattern => { | ||
|  |     const regexp = patternToRegExp(pattern); | ||
|  |     if (!regexp) return false; | ||
|  |     let matched = false; | ||
|  | 
 | ||
|  |     for (const polyfill of polyfills) { | ||
|  |       if (regexp.test(polyfill)) { | ||
|  |         matched = true; | ||
|  |         current.add(polyfill); | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     return !matched; | ||
|  |   }; // prettier-ignore
 | ||
|  | 
 | ||
|  | 
 | ||
|  |   const include = current = new Set(); | ||
|  |   const unusedInclude = Array.from(includePatterns).filter(filter); // prettier-ignore
 | ||
|  | 
 | ||
|  |   const exclude = current = new Set(); | ||
|  |   const unusedExclude = Array.from(excludePatterns).filter(filter); | ||
|  |   const duplicates = (0, _utils.intersection)(include, exclude); | ||
|  | 
 | ||
|  |   if (duplicates.size > 0 || unusedInclude.length > 0 || unusedExclude.length > 0) { | ||
|  |     throw new Error(`Error while validating the "${provider}" provider options:\n` + buildUnusedError("include", unusedInclude) + buildUnusedError("exclude", unusedExclude) + buldDuplicatesError(duplicates)); | ||
|  |   } | ||
|  | 
 | ||
|  |   return { | ||
|  |     include, | ||
|  |     exclude | ||
|  |   }; | ||
|  | } | ||
|  | 
 | ||
|  | function applyMissingDependenciesDefaults(options, babelApi) { | ||
|  |   const { | ||
|  |     missingDependencies = {} | ||
|  |   } = options; | ||
|  |   if (missingDependencies === false) return false; | ||
|  |   const caller = babelApi.caller(caller => caller == null ? void 0 : caller.name); | ||
|  |   const { | ||
|  |     log = "deferred", | ||
|  |     inject = caller === "rollup-plugin-babel" ? "throw" : "import", | ||
|  |     all = false | ||
|  |   } = missingDependencies; | ||
|  |   return { | ||
|  |     log, | ||
|  |     inject, | ||
|  |     all | ||
|  |   }; | ||
|  | } |