UNPKG

1.66 kBJavaScriptView Raw
1const path = require('path');
2const envPreset = require('@babel/preset-env');
3const { loadConfig } = require('browserslist');
4const modulesPreset = require('@babel/preset-modules');
5const reactPreset = require('@babel/preset-react');
6const plugins = require('./plugins');
7
8function getTargets({ configPath, ignoreBrowserslistConfig }) {
9 if (
10 ignoreBrowserslistConfig ||
11 !loadConfig({ path: path.resolve(configPath) })
12 ) {
13 return { esmodules: true };
14 }
15
16 // nothing so preset env looks for the browserslist config
17 return undefined;
18}
19
20/**
21 * This is an experimental preset that uses the leaner preset-modules. It's
22 * seperate from the other one for quicker iteration and to make more clear it's
23 * not stable
24 */
25function preset(api, options = {}) {
26 const {
27 runtime,
28 useBuiltIns,
29 debug = true,
30 loose = true,
31 configPath = '.',
32 ignoreBrowserslistConfig = false,
33 modules = api.env() === 'test',
34 development = api.env() === 'test',
35 } = options;
36
37 const presets = [
38 [modulesPreset, { loose }],
39
40 [
41 envPreset,
42 {
43 debug,
44 loose,
45 targets: getTargets({ configPath, ignoreBrowserslistConfig }),
46 exclude: [/transform/],
47 modules: false,
48 shippedProposals: true,
49 useBuiltIns,
50 corejs: 3,
51 },
52 ],
53 [reactPreset, { development }],
54 ].filter(Boolean);
55
56 return {
57 presets,
58 plugins: [
59 !!modules && require.resolve('@babel/plugin-transform-modules-commonjs'),
60 ...plugins({
61 loose,
62 modules,
63 runtime,
64 corejs: false,
65 }),
66 ].filter(Boolean),
67 };
68}
69
70module.exports = preset;