-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
131 lines (120 loc) · 4.12 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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
* babel.config.js
*
* A Babel javascript configuration dynamically setup for Enact
* development environment on target platforms.
*/
const path = require('path');
// Check if JSX transform is able
const hasJsxRuntime = (() => {
if (process.env.DISABLE_NEW_JSX_TRANSFORM === 'true') {
return false;
}
try {
require.resolve('react/jsx-runtime');
return true;
} catch (e) {
return false;
}
})();
module.exports = function (api) {
const env = process.env.BABEL_ENV || process.env.NODE_ENV;
const es5Standalone = process.env.ES5 && process.env.ES5 !== 'false';
if (api && api.cache) api.cache(() => env + es5Standalone);
return {
presets: [
[
require('@babel/preset-env').default,
{
exclude: [
// Exclude transforms that make all code slower
'transform-typeof-symbol',
// Exclude chunky/costly transforms
'transform-regenerator',
// Ignore web features since window and DOM is not available
// in a V8 snapshot blob.
// TODO: investigates ways to include but delay loading.
'web.dom-collections.for-each',
'web.dom-collections.iterator',
'web.immediate',
'web.queue-microtask',
'web.timers',
'web.url',
'web.url.to-json',
'web.url-search-params'
],
forceAllTransforms: es5Standalone,
useBuiltIns: 'entry',
corejs: '3.19'
}
],
[
require('@babel/preset-react').default,
{
// Adds component stack to warning messages
// Adds __self attribute to JSX which React will use for some warnings
development: env !== 'production' && !es5Standalone,
// Will use the native built-in instead of trying to polyfill
// behavior for any plugins that require one.
...(!hasJsxRuntime ? {useBuiltIns: true} : {runtime: 'automatic'})
}
],
[require('@babel/preset-typescript').default]
],
plugins: [
// Stage 0
// '@babel/plugin-proposal-function-bind',
// Stage 1
require('@babel/plugin-proposal-export-default-from').default,
// '@babel/plugin-proposal-logical-assignment-operators',
// ['@babel/plugin-proposal-pipeline-operator', { 'proposal': 'minimal' }],
// '@babel/plugin-proposal-do-expressions',
// Stage 2
[require('@babel/plugin-proposal-decorators').default, false],
require('@babel/plugin-transform-export-namespace-from').default,
require('@babel/plugin-transform-numeric-separator').default,
// '@babel/plugin-proposal-function-sent',
// '@babel/plugin-proposal-throw-expressions',
// Stage 3
require('@babel/plugin-syntax-dynamic-import').default,
[require('@babel/plugin-transform-class-properties').default, {loose: true}],
[require('@babel/plugin-transform-private-methods').default, {loose: true}],
[require('@babel/plugin-transform-private-property-in-object').default, {loose: true}],
// '@babel/plugin-syntax-import-meta',
// '@babel/plugin-proposal-json-strings'
// Soon to be included within pre-env; include here until then
require('@babel/plugin-transform-optional-chaining').default,
require('@babel/plugin-transform-nullish-coalescing-operator').default,
!es5Standalone && [
require('@babel/plugin-transform-runtime').default,
{
corejs: false,
helpers: true,
// Explicitly resolve runtime version to avoid issue
// https://github.com/babel/babel/issues/10261
version: require('@babel/runtime/package.json').version,
regenerator: false,
useESModules: !es5Standalone,
// @remove-on-eject-begin
// Undocumented option to use CLI-contained runtime, ensuring
// the correct version
absoluteRuntime: path.dirname(require.resolve('@babel/runtime/package.json'))
// @remove-on-eject-end
}
],
require('babel-plugin-dev-expression'),
env === 'test' && !es5Standalone && require('babel-plugin-dynamic-import-node').default,
env === 'production' &&
!es5Standalone && [
require('babel-plugin-transform-react-remove-prop-types').default,
{removeImport: true}
]
].filter(Boolean),
overrides: [
{
test: /\.tsx?$/,
plugins: [[require('@babel/plugin-proposal-decorators').default, {version: 'legacy'}]]
}
]
};
};