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
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								}
							 |