babel.config.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*eslint-env node*/
  2. module.exports = {
  3. presets: [
  4. '@babel/preset-react',
  5. [
  6. '@babel/preset-env',
  7. {
  8. useBuiltIns: 'usage',
  9. corejs: '3.11',
  10. },
  11. ],
  12. '@babel/preset-typescript',
  13. [
  14. '@emotion/babel-preset-css-prop',
  15. {
  16. autoLabel: 'always',
  17. sourceMap: false,
  18. labelFormat: '[local]',
  19. },
  20. ],
  21. ],
  22. plugins: [
  23. '@babel/plugin-transform-runtime',
  24. // NOTE: The order of the decorator and class-property plugins is important
  25. // here. Decorators must be processed first before class properties, see:
  26. // https://babeljs.io/docs/en/plugins#plugin-ordering
  27. ['@babel/plugin-proposal-decorators', {legacy: true}],
  28. '@babel/plugin-proposal-class-properties',
  29. ],
  30. env: {
  31. production: {
  32. plugins: [
  33. [
  34. 'transform-react-remove-prop-types',
  35. {
  36. mode: 'remove', // remove from bundle
  37. removeImport: true, // removes `prop-types` import statements
  38. classNameMatchers: [
  39. 'SelectField',
  40. 'FormField',
  41. 'AsyncComponent',
  42. 'AsyncView',
  43. ],
  44. additionalLibraries: [/app\/sentryTypes$/],
  45. },
  46. ],
  47. ['babel-plugin-add-react-displayname'],
  48. ],
  49. },
  50. development: {
  51. presets: [
  52. [
  53. '@emotion/babel-preset-css-prop',
  54. {
  55. autoLabel: 'always',
  56. sourceMap: false,
  57. },
  58. ],
  59. ],
  60. plugins: [
  61. '@babel/plugin-transform-react-jsx-source',
  62. !!process.env.SENTRY_UI_HOT_RELOAD ? 'react-refresh/babel' : null,
  63. ].filter(Boolean),
  64. },
  65. test: {
  66. // Required, see https://github.com/facebook/jest/issues/9430
  67. plugins: ['dynamic-import-node'],
  68. },
  69. },
  70. };