/* eslint global-require: off */ const developmentEnvironments = ['development', 'test']; const developmentPlugins = [require('react-hot-loader/babel')]; const productionPlugins = [ require('babel-plugin-dev-expression'), // babel-preset-react-optimize require('@babel/plugin-transform-react-constant-elements'), require('@babel/plugin-transform-react-inline-elements'), require('babel-plugin-transform-react-remove-prop-types') ]; module.exports = api => { // see docs about api at https://babeljs.io/docs/en/config-files#apicache const development = api.env(developmentEnvironments); return { presets: [ [ require('@babel/preset-env'), { targets: { electron: require('electron/package.json').version }, useBuiltIns: 'usage' } ], require('@babel/preset-flow'), [require('@babel/preset-react'), { development }] ], plugins: [ // Stage 0 require('@babel/plugin-proposal-function-bind'), // Stage 1 require('@babel/plugin-proposal-export-default-from'), require('@babel/plugin-proposal-logical-assignment-operators'), [require('@babel/plugin-proposal-optional-chaining'), { loose: false }], [ require('@babel/plugin-proposal-pipeline-operator'), { proposal: 'minimal' } ], [ require('@babel/plugin-proposal-nullish-coalescing-operator'), { loose: false } ], require('@babel/plugin-proposal-do-expressions'), // Stage 2 [require('@babel/plugin-proposal-decorators'), { legacy: true }], require('@babel/plugin-proposal-function-sent'), require('@babel/plugin-proposal-export-namespace-from'), require('@babel/plugin-proposal-numeric-separator'), require('@babel/plugin-proposal-throw-expressions'), // Stage 3 require('@babel/plugin-syntax-dynamic-import'), require('@babel/plugin-syntax-import-meta'), [require('@babel/plugin-proposal-class-properties'), { loose: true }], require('@babel/plugin-proposal-json-strings'), ...(development ? developmentPlugins : productionPlugins) ] }; };