UNPKG

2.06 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = getEnvOptions;
7
8var _presetEnv = _interopRequireDefault(require("@babel/preset-env"));
9
10var _getBabelTargets = _interopRequireDefault(require("./getBabelTargets"));
11
12var _utils = require("./utils");
13
14function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
16/**
17 * Generates a @babel/preset-env config for an asset.
18 * This is done by finding the source module's target engines, and the app's
19 * target engines, and doing a diff to include only the necessary plugins.
20 */
21async function getEnvOptions(config) {
22 // Load the target engines for the app and generate a @babel/preset-env config
23 let appBabelTargets = (0, _utils.enginesToBabelTargets)(config.env); // If this is the app module, the source and target will be the same, so just compile everything.
24 // Otherwise, load the source engines and generate a babel-present-env config.
25
26 if (!config.isSource) {
27 let sourceBabelTargets = await (0, _getBabelTargets.default)(config);
28
29 if (!sourceBabelTargets || !shouldCompileFurther(sourceBabelTargets, appBabelTargets)) {
30 return null;
31 }
32 }
33
34 return {
35 targets: appBabelTargets,
36 presets: [['@parcel/babel-preset-env', {
37 useBuiltIns: 'entry',
38 corejs: 3,
39 shippedProposals: true,
40 ignoreBrowserslistConfig: true,
41 targets: appBabelTargets
42 }]]
43 };
44}
45
46function getNeededPlugins(targets) {
47 return (0, _presetEnv.default)({
48 assertVersion: () => true
49 }, {
50 targets: targets
51 }).plugins.filter(p => p[0]);
52}
53
54function shouldCompileFurther(sourceBabelTargets, appBabelTargets) {
55 let sourcePlugins = new Set(getNeededPlugins(sourceBabelTargets));
56 let appPlugins = getNeededPlugins(appBabelTargets); // If there is any app plugin present that was not used to compile the source,
57 // then the asset was built to a higher target and will need to be compiled
58 // further
59
60 return appPlugins.some(plugin => {
61 return !sourcePlugins.has(plugin);
62 });
63}
\No newline at end of file