blob: 8421607c01acc89242dab8290625730e7c9e0a93 [file] [log] [blame]
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = _default;
function _data() {
const data = _interopRequireDefault(require("core-js-compat/data"));
_data = function () {
return data;
};
return data;
}
function _entries() {
const data = _interopRequireDefault(require("core-js-compat/entries"));
_entries = function () {
return data;
};
return data;
}
function _getModulesListForTargetVersion() {
const data = _interopRequireDefault(require("core-js-compat/get-modules-list-for-target-version"));
_getModulesListForTargetVersion = function () {
return data;
};
return data;
}
var _filterItems = _interopRequireDefault(require("../../filter-items"));
var _utils = require("../../utils");
var _debug = require("../../debug");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function isBabelPolyfillSource(source) {
return source === "@babel/polyfill" || source === "babel-polyfill";
}
function isCoreJSSource(source) {
if (typeof source === "string") {
source = source.replace(/\\/g, "/").replace(/(\/(index)?)?(\.js)?$/i, "").toLowerCase();
}
return (0, _utils.has)(_entries().default, source) && _entries().default[source];
}
const BABEL_POLYFILL_DEPRECATION = `
\`@babel/polyfill\` is deprecated. Please, use required parts of \`core-js\`
and \`regenerator-runtime/runtime\` separately`;
function _default(_, {
corejs,
include,
exclude,
polyfillTargets,
debug
}) {
const polyfills = (0, _filterItems.default)(_data().default, include, exclude, polyfillTargets, null);
const available = new Set((0, _getModulesListForTargetVersion().default)(corejs.version));
const isPolyfillImport = {
ImportDeclaration(path) {
const source = (0, _utils.getImportSource)(path);
if (!source) return;
if (isBabelPolyfillSource(source)) {
console.warn(BABEL_POLYFILL_DEPRECATION);
} else {
const modules = isCoreJSSource(source);
if (modules) {
this.replaceBySeparateModulesImport(path, modules);
}
}
},
Program(path) {
path.get("body").forEach(bodyPath => {
const source = (0, _utils.getRequireSource)(bodyPath);
if (!source) return;
if (isBabelPolyfillSource(source)) {
console.warn(BABEL_POLYFILL_DEPRECATION);
} else {
const modules = isCoreJSSource(source);
if (modules) {
this.replaceBySeparateModulesImport(bodyPath, modules);
}
}
});
}
};
return {
name: "corejs3-entry",
visitor: isPolyfillImport,
pre() {
this.polyfillsSet = new Set();
this.replaceBySeparateModulesImport = function (path, modules) {
for (const module of modules) {
this.polyfillsSet.add(module);
}
path.remove();
};
},
post({
path
}) {
const filtered = (0, _utils.intersection)(polyfills, this.polyfillsSet, available);
const reversed = Array.from(filtered).reverse();
for (const module of reversed) {
(0, _utils.createImport)(path, module);
}
if (debug) {
(0, _debug.logEntryPolyfills)("core-js", this.polyfillsSet.size > 0, filtered, this.file.opts.filename, polyfillTargets, _data().default);
}
}
};
}