-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
index.js
79 lines (68 loc) · 1.62 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
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 = {};
if ( isTestEnv ) {
opts.targets = {
node: 'current',
};
} else {
opts.modules = false;
opts.targets = {
browsers: 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() ],
plugins: [
require.resolve( '@wordpress/warning/babel-plugin' ),
[
require.resolve( '@wordpress/babel-plugin-import-jsx-pragma' ),
{
scopeVariable: 'createElement',
scopeVariableFrag: 'Fragment',
source: '@wordpress/element',
isDefault: false,
},
],
[
require.resolve( '@babel/plugin-transform-react-jsx' ),
{
pragma: 'createElement',
pragmaFrag: 'Fragment',
},
],
maybeGetPluginTransformRuntime(),
].filter( Boolean ),
};
};