parcel-bundler
Version:
Blazing fast, zero configuration web application bundler
95 lines (73 loc) • 2.69 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
const presetEnv = require('@babel/preset-env');
const getTargetEngines = require('../../utils/getTargetEngines');
const babelCore = require('@babel/core');
/**
* Generates a @babel/preset-env config for an asset.
* This is done by finding the source module's target engines, and the app's
* target engines, and doing a diff to include only the necessary plugins.
*/
function getEnvConfig(_x, _x2) {
return _getEnvConfig.apply(this, arguments);
}
function _getEnvConfig() {
_getEnvConfig = (0, _asyncToGenerator2.default)(function* (asset, isSourceModule) {
// Load the target engines for the app and generate a @babel/preset-env config
let targetEngines = yield getTargetEngines(asset, true);
let targetEnv = yield getEnvPlugins(targetEngines, true);
if (!targetEnv) {
return null;
} // If this is the app module, the source and target will be the same, so just compile everything.
// Otherwise, load the source engines and generate a babel-present-env config.
if (!isSourceModule) {
let sourceEngines = yield getTargetEngines(asset, false);
let sourceEnv = (yield getEnvPlugins(sourceEngines, false)) || targetEnv; // Do a diff of the returned plugins. We only need to process the remaining plugins to get to the app target.
let sourcePlugins = new Set(sourceEnv.map(p => p[0]));
targetEnv = targetEnv.filter(plugin => {
return !sourcePlugins.has(plugin[0]);
});
}
return {
internal: true,
babelVersion: 7,
config: {
plugins: targetEnv
}
};
});
return _getEnvConfig.apply(this, arguments);
}
const envCache = new Map();
function getEnvPlugins(_x3) {
return _getEnvPlugins.apply(this, arguments);
}
function _getEnvPlugins() {
_getEnvPlugins = (0, _asyncToGenerator2.default)(function* (targets, useBuiltIns = false) {
if (!targets) {
return null;
}
let key = JSON.stringify(targets);
if (envCache.has(key)) {
return envCache.get(key);
}
const options = {
targets,
modules: false,
useBuiltIns: useBuiltIns ? 'entry' : false,
shippedProposals: true
};
if (useBuiltIns) {
options.corejs = 2;
}
let plugins = presetEnv.default({
version: babelCore.version,
assertVersion: () => true
}, options).plugins;
envCache.set(key, plugins);
return plugins;
});
return _getEnvPlugins.apply(this, arguments);
}
module.exports = getEnvConfig;
;