config-overrides.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /* eslint-disable @typescript-eslint/no-var-requires */
  2. const path = require('path')
  3. const { override, addBabelPreset, addWebpackAlias, disableEsLint, addWebpackModuleRule } = require('customize-cra')
  4. const eslintConfig = require('../../.eslintrc.js')
  5. const modifiedEslintConfig = {
  6. ...eslintConfig,
  7. rules: {
  8. ...eslintConfig.rules,
  9. // mark prettier rule as a warning in config passed to webpack so wrong code formatting won't make dev server fail
  10. 'prettier/prettier': 'warn',
  11. },
  12. }
  13. // based on https://github.com/arackaf/customize-cra/issues/175#issuecomment-610023655
  14. const customEslintConfig = (configRules) => {
  15. if (process.env.CI) {
  16. return disableEsLint()
  17. }
  18. return (config) => {
  19. const updatedRules = config.module.rules.map((rule) => {
  20. // Only target rules that have defined a `useEslintrc` parameter in their options
  21. if (rule.use && rule.use.some((use) => use.options && use.options.useEslintrc !== undefined)) {
  22. const ruleUse = rule.use[0]
  23. const baseOptions = ruleUse.options
  24. const baseConfig = baseOptions.baseConfig || {}
  25. const newOptions = {
  26. useEslintrc: false,
  27. ignore: true,
  28. baseConfig: { ...baseConfig, ...configRules },
  29. }
  30. ruleUse.options = newOptions
  31. return rule
  32. // Rule not using eslint. Do not modify.
  33. } else {
  34. return rule
  35. }
  36. })
  37. config.module.rules = updatedRules
  38. return config
  39. }
  40. }
  41. module.exports = {
  42. webpack: override(
  43. addBabelPreset('@emotion/babel-preset-css-prop'),
  44. addWebpackAlias({
  45. '@': path.resolve(__dirname, 'src/'),
  46. }),
  47. addWebpackModuleRule({
  48. test: /\.(graphql|gql)$/,
  49. exclude: /node_modules/,
  50. loader: 'graphql-tag/loader',
  51. }),
  52. customEslintConfig(modifiedEslintConfig)
  53. ),
  54. paths: (paths) => {
  55. paths.appBuild = path.resolve(__dirname, '..', '..', 'dist')
  56. return paths
  57. },
  58. jest: function (config) {
  59. config.coverageThreshold = {
  60. global: {
  61. statements: 48,
  62. branches: 42,
  63. functions: 39,
  64. lines: 48,
  65. },
  66. }
  67. config.coverageDirectory = path.resolve(__dirname, '..', '..', '.coverage')
  68. // Don't collect coverage from stories folder
  69. config.collectCoverageFrom.push('!<rootDir>/src/**/stories/**/*.{js,jsx,ts,tsx}')
  70. return config
  71. },
  72. }