68 lines
1.5 KiB
JavaScript
68 lines
1.5 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.default = _default;
|
||
|
|
||
|
var _debug = require("./debug");
|
||
|
|
||
|
var _utils = require("./utils");
|
||
|
|
||
|
function _default({
|
||
|
types: t
|
||
|
}) {
|
||
|
function replaceWithPolyfillImports(path, polyfills, regenerator) {
|
||
|
if (regenerator) {
|
||
|
(0, _utils.createImport)(path, "regenerator-runtime");
|
||
|
}
|
||
|
|
||
|
const items = Array.isArray(polyfills) ? new Set(polyfills) : polyfills;
|
||
|
|
||
|
for (const p of Array.from(items).reverse()) {
|
||
|
(0, _utils.createImport)(path, p);
|
||
|
}
|
||
|
|
||
|
path.remove();
|
||
|
}
|
||
|
|
||
|
const isPolyfillImport = {
|
||
|
ImportDeclaration(path, state) {
|
||
|
if (path.node.specifiers.length === 0 && (0, _utils.isPolyfillSource)(path.node.source.value)) {
|
||
|
this.importPolyfillIncluded = true;
|
||
|
replaceWithPolyfillImports(path, state.opts.polyfills, state.opts.regenerator);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
Program(path, state) {
|
||
|
path.get("body").forEach(bodyPath => {
|
||
|
if ((0, _utils.isRequire)(t, bodyPath)) {
|
||
|
replaceWithPolyfillImports(bodyPath, state.opts.polyfills, state.opts.regenerator);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
};
|
||
|
return {
|
||
|
name: "transform-polyfill-require",
|
||
|
visitor: isPolyfillImport,
|
||
|
|
||
|
pre() {
|
||
|
this.numPolyfillImports = 0;
|
||
|
this.importPolyfillIncluded = false;
|
||
|
},
|
||
|
|
||
|
post() {
|
||
|
const {
|
||
|
debug,
|
||
|
onDebug,
|
||
|
polyfills
|
||
|
} = this.opts;
|
||
|
|
||
|
if (debug) {
|
||
|
(0, _debug.logEntryPolyfills)(this.importPolyfillIncluded, polyfills, this.file.opts.filename, onDebug);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
}
|