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
"use strict"; |
|
|
|
exports.__esModule = true; |
|
exports.validateIncludeExclude = validateIncludeExclude; |
|
exports.applyMissingDependenciesDefaults = applyMissingDependenciesDefaults; |
|
|
|
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 |
|
}; |
|
} |