module.exports = function config(api) { const validEnv = ['development', 'test', 'production'] const currentEnv = api.env() const isDevelopmentEnv = api.env('development') const isProductionEnv = api.env('production') const isTestEnv = api.env('test') if (!validEnv.includes(currentEnv)) { throw new Error( `Please specify a valid NODE_ENV or BABEL_ENV environment variable. Valid values are "development", "test", and "production". Instead, received: "${JSON.stringify(currentEnv)}".` ) } return { presets: [ isTestEnv && [ '@babel/preset-env', { targets: { node: 'current' }, modules: 'commonjs' } ], (isProductionEnv || isDevelopmentEnv) && [ '@babel/preset-env', { useBuiltIns: 'entry', corejs: '3.8', modules: false, bugfixes: true, loose: true, exclude: ['transform-typeof-symbol'] } ], [ '@babel/preset-react', { development: isDevelopmentEnv || isTestEnv, useBuiltIns: true } ] ].filter(Boolean), plugins: [ 'babel-plugin-macros', [ '@babel/plugin-proposal-class-properties', { loose: true } ], [ '@babel/plugin-transform-runtime', { helpers: false, regenerator: true, corejs: false } ], isProductionEnv && [ 'babel-plugin-transform-react-remove-prop-types', { removeImport: true } ] ].filter(Boolean) } }