throw-on-react-error.js 877 B

1234567891011121314151617181920212223242526272829
  1. // eslint-disable-next-line no-console
  2. const originalConsoleError = console.error;
  3. // List of `console.error` messages to fail on
  4. const BAD_ERRORS = [
  5. 'Failed prop type',
  6. 'Failed child context type',
  7. 'React does not recognize the `[^`]+` prop on a DOM element',
  8. ];
  9. // This is needed because when we throw the captured error message, it will
  10. // also `console.error` it
  11. const REPEATED_ERROR = 'Error: Uncaught [Error: Warning: ';
  12. const BAD_ERRORS_REGEX = new RegExp(BAD_ERRORS.join('|'));
  13. // eslint-disable-next-line no-console
  14. console.error = (message, ...args) => {
  15. if (
  16. typeof message === 'string' &&
  17. message.indexOf(REPEATED_ERROR) !== 0 &&
  18. BAD_ERRORS_REGEX.test(message)
  19. ) {
  20. originalConsoleError(message, ...args);
  21. throw new Error(message);
  22. } else if (!BAD_ERRORS_REGEX.test(message)) {
  23. originalConsoleError(message, ...args);
  24. }
  25. };