-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
index.js
101 lines (88 loc) · 2.13 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/**
* External dependencies
*/
const browserslist = require( 'browserslist' );
/**
* Internal dependencies
*/
const exclusions = require( './polyfill-exclusions' );
const replacePolyfills = require( './replace-polyfills' );
module.exports = ( api ) => {
let wpBuildOpts = {};
const isWPBuild = ( name ) =>
[ 'WP_BUILD_MAIN', 'WP_BUILD_MODULE' ].some(
( buildName ) => name === buildName
);
const isTestEnv = api.env() === 'test';
api.caller( ( caller ) => {
if ( caller && isWPBuild( caller.name ) ) {
wpBuildOpts = { ...caller };
return caller.name;
}
return undefined;
} );
const getPresetEnv = () => {
const opts = {
bugfixes: true,
include: [
'proposal-nullish-coalescing-operator',
'proposal-logical-assignment-operators',
],
...( wpBuildOpts.addPolyfillComments
? {
useBuiltIns: 'usage',
exclude: exclusions,
corejs: require( 'core-js/package.json' ).version,
}
: {} ),
};
if ( isTestEnv ) {
opts.targets = {
node: 'current',
};
} else {
opts.modules = false;
const localBrowserslistConfig =
browserslist.findConfig( '.' ) || {};
opts.targets = {
browsers:
localBrowserslistConfig.defaults ||
require( '@wordpress/browserslist-config' ),
};
}
if ( isWPBuild( wpBuildOpts.name ) ) {
opts.modules = wpBuildOpts.modules;
}
return [ require.resolve( '@babel/preset-env' ), opts ];
};
const maybeGetPluginTransformRuntime = () => {
if ( isTestEnv ) {
return undefined;
}
const opts = {
helpers: true,
useESModules: false,
};
if ( wpBuildOpts.name === 'WP_BUILD_MODULE' ) {
opts.useESModules = wpBuildOpts.useESModules;
}
return [ require.resolve( '@babel/plugin-transform-runtime' ), opts ];
};
return {
presets: [
getPresetEnv(),
require.resolve( '@babel/preset-typescript' ),
],
plugins: [
require.resolve( '@wordpress/warning/babel-plugin' ),
[
require.resolve( '@babel/plugin-transform-react-jsx' ),
{
runtime: 'automatic',
},
],
maybeGetPluginTransformRuntime(),
wpBuildOpts.addPolyfillComments && replacePolyfills,
].filter( Boolean ),
};
};