Commit 6b3fefa5 authored by Rosanny Sihombing's avatar Rosanny Sihombing
Browse files

add required modules

parent f5ecdc42
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createRegExpFeaturePlugin = createRegExpFeaturePlugin;
var _regexpuCore = require("regexpu-core");
var _features = require("./features");
var _util = require("./util");
var _core = require("@babel/core");
var _helperAnnotateAsPure = require("@babel/helper-annotate-as-pure");
const version = "7.18.6".split(".").reduce((v, x) => v * 1e5 + +x, 0);
const versionKey = "@babel/plugin-regexp-features/version";
function createRegExpFeaturePlugin({
name,
feature,
options = {},
manipulateOptions = () => {}
}) {
return {
name,
manipulateOptions,
pre() {
var _file$get;
const {
file
} = this;
const features = (_file$get = file.get(_features.featuresKey)) != null ? _file$get : 0;
let newFeatures = (0, _features.enableFeature)(features, _features.FEATURES[feature]);
const {
useUnicodeFlag,
runtime = true
} = options;
if (useUnicodeFlag === false) {
newFeatures = (0, _features.enableFeature)(newFeatures, _features.FEATURES.unicodeFlag);
}
if (newFeatures !== features) {
file.set(_features.featuresKey, newFeatures);
}
if (!runtime) {
file.set(_features.runtimeKey, false);
}
if (!file.has(versionKey) || file.get(versionKey) < version) {
file.set(versionKey, version);
}
},
visitor: {
RegExpLiteral(path) {
var _file$get2;
const {
node
} = path;
const {
file
} = this;
const features = file.get(_features.featuresKey);
const runtime = (_file$get2 = file.get(_features.runtimeKey)) != null ? _file$get2 : true;
const regexpuOptions = (0, _util.generateRegexpuOptions)(features);
if ((0, _util.canSkipRegexpu)(node, regexpuOptions)) return;
const namedCaptureGroups = {};
if (regexpuOptions.namedGroups === "transform") {
regexpuOptions.onNamedGroup = (name, index) => {
namedCaptureGroups[name] = index;
};
}
node.pattern = _regexpuCore(node.pattern, node.flags, regexpuOptions);
if (regexpuOptions.namedGroups === "transform" && Object.keys(namedCaptureGroups).length > 0 && runtime && !isRegExpTest(path)) {
const call = _core.types.callExpression(this.addHelper("wrapRegExp"), [node, _core.types.valueToNode(namedCaptureGroups)]);
(0, _helperAnnotateAsPure.default)(call);
path.replaceWith(call);
}
node.flags = (0, _util.transformFlags)(regexpuOptions, node.flags);
}
}
};
}
function isRegExpTest(path) {
return path.parentPath.isMemberExpression({
object: path.node,
computed: false
}) && path.parentPath.get("property").isIdentifier({
name: "test"
});
}
\ No newline at end of file
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.canSkipRegexpu = canSkipRegexpu;
exports.generateRegexpuOptions = generateRegexpuOptions;
exports.transformFlags = transformFlags;
var _features = require("./features");
function generateRegexpuOptions(toTransform) {
const feat = (name, ok = "transform") => {
return (0, _features.hasFeature)(toTransform, _features.FEATURES[name]) ? ok : false;
};
return {
unicodeFlag: feat("unicodeFlag"),
unicodeSetsFlag: feat("unicodeSetsFlag") || feat("unicodeSetsFlag_syntax", "parse"),
dotAllFlag: feat("dotAllFlag"),
unicodePropertyEscapes: feat("unicodePropertyEscape"),
namedGroups: feat("namedCaptureGroups"),
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;
}
\ No newline at end of file
{
"name": "@babel/helper-create-regexp-features-plugin",
"version": "7.18.6",
"author": "The Babel Team (https://babel.dev/team)",
"license": "MIT",
"description": "Compile ESNext Regular Expressions to ES5",
"repository": {
"type": "git",
"url": "https://github.com/babel/babel.git",
"directory": "packages/babel-helper-create-regexp-features-plugin"
},
"main": "./lib/index.js",
"publishConfig": {
"access": "public"
},
"keywords": [
"babel",
"babel-plugin"
],
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
"regexpu-core": "^5.1.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
},
"devDependencies": {
"@babel/core": "^7.18.6",
"@babel/helper-plugin-test-runner": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"type": "commonjs"
}
\ No newline at end of file
MIT License
Copyright (c) 2014-present Nicolò Ribaudo and other contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# @babel/helper-define-polyfill-provider
## Install
Using npm:
```sh
npm install --save-dev @babel/helper-define-polyfill-provider
```
or using yarn:
```sh
yarn add @babel/helper-define-polyfill-provider --dev
```
import { declare } from '@babel/helper-plugin-utils';
import _getTargets, { prettifyTargets, getInclusionReasons, isRequired } from '@babel/helper-compilation-targets';
import * as babel from '@babel/core';
const {
types: t$1,
template
} = babel.default || babel;
function intersection(a, b) {
const result = new Set();
a.forEach(v => b.has(v) && result.add(v));
return result;
}
function has$1(object, key) {
return Object.prototype.hasOwnProperty.call(object, key);
}
function getType(target) {
return Object.prototype.toString.call(target).slice(8, -1);
}
function resolveId(path) {
if (path.isIdentifier() && !path.scope.hasBinding(path.node.name,
/* noGlobals */
true)) {
return path.node.name;
}
const {
deopt
} = path.evaluate();
if (deopt && deopt.isIdentifier()) {
return deopt.node.name;
}
}
function resolveKey(path, computed = false) {
const {
node,
parent,
scope
} = path;
if (path.isStringLiteral()) return node.value;
const {
name
} = node;
const isIdentifier = path.isIdentifier();
if (isIdentifier && !(computed || parent.computed)) return name;
if (computed && path.isMemberExpression() && path.get("object").isIdentifier({
name: "Symbol"
}) && !scope.hasBinding("Symbol",
/* noGlobals */
true)) {
const sym = resolveKey(path.get("property"), path.node.computed);
if (sym) return "Symbol." + sym;
}
if (!isIdentifier || scope.hasBinding(name,
/* noGlobals */
true)) {
const {
value
} = path.evaluate();
if (typeof value === "string") return value;
}
}
function resolveSource(obj) {
if (obj.isMemberExpression() && obj.get("property").isIdentifier({
name: "prototype"
})) {
const id = resolveId(obj.get("object"));
if (id) {
return {
id,
placement: "prototype"
};
}
return {
id: null,
placement: null
};
}
const id = resolveId(obj);
if (id) {
return {
id,
placement: "static"
};
}
const {
value
} = obj.evaluate();
if (value !== undefined) {
return {
id: getType(value),
placement: "prototype"
};
} else if (obj.isRegExpLiteral()) {
return {
id: "RegExp",
placement: "prototype"
};
} else if (obj.isFunction()) {
return {
id: "Function",
placement: "prototype"
};
}
return {
id: null,
placement: null
};
}
function getImportSource({
node
}) {
if (node.specifiers.length === 0) return node.source.value;
}
function getRequireSource({
node
}) {
if (!t$1.isExpressionStatement(node)) return;
const {
expression
} = node;
const isRequire = t$1.isCallExpression(expression) && t$1.isIdentifier(expression.callee) && expression.callee.name === "require" && expression.arguments.length === 1 && t$1.isStringLiteral(expression.arguments[0]);
if (isRequire) return expression.arguments[0].value;
}
function hoist(node) {
node._blockHoist = 3;
return node;
}
function createUtilsGetter(cache) {
return path => {
const prog = path.findParent(p => p.isProgram());
return {
injectGlobalImport(url) {
cache.storeAnonymous(prog, url, (isScript, source) => {
return isScript ? template.statement.ast`require(${source})` : t$1.importDeclaration([], source);
});
},
injectNamedImport(url, name, hint = name) {
return cache.storeNamed(prog, url, name, (isScript, source, name) => {
const id = prog.scope.generateUidIdentifier(hint);
return {
node: isScript ? hoist(template.statement.ast`
var ${id} = require(${source}).${name}
`) : t$1.importDeclaration([t$1.importSpecifier(id, name)], source),
name: id.name
};
});
},
injectDefaultImport(url, hint = url) {
return cache.storeNamed(prog, url, "default", (isScript, source) => {
const id = prog.scope.generateUidIdentifier(hint);
return {
node: isScript ? hoist(template.statement.ast`var ${id} = require(${source})`) : t$1.importDeclaration([t$1.importDefaultSpecifier(id)], source),
name: id.name
};
});
}
};
};
}
const {
types: t
} = babel.default || babel;
class ImportsCache {
constructor(resolver) {
this._imports = new WeakMap();
this._anonymousImports = new WeakMap();
this._lastImports = new WeakMap();
this._resolver = resolver;
}
storeAnonymous(programPath, url, // eslint-disable-next-line no-undef
getVal) {
const key = this._normalizeKey(programPath, url);
const imports = this._ensure(this._anonymousImports, programPath, Set);
if (imports.has(key)) return;
const node = getVal(programPath.node.sourceType === "script", t.stringLiteral(this._resolver(url)));
imports.add(key);
this._injectImport(programPath, node);
}
storeNamed(programPath, url, name, getVal) {
const key = this._normalizeKey(programPath, url, name);
const imports = this._ensure(this._imports, programPath, Map);
if (!imports.has(key)) {
const {
node,
name: id
} = getVal(programPath.node.sourceType === "script", t.stringLiteral(this._resolver(url)), t.identifier(name));
imports.set(key, id);
this._injectImport(programPath, node);
}
return t.identifier(imports.get(key));
}
_injectImport(programPath, node) {
let lastImport = this._lastImports.get(programPath);
if (lastImport && lastImport.node && // Sometimes the AST is modified and the "last import"
// we have has been replaced
lastImport.parent === programPath.node && lastImport.container === programPath.node.body) {
lastImport = lastImport.insertAfter(node);
} else {
lastImport = programPath.unshiftContainer("body", node);
}
lastImport = lastImport[lastImport.length - 1];
this._lastImports.set(programPath, lastImport);
/*
let lastImport;
programPath.get("body").forEach(path => {
if (path.isImportDeclaration()) lastImport = path;
if (
path.isExpressionStatement() &&
isRequireCall(path.get("expression"))
) {
lastImport = path;
}
if (
path.isVariableDeclaration() &&
path.get("declarations").length === 1 &&
(isRequireCall(path.get("declarations.0.init")) ||
(path.get("declarations.0.init").isMemberExpression() &&
isRequireCall(path.get("declarations.0.init.object"))))
) {
lastImport = path;
}
});*/
}
_ensure(map, programPath, Collection) {
let collection = map.get(programPath);
if (!collection) {
collection = new Collection();
map.set(programPath, collection);
}
return collection;
}
_normalizeKey(programPath, url, name = "") {
const {
sourceType
} = programPath.node; // If we rely on the imported binding (the "name" parameter), we also need to cache
// based on the sourceType. This is because the module transforms change the names
// of the import variables.
return `${name && sourceType}::${url}::${name}`;
}
}
const presetEnvSilentDebugHeader = "#__secret_key__@babel/preset-env__don't_log_debug_header_and_resolved_targets";
function stringifyTargetsMultiline(targets) {
return JSON.stringify(prettifyTargets(targets), null, 2);
}
function patternToRegExp(pattern) {
if (pattern instanceof RegExp) return pattern;
try {
return new RegExp(`^${pattern}$`);
} catch {
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 = 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
};
}
var usage = (callProvider => {
function property(object, key, placement, path) {
return callProvider({
kind: "property",
object,
key,
placement
}, path);
}
return {
// Symbol(), new Promise
ReferencedIdentifier(path) {
const {
node: {
name
},
scope
} = path;
if (scope.getBindingIdentifier(name)) return;
callProvider({
kind: "global",
name
}, path);
},
MemberExpression(path) {
const key = resolveKey(path.get("property"), path.node.computed);
if (!key || key === "prototype") return;
const object = path.get("object");
const binding = object.scope.getBinding(object.node.name);
if (binding && binding.path.isImportNamespaceSpecifier()) return;
const source = resolveSource(object);
return property(source.id, key, source.placement, path);
},
ObjectPattern(path) {
const {
parentPath,
parent
} = path;
let obj; // const { keys, values } = Object
if (parentPath.isVariableDeclarator()) {
obj = parentPath.get("init"); // ({ keys, values } = Object)
} else if (parentPath.isAssignmentExpression()) {
obj = parentPath.get("right"); // !function ({ keys, values }) {...} (Object)
// resolution does not work after properties transform :-(
} else if (parentPath.isFunction()) {
const grand = parentPath.parentPath;
if (grand.isCallExpression() || grand.isNewExpression()) {
if (grand.node.callee === parent) {
obj = grand.get("arguments")[path.key];
}
}
}
let id = null;
let placement = null;
if (obj) ({
id,
placement
} = resolveSource(obj));
for (const prop of path.get("properties")) {
if (prop.isObjectProperty()) {
const key = resolveKey(prop.get("key"));
if (key) property(id, key, placement, prop);
}
}
},
BinaryExpression(path) {
if (path.node.operator !== "in") return;
const source = resolveSource(path.get("right"));
const key = resolveKey(path.get("left"), true);
if (!key) return;
callProvider({
kind: "in",
object: source.id,
key,
placement: source.placement
}, path);
}
};
});
var entry = (callProvider => ({
ImportDeclaration(path) {
const source = getImportSource(path);
if (!source) return;
callProvider({
kind: "import",
source
}, path);
},
Program(path) {
path.get("body").forEach(bodyPath => {
const source = getRequireSource(bodyPath);
if (!source) return;
callProvider({
kind: "import",
source
}, bodyPath);
});
}
}));
function resolve(dirname, moduleName, absoluteImports) {
if (absoluteImports === false) return moduleName;
throw new Error(`"absoluteImports" is not supported in bundles prepared for the browser.`);
} // eslint-disable-next-line no-unused-vars
function has(basedir, name) {
return true;
} // eslint-disable-next-line no-unused-vars
function logMissing(missingDeps) {} // eslint-disable-next-line no-unused-vars
function laterLogMissing(missingDeps) {}
const PossibleGlobalObjects = new Set(["global", "globalThis", "self", "window"]);
function createMetaResolver(polyfills) {
const {
static: staticP,
instance: instanceP,
global: globalP
} = polyfills;
return meta => {
if (meta.kind === "global" && globalP && has$1(globalP, meta.name)) {
return {
kind: "global",
desc: globalP[meta.name],
name: meta.name
};
}
if (meta.kind === "property" || meta.kind === "in") {
const {
placement,
object,
key
} = meta;
if (object && placement === "static") {
if (globalP && PossibleGlobalObjects.has(object) && has$1(globalP, key)) {
return {
kind: "global",
desc: globalP[key],
name: key
};
}
if (staticP && has$1(staticP, object) && has$1(staticP[object], key)) {
return {
kind: "static",
desc: staticP[object][key],
name: `${object}$${key}`
};
}
}
if (instanceP && has$1(instanceP, key)) {
return {
kind: "instance",
desc: instanceP[key],
name: `${key}`
};
}
}
};
}
const getTargets = _getTargets.default || _getTargets;
function resolveOptions(options, babelApi) {
const {
method,
targets: targetsOption,
ignoreBrowserslistConfig,
configPath,
debug,
shouldInjectPolyfill,
absoluteImports,
...providerOptions
} = options;
let methodName;
if (method === "usage-global") methodName = "usageGlobal";else if (method === "entry-global") methodName = "entryGlobal";else if (method === "usage-pure") methodName = "usagePure";else if (typeof method !== "string") {
throw new Error(".method must be a string");
} else {
throw new Error(`.method must be one of "entry-global", "usage-global"` + ` or "usage-pure" (received ${JSON.stringify(method)})`);
}
if (typeof shouldInjectPolyfill === "function") {
if (options.include || options.exclude) {
throw new Error(`.include and .exclude are not supported when using the` + ` .shouldInjectPolyfill function.`);
}
} else if (shouldInjectPolyfill != null) {
throw new Error(`.shouldInjectPolyfill must be a function, or undefined` + ` (received ${JSON.stringify(shouldInjectPolyfill)})`);
}
if (absoluteImports != null && typeof absoluteImports !== "boolean" && typeof absoluteImports !== "string") {
throw new Error(`.absoluteImports must be a boolean, a string, or undefined` + ` (received ${JSON.stringify(absoluteImports)})`);
}
let targets;
if ( // If any browserslist-related option is specified, fallback to the old
// behavior of not using the targets specified in the top-level options.
targetsOption || configPath || ignoreBrowserslistConfig) {
const targetsObj = typeof targetsOption === "string" || Array.isArray(targetsOption) ? {
browsers: targetsOption
} : targetsOption;
targets = getTargets(targetsObj, {
ignoreBrowserslistConfig,
configPath
});
} else {
targets = babelApi.targets();
}
return {
method,
methodName,
targets,
absoluteImports: absoluteImports != null ? absoluteImports : false,
shouldInjectPolyfill,
debug: !!debug,
providerOptions: providerOptions
};
}
function instantiateProvider(factory, options, missingDependencies, dirname, debugLog, babelApi) {
const {
method,
methodName,
targets,
debug,
shouldInjectPolyfill,
providerOptions,
absoluteImports
} = resolveOptions(options, babelApi);
const getUtils = createUtilsGetter(new ImportsCache(moduleName => resolve(dirname, moduleName, absoluteImports))); // eslint-disable-next-line prefer-const
let include, exclude;
let polyfillsSupport;
let polyfillsNames;
let filterPolyfills;
const depsCache = new Map();
const api = {
babel: babelApi,
getUtils,
method: options.method,
targets,
createMetaResolver,
shouldInjectPolyfill(name) {
if (polyfillsNames === undefined) {
throw new Error(`Internal error in the ${factory.name} provider: ` + `shouldInjectPolyfill() can't be called during initialization.`);
}
if (!polyfillsNames.has(name)) {
console.warn(`Internal error in the ${provider.name} provider: ` + `unknown polyfill "${name}".`);
}
if (filterPolyfills && !filterPolyfills(name)) return false;
let shouldInject = isRequired(name, targets, {
compatData: polyfillsSupport,
includes: include,
excludes: exclude
});
if (shouldInjectPolyfill) {
shouldInject = shouldInjectPolyfill(name, shouldInject);
if (typeof shouldInject !== "boolean") {
throw new Error(`.shouldInjectPolyfill must return a boolean.`);
}
}
return shouldInject;
},
debug(name) {
debugLog().found = true;
if (!debug || !name) return;
if (debugLog().polyfills.has(provider.name)) return;
debugLog().polyfills.set(name, polyfillsSupport && name && polyfillsSupport[name]);
},
assertDependency(name, version = "*") {
if (missingDependencies === false) return;
if (absoluteImports) {
// If absoluteImports is not false, we will try resolving
// the dependency and throw if it's not possible. We can
// skip the check here.
return;
}
const dep = version === "*" ? name : `${name}@^${version}`;
const found = missingDependencies.all ? false : mapGetOr(depsCache, `${name} :: ${dirname}`, () => has());
if (!found) {
debugLog().missingDeps.add(dep);
}
}
};
const provider = factory(api, providerOptions, dirname);
if (typeof provider[methodName] !== "function") {
throw new Error(`The "${provider.name || factory.name}" provider doesn't ` + `support the "${method}" polyfilling method.`);
}
if (Array.isArray(provider.polyfills)) {
polyfillsNames = new Set(provider.polyfills);
filterPolyfills = provider.filterPolyfills;
} else if (provider.polyfills) {
polyfillsNames = new Set(Object.keys(provider.polyfills));
polyfillsSupport = provider.polyfills;
filterPolyfills = provider.filterPolyfills;
} else {
polyfillsNames = new Set();
}
({
include,
exclude
} = validateIncludeExclude(provider.name || factory.name, polyfillsNames, providerOptions.include || [], providerOptions.exclude || []));
return {
debug,
method,
targets,
provider,
callProvider(payload, path) {
const utils = getUtils(path); // $FlowIgnore
provider[methodName](payload, utils, path);
}
};
}
function definePolyfillProvider(factory) {
return declare((babelApi, options, dirname) => {
babelApi.assertVersion(7);
const {
traverse
} = babelApi;
let debugLog;
const missingDependencies = applyMissingDependenciesDefaults(options, babelApi);
const {
debug,
method,
targets,
provider,
callProvider
} = instantiateProvider(factory, options, missingDependencies, dirname, () => debugLog, babelApi);
const createVisitor = method === "entry-global" ? entry : usage;
const visitor = provider.visitor ? traverse.visitors.merge([createVisitor(callProvider), provider.visitor]) : createVisitor(callProvider);
if (debug && debug !== presetEnvSilentDebugHeader) {
console.log(`${provider.name}: \`DEBUG\` option`);
console.log(`\nUsing targets: ${stringifyTargetsMultiline(targets)}`);
console.log(`\nUsing polyfills with \`${method}\` method:`);
}
return {
name: "inject-polyfills",
visitor,
pre() {
var _provider$pre;
debugLog = {
polyfills: new Map(),
found: false,
providers: new Set(),
missingDeps: new Set()
}; // $FlowIgnore - Flow doesn't support optional calls
(_provider$pre = provider.pre) == null ? void 0 : _provider$pre.apply(this, arguments);
},
post() {
var _provider$post;
// $FlowIgnore - Flow doesn't support optional calls
(_provider$post = provider.post) == null ? void 0 : _provider$post.apply(this, arguments);
if (missingDependencies !== false) {
if (missingDependencies.log === "per-file") {
logMissing(debugLog.missingDeps);
} else {
laterLogMissing(debugLog.missingDeps);
}
}
if (!debug) return;
if (this.filename) console.log(`\n[${this.filename}]`);
if (debugLog.polyfills.size === 0) {
console.log(method === "entry-global" ? debugLog.found ? `Based on your targets, the ${provider.name} polyfill did not add any polyfill.` : `The entry point for the ${provider.name} polyfill has not been found.` : `Based on your code and targets, the ${provider.name} polyfill did not add any polyfill.`);
return;
}
if (method === "entry-global") {
console.log(`The ${provider.name} polyfill entry has been replaced with ` + `the following polyfills:`);
} else {
console.log(`The ${provider.name} polyfill added the following polyfills:`);
}
for (const [name, support] of debugLog.polyfills) {
if (support) {
const filteredTargets = getInclusionReasons(name, targets, support);
const formattedTargets = JSON.stringify(filteredTargets).replace(/,/g, ", ").replace(/^\{"/, '{ "').replace(/"\}$/, '" }');
console.log(` ${name} ${formattedTargets}`);
} else {
console.log(` ${name}`);
}
}
}
};
});
}
function mapGetOr(map, key, getDefault) {
let val = map.get(key);
if (val === undefined) {
val = getDefault();
map.set(key, val);
}
return val;
}
export default definePolyfillProvider;
//# sourceMappingURL=index.browser.mjs.map
{"version":3,"file":"index.browser.mjs","sources":["../src/utils.js","../src/imports-cache.js","../src/debug-utils.js","../src/normalize-options.js","../src/visitors/usage.js","../src/visitors/entry.js","../src/browser/dependencies.js","../src/meta-resolver.js","../src/index.js"],"sourcesContent":["// @flow\n\nimport * as babel from \"@babel/core\";\nconst { types: t, template } = babel.default || babel;\nimport type NodePath from \"@babel/traverse\";\nimport type { Utils } from \"./types\";\nimport type ImportsCache from \"./imports-cache\";\n\nexport function intersection<T>(a: Set<T>, b: Set<T>): Set<T> {\n const result = new Set();\n a.forEach(v => b.has(v) && result.add(v));\n return result;\n}\n\nexport function has(object: Object, key: string) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction getType(target: any): string {\n return Object.prototype.toString.call(target).slice(8, -1);\n}\n\nfunction resolveId(path) {\n if (\n path.isIdentifier() &&\n !path.scope.hasBinding(path.node.name, /* noGlobals */ true)\n ) {\n return path.node.name;\n }\n\n const { deopt } = path.evaluate();\n if (deopt && deopt.isIdentifier()) {\n return deopt.node.name;\n }\n}\n\nexport function resolveKey(path: NodePath, computed: boolean = false) {\n const { node, parent, scope } = path;\n if (path.isStringLiteral()) return node.value;\n const { name } = node;\n const isIdentifier = path.isIdentifier();\n if (isIdentifier && !(computed || parent.computed)) return name;\n\n if (\n computed &&\n path.isMemberExpression() &&\n path.get(\"object\").isIdentifier({ name: \"Symbol\" }) &&\n !scope.hasBinding(\"Symbol\", /* noGlobals */ true)\n ) {\n const sym = resolveKey(path.get(\"property\"), path.node.computed);\n if (sym) return \"Symbol.\" + sym;\n }\n\n if (!isIdentifier || scope.hasBinding(name, /* noGlobals */ true)) {\n const { value } = path.evaluate();\n if (typeof value === \"string\") return value;\n }\n}\n\nexport function resolveSource(obj: NodePath) {\n if (\n obj.isMemberExpression() &&\n obj.get(\"property\").isIdentifier({ name: \"prototype\" })\n ) {\n const id = resolveId(obj.get(\"object\"));\n\n if (id) {\n return { id, placement: \"prototype\" };\n }\n return { id: null, placement: null };\n }\n\n const id = resolveId(obj);\n if (id) {\n return { id, placement: \"static\" };\n }\n\n const { value } = obj.evaluate();\n if (value !== undefined) {\n return { id: getType(value), placement: \"prototype\" };\n } else if (obj.isRegExpLiteral()) {\n return { id: \"RegExp\", placement: \"prototype\" };\n } else if (obj.isFunction()) {\n return { id: \"Function\", placement: \"prototype\" };\n }\n\n return { id: null, placement: null };\n}\n\nexport function getImportSource({ node }: NodePath) {\n if (node.specifiers.length === 0) return node.source.value;\n}\n\nexport function getRequireSource({ node }: NodePath) {\n if (!t.isExpressionStatement(node)) return;\n const { expression } = node;\n const isRequire =\n t.isCallExpression(expression) &&\n t.isIdentifier(expression.callee) &&\n expression.callee.name === \"require\" &&\n expression.arguments.length === 1 &&\n t.isStringLiteral(expression.arguments[0]);\n if (isRequire) return expression.arguments[0].value;\n}\n\nfunction hoist(node: t.Node) {\n node._blockHoist = 3;\n return node;\n}\n\nexport function createUtilsGetter(cache: ImportsCache) {\n return (path: NodePath): Utils => {\n const prog = path.findParent(p => p.isProgram());\n\n return {\n injectGlobalImport(url) {\n cache.storeAnonymous(prog, url, (isScript, source) => {\n return isScript\n ? template.statement.ast`require(${source})`\n : t.importDeclaration([], source);\n });\n },\n injectNamedImport(url, name, hint = name) {\n return cache.storeNamed(prog, url, name, (isScript, source, name) => {\n const id = prog.scope.generateUidIdentifier(hint);\n return {\n node: isScript\n ? hoist(template.statement.ast`\n var ${id} = require(${source}).${name}\n `)\n : t.importDeclaration([t.importSpecifier(id, name)], source),\n name: id.name,\n };\n });\n },\n injectDefaultImport(url, hint = url) {\n return cache.storeNamed(prog, url, \"default\", (isScript, source) => {\n const id = prog.scope.generateUidIdentifier(hint);\n return {\n node: isScript\n ? hoist(template.statement.ast`var ${id} = require(${source})`)\n : t.importDeclaration([t.importDefaultSpecifier(id)], source),\n name: id.name,\n };\n });\n },\n };\n };\n}\n","// @flow\n\nimport type { NodePath } from \"@babel/traverse\";\nimport * as babel from \"@babel/core\";\nconst { types: t } = babel.default || babel;\n\ntype StrMap<K> = Map<string, K>;\n\nexport default class ImportsCache {\n _imports: WeakMap<NodePath, StrMap<string>>;\n _anonymousImports: WeakMap<NodePath, Set<string>>;\n _lastImports: WeakMap<NodePath, NodePath>;\n _resolver: (url: string) => string;\n\n constructor(resolver: (url: string) => string) {\n this._imports = new WeakMap();\n this._anonymousImports = new WeakMap();\n this._lastImports = new WeakMap();\n this._resolver = resolver;\n }\n\n storeAnonymous(\n programPath: NodePath,\n url: string,\n // eslint-disable-next-line no-undef\n getVal: (isScript: boolean, source: t.StringLiteral) => t.Node,\n ) {\n const key = this._normalizeKey(programPath, url);\n const imports = this._ensure(this._anonymousImports, programPath, Set);\n\n if (imports.has(key)) return;\n\n const node = getVal(\n programPath.node.sourceType === \"script\",\n t.stringLiteral(this._resolver(url)),\n );\n imports.add(key);\n this._injectImport(programPath, node);\n }\n\n storeNamed(\n programPath: NodePath,\n url: string,\n name: string,\n getVal: (\n isScript: boolean,\n // eslint-disable-next-line no-undef\n source: t.StringLiteral,\n // eslint-disable-next-line no-undef\n name: t.Identifier,\n ) => { node: t.Node, name: string },\n ) {\n const key = this._normalizeKey(programPath, url, name);\n const imports = this._ensure(this._imports, programPath, Map);\n\n if (!imports.has(key)) {\n const { node, name: id } = getVal(\n programPath.node.sourceType === \"script\",\n t.stringLiteral(this._resolver(url)),\n t.identifier(name),\n );\n imports.set(key, id);\n this._injectImport(programPath, node);\n }\n\n return t.identifier(imports.get(key));\n }\n\n _injectImport(programPath: NodePath, node: t.Node) {\n let lastImport = this._lastImports.get(programPath);\n if (\n lastImport &&\n lastImport.node &&\n // Sometimes the AST is modified and the \"last import\"\n // we have has been replaced\n lastImport.parent === programPath.node &&\n lastImport.container === programPath.node.body\n ) {\n lastImport = lastImport.insertAfter(node);\n } else {\n lastImport = programPath.unshiftContainer(\"body\", node);\n }\n lastImport = lastImport[lastImport.length - 1];\n this._lastImports.set(programPath, lastImport);\n\n /*\n let lastImport;\n\n programPath.get(\"body\").forEach(path => {\n if (path.isImportDeclaration()) lastImport = path;\n if (\n path.isExpressionStatement() &&\n isRequireCall(path.get(\"expression\"))\n ) {\n lastImport = path;\n }\n if (\n path.isVariableDeclaration() &&\n path.get(\"declarations\").length === 1 &&\n (isRequireCall(path.get(\"declarations.0.init\")) ||\n (path.get(\"declarations.0.init\").isMemberExpression() &&\n isRequireCall(path.get(\"declarations.0.init.object\"))))\n ) {\n lastImport = path;\n }\n });*/\n }\n\n _ensure<C: Map<*, *> | Set<*>>(\n map: WeakMap<NodePath, C>,\n programPath: NodePath,\n Collection: Class<C>,\n ): C {\n let collection = map.get(programPath);\n if (!collection) {\n collection = new Collection();\n map.set(programPath, collection);\n }\n return collection;\n }\n\n _normalizeKey(programPath: NodePath, url: string, name: string = \"\"): string {\n const { sourceType } = programPath.node;\n\n // If we rely on the imported binding (the \"name\" parameter), we also need to cache\n // based on the sourceType. This is because the module transforms change the names\n // of the import variables.\n return `${name && sourceType}::${url}::${name}`;\n }\n}\n","// @flow\n\nimport { prettifyTargets } from \"@babel/helper-compilation-targets\";\n\nimport type { Targets } from \"./types\";\n\nexport const presetEnvSilentDebugHeader =\n \"#__secret_key__@babel/preset-env__don't_log_debug_header_and_resolved_targets\";\n\nexport function stringifyTargetsMultiline(targets: Targets): string {\n return JSON.stringify(prettifyTargets(targets), null, 2);\n}\n\nexport function stringifyTargets(targets: Targets): string {\n return JSON.stringify(targets)\n .replace(/,/g, \", \")\n .replace(/^\\{\"/, '{ \"')\n .replace(/\"\\}$/, '\" }');\n}\n","// @flow\n\nimport { intersection } from \"./utils\";\nimport type {\n Pattern,\n PluginOptions,\n MissingDependenciesOption,\n} from \"./types\";\n\nfunction patternToRegExp(pattern: Pattern): ?RegExp {\n if (pattern instanceof RegExp) return pattern;\n\n try {\n return new RegExp(`^${pattern}$`);\n } catch {\n return null;\n }\n}\n\nfunction buildUnusedError(label, unused) {\n if (!unused.length) return \"\";\n return (\n ` - The following \"${label}\" patterns didn't match any polyfill:\\n` +\n unused.map(original => ` ${String(original)}\\n`).join(\"\")\n );\n}\n\nfunction buldDuplicatesError(duplicates) {\n if (!duplicates.size) return \"\";\n return (\n ` - The following polyfills were matched both by \"include\" and \"exclude\" patterns:\\n` +\n Array.from(duplicates, name => ` ${name}\\n`).join(\"\")\n );\n}\n\nexport function validateIncludeExclude(\n provider: string,\n polyfills: Set<string>,\n includePatterns: Pattern[],\n excludePatterns: Pattern[],\n) {\n let current;\n const filter = pattern => {\n const regexp = patternToRegExp(pattern);\n if (!regexp) return false;\n\n let matched = false;\n for (const polyfill of polyfills) {\n if (regexp.test(polyfill)) {\n matched = true;\n current.add(polyfill);\n }\n }\n return !matched;\n };\n\n // prettier-ignore\n const include = current = new Set<string> ();\n const unusedInclude = Array.from(includePatterns).filter(filter);\n\n // prettier-ignore\n const exclude = current = new Set<string> ();\n const unusedExclude = Array.from(excludePatterns).filter(filter);\n\n const duplicates = intersection(include, exclude);\n\n if (\n duplicates.size > 0 ||\n unusedInclude.length > 0 ||\n unusedExclude.length > 0\n ) {\n throw new Error(\n `Error while validating the \"${provider}\" provider options:\\n` +\n buildUnusedError(\"include\", unusedInclude) +\n buildUnusedError(\"exclude\", unusedExclude) +\n buldDuplicatesError(duplicates),\n );\n }\n\n return { include, exclude };\n}\n\nexport function applyMissingDependenciesDefaults(\n options: PluginOptions,\n babelApi: Object,\n): MissingDependenciesOption {\n const { missingDependencies = {} } = options;\n if (missingDependencies === false) return false;\n\n const caller = babelApi.caller(caller => caller?.name);\n\n const {\n log = \"deferred\",\n inject = caller === \"rollup-plugin-babel\" ? \"throw\" : \"import\",\n all = false,\n } = missingDependencies;\n\n return { log, inject, all };\n}\n","// @flow\n\nimport type { NodePath } from \"@babel/traverse\";\nimport type { MetaDescriptor } from \"../types\";\n\nimport { resolveKey, resolveSource } from \"../utils\";\n\nexport default (\n callProvider: (payload: MetaDescriptor, path: NodePath) => void,\n) => {\n function property(object, key, placement, path) {\n return callProvider({ kind: \"property\", object, key, placement }, path);\n }\n\n return {\n // Symbol(), new Promise\n ReferencedIdentifier(path: NodePath) {\n const {\n node: { name },\n scope,\n } = path;\n if (scope.getBindingIdentifier(name)) return;\n\n callProvider({ kind: \"global\", name }, path);\n },\n\n MemberExpression(path: NodePath) {\n const key = resolveKey(path.get(\"property\"), path.node.computed);\n if (!key || key === \"prototype\") return;\n\n const object = path.get(\"object\");\n const binding = object.scope.getBinding(object.node.name);\n if (binding && binding.path.isImportNamespaceSpecifier()) return;\n\n const source = resolveSource(object);\n return property(source.id, key, source.placement, path);\n },\n\n ObjectPattern(path: NodePath) {\n const { parentPath, parent } = path;\n let obj;\n\n // const { keys, values } = Object\n if (parentPath.isVariableDeclarator()) {\n obj = parentPath.get(\"init\");\n // ({ keys, values } = Object)\n } else if (parentPath.isAssignmentExpression()) {\n obj = parentPath.get(\"right\");\n // !function ({ keys, values }) {...} (Object)\n // resolution does not work after properties transform :-(\n } else if (parentPath.isFunction()) {\n const grand = parentPath.parentPath;\n if (grand.isCallExpression() || grand.isNewExpression()) {\n if (grand.node.callee === parent) {\n obj = grand.get(\"arguments\")[path.key];\n }\n }\n }\n\n let id = null;\n let placement = null;\n if (obj) ({ id, placement } = resolveSource(obj));\n\n for (const prop of path.get(\"properties\")) {\n if (prop.isObjectProperty()) {\n const key = resolveKey(prop.get(\"key\"));\n if (key) property(id, key, placement, prop);\n }\n }\n },\n\n BinaryExpression(path: NodePath) {\n if (path.node.operator !== \"in\") return;\n\n const source = resolveSource(path.get(\"right\"));\n const key = resolveKey(path.get(\"left\"), true);\n\n if (!key) return;\n\n callProvider(\n {\n kind: \"in\",\n object: source.id,\n key,\n placement: source.placement,\n },\n path,\n );\n },\n };\n};\n","// @flow\n\nimport type { NodePath } from \"@babel/traverse\";\nimport type { MetaDescriptor } from \"../types\";\n\nimport { getImportSource, getRequireSource } from \"../utils\";\n\nexport default (\n callProvider: (payload: MetaDescriptor, path: NodePath) => void,\n) => ({\n ImportDeclaration(path: NodePath) {\n const source = getImportSource(path);\n if (!source) return;\n callProvider({ kind: \"import\", source }, path);\n },\n Program(path: NodePath) {\n path.get(\"body\").forEach(bodyPath => {\n const source = getRequireSource(bodyPath);\n if (!source) return;\n callProvider({ kind: \"import\", source }, bodyPath);\n });\n },\n});\n","// @flow\n\nexport function resolve(\n dirname: string,\n moduleName: string,\n absoluteImports: boolean | string,\n): string {\n if (absoluteImports === false) return moduleName;\n\n throw new Error(\n `\"absoluteImports\" is not supported in bundles prepared for the browser.`,\n );\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function has(basedir: string, name: string) {\n return true;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function logMissing(missingDeps: Set<string>) {}\n\n// eslint-disable-next-line no-unused-vars\nexport function laterLogMissing(missingDeps: Set<string>) {}\n","// @flow\n\nimport type {\n MetaDescriptor,\n ResolverPolyfills,\n ResolvedPolyfill,\n} from \"./types\";\n\nimport { has } from \"./utils\";\n\ntype ResolverFn<T> = (meta: MetaDescriptor) => void | ResolvedPolyfill<T>;\n\nconst PossibleGlobalObjects = new Set<string>([\n \"global\",\n \"globalThis\",\n \"self\",\n \"window\",\n]);\n\nexport default function createMetaResolver<T>(\n polyfills: ResolverPolyfills<T>,\n): ResolverFn<T> {\n const { static: staticP, instance: instanceP, global: globalP } = polyfills;\n\n return meta => {\n if (meta.kind === \"global\" && globalP && has(globalP, meta.name)) {\n return { kind: \"global\", desc: globalP[meta.name], name: meta.name };\n }\n\n if (meta.kind === \"property\" || meta.kind === \"in\") {\n const { placement, object, key } = meta;\n\n if (object && placement === \"static\") {\n if (globalP && PossibleGlobalObjects.has(object) && has(globalP, key)) {\n return { kind: \"global\", desc: globalP[key], name: key };\n }\n\n if (staticP && has(staticP, object) && has(staticP[object], key)) {\n return {\n kind: \"static\",\n desc: staticP[object][key],\n name: `${object}$${key}`,\n };\n }\n }\n\n if (instanceP && has(instanceP, key)) {\n return { kind: \"instance\", desc: instanceP[key], name: `${key}` };\n }\n }\n };\n}\n","// @flow\n\nimport { declare } from \"@babel/helper-plugin-utils\";\nimport type { NodePath } from \"@babel/traverse\";\n\nimport _getTargets, {\n isRequired,\n getInclusionReasons,\n} from \"@babel/helper-compilation-targets\";\nconst getTargets = _getTargets.default || _getTargets;\n\nimport { createUtilsGetter } from \"./utils\";\nimport ImportsCache from \"./imports-cache\";\nimport {\n stringifyTargetsMultiline,\n presetEnvSilentDebugHeader,\n} from \"./debug-utils\";\nimport {\n validateIncludeExclude,\n applyMissingDependenciesDefaults,\n} from \"./normalize-options\";\n\nimport type {\n ProviderApi,\n MethodString,\n Targets,\n MetaDescriptor,\n PolyfillProvider,\n PluginOptions,\n ProviderOptions,\n} from \"./types\";\n\nimport * as v from \"./visitors\";\nimport * as deps from \"./node/dependencies\";\n\nimport createMetaResolver from \"./meta-resolver\";\n\nexport type { PolyfillProvider, MetaDescriptor, Utils, Targets } from \"./types\";\n\nfunction resolveOptions<Options>(\n options: PluginOptions,\n babelApi,\n): {\n method: MethodString,\n methodName: \"usageGlobal\" | \"entryGlobal\" | \"usagePure\",\n targets: Targets,\n debug: boolean,\n shouldInjectPolyfill: ?(name: string, shouldInject: boolean) => boolean,\n providerOptions: ProviderOptions<Options>,\n absoluteImports: string | boolean,\n} {\n const {\n method,\n targets: targetsOption,\n ignoreBrowserslistConfig,\n configPath,\n debug,\n shouldInjectPolyfill,\n absoluteImports,\n ...providerOptions\n } = options;\n\n let methodName;\n if (method === \"usage-global\") methodName = \"usageGlobal\";\n else if (method === \"entry-global\") methodName = \"entryGlobal\";\n else if (method === \"usage-pure\") methodName = \"usagePure\";\n else if (typeof method !== \"string\") {\n throw new Error(\".method must be a string\");\n } else {\n throw new Error(\n `.method must be one of \"entry-global\", \"usage-global\"` +\n ` or \"usage-pure\" (received ${JSON.stringify(method)})`,\n );\n }\n\n if (typeof shouldInjectPolyfill === \"function\") {\n if (options.include || options.exclude) {\n throw new Error(\n `.include and .exclude are not supported when using the` +\n ` .shouldInjectPolyfill function.`,\n );\n }\n } else if (shouldInjectPolyfill != null) {\n throw new Error(\n `.shouldInjectPolyfill must be a function, or undefined` +\n ` (received ${JSON.stringify(shouldInjectPolyfill)})`,\n );\n }\n\n if (\n absoluteImports != null &&\n typeof absoluteImports !== \"boolean\" &&\n typeof absoluteImports !== \"string\"\n ) {\n throw new Error(\n `.absoluteImports must be a boolean, a string, or undefined` +\n ` (received ${JSON.stringify(absoluteImports)})`,\n );\n }\n\n let targets;\n\n if (\n // If any browserslist-related option is specified, fallback to the old\n // behavior of not using the targets specified in the top-level options.\n targetsOption ||\n configPath ||\n ignoreBrowserslistConfig\n ) {\n const targetsObj =\n typeof targetsOption === \"string\" || Array.isArray(targetsOption)\n ? { browsers: targetsOption }\n : targetsOption;\n\n targets = getTargets(targetsObj, {\n ignoreBrowserslistConfig,\n configPath,\n });\n } else {\n targets = babelApi.targets();\n }\n\n return {\n method,\n methodName,\n targets,\n absoluteImports: absoluteImports ?? false,\n shouldInjectPolyfill,\n debug: !!debug,\n providerOptions: ((providerOptions: Object): ProviderOptions<Options>),\n };\n}\n\nfunction instantiateProvider<Options>(\n factory: PolyfillProvider<Options>,\n options: PluginOptions,\n missingDependencies,\n dirname,\n debugLog,\n babelApi,\n) {\n const {\n method,\n methodName,\n targets,\n debug,\n shouldInjectPolyfill,\n providerOptions,\n absoluteImports,\n } = resolveOptions<Options>(options, babelApi);\n\n const getUtils = createUtilsGetter(\n new ImportsCache(moduleName =>\n deps.resolve(dirname, moduleName, absoluteImports),\n ),\n );\n\n // eslint-disable-next-line prefer-const\n let include, exclude;\n let polyfillsSupport;\n let polyfillsNames;\n let filterPolyfills;\n\n const depsCache = new Map();\n\n const api: ProviderApi = {\n babel: babelApi,\n getUtils,\n method: options.method,\n targets,\n createMetaResolver,\n shouldInjectPolyfill(name) {\n if (polyfillsNames === undefined) {\n throw new Error(\n `Internal error in the ${factory.name} provider: ` +\n `shouldInjectPolyfill() can't be called during initialization.`,\n );\n }\n if (!polyfillsNames.has(name)) {\n console.warn(\n `Internal error in the ${provider.name} provider: ` +\n `unknown polyfill \"${name}\".`,\n );\n }\n\n if (filterPolyfills && !filterPolyfills(name)) return false;\n\n let shouldInject = isRequired(name, targets, {\n compatData: polyfillsSupport,\n includes: include,\n excludes: exclude,\n });\n\n if (shouldInjectPolyfill) {\n shouldInject = shouldInjectPolyfill(name, shouldInject);\n if (typeof shouldInject !== \"boolean\") {\n throw new Error(`.shouldInjectPolyfill must return a boolean.`);\n }\n }\n\n return shouldInject;\n },\n debug(name) {\n debugLog().found = true;\n\n if (!debug || !name) return;\n\n if (debugLog().polyfills.has(provider.name)) return;\n debugLog().polyfills.set(\n name,\n polyfillsSupport && name && polyfillsSupport[name],\n );\n },\n assertDependency(name, version = \"*\") {\n if (missingDependencies === false) return;\n if (absoluteImports) {\n // If absoluteImports is not false, we will try resolving\n // the dependency and throw if it's not possible. We can\n // skip the check here.\n return;\n }\n\n const dep = version === \"*\" ? name : `${name}@^${version}`;\n\n const found = missingDependencies.all\n ? false\n : mapGetOr(depsCache, `${name} :: ${dirname}`, () =>\n deps.has(dirname, name),\n );\n\n if (!found) {\n debugLog().missingDeps.add(dep);\n }\n },\n };\n\n const provider = factory(api, providerOptions, dirname);\n\n if (typeof provider[methodName] !== \"function\") {\n throw new Error(\n `The \"${provider.name || factory.name}\" provider doesn't ` +\n `support the \"${method}\" polyfilling method.`,\n );\n }\n\n if (Array.isArray(provider.polyfills)) {\n polyfillsNames = new Set(provider.polyfills);\n filterPolyfills = provider.filterPolyfills;\n } else if (provider.polyfills) {\n polyfillsNames = new Set(Object.keys(provider.polyfills));\n polyfillsSupport = provider.polyfills;\n filterPolyfills = provider.filterPolyfills;\n } else {\n polyfillsNames = new Set();\n }\n\n ({ include, exclude } = validateIncludeExclude(\n provider.name || factory.name,\n polyfillsNames,\n providerOptions.include || [],\n providerOptions.exclude || [],\n ));\n\n return {\n debug,\n method,\n targets,\n provider,\n callProvider(payload: MetaDescriptor, path: NodePath) {\n const utils = getUtils(path);\n // $FlowIgnore\n provider[methodName](payload, utils, path);\n },\n };\n}\n\nexport default function definePolyfillProvider<Options>(\n factory: PolyfillProvider<Options>,\n) {\n return declare((babelApi, options: PluginOptions, dirname: string) => {\n babelApi.assertVersion(7);\n const { traverse } = babelApi;\n\n let debugLog;\n\n const missingDependencies = applyMissingDependenciesDefaults(\n options,\n babelApi,\n );\n\n const {\n debug,\n method,\n targets,\n provider,\n callProvider,\n } = instantiateProvider<Options>(\n factory,\n options,\n missingDependencies,\n dirname,\n () => debugLog,\n babelApi,\n );\n\n const createVisitor = method === \"entry-global\" ? v.entry : v.usage;\n\n const visitor = provider.visitor\n ? traverse.visitors.merge([createVisitor(callProvider), provider.visitor])\n : createVisitor(callProvider);\n\n if (debug && debug !== presetEnvSilentDebugHeader) {\n console.log(`${provider.name}: \\`DEBUG\\` option`);\n console.log(`\\nUsing targets: ${stringifyTargetsMultiline(targets)}`);\n console.log(`\\nUsing polyfills with \\`${method}\\` method:`);\n }\n\n return {\n name: \"inject-polyfills\",\n visitor,\n\n pre() {\n debugLog = {\n polyfills: new Map(),\n found: false,\n providers: new Set(),\n missingDeps: new Set(),\n };\n\n // $FlowIgnore - Flow doesn't support optional calls\n provider.pre?.apply(this, arguments);\n },\n post() {\n // $FlowIgnore - Flow doesn't support optional calls\n provider.post?.apply(this, arguments);\n\n if (missingDependencies !== false) {\n if (missingDependencies.log === \"per-file\") {\n deps.logMissing(debugLog.missingDeps);\n } else {\n deps.laterLogMissing(debugLog.missingDeps);\n }\n }\n\n if (!debug) return;\n\n if (this.filename) console.log(`\\n[${this.filename}]`);\n\n if (debugLog.polyfills.size === 0) {\n console.log(\n method === \"entry-global\"\n ? debugLog.found\n ? `Based on your targets, the ${provider.name} polyfill did not add any polyfill.`\n : `The entry point for the ${provider.name} polyfill has not been found.`\n : `Based on your code and targets, the ${provider.name} polyfill did not add any polyfill.`,\n );\n\n return;\n }\n\n if (method === \"entry-global\") {\n console.log(\n `The ${provider.name} polyfill entry has been replaced with ` +\n `the following polyfills:`,\n );\n } else {\n console.log(\n `The ${provider.name} polyfill added the following polyfills:`,\n );\n }\n\n for (const [name, support] of debugLog.polyfills) {\n if (support) {\n const filteredTargets = getInclusionReasons(name, targets, support);\n\n const formattedTargets = JSON.stringify(filteredTargets)\n .replace(/,/g, \", \")\n .replace(/^\\{\"/, '{ \"')\n .replace(/\"\\}$/, '\" }');\n\n console.log(` ${name} ${formattedTargets}`);\n } else {\n console.log(` ${name}`);\n }\n }\n },\n };\n });\n}\n\nfunction mapGetOr(map, key, getDefault) {\n let val = map.get(key);\n if (val === undefined) {\n val = getDefault();\n map.set(key, val);\n }\n return val;\n}\n"],"names":["types","t","template","babel","default","intersection","a","b","result","Set","forEach","v","has","add","object","key","Object","prototype","hasOwnProperty","call","getType","target","toString","slice","resolveId","path","isIdentifier","scope","hasBinding","node","name","deopt","evaluate","resolveKey","computed","parent","isStringLiteral","value","isMemberExpression","get","sym","resolveSource","obj","id","placement","undefined","isRegExpLiteral","isFunction","getImportSource","specifiers","length","source","getRequireSource","isExpressionStatement","expression","isRequire","isCallExpression","callee","arguments","hoist","_blockHoist","createUtilsGetter","cache","prog","findParent","p","isProgram","injectGlobalImport","url","storeAnonymous","isScript","statement","ast","importDeclaration","injectNamedImport","hint","storeNamed","generateUidIdentifier","importSpecifier","injectDefaultImport","importDefaultSpecifier","ImportsCache","constructor","resolver","_imports","WeakMap","_anonymousImports","_lastImports","_resolver","programPath","getVal","_normalizeKey","imports","_ensure","sourceType","stringLiteral","_injectImport","Map","identifier","set","lastImport","container","body","insertAfter","unshiftContainer","map","Collection","collection","presetEnvSilentDebugHeader","stringifyTargetsMultiline","targets","JSON","stringify","prettifyTargets","patternToRegExp","pattern","RegExp","buildUnusedError","label","unused","original","String","join","buldDuplicatesError","duplicates","size","Array","from","validateIncludeExclude","provider","polyfills","includePatterns","excludePatterns","current","filter","regexp","matched","polyfill","test","include","unusedInclude","exclude","unusedExclude","Error","applyMissingDependenciesDefaults","options","babelApi","missingDependencies","caller","log","inject","all","callProvider","property","kind","ReferencedIdentifier","getBindingIdentifier","MemberExpression","binding","getBinding","isImportNamespaceSpecifier","ObjectPattern","parentPath","isVariableDeclarator","isAssignmentExpression","grand","isNewExpression","prop","isObjectProperty","BinaryExpression","operator","ImportDeclaration","Program","bodyPath","resolve","dirname","moduleName","absoluteImports","basedir","logMissing","missingDeps","laterLogMissing","PossibleGlobalObjects","createMetaResolver","static","staticP","instance","instanceP","global","globalP","meta","desc","getTargets","_getTargets","resolveOptions","method","targetsOption","ignoreBrowserslistConfig","configPath","debug","shouldInjectPolyfill","providerOptions","methodName","targetsObj","isArray","browsers","instantiateProvider","factory","debugLog","getUtils","deps","polyfillsSupport","polyfillsNames","filterPolyfills","depsCache","api","console","warn","shouldInject","isRequired","compatData","includes","excludes","found","assertDependency","version","dep","mapGetOr","keys","payload","utils","definePolyfillProvider","declare","assertVersion","traverse","createVisitor","visitor","visitors","merge","pre","providers","apply","post","filename","support","filteredTargets","getInclusionReasons","formattedTargets","replace","getDefault","val"],"mappings":"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"}
\ No newline at end of file
import { declare } from '@babel/helper-plugin-utils';
import _getTargets, { prettifyTargets, getInclusionReasons, isRequired } from '@babel/helper-compilation-targets';
import * as babel from '@babel/core';
import path from 'path';
import debounce from 'lodash.debounce';
import requireResolve from 'resolve';
import { createRequire } from 'module';
const {
types: t$1,
template
} = babel.default || babel;
function intersection(a, b) {
const result = new Set();
a.forEach(v => b.has(v) && result.add(v));
return result;
}
function has$1(object, key) {
return Object.prototype.hasOwnProperty.call(object, key);
}
function getType(target) {
return Object.prototype.toString.call(target).slice(8, -1);
}
function resolveId(path) {
if (path.isIdentifier() && !path.scope.hasBinding(path.node.name,
/* noGlobals */
true)) {
return path.node.name;
}
const {
deopt
} = path.evaluate();
if (deopt && deopt.isIdentifier()) {
return deopt.node.name;
}
}
function resolveKey(path, computed = false) {
const {
node,
parent,
scope
} = path;
if (path.isStringLiteral()) return node.value;
const {
name
} = node;
const isIdentifier = path.isIdentifier();
if (isIdentifier && !(computed || parent.computed)) return name;
if (computed && path.isMemberExpression() && path.get("object").isIdentifier({
name: "Symbol"
}) && !scope.hasBinding("Symbol",
/* noGlobals */
true)) {
const sym = resolveKey(path.get("property"), path.node.computed);
if (sym) return "Symbol." + sym;
}
if (!isIdentifier || scope.hasBinding(name,
/* noGlobals */
true)) {
const {
value
} = path.evaluate();
if (typeof value === "string") return value;
}
}
function resolveSource(obj) {
if (obj.isMemberExpression() && obj.get("property").isIdentifier({
name: "prototype"
})) {
const id = resolveId(obj.get("object"));
if (id) {
return {
id,
placement: "prototype"
};
}
return {
id: null,
placement: null
};
}
const id = resolveId(obj);
if (id) {
return {
id,
placement: "static"
};
}
const {
value
} = obj.evaluate();
if (value !== undefined) {
return {
id: getType(value),
placement: "prototype"
};
} else if (obj.isRegExpLiteral()) {
return {
id: "RegExp",
placement: "prototype"
};
} else if (obj.isFunction()) {
return {
id: "Function",
placement: "prototype"
};
}
return {
id: null,
placement: null
};
}
function getImportSource({
node
}) {
if (node.specifiers.length === 0) return node.source.value;
}
function getRequireSource({
node
}) {
if (!t$1.isExpressionStatement(node)) return;
const {
expression
} = node;
const isRequire = t$1.isCallExpression(expression) && t$1.isIdentifier(expression.callee) && expression.callee.name === "require" && expression.arguments.length === 1 && t$1.isStringLiteral(expression.arguments[0]);
if (isRequire) return expression.arguments[0].value;
}
function hoist(node) {
node._blockHoist = 3;
return node;
}
function createUtilsGetter(cache) {
return path => {
const prog = path.findParent(p => p.isProgram());
return {
injectGlobalImport(url) {
cache.storeAnonymous(prog, url, (isScript, source) => {
return isScript ? template.statement.ast`require(${source})` : t$1.importDeclaration([], source);
});
},
injectNamedImport(url, name, hint = name) {
return cache.storeNamed(prog, url, name, (isScript, source, name) => {
const id = prog.scope.generateUidIdentifier(hint);
return {
node: isScript ? hoist(template.statement.ast`
var ${id} = require(${source}).${name}
`) : t$1.importDeclaration([t$1.importSpecifier(id, name)], source),
name: id.name
};
});
},
injectDefaultImport(url, hint = url) {
return cache.storeNamed(prog, url, "default", (isScript, source) => {
const id = prog.scope.generateUidIdentifier(hint);
return {
node: isScript ? hoist(template.statement.ast`var ${id} = require(${source})`) : t$1.importDeclaration([t$1.importDefaultSpecifier(id)], source),
name: id.name
};
});
}
};
};
}
const {
types: t
} = babel.default || babel;
class ImportsCache {
constructor(resolver) {
this._imports = new WeakMap();
this._anonymousImports = new WeakMap();
this._lastImports = new WeakMap();
this._resolver = resolver;
}
storeAnonymous(programPath, url, // eslint-disable-next-line no-undef
getVal) {
const key = this._normalizeKey(programPath, url);
const imports = this._ensure(this._anonymousImports, programPath, Set);
if (imports.has(key)) return;
const node = getVal(programPath.node.sourceType === "script", t.stringLiteral(this._resolver(url)));
imports.add(key);
this._injectImport(programPath, node);
}
storeNamed(programPath, url, name, getVal) {
const key = this._normalizeKey(programPath, url, name);
const imports = this._ensure(this._imports, programPath, Map);
if (!imports.has(key)) {
const {
node,
name: id
} = getVal(programPath.node.sourceType === "script", t.stringLiteral(this._resolver(url)), t.identifier(name));
imports.set(key, id);
this._injectImport(programPath, node);
}
return t.identifier(imports.get(key));
}
_injectImport(programPath, node) {
let lastImport = this._lastImports.get(programPath);
if (lastImport && lastImport.node && // Sometimes the AST is modified and the "last import"
// we have has been replaced
lastImport.parent === programPath.node && lastImport.container === programPath.node.body) {
lastImport = lastImport.insertAfter(node);
} else {
lastImport = programPath.unshiftContainer("body", node);
}
lastImport = lastImport[lastImport.length - 1];
this._lastImports.set(programPath, lastImport);
/*
let lastImport;
programPath.get("body").forEach(path => {
if (path.isImportDeclaration()) lastImport = path;
if (
path.isExpressionStatement() &&
isRequireCall(path.get("expression"))
) {
lastImport = path;
}
if (
path.isVariableDeclaration() &&
path.get("declarations").length === 1 &&
(isRequireCall(path.get("declarations.0.init")) ||
(path.get("declarations.0.init").isMemberExpression() &&
isRequireCall(path.get("declarations.0.init.object"))))
) {
lastImport = path;
}
});*/
}
_ensure(map, programPath, Collection) {
let collection = map.get(programPath);
if (!collection) {
collection = new Collection();
map.set(programPath, collection);
}
return collection;
}
_normalizeKey(programPath, url, name = "") {
const {
sourceType
} = programPath.node; // If we rely on the imported binding (the "name" parameter), we also need to cache
// based on the sourceType. This is because the module transforms change the names
// of the import variables.
return `${name && sourceType}::${url}::${name}`;
}
}
const presetEnvSilentDebugHeader = "#__secret_key__@babel/preset-env__don't_log_debug_header_and_resolved_targets";
function stringifyTargetsMultiline(targets) {
return JSON.stringify(prettifyTargets(targets), null, 2);
}
function patternToRegExp(pattern) {
if (pattern instanceof RegExp) return pattern;
try {
return new RegExp(`^${pattern}$`);
} catch {
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 = 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
};
}
var usage = (callProvider => {
function property(object, key, placement, path) {
return callProvider({
kind: "property",
object,
key,
placement
}, path);
}
return {
// Symbol(), new Promise
ReferencedIdentifier(path) {
const {
node: {
name
},
scope
} = path;
if (scope.getBindingIdentifier(name)) return;
callProvider({
kind: "global",
name
}, path);
},
MemberExpression(path) {
const key = resolveKey(path.get("property"), path.node.computed);
if (!key || key === "prototype") return;
const object = path.get("object");
const binding = object.scope.getBinding(object.node.name);
if (binding && binding.path.isImportNamespaceSpecifier()) return;
const source = resolveSource(object);
return property(source.id, key, source.placement, path);
},
ObjectPattern(path) {
const {
parentPath,
parent
} = path;
let obj; // const { keys, values } = Object
if (parentPath.isVariableDeclarator()) {
obj = parentPath.get("init"); // ({ keys, values } = Object)
} else if (parentPath.isAssignmentExpression()) {
obj = parentPath.get("right"); // !function ({ keys, values }) {...} (Object)
// resolution does not work after properties transform :-(
} else if (parentPath.isFunction()) {
const grand = parentPath.parentPath;
if (grand.isCallExpression() || grand.isNewExpression()) {
if (grand.node.callee === parent) {
obj = grand.get("arguments")[path.key];
}
}
}
let id = null;
let placement = null;
if (obj) ({
id,
placement
} = resolveSource(obj));
for (const prop of path.get("properties")) {
if (prop.isObjectProperty()) {
const key = resolveKey(prop.get("key"));
if (key) property(id, key, placement, prop);
}
}
},
BinaryExpression(path) {
if (path.node.operator !== "in") return;
const source = resolveSource(path.get("right"));
const key = resolveKey(path.get("left"), true);
if (!key) return;
callProvider({
kind: "in",
object: source.id,
key,
placement: source.placement
}, path);
}
};
});
var entry = (callProvider => ({
ImportDeclaration(path) {
const source = getImportSource(path);
if (!source) return;
callProvider({
kind: "import",
source
}, path);
},
Program(path) {
path.get("body").forEach(bodyPath => {
const source = getRequireSource(bodyPath);
if (!source) return;
callProvider({
kind: "import",
source
}, bodyPath);
});
}
}));
const nativeRequireResolve = parseFloat(process.versions.node) >= 8.9; // $FlowIgnore
const require = createRequire(import
/*::(_)*/
.meta.url); // eslint-disable-line
function resolve(dirname, moduleName, absoluteImports) {
if (absoluteImports === false) return moduleName;
let basedir = dirname;
if (typeof absoluteImports === "string") {
basedir = path.resolve(basedir, absoluteImports);
}
try {
if (nativeRequireResolve) {
return require.resolve(moduleName, {
paths: [basedir]
});
} else {
return requireResolve.sync(moduleName, {
basedir
});
}
} catch (err) {
if (err.code !== "MODULE_NOT_FOUND") throw err; // $FlowIgnore
throw Object.assign(new Error(`Failed to resolve "${moduleName}" relative to "${dirname}"`), {
code: "BABEL_POLYFILL_NOT_FOUND",
polyfill: moduleName,
dirname
});
}
}
function has(basedir, name) {
try {
if (nativeRequireResolve) {
require.resolve(name, {
paths: [basedir]
});
} else {
requireResolve.sync(name, {
basedir
});
}
return true;
} catch {
return false;
}
}
function logMissing(missingDeps) {
if (missingDeps.size === 0) return;
const deps = Array.from(missingDeps).sort().join(" ");
console.warn("\nSome polyfills have been added but are not present in your dependencies.\n" + "Please run one of the following commands:\n" + `\tnpm install --save ${deps}\n` + `\tyarn add ${deps}\n`);
process.exitCode = 1;
}
let allMissingDeps = new Set();
const laterLogMissingDependencies = debounce(() => {
logMissing(allMissingDeps);
allMissingDeps = new Set();
}, 100);
function laterLogMissing(missingDeps) {
if (missingDeps.size === 0) return;
missingDeps.forEach(name => allMissingDeps.add(name));
laterLogMissingDependencies();
}
const PossibleGlobalObjects = new Set(["global", "globalThis", "self", "window"]);
function createMetaResolver(polyfills) {
const {
static: staticP,
instance: instanceP,
global: globalP
} = polyfills;
return meta => {
if (meta.kind === "global" && globalP && has$1(globalP, meta.name)) {
return {
kind: "global",
desc: globalP[meta.name],
name: meta.name
};
}
if (meta.kind === "property" || meta.kind === "in") {
const {
placement,
object,
key
} = meta;
if (object && placement === "static") {
if (globalP && PossibleGlobalObjects.has(object) && has$1(globalP, key)) {
return {
kind: "global",
desc: globalP[key],
name: key
};
}
if (staticP && has$1(staticP, object) && has$1(staticP[object], key)) {
return {
kind: "static",
desc: staticP[object][key],
name: `${object}$${key}`
};
}
}
if (instanceP && has$1(instanceP, key)) {
return {
kind: "instance",
desc: instanceP[key],
name: `${key}`
};
}
}
};
}
const getTargets = _getTargets.default || _getTargets;
function resolveOptions(options, babelApi) {
const {
method,
targets: targetsOption,
ignoreBrowserslistConfig,
configPath,
debug,
shouldInjectPolyfill,
absoluteImports,
...providerOptions
} = options;
let methodName;
if (method === "usage-global") methodName = "usageGlobal";else if (method === "entry-global") methodName = "entryGlobal";else if (method === "usage-pure") methodName = "usagePure";else if (typeof method !== "string") {
throw new Error(".method must be a string");
} else {
throw new Error(`.method must be one of "entry-global", "usage-global"` + ` or "usage-pure" (received ${JSON.stringify(method)})`);
}
if (typeof shouldInjectPolyfill === "function") {
if (options.include || options.exclude) {
throw new Error(`.include and .exclude are not supported when using the` + ` .shouldInjectPolyfill function.`);
}
} else if (shouldInjectPolyfill != null) {
throw new Error(`.shouldInjectPolyfill must be a function, or undefined` + ` (received ${JSON.stringify(shouldInjectPolyfill)})`);
}
if (absoluteImports != null && typeof absoluteImports !== "boolean" && typeof absoluteImports !== "string") {
throw new Error(`.absoluteImports must be a boolean, a string, or undefined` + ` (received ${JSON.stringify(absoluteImports)})`);
}
let targets;
if ( // If any browserslist-related option is specified, fallback to the old
// behavior of not using the targets specified in the top-level options.
targetsOption || configPath || ignoreBrowserslistConfig) {
const targetsObj = typeof targetsOption === "string" || Array.isArray(targetsOption) ? {
browsers: targetsOption
} : targetsOption;
targets = getTargets(targetsObj, {
ignoreBrowserslistConfig,
configPath
});
} else {
targets = babelApi.targets();
}
return {
method,
methodName,
targets,
absoluteImports: absoluteImports != null ? absoluteImports : false,
shouldInjectPolyfill,
debug: !!debug,
providerOptions: providerOptions
};
}
function instantiateProvider(factory, options, missingDependencies, dirname, debugLog, babelApi) {
const {
method,
methodName,
targets,
debug,
shouldInjectPolyfill,
providerOptions,
absoluteImports
} = resolveOptions(options, babelApi);
const getUtils = createUtilsGetter(new ImportsCache(moduleName => resolve(dirname, moduleName, absoluteImports))); // eslint-disable-next-line prefer-const
let include, exclude;
let polyfillsSupport;
let polyfillsNames;
let filterPolyfills;
const depsCache = new Map();
const api = {
babel: babelApi,
getUtils,
method: options.method,
targets,
createMetaResolver,
shouldInjectPolyfill(name) {
if (polyfillsNames === undefined) {
throw new Error(`Internal error in the ${factory.name} provider: ` + `shouldInjectPolyfill() can't be called during initialization.`);
}
if (!polyfillsNames.has(name)) {
console.warn(`Internal error in the ${provider.name} provider: ` + `unknown polyfill "${name}".`);
}
if (filterPolyfills && !filterPolyfills(name)) return false;
let shouldInject = isRequired(name, targets, {
compatData: polyfillsSupport,
includes: include,
excludes: exclude
});
if (shouldInjectPolyfill) {
shouldInject = shouldInjectPolyfill(name, shouldInject);
if (typeof shouldInject !== "boolean") {
throw new Error(`.shouldInjectPolyfill must return a boolean.`);
}
}
return shouldInject;
},
debug(name) {
debugLog().found = true;
if (!debug || !name) return;
if (debugLog().polyfills.has(provider.name)) return;
debugLog().polyfills.set(name, polyfillsSupport && name && polyfillsSupport[name]);
},
assertDependency(name, version = "*") {
if (missingDependencies === false) return;
if (absoluteImports) {
// If absoluteImports is not false, we will try resolving
// the dependency and throw if it's not possible. We can
// skip the check here.
return;
}
const dep = version === "*" ? name : `${name}@^${version}`;
const found = missingDependencies.all ? false : mapGetOr(depsCache, `${name} :: ${dirname}`, () => has(dirname, name));
if (!found) {
debugLog().missingDeps.add(dep);
}
}
};
const provider = factory(api, providerOptions, dirname);
if (typeof provider[methodName] !== "function") {
throw new Error(`The "${provider.name || factory.name}" provider doesn't ` + `support the "${method}" polyfilling method.`);
}
if (Array.isArray(provider.polyfills)) {
polyfillsNames = new Set(provider.polyfills);
filterPolyfills = provider.filterPolyfills;
} else if (provider.polyfills) {
polyfillsNames = new Set(Object.keys(provider.polyfills));
polyfillsSupport = provider.polyfills;
filterPolyfills = provider.filterPolyfills;
} else {
polyfillsNames = new Set();
}
({
include,
exclude
} = validateIncludeExclude(provider.name || factory.name, polyfillsNames, providerOptions.include || [], providerOptions.exclude || []));
return {
debug,
method,
targets,
provider,
callProvider(payload, path) {
const utils = getUtils(path); // $FlowIgnore
provider[methodName](payload, utils, path);
}
};
}
function definePolyfillProvider(factory) {
return declare((babelApi, options, dirname) => {
babelApi.assertVersion(7);
const {
traverse
} = babelApi;
let debugLog;
const missingDependencies = applyMissingDependenciesDefaults(options, babelApi);
const {
debug,
method,
targets,
provider,
callProvider
} = instantiateProvider(factory, options, missingDependencies, dirname, () => debugLog, babelApi);
const createVisitor = method === "entry-global" ? entry : usage;
const visitor = provider.visitor ? traverse.visitors.merge([createVisitor(callProvider), provider.visitor]) : createVisitor(callProvider);
if (debug && debug !== presetEnvSilentDebugHeader) {
console.log(`${provider.name}: \`DEBUG\` option`);
console.log(`\nUsing targets: ${stringifyTargetsMultiline(targets)}`);
console.log(`\nUsing polyfills with \`${method}\` method:`);
}
return {
name: "inject-polyfills",
visitor,
pre() {
var _provider$pre;
debugLog = {
polyfills: new Map(),
found: false,
providers: new Set(),
missingDeps: new Set()
}; // $FlowIgnore - Flow doesn't support optional calls
(_provider$pre = provider.pre) == null ? void 0 : _provider$pre.apply(this, arguments);
},
post() {
var _provider$post;
// $FlowIgnore - Flow doesn't support optional calls
(_provider$post = provider.post) == null ? void 0 : _provider$post.apply(this, arguments);
if (missingDependencies !== false) {
if (missingDependencies.log === "per-file") {
logMissing(debugLog.missingDeps);
} else {
laterLogMissing(debugLog.missingDeps);
}
}
if (!debug) return;
if (this.filename) console.log(`\n[${this.filename}]`);
if (debugLog.polyfills.size === 0) {
console.log(method === "entry-global" ? debugLog.found ? `Based on your targets, the ${provider.name} polyfill did not add any polyfill.` : `The entry point for the ${provider.name} polyfill has not been found.` : `Based on your code and targets, the ${provider.name} polyfill did not add any polyfill.`);
return;
}
if (method === "entry-global") {
console.log(`The ${provider.name} polyfill entry has been replaced with ` + `the following polyfills:`);
} else {
console.log(`The ${provider.name} polyfill added the following polyfills:`);
}
for (const [name, support] of debugLog.polyfills) {
if (support) {
const filteredTargets = getInclusionReasons(name, targets, support);
const formattedTargets = JSON.stringify(filteredTargets).replace(/,/g, ", ").replace(/^\{"/, '{ "').replace(/"\}$/, '" }');
console.log(` ${name} ${formattedTargets}`);
} else {
console.log(` ${name}`);
}
}
}
};
});
}
function mapGetOr(map, key, getDefault) {
let val = map.get(key);
if (val === undefined) {
val = getDefault();
map.set(key, val);
}
return val;
}
export default definePolyfillProvider;
//# sourceMappingURL=index.node.mjs.map
{"version":3,"file":"index.node.mjs","sources":["../src/utils.js","../src/imports-cache.js","../src/debug-utils.js","../src/normalize-options.js","../src/visitors/usage.js","../src/visitors/entry.js","../src/node/dependencies.js","../src/meta-resolver.js","../src/index.js"],"sourcesContent":["// @flow\n\nimport * as babel from \"@babel/core\";\nconst { types: t, template } = babel.default || babel;\nimport type NodePath from \"@babel/traverse\";\nimport type { Utils } from \"./types\";\nimport type ImportsCache from \"./imports-cache\";\n\nexport function intersection<T>(a: Set<T>, b: Set<T>): Set<T> {\n const result = new Set();\n a.forEach(v => b.has(v) && result.add(v));\n return result;\n}\n\nexport function has(object: Object, key: string) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction getType(target: any): string {\n return Object.prototype.toString.call(target).slice(8, -1);\n}\n\nfunction resolveId(path) {\n if (\n path.isIdentifier() &&\n !path.scope.hasBinding(path.node.name, /* noGlobals */ true)\n ) {\n return path.node.name;\n }\n\n const { deopt } = path.evaluate();\n if (deopt && deopt.isIdentifier()) {\n return deopt.node.name;\n }\n}\n\nexport function resolveKey(path: NodePath, computed: boolean = false) {\n const { node, parent, scope } = path;\n if (path.isStringLiteral()) return node.value;\n const { name } = node;\n const isIdentifier = path.isIdentifier();\n if (isIdentifier && !(computed || parent.computed)) return name;\n\n if (\n computed &&\n path.isMemberExpression() &&\n path.get(\"object\").isIdentifier({ name: \"Symbol\" }) &&\n !scope.hasBinding(\"Symbol\", /* noGlobals */ true)\n ) {\n const sym = resolveKey(path.get(\"property\"), path.node.computed);\n if (sym) return \"Symbol.\" + sym;\n }\n\n if (!isIdentifier || scope.hasBinding(name, /* noGlobals */ true)) {\n const { value } = path.evaluate();\n if (typeof value === \"string\") return value;\n }\n}\n\nexport function resolveSource(obj: NodePath) {\n if (\n obj.isMemberExpression() &&\n obj.get(\"property\").isIdentifier({ name: \"prototype\" })\n ) {\n const id = resolveId(obj.get(\"object\"));\n\n if (id) {\n return { id, placement: \"prototype\" };\n }\n return { id: null, placement: null };\n }\n\n const id = resolveId(obj);\n if (id) {\n return { id, placement: \"static\" };\n }\n\n const { value } = obj.evaluate();\n if (value !== undefined) {\n return { id: getType(value), placement: \"prototype\" };\n } else if (obj.isRegExpLiteral()) {\n return { id: \"RegExp\", placement: \"prototype\" };\n } else if (obj.isFunction()) {\n return { id: \"Function\", placement: \"prototype\" };\n }\n\n return { id: null, placement: null };\n}\n\nexport function getImportSource({ node }: NodePath) {\n if (node.specifiers.length === 0) return node.source.value;\n}\n\nexport function getRequireSource({ node }: NodePath) {\n if (!t.isExpressionStatement(node)) return;\n const { expression } = node;\n const isRequire =\n t.isCallExpression(expression) &&\n t.isIdentifier(expression.callee) &&\n expression.callee.name === \"require\" &&\n expression.arguments.length === 1 &&\n t.isStringLiteral(expression.arguments[0]);\n if (isRequire) return expression.arguments[0].value;\n}\n\nfunction hoist(node: t.Node) {\n node._blockHoist = 3;\n return node;\n}\n\nexport function createUtilsGetter(cache: ImportsCache) {\n return (path: NodePath): Utils => {\n const prog = path.findParent(p => p.isProgram());\n\n return {\n injectGlobalImport(url) {\n cache.storeAnonymous(prog, url, (isScript, source) => {\n return isScript\n ? template.statement.ast`require(${source})`\n : t.importDeclaration([], source);\n });\n },\n injectNamedImport(url, name, hint = name) {\n return cache.storeNamed(prog, url, name, (isScript, source, name) => {\n const id = prog.scope.generateUidIdentifier(hint);\n return {\n node: isScript\n ? hoist(template.statement.ast`\n var ${id} = require(${source}).${name}\n `)\n : t.importDeclaration([t.importSpecifier(id, name)], source),\n name: id.name,\n };\n });\n },\n injectDefaultImport(url, hint = url) {\n return cache.storeNamed(prog, url, \"default\", (isScript, source) => {\n const id = prog.scope.generateUidIdentifier(hint);\n return {\n node: isScript\n ? hoist(template.statement.ast`var ${id} = require(${source})`)\n : t.importDeclaration([t.importDefaultSpecifier(id)], source),\n name: id.name,\n };\n });\n },\n };\n };\n}\n","// @flow\n\nimport type { NodePath } from \"@babel/traverse\";\nimport * as babel from \"@babel/core\";\nconst { types: t } = babel.default || babel;\n\ntype StrMap<K> = Map<string, K>;\n\nexport default class ImportsCache {\n _imports: WeakMap<NodePath, StrMap<string>>;\n _anonymousImports: WeakMap<NodePath, Set<string>>;\n _lastImports: WeakMap<NodePath, NodePath>;\n _resolver: (url: string) => string;\n\n constructor(resolver: (url: string) => string) {\n this._imports = new WeakMap();\n this._anonymousImports = new WeakMap();\n this._lastImports = new WeakMap();\n this._resolver = resolver;\n }\n\n storeAnonymous(\n programPath: NodePath,\n url: string,\n // eslint-disable-next-line no-undef\n getVal: (isScript: boolean, source: t.StringLiteral) => t.Node,\n ) {\n const key = this._normalizeKey(programPath, url);\n const imports = this._ensure(this._anonymousImports, programPath, Set);\n\n if (imports.has(key)) return;\n\n const node = getVal(\n programPath.node.sourceType === \"script\",\n t.stringLiteral(this._resolver(url)),\n );\n imports.add(key);\n this._injectImport(programPath, node);\n }\n\n storeNamed(\n programPath: NodePath,\n url: string,\n name: string,\n getVal: (\n isScript: boolean,\n // eslint-disable-next-line no-undef\n source: t.StringLiteral,\n // eslint-disable-next-line no-undef\n name: t.Identifier,\n ) => { node: t.Node, name: string },\n ) {\n const key = this._normalizeKey(programPath, url, name);\n const imports = this._ensure(this._imports, programPath, Map);\n\n if (!imports.has(key)) {\n const { node, name: id } = getVal(\n programPath.node.sourceType === \"script\",\n t.stringLiteral(this._resolver(url)),\n t.identifier(name),\n );\n imports.set(key, id);\n this._injectImport(programPath, node);\n }\n\n return t.identifier(imports.get(key));\n }\n\n _injectImport(programPath: NodePath, node: t.Node) {\n let lastImport = this._lastImports.get(programPath);\n if (\n lastImport &&\n lastImport.node &&\n // Sometimes the AST is modified and the \"last import\"\n // we have has been replaced\n lastImport.parent === programPath.node &&\n lastImport.container === programPath.node.body\n ) {\n lastImport = lastImport.insertAfter(node);\n } else {\n lastImport = programPath.unshiftContainer(\"body\", node);\n }\n lastImport = lastImport[lastImport.length - 1];\n this._lastImports.set(programPath, lastImport);\n\n /*\n let lastImport;\n\n programPath.get(\"body\").forEach(path => {\n if (path.isImportDeclaration()) lastImport = path;\n if (\n path.isExpressionStatement() &&\n isRequireCall(path.get(\"expression\"))\n ) {\n lastImport = path;\n }\n if (\n path.isVariableDeclaration() &&\n path.get(\"declarations\").length === 1 &&\n (isRequireCall(path.get(\"declarations.0.init\")) ||\n (path.get(\"declarations.0.init\").isMemberExpression() &&\n isRequireCall(path.get(\"declarations.0.init.object\"))))\n ) {\n lastImport = path;\n }\n });*/\n }\n\n _ensure<C: Map<*, *> | Set<*>>(\n map: WeakMap<NodePath, C>,\n programPath: NodePath,\n Collection: Class<C>,\n ): C {\n let collection = map.get(programPath);\n if (!collection) {\n collection = new Collection();\n map.set(programPath, collection);\n }\n return collection;\n }\n\n _normalizeKey(programPath: NodePath, url: string, name: string = \"\"): string {\n const { sourceType } = programPath.node;\n\n // If we rely on the imported binding (the \"name\" parameter), we also need to cache\n // based on the sourceType. This is because the module transforms change the names\n // of the import variables.\n return `${name && sourceType}::${url}::${name}`;\n }\n}\n","// @flow\n\nimport { prettifyTargets } from \"@babel/helper-compilation-targets\";\n\nimport type { Targets } from \"./types\";\n\nexport const presetEnvSilentDebugHeader =\n \"#__secret_key__@babel/preset-env__don't_log_debug_header_and_resolved_targets\";\n\nexport function stringifyTargetsMultiline(targets: Targets): string {\n return JSON.stringify(prettifyTargets(targets), null, 2);\n}\n\nexport function stringifyTargets(targets: Targets): string {\n return JSON.stringify(targets)\n .replace(/,/g, \", \")\n .replace(/^\\{\"/, '{ \"')\n .replace(/\"\\}$/, '\" }');\n}\n","// @flow\n\nimport { intersection } from \"./utils\";\nimport type {\n Pattern,\n PluginOptions,\n MissingDependenciesOption,\n} from \"./types\";\n\nfunction patternToRegExp(pattern: Pattern): ?RegExp {\n if (pattern instanceof RegExp) return pattern;\n\n try {\n return new RegExp(`^${pattern}$`);\n } catch {\n return null;\n }\n}\n\nfunction buildUnusedError(label, unused) {\n if (!unused.length) return \"\";\n return (\n ` - The following \"${label}\" patterns didn't match any polyfill:\\n` +\n unused.map(original => ` ${String(original)}\\n`).join(\"\")\n );\n}\n\nfunction buldDuplicatesError(duplicates) {\n if (!duplicates.size) return \"\";\n return (\n ` - The following polyfills were matched both by \"include\" and \"exclude\" patterns:\\n` +\n Array.from(duplicates, name => ` ${name}\\n`).join(\"\")\n );\n}\n\nexport function validateIncludeExclude(\n provider: string,\n polyfills: Set<string>,\n includePatterns: Pattern[],\n excludePatterns: Pattern[],\n) {\n let current;\n const filter = pattern => {\n const regexp = patternToRegExp(pattern);\n if (!regexp) return false;\n\n let matched = false;\n for (const polyfill of polyfills) {\n if (regexp.test(polyfill)) {\n matched = true;\n current.add(polyfill);\n }\n }\n return !matched;\n };\n\n // prettier-ignore\n const include = current = new Set<string> ();\n const unusedInclude = Array.from(includePatterns).filter(filter);\n\n // prettier-ignore\n const exclude = current = new Set<string> ();\n const unusedExclude = Array.from(excludePatterns).filter(filter);\n\n const duplicates = intersection(include, exclude);\n\n if (\n duplicates.size > 0 ||\n unusedInclude.length > 0 ||\n unusedExclude.length > 0\n ) {\n throw new Error(\n `Error while validating the \"${provider}\" provider options:\\n` +\n buildUnusedError(\"include\", unusedInclude) +\n buildUnusedError(\"exclude\", unusedExclude) +\n buldDuplicatesError(duplicates),\n );\n }\n\n return { include, exclude };\n}\n\nexport function applyMissingDependenciesDefaults(\n options: PluginOptions,\n babelApi: Object,\n): MissingDependenciesOption {\n const { missingDependencies = {} } = options;\n if (missingDependencies === false) return false;\n\n const caller = babelApi.caller(caller => caller?.name);\n\n const {\n log = \"deferred\",\n inject = caller === \"rollup-plugin-babel\" ? \"throw\" : \"import\",\n all = false,\n } = missingDependencies;\n\n return { log, inject, all };\n}\n","// @flow\n\nimport type { NodePath } from \"@babel/traverse\";\nimport type { MetaDescriptor } from \"../types\";\n\nimport { resolveKey, resolveSource } from \"../utils\";\n\nexport default (\n callProvider: (payload: MetaDescriptor, path: NodePath) => void,\n) => {\n function property(object, key, placement, path) {\n return callProvider({ kind: \"property\", object, key, placement }, path);\n }\n\n return {\n // Symbol(), new Promise\n ReferencedIdentifier(path: NodePath) {\n const {\n node: { name },\n scope,\n } = path;\n if (scope.getBindingIdentifier(name)) return;\n\n callProvider({ kind: \"global\", name }, path);\n },\n\n MemberExpression(path: NodePath) {\n const key = resolveKey(path.get(\"property\"), path.node.computed);\n if (!key || key === \"prototype\") return;\n\n const object = path.get(\"object\");\n const binding = object.scope.getBinding(object.node.name);\n if (binding && binding.path.isImportNamespaceSpecifier()) return;\n\n const source = resolveSource(object);\n return property(source.id, key, source.placement, path);\n },\n\n ObjectPattern(path: NodePath) {\n const { parentPath, parent } = path;\n let obj;\n\n // const { keys, values } = Object\n if (parentPath.isVariableDeclarator()) {\n obj = parentPath.get(\"init\");\n // ({ keys, values } = Object)\n } else if (parentPath.isAssignmentExpression()) {\n obj = parentPath.get(\"right\");\n // !function ({ keys, values }) {...} (Object)\n // resolution does not work after properties transform :-(\n } else if (parentPath.isFunction()) {\n const grand = parentPath.parentPath;\n if (grand.isCallExpression() || grand.isNewExpression()) {\n if (grand.node.callee === parent) {\n obj = grand.get(\"arguments\")[path.key];\n }\n }\n }\n\n let id = null;\n let placement = null;\n if (obj) ({ id, placement } = resolveSource(obj));\n\n for (const prop of path.get(\"properties\")) {\n if (prop.isObjectProperty()) {\n const key = resolveKey(prop.get(\"key\"));\n if (key) property(id, key, placement, prop);\n }\n }\n },\n\n BinaryExpression(path: NodePath) {\n if (path.node.operator !== \"in\") return;\n\n const source = resolveSource(path.get(\"right\"));\n const key = resolveKey(path.get(\"left\"), true);\n\n if (!key) return;\n\n callProvider(\n {\n kind: \"in\",\n object: source.id,\n key,\n placement: source.placement,\n },\n path,\n );\n },\n };\n};\n","// @flow\n\nimport type { NodePath } from \"@babel/traverse\";\nimport type { MetaDescriptor } from \"../types\";\n\nimport { getImportSource, getRequireSource } from \"../utils\";\n\nexport default (\n callProvider: (payload: MetaDescriptor, path: NodePath) => void,\n) => ({\n ImportDeclaration(path: NodePath) {\n const source = getImportSource(path);\n if (!source) return;\n callProvider({ kind: \"import\", source }, path);\n },\n Program(path: NodePath) {\n path.get(\"body\").forEach(bodyPath => {\n const source = getRequireSource(bodyPath);\n if (!source) return;\n callProvider({ kind: \"import\", source }, bodyPath);\n });\n },\n});\n","// @flow\n\nimport path from \"path\";\nimport debounce from \"lodash.debounce\";\nimport requireResolve from \"resolve\";\n\nconst nativeRequireResolve = parseFloat(process.versions.node) >= 8.9;\n\n// $FlowIgnore\nimport { createRequire } from \"module\";\n// $FlowIgnore\nconst require = createRequire(import/*::(_)*/.meta.url); // eslint-disable-line\n\nexport function resolve(\n dirname: string,\n moduleName: string,\n absoluteImports: boolean | string,\n): string {\n if (absoluteImports === false) return moduleName;\n\n let basedir = dirname;\n if (typeof absoluteImports === \"string\") {\n basedir = path.resolve(basedir, absoluteImports);\n }\n\n try {\n if (nativeRequireResolve) {\n return require.resolve(moduleName, {\n paths: [basedir],\n });\n } else {\n return requireResolve.sync(moduleName, { basedir });\n }\n } catch (err) {\n if (err.code !== \"MODULE_NOT_FOUND\") throw err;\n\n // $FlowIgnore\n throw Object.assign(\n new Error(`Failed to resolve \"${moduleName}\" relative to \"${dirname}\"`),\n {\n code: \"BABEL_POLYFILL_NOT_FOUND\",\n polyfill: moduleName,\n dirname,\n },\n );\n }\n}\n\nexport function has(basedir: string, name: string) {\n try {\n if (nativeRequireResolve) {\n require.resolve(name, { paths: [basedir] });\n } else {\n requireResolve.sync(name, { basedir });\n }\n return true;\n } catch {\n return false;\n }\n}\n\nexport function logMissing(missingDeps: Set<string>) {\n if (missingDeps.size === 0) return;\n\n const deps = Array.from(missingDeps)\n .sort()\n .join(\" \");\n\n console.warn(\n \"\\nSome polyfills have been added but are not present in your dependencies.\\n\" +\n \"Please run one of the following commands:\\n\" +\n `\\tnpm install --save ${deps}\\n` +\n `\\tyarn add ${deps}\\n`,\n );\n\n process.exitCode = 1;\n}\n\nlet allMissingDeps = new Set();\n\nconst laterLogMissingDependencies = debounce(() => {\n logMissing(allMissingDeps);\n allMissingDeps = new Set();\n}, 100);\n\nexport function laterLogMissing(missingDeps: Set<string>) {\n if (missingDeps.size === 0) return;\n\n missingDeps.forEach(name => allMissingDeps.add(name));\n laterLogMissingDependencies();\n}\n","// @flow\n\nimport type {\n MetaDescriptor,\n ResolverPolyfills,\n ResolvedPolyfill,\n} from \"./types\";\n\nimport { has } from \"./utils\";\n\ntype ResolverFn<T> = (meta: MetaDescriptor) => void | ResolvedPolyfill<T>;\n\nconst PossibleGlobalObjects = new Set<string>([\n \"global\",\n \"globalThis\",\n \"self\",\n \"window\",\n]);\n\nexport default function createMetaResolver<T>(\n polyfills: ResolverPolyfills<T>,\n): ResolverFn<T> {\n const { static: staticP, instance: instanceP, global: globalP } = polyfills;\n\n return meta => {\n if (meta.kind === \"global\" && globalP && has(globalP, meta.name)) {\n return { kind: \"global\", desc: globalP[meta.name], name: meta.name };\n }\n\n if (meta.kind === \"property\" || meta.kind === \"in\") {\n const { placement, object, key } = meta;\n\n if (object && placement === \"static\") {\n if (globalP && PossibleGlobalObjects.has(object) && has(globalP, key)) {\n return { kind: \"global\", desc: globalP[key], name: key };\n }\n\n if (staticP && has(staticP, object) && has(staticP[object], key)) {\n return {\n kind: \"static\",\n desc: staticP[object][key],\n name: `${object}$${key}`,\n };\n }\n }\n\n if (instanceP && has(instanceP, key)) {\n return { kind: \"instance\", desc: instanceP[key], name: `${key}` };\n }\n }\n };\n}\n","// @flow\n\nimport { declare } from \"@babel/helper-plugin-utils\";\nimport type { NodePath } from \"@babel/traverse\";\n\nimport _getTargets, {\n isRequired,\n getInclusionReasons,\n} from \"@babel/helper-compilation-targets\";\nconst getTargets = _getTargets.default || _getTargets;\n\nimport { createUtilsGetter } from \"./utils\";\nimport ImportsCache from \"./imports-cache\";\nimport {\n stringifyTargetsMultiline,\n presetEnvSilentDebugHeader,\n} from \"./debug-utils\";\nimport {\n validateIncludeExclude,\n applyMissingDependenciesDefaults,\n} from \"./normalize-options\";\n\nimport type {\n ProviderApi,\n MethodString,\n Targets,\n MetaDescriptor,\n PolyfillProvider,\n PluginOptions,\n ProviderOptions,\n} from \"./types\";\n\nimport * as v from \"./visitors\";\nimport * as deps from \"./node/dependencies\";\n\nimport createMetaResolver from \"./meta-resolver\";\n\nexport type { PolyfillProvider, MetaDescriptor, Utils, Targets } from \"./types\";\n\nfunction resolveOptions<Options>(\n options: PluginOptions,\n babelApi,\n): {\n method: MethodString,\n methodName: \"usageGlobal\" | \"entryGlobal\" | \"usagePure\",\n targets: Targets,\n debug: boolean,\n shouldInjectPolyfill: ?(name: string, shouldInject: boolean) => boolean,\n providerOptions: ProviderOptions<Options>,\n absoluteImports: string | boolean,\n} {\n const {\n method,\n targets: targetsOption,\n ignoreBrowserslistConfig,\n configPath,\n debug,\n shouldInjectPolyfill,\n absoluteImports,\n ...providerOptions\n } = options;\n\n let methodName;\n if (method === \"usage-global\") methodName = \"usageGlobal\";\n else if (method === \"entry-global\") methodName = \"entryGlobal\";\n else if (method === \"usage-pure\") methodName = \"usagePure\";\n else if (typeof method !== \"string\") {\n throw new Error(\".method must be a string\");\n } else {\n throw new Error(\n `.method must be one of \"entry-global\", \"usage-global\"` +\n ` or \"usage-pure\" (received ${JSON.stringify(method)})`,\n );\n }\n\n if (typeof shouldInjectPolyfill === \"function\") {\n if (options.include || options.exclude) {\n throw new Error(\n `.include and .exclude are not supported when using the` +\n ` .shouldInjectPolyfill function.`,\n );\n }\n } else if (shouldInjectPolyfill != null) {\n throw new Error(\n `.shouldInjectPolyfill must be a function, or undefined` +\n ` (received ${JSON.stringify(shouldInjectPolyfill)})`,\n );\n }\n\n if (\n absoluteImports != null &&\n typeof absoluteImports !== \"boolean\" &&\n typeof absoluteImports !== \"string\"\n ) {\n throw new Error(\n `.absoluteImports must be a boolean, a string, or undefined` +\n ` (received ${JSON.stringify(absoluteImports)})`,\n );\n }\n\n let targets;\n\n if (\n // If any browserslist-related option is specified, fallback to the old\n // behavior of not using the targets specified in the top-level options.\n targetsOption ||\n configPath ||\n ignoreBrowserslistConfig\n ) {\n const targetsObj =\n typeof targetsOption === \"string\" || Array.isArray(targetsOption)\n ? { browsers: targetsOption }\n : targetsOption;\n\n targets = getTargets(targetsObj, {\n ignoreBrowserslistConfig,\n configPath,\n });\n } else {\n targets = babelApi.targets();\n }\n\n return {\n method,\n methodName,\n targets,\n absoluteImports: absoluteImports ?? false,\n shouldInjectPolyfill,\n debug: !!debug,\n providerOptions: ((providerOptions: Object): ProviderOptions<Options>),\n };\n}\n\nfunction instantiateProvider<Options>(\n factory: PolyfillProvider<Options>,\n options: PluginOptions,\n missingDependencies,\n dirname,\n debugLog,\n babelApi,\n) {\n const {\n method,\n methodName,\n targets,\n debug,\n shouldInjectPolyfill,\n providerOptions,\n absoluteImports,\n } = resolveOptions<Options>(options, babelApi);\n\n const getUtils = createUtilsGetter(\n new ImportsCache(moduleName =>\n deps.resolve(dirname, moduleName, absoluteImports),\n ),\n );\n\n // eslint-disable-next-line prefer-const\n let include, exclude;\n let polyfillsSupport;\n let polyfillsNames;\n let filterPolyfills;\n\n const depsCache = new Map();\n\n const api: ProviderApi = {\n babel: babelApi,\n getUtils,\n method: options.method,\n targets,\n createMetaResolver,\n shouldInjectPolyfill(name) {\n if (polyfillsNames === undefined) {\n throw new Error(\n `Internal error in the ${factory.name} provider: ` +\n `shouldInjectPolyfill() can't be called during initialization.`,\n );\n }\n if (!polyfillsNames.has(name)) {\n console.warn(\n `Internal error in the ${provider.name} provider: ` +\n `unknown polyfill \"${name}\".`,\n );\n }\n\n if (filterPolyfills && !filterPolyfills(name)) return false;\n\n let shouldInject = isRequired(name, targets, {\n compatData: polyfillsSupport,\n includes: include,\n excludes: exclude,\n });\n\n if (shouldInjectPolyfill) {\n shouldInject = shouldInjectPolyfill(name, shouldInject);\n if (typeof shouldInject !== \"boolean\") {\n throw new Error(`.shouldInjectPolyfill must return a boolean.`);\n }\n }\n\n return shouldInject;\n },\n debug(name) {\n debugLog().found = true;\n\n if (!debug || !name) return;\n\n if (debugLog().polyfills.has(provider.name)) return;\n debugLog().polyfills.set(\n name,\n polyfillsSupport && name && polyfillsSupport[name],\n );\n },\n assertDependency(name, version = \"*\") {\n if (missingDependencies === false) return;\n if (absoluteImports) {\n // If absoluteImports is not false, we will try resolving\n // the dependency and throw if it's not possible. We can\n // skip the check here.\n return;\n }\n\n const dep = version === \"*\" ? name : `${name}@^${version}`;\n\n const found = missingDependencies.all\n ? false\n : mapGetOr(depsCache, `${name} :: ${dirname}`, () =>\n deps.has(dirname, name),\n );\n\n if (!found) {\n debugLog().missingDeps.add(dep);\n }\n },\n };\n\n const provider = factory(api, providerOptions, dirname);\n\n if (typeof provider[methodName] !== \"function\") {\n throw new Error(\n `The \"${provider.name || factory.name}\" provider doesn't ` +\n `support the \"${method}\" polyfilling method.`,\n );\n }\n\n if (Array.isArray(provider.polyfills)) {\n polyfillsNames = new Set(provider.polyfills);\n filterPolyfills = provider.filterPolyfills;\n } else if (provider.polyfills) {\n polyfillsNames = new Set(Object.keys(provider.polyfills));\n polyfillsSupport = provider.polyfills;\n filterPolyfills = provider.filterPolyfills;\n } else {\n polyfillsNames = new Set();\n }\n\n ({ include, exclude } = validateIncludeExclude(\n provider.name || factory.name,\n polyfillsNames,\n providerOptions.include || [],\n providerOptions.exclude || [],\n ));\n\n return {\n debug,\n method,\n targets,\n provider,\n callProvider(payload: MetaDescriptor, path: NodePath) {\n const utils = getUtils(path);\n // $FlowIgnore\n provider[methodName](payload, utils, path);\n },\n };\n}\n\nexport default function definePolyfillProvider<Options>(\n factory: PolyfillProvider<Options>,\n) {\n return declare((babelApi, options: PluginOptions, dirname: string) => {\n babelApi.assertVersion(7);\n const { traverse } = babelApi;\n\n let debugLog;\n\n const missingDependencies = applyMissingDependenciesDefaults(\n options,\n babelApi,\n );\n\n const {\n debug,\n method,\n targets,\n provider,\n callProvider,\n } = instantiateProvider<Options>(\n factory,\n options,\n missingDependencies,\n dirname,\n () => debugLog,\n babelApi,\n );\n\n const createVisitor = method === \"entry-global\" ? v.entry : v.usage;\n\n const visitor = provider.visitor\n ? traverse.visitors.merge([createVisitor(callProvider), provider.visitor])\n : createVisitor(callProvider);\n\n if (debug && debug !== presetEnvSilentDebugHeader) {\n console.log(`${provider.name}: \\`DEBUG\\` option`);\n console.log(`\\nUsing targets: ${stringifyTargetsMultiline(targets)}`);\n console.log(`\\nUsing polyfills with \\`${method}\\` method:`);\n }\n\n return {\n name: \"inject-polyfills\",\n visitor,\n\n pre() {\n debugLog = {\n polyfills: new Map(),\n found: false,\n providers: new Set(),\n missingDeps: new Set(),\n };\n\n // $FlowIgnore - Flow doesn't support optional calls\n provider.pre?.apply(this, arguments);\n },\n post() {\n // $FlowIgnore - Flow doesn't support optional calls\n provider.post?.apply(this, arguments);\n\n if (missingDependencies !== false) {\n if (missingDependencies.log === \"per-file\") {\n deps.logMissing(debugLog.missingDeps);\n } else {\n deps.laterLogMissing(debugLog.missingDeps);\n }\n }\n\n if (!debug) return;\n\n if (this.filename) console.log(`\\n[${this.filename}]`);\n\n if (debugLog.polyfills.size === 0) {\n console.log(\n method === \"entry-global\"\n ? debugLog.found\n ? `Based on your targets, the ${provider.name} polyfill did not add any polyfill.`\n : `The entry point for the ${provider.name} polyfill has not been found.`\n : `Based on your code and targets, the ${provider.name} polyfill did not add any polyfill.`,\n );\n\n return;\n }\n\n if (method === \"entry-global\") {\n console.log(\n `The ${provider.name} polyfill entry has been replaced with ` +\n `the following polyfills:`,\n );\n } else {\n console.log(\n `The ${provider.name} polyfill added the following polyfills:`,\n );\n }\n\n for (const [name, support] of debugLog.polyfills) {\n if (support) {\n const filteredTargets = getInclusionReasons(name, targets, support);\n\n const formattedTargets = JSON.stringify(filteredTargets)\n .replace(/,/g, \", \")\n .replace(/^\\{\"/, '{ \"')\n .replace(/\"\\}$/, '\" }');\n\n console.log(` ${name} ${formattedTargets}`);\n } else {\n console.log(` ${name}`);\n }\n }\n },\n };\n });\n}\n\nfunction mapGetOr(map, key, getDefault) {\n let val = map.get(key);\n if (val === undefined) {\n val = getDefault();\n map.set(key, val);\n }\n return val;\n}\n"],"names":["types","t","template","babel","default","intersection","a","b","result","Set","forEach","v","has","add","object","key","Object","prototype","hasOwnProperty","call","getType","target","toString","slice","resolveId","path","isIdentifier","scope","hasBinding","node","name","deopt","evaluate","resolveKey","computed","parent","isStringLiteral","value","isMemberExpression","get","sym","resolveSource","obj","id","placement","undefined","isRegExpLiteral","isFunction","getImportSource","specifiers","length","source","getRequireSource","isExpressionStatement","expression","isRequire","isCallExpression","callee","arguments","hoist","_blockHoist","createUtilsGetter","cache","prog","findParent","p","isProgram","injectGlobalImport","url","storeAnonymous","isScript","statement","ast","importDeclaration","injectNamedImport","hint","storeNamed","generateUidIdentifier","importSpecifier","injectDefaultImport","importDefaultSpecifier","ImportsCache","constructor","resolver","_imports","WeakMap","_anonymousImports","_lastImports","_resolver","programPath","getVal","_normalizeKey","imports","_ensure","sourceType","stringLiteral","_injectImport","Map","identifier","set","lastImport","container","body","insertAfter","unshiftContainer","map","Collection","collection","presetEnvSilentDebugHeader","stringifyTargetsMultiline","targets","JSON","stringify","prettifyTargets","patternToRegExp","pattern","RegExp","buildUnusedError","label","unused","original","String","join","buldDuplicatesError","duplicates","size","Array","from","validateIncludeExclude","provider","polyfills","includePatterns","excludePatterns","current","filter","regexp","matched","polyfill","test","include","unusedInclude","exclude","unusedExclude","Error","applyMissingDependenciesDefaults","options","babelApi","missingDependencies","caller","log","inject","all","callProvider","property","kind","ReferencedIdentifier","getBindingIdentifier","MemberExpression","binding","getBinding","isImportNamespaceSpecifier","ObjectPattern","parentPath","isVariableDeclarator","isAssignmentExpression","grand","isNewExpression","prop","isObjectProperty","BinaryExpression","operator","ImportDeclaration","Program","bodyPath","nativeRequireResolve","parseFloat","process","versions","require","createRequire","import","meta","resolve","dirname","moduleName","absoluteImports","basedir","paths","requireResolve","sync","err","code","assign","logMissing","missingDeps","deps","sort","console","warn","exitCode","allMissingDeps","laterLogMissingDependencies","debounce","laterLogMissing","PossibleGlobalObjects","createMetaResolver","static","staticP","instance","instanceP","global","globalP","desc","getTargets","_getTargets","resolveOptions","method","targetsOption","ignoreBrowserslistConfig","configPath","debug","shouldInjectPolyfill","providerOptions","methodName","targetsObj","isArray","browsers","instantiateProvider","factory","debugLog","getUtils","polyfillsSupport","polyfillsNames","filterPolyfills","depsCache","api","shouldInject","isRequired","compatData","includes","excludes","found","assertDependency","version","dep","mapGetOr","keys","payload","utils","definePolyfillProvider","declare","assertVersion","traverse","createVisitor","visitor","visitors","merge","pre","providers","apply","post","filename","support","filteredTargets","getInclusionReasons","formattedTargets","replace","getDefault","val"],"mappings":"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"}
\ No newline at end of file
"use strict";
exports.__esModule = true;
exports.resolve = resolve;
exports.has = has;
exports.logMissing = logMissing;
exports.laterLogMissing = laterLogMissing;
function resolve(dirname, moduleName, absoluteImports) {
if (absoluteImports === false) return moduleName;
throw new Error(`"absoluteImports" is not supported in bundles prepared for the browser.`);
} // eslint-disable-next-line no-unused-vars
function has(basedir, name) {
return true;
} // eslint-disable-next-line no-unused-vars
function logMissing(missingDeps) {} // eslint-disable-next-line no-unused-vars
function laterLogMissing(missingDeps) {}
\ No newline at end of file
"use strict";
exports.__esModule = true;
exports.stringifyTargetsMultiline = stringifyTargetsMultiline;
exports.stringifyTargets = stringifyTargets;
exports.presetEnvSilentDebugHeader = void 0;
var _helperCompilationTargets = require("@babel/helper-compilation-targets");
const presetEnvSilentDebugHeader = "#__secret_key__@babel/preset-env__don't_log_debug_header_and_resolved_targets";
exports.presetEnvSilentDebugHeader = presetEnvSilentDebugHeader;
function stringifyTargetsMultiline(targets) {
return JSON.stringify((0, _helperCompilationTargets.prettifyTargets)(targets), null, 2);
}
function stringifyTargets(targets) {
return JSON.stringify(targets).replace(/,/g, ", ").replace(/^\{"/, '{ "').replace(/"\}$/, '" }');
}
\ No newline at end of file
"use strict";
exports.__esModule = true;
exports.defineProvider = defineProvider;
function defineProvider(factory) {
// This will allow us to do some things
return factory;
}
\ No newline at end of file
"use strict";
exports.__esModule = true;
exports.default = void 0;
var babel = _interopRequireWildcard(require("@babel/core"));
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
const {
types: t
} = babel.default || babel;
class ImportsCache {
constructor(resolver) {
this._imports = new WeakMap();
this._anonymousImports = new WeakMap();
this._lastImports = new WeakMap();
this._resolver = resolver;
}
storeAnonymous(programPath, url, // eslint-disable-next-line no-undef
getVal) {
const key = this._normalizeKey(programPath, url);
const imports = this._ensure(this._anonymousImports, programPath, Set);
if (imports.has(key)) return;
const node = getVal(programPath.node.sourceType === "script", t.stringLiteral(this._resolver(url)));
imports.add(key);
this._injectImport(programPath, node);
}
storeNamed(programPath, url, name, getVal) {
const key = this._normalizeKey(programPath, url, name);
const imports = this._ensure(this._imports, programPath, Map);
if (!imports.has(key)) {
const {
node,
name: id
} = getVal(programPath.node.sourceType === "script", t.stringLiteral(this._resolver(url)), t.identifier(name));
imports.set(key, id);
this._injectImport(programPath, node);
}
return t.identifier(imports.get(key));
}
_injectImport(programPath, node) {
let lastImport = this._lastImports.get(programPath);
if (lastImport && lastImport.node && // Sometimes the AST is modified and the "last import"
// we have has been replaced
lastImport.parent === programPath.node && lastImport.container === programPath.node.body) {
lastImport = lastImport.insertAfter(node);
} else {
lastImport = programPath.unshiftContainer("body", node);
}
lastImport = lastImport[lastImport.length - 1];
this._lastImports.set(programPath, lastImport);
/*
let lastImport;
programPath.get("body").forEach(path => {
if (path.isImportDeclaration()) lastImport = path;
if (
path.isExpressionStatement() &&
isRequireCall(path.get("expression"))
) {
lastImport = path;
}
if (
path.isVariableDeclaration() &&
path.get("declarations").length === 1 &&
(isRequireCall(path.get("declarations.0.init")) ||
(path.get("declarations.0.init").isMemberExpression() &&
isRequireCall(path.get("declarations.0.init.object"))))
) {
lastImport = path;
}
});*/
}
_ensure(map, programPath, Collection) {
let collection = map.get(programPath);
if (!collection) {
collection = new Collection();
map.set(programPath, collection);
}
return collection;
}
_normalizeKey(programPath, url, name = "") {
const {
sourceType
} = programPath.node; // If we rely on the imported binding (the "name" parameter), we also need to cache
// based on the sourceType. This is because the module transforms change the names
// of the import variables.
return `${name && sourceType}::${url}::${name}`;
}
}
exports.default = ImportsCache;
\ No newline at end of file
"use strict";
exports.__esModule = true;
exports.default = definePolyfillProvider;
var _helperPluginUtils = require("@babel/helper-plugin-utils");
var _helperCompilationTargets = _interopRequireWildcard(require("@babel/helper-compilation-targets"));
var _utils = require("./utils");
var _importsCache = _interopRequireDefault(require("./imports-cache"));
var _debugUtils = require("./debug-utils");
var _normalizeOptions = require("./normalize-options");
var v = _interopRequireWildcard(require("./visitors"));
var deps = _interopRequireWildcard(require("./node/dependencies"));
var _metaResolver = _interopRequireDefault(require("./meta-resolver"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
const getTargets = _helperCompilationTargets.default.default || _helperCompilationTargets.default;
function resolveOptions(options, babelApi) {
const {
method,
targets: targetsOption,
ignoreBrowserslistConfig,
configPath,
debug,
shouldInjectPolyfill,
absoluteImports
} = options,
providerOptions = _objectWithoutPropertiesLoose(options, ["method", "targets", "ignoreBrowserslistConfig", "configPath", "debug", "shouldInjectPolyfill", "absoluteImports"]);
let methodName;
if (method === "usage-global") methodName = "usageGlobal";else if (method === "entry-global") methodName = "entryGlobal";else if (method === "usage-pure") methodName = "usagePure";else if (typeof method !== "string") {
throw new Error(".method must be a string");
} else {
throw new Error(`.method must be one of "entry-global", "usage-global"` + ` or "usage-pure" (received ${JSON.stringify(method)})`);
}
if (typeof shouldInjectPolyfill === "function") {
if (options.include || options.exclude) {
throw new Error(`.include and .exclude are not supported when using the` + ` .shouldInjectPolyfill function.`);
}
} else if (shouldInjectPolyfill != null) {
throw new Error(`.shouldInjectPolyfill must be a function, or undefined` + ` (received ${JSON.stringify(shouldInjectPolyfill)})`);
}
if (absoluteImports != null && typeof absoluteImports !== "boolean" && typeof absoluteImports !== "string") {
throw new Error(`.absoluteImports must be a boolean, a string, or undefined` + ` (received ${JSON.stringify(absoluteImports)})`);
}
let targets;
if ( // If any browserslist-related option is specified, fallback to the old
// behavior of not using the targets specified in the top-level options.
targetsOption || configPath || ignoreBrowserslistConfig) {
const targetsObj = typeof targetsOption === "string" || Array.isArray(targetsOption) ? {
browsers: targetsOption
} : targetsOption;
targets = getTargets(targetsObj, {
ignoreBrowserslistConfig,
configPath
});
} else {
targets = babelApi.targets();
}
return {
method,
methodName,
targets,
absoluteImports: absoluteImports != null ? absoluteImports : false,
shouldInjectPolyfill,
debug: !!debug,
providerOptions: providerOptions
};
}
function instantiateProvider(factory, options, missingDependencies, dirname, debugLog, babelApi) {
const {
method,
methodName,
targets,
debug,
shouldInjectPolyfill,
providerOptions,
absoluteImports
} = resolveOptions(options, babelApi);
const getUtils = (0, _utils.createUtilsGetter)(new _importsCache.default(moduleName => deps.resolve(dirname, moduleName, absoluteImports))); // eslint-disable-next-line prefer-const
let include, exclude;
let polyfillsSupport;
let polyfillsNames;
let filterPolyfills;
const depsCache = new Map();
const api = {
babel: babelApi,
getUtils,
method: options.method,
targets,
createMetaResolver: _metaResolver.default,
shouldInjectPolyfill(name) {
if (polyfillsNames === undefined) {
throw new Error(`Internal error in the ${factory.name} provider: ` + `shouldInjectPolyfill() can't be called during initialization.`);
}
if (!polyfillsNames.has(name)) {
console.warn(`Internal error in the ${provider.name} provider: ` + `unknown polyfill "${name}".`);
}
if (filterPolyfills && !filterPolyfills(name)) return false;
let shouldInject = (0, _helperCompilationTargets.isRequired)(name, targets, {
compatData: polyfillsSupport,
includes: include,
excludes: exclude
});
if (shouldInjectPolyfill) {
shouldInject = shouldInjectPolyfill(name, shouldInject);
if (typeof shouldInject !== "boolean") {
throw new Error(`.shouldInjectPolyfill must return a boolean.`);
}
}
return shouldInject;
},
debug(name) {
debugLog().found = true;
if (!debug || !name) return;
if (debugLog().polyfills.has(provider.name)) return;
debugLog().polyfills.set(name, polyfillsSupport && name && polyfillsSupport[name]);
},
assertDependency(name, version = "*") {
if (missingDependencies === false) return;
if (absoluteImports) {
// If absoluteImports is not false, we will try resolving
// the dependency and throw if it's not possible. We can
// skip the check here.
return;
}
const dep = version === "*" ? name : `${name}@^${version}`;
const found = missingDependencies.all ? false : mapGetOr(depsCache, `${name} :: ${dirname}`, () => deps.has(dirname, name));
if (!found) {
debugLog().missingDeps.add(dep);
}
}
};
const provider = factory(api, providerOptions, dirname);
if (typeof provider[methodName] !== "function") {
throw new Error(`The "${provider.name || factory.name}" provider doesn't ` + `support the "${method}" polyfilling method.`);
}
if (Array.isArray(provider.polyfills)) {
polyfillsNames = new Set(provider.polyfills);
filterPolyfills = provider.filterPolyfills;
} else if (provider.polyfills) {
polyfillsNames = new Set(Object.keys(provider.polyfills));
polyfillsSupport = provider.polyfills;
filterPolyfills = provider.filterPolyfills;
} else {
polyfillsNames = new Set();
}
({
include,
exclude
} = (0, _normalizeOptions.validateIncludeExclude)(provider.name || factory.name, polyfillsNames, providerOptions.include || [], providerOptions.exclude || []));
return {
debug,
method,
targets,
provider,
callProvider(payload, path) {
const utils = getUtils(path); // $FlowIgnore
provider[methodName](payload, utils, path);
}
};
}
function definePolyfillProvider(factory) {
return (0, _helperPluginUtils.declare)((babelApi, options, dirname) => {
babelApi.assertVersion(7);
const {
traverse
} = babelApi;
let debugLog;
const missingDependencies = (0, _normalizeOptions.applyMissingDependenciesDefaults)(options, babelApi);
const {
debug,
method,
targets,
provider,
callProvider
} = instantiateProvider(factory, options, missingDependencies, dirname, () => debugLog, babelApi);
const createVisitor = method === "entry-global" ? v.entry : v.usage;
const visitor = provider.visitor ? traverse.visitors.merge([createVisitor(callProvider), provider.visitor]) : createVisitor(callProvider);
if (debug && debug !== _debugUtils.presetEnvSilentDebugHeader) {
console.log(`${provider.name}: \`DEBUG\` option`);
console.log(`\nUsing targets: ${(0, _debugUtils.stringifyTargetsMultiline)(targets)}`);
console.log(`\nUsing polyfills with \`${method}\` method:`);
}
return {
name: "inject-polyfills",
visitor,
pre() {
var _provider$pre;
debugLog = {
polyfills: new Map(),
found: false,
providers: new Set(),
missingDeps: new Set()
}; // $FlowIgnore - Flow doesn't support optional calls
(_provider$pre = provider.pre) == null ? void 0 : _provider$pre.apply(this, arguments);
},
post() {
var _provider$post;
// $FlowIgnore - Flow doesn't support optional calls
(_provider$post = provider.post) == null ? void 0 : _provider$post.apply(this, arguments);
if (missingDependencies !== false) {
if (missingDependencies.log === "per-file") {
deps.logMissing(debugLog.missingDeps);
} else {
deps.laterLogMissing(debugLog.missingDeps);
}
}
if (!debug) return;
if (this.filename) console.log(`\n[${this.filename}]`);
if (debugLog.polyfills.size === 0) {
console.log(method === "entry-global" ? debugLog.found ? `Based on your targets, the ${provider.name} polyfill did not add any polyfill.` : `The entry point for the ${provider.name} polyfill has not been found.` : `Based on your code and targets, the ${provider.name} polyfill did not add any polyfill.`);
return;
}
if (method === "entry-global") {
console.log(`The ${provider.name} polyfill entry has been replaced with ` + `the following polyfills:`);
} else {
console.log(`The ${provider.name} polyfill added the following polyfills:`);
}
for (const [name, support] of debugLog.polyfills) {
if (support) {
const filteredTargets = (0, _helperCompilationTargets.getInclusionReasons)(name, targets, support);
const formattedTargets = JSON.stringify(filteredTargets).replace(/,/g, ", ").replace(/^\{"/, '{ "').replace(/"\}$/, '" }');
console.log(` ${name} ${formattedTargets}`);
} else {
console.log(` ${name}`);
}
}
}
};
});
}
function mapGetOr(map, key, getDefault) {
let val = map.get(key);
if (val === undefined) {
val = getDefault();
map.set(key, val);
}
return val;
}
\ No newline at end of file
"use strict";
exports.__esModule = true;
exports.default = createMetaResolver;
var _utils = require("./utils");
const PossibleGlobalObjects = new Set(["global", "globalThis", "self", "window"]);
function createMetaResolver(polyfills) {
const {
static: staticP,
instance: instanceP,
global: globalP
} = polyfills;
return meta => {
if (meta.kind === "global" && globalP && (0, _utils.has)(globalP, meta.name)) {
return {
kind: "global",
desc: globalP[meta.name],
name: meta.name
};
}
if (meta.kind === "property" || meta.kind === "in") {
const {
placement,
object,
key
} = meta;
if (object && placement === "static") {
if (globalP && PossibleGlobalObjects.has(object) && (0, _utils.has)(globalP, key)) {
return {
kind: "global",
desc: globalP[key],
name: key
};
}
if (staticP && (0, _utils.has)(staticP, object) && (0, _utils.has)(staticP[object], key)) {
return {
kind: "static",
desc: staticP[object][key],
name: `${object}$${key}`
};
}
}
if (instanceP && (0, _utils.has)(instanceP, key)) {
return {
kind: "instance",
desc: instanceP[key],
name: `${key}`
};
}
}
};
}
\ No newline at end of file
"use strict";
exports.__esModule = true;
exports.resolve = resolve;
exports.has = has;
exports.logMissing = logMissing;
exports.laterLogMissing = laterLogMissing;
var _path = _interopRequireDefault(require("path"));
var _lodash = _interopRequireDefault(require("lodash.debounce"));
var _resolve = _interopRequireDefault(require("resolve"));
var _module = require("module");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const nativeRequireResolve = parseFloat(process.versions.node) >= 8.9; // $FlowIgnore
// eslint-disable-line
function resolve(dirname, moduleName, absoluteImports) {
if (absoluteImports === false) return moduleName;
let basedir = dirname;
if (typeof absoluteImports === "string") {
basedir = _path.default.resolve(basedir, absoluteImports);
}
try {
if (nativeRequireResolve) {
return require.resolve(moduleName, {
paths: [basedir]
});
} else {
return _resolve.default.sync(moduleName, {
basedir
});
}
} catch (err) {
if (err.code !== "MODULE_NOT_FOUND") throw err; // $FlowIgnore
throw Object.assign(new Error(`Failed to resolve "${moduleName}" relative to "${dirname}"`), {
code: "BABEL_POLYFILL_NOT_FOUND",
polyfill: moduleName,
dirname
});
}
}
function has(basedir, name) {
try {
if (nativeRequireResolve) {
require.resolve(name, {
paths: [basedir]
});
} else {
_resolve.default.sync(name, {
basedir
});
}
return true;
} catch (_unused) {
return false;
}
}
function logMissing(missingDeps) {
if (missingDeps.size === 0) return;
const deps = Array.from(missingDeps).sort().join(" ");
console.warn("\nSome polyfills have been added but are not present in your dependencies.\n" + "Please run one of the following commands:\n" + `\tnpm install --save ${deps}\n` + `\tyarn add ${deps}\n`);
process.exitCode = 1;
}
let allMissingDeps = new Set();
const laterLogMissingDependencies = (0, _lodash.default)(() => {
logMissing(allMissingDeps);
allMissingDeps = new Set();
}, 100);
function laterLogMissing(missingDeps) {
if (missingDeps.size === 0) return;
missingDeps.forEach(name => allMissingDeps.add(name));
laterLogMissingDependencies();
}
\ No newline at end of file
"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
};
}
\ No newline at end of file
"use strict";
var babel = _interopRequireWildcard(require("@babel/core"));
var _metaResolver = _interopRequireDefault(require("./meta-resolver"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
const {
types: t
} = babel.default || babel;
\ No newline at end of file
"use strict";
exports.__esModule = true;
exports.intersection = intersection;
exports.has = has;
exports.resolveKey = resolveKey;
exports.resolveSource = resolveSource;
exports.getImportSource = getImportSource;
exports.getRequireSource = getRequireSource;
exports.createUtilsGetter = createUtilsGetter;
var babel = _interopRequireWildcard(require("@babel/core"));
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
const {
types: t,
template
} = babel.default || babel;
function intersection(a, b) {
const result = new Set();
a.forEach(v => b.has(v) && result.add(v));
return result;
}
function has(object, key) {
return Object.prototype.hasOwnProperty.call(object, key);
}
function getType(target) {
return Object.prototype.toString.call(target).slice(8, -1);
}
function resolveId(path) {
if (path.isIdentifier() && !path.scope.hasBinding(path.node.name,
/* noGlobals */
true)) {
return path.node.name;
}
const {
deopt
} = path.evaluate();
if (deopt && deopt.isIdentifier()) {
return deopt.node.name;
}
}
function resolveKey(path, computed = false) {
const {
node,
parent,
scope
} = path;
if (path.isStringLiteral()) return node.value;
const {
name
} = node;
const isIdentifier = path.isIdentifier();
if (isIdentifier && !(computed || parent.computed)) return name;
if (computed && path.isMemberExpression() && path.get("object").isIdentifier({
name: "Symbol"
}) && !scope.hasBinding("Symbol",
/* noGlobals */
true)) {
const sym = resolveKey(path.get("property"), path.node.computed);
if (sym) return "Symbol." + sym;
}
if (!isIdentifier || scope.hasBinding(name,
/* noGlobals */
true)) {
const {
value
} = path.evaluate();
if (typeof value === "string") return value;
}
}
function resolveSource(obj) {
if (obj.isMemberExpression() && obj.get("property").isIdentifier({
name: "prototype"
})) {
const id = resolveId(obj.get("object"));
if (id) {
return {
id,
placement: "prototype"
};
}
return {
id: null,
placement: null
};
}
const id = resolveId(obj);
if (id) {
return {
id,
placement: "static"
};
}
const {
value
} = obj.evaluate();
if (value !== undefined) {
return {
id: getType(value),
placement: "prototype"
};
} else if (obj.isRegExpLiteral()) {
return {
id: "RegExp",
placement: "prototype"
};
} else if (obj.isFunction()) {
return {
id: "Function",
placement: "prototype"
};
}
return {
id: null,
placement: null
};
}
function getImportSource({
node
}) {
if (node.specifiers.length === 0) return node.source.value;
}
function getRequireSource({
node
}) {
if (!t.isExpressionStatement(node)) return;
const {
expression
} = node;
const isRequire = t.isCallExpression(expression) && t.isIdentifier(expression.callee) && expression.callee.name === "require" && expression.arguments.length === 1 && t.isStringLiteral(expression.arguments[0]);
if (isRequire) return expression.arguments[0].value;
}
function hoist(node) {
node._blockHoist = 3;
return node;
}
function createUtilsGetter(cache) {
return path => {
const prog = path.findParent(p => p.isProgram());
return {
injectGlobalImport(url) {
cache.storeAnonymous(prog, url, (isScript, source) => {
return isScript ? template.statement.ast`require(${source})` : t.importDeclaration([], source);
});
},
injectNamedImport(url, name, hint = name) {
return cache.storeNamed(prog, url, name, (isScript, source, name) => {
const id = prog.scope.generateUidIdentifier(hint);
return {
node: isScript ? hoist(template.statement.ast`
var ${id} = require(${source}).${name}
`) : t.importDeclaration([t.importSpecifier(id, name)], source),
name: id.name
};
});
},
injectDefaultImport(url, hint = url) {
return cache.storeNamed(prog, url, "default", (isScript, source) => {
const id = prog.scope.generateUidIdentifier(hint);
return {
node: isScript ? hoist(template.statement.ast`var ${id} = require(${source})`) : t.importDeclaration([t.importDefaultSpecifier(id)], source),
name: id.name
};
});
}
};
};
}
\ No newline at end of file
"use strict";
exports.__esModule = true;
exports.default = void 0;
var _utils = require("../utils");
var _default = callProvider => ({
ImportDeclaration(path) {
const source = (0, _utils.getImportSource)(path);
if (!source) return;
callProvider({
kind: "import",
source
}, path);
},
Program(path) {
path.get("body").forEach(bodyPath => {
const source = (0, _utils.getRequireSource)(bodyPath);
if (!source) return;
callProvider({
kind: "import",
source
}, bodyPath);
});
}
});
exports.default = _default;
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment