'use strict';

module.exports = function shouldIgnoreConsoleError(format, args) {
  if (__DEV__) {
    if (typeof format === 'string') {
      if (format.startsWith('%c%s')) {
        // Looks like a badged error message
        args.splice(0, 3);
      }
      if (
        args[0] != null &&
        ((typeof args[0] === 'object' &&
          typeof args[0].message === 'string' &&
          // This specific log has the same signature as error logging.
          // The trick is to get rid of this whole file.
          !format.includes('Failed to serialize an action') &&
          typeof args[0].stack === 'string') ||
          (typeof args[0] === 'string' &&
            args[0].indexOf('An error occurred in ') === 0))
      ) {
        // This looks like an error with addendum from ReactFiberErrorLogger.
        // They are noisy too so we'll try to ignore them.
        return true;
      }
      if (
        format.indexOf('ReactDOM.render was removed in React 19') !== -1 ||
        format.indexOf('ReactDOM.hydrate was removed in React 19') !== -1 ||
        format.indexOf(
          'ReactDOM.render has not been supported since React 18',
        ) !== -1 ||
        format.indexOf(
          'ReactDOM.hydrate has not been supported since React 18',
        ) !== -1 ||
        format.indexOf('react-test-renderer is deprecated.') !== -1
      ) {
        // We haven't finished migrating our tests to use createRoot.
        return true;
      }
    }
  } else {
    if (
      format != null &&
      typeof format.message === 'string' &&
      typeof format.stack === 'string' &&
      args.length === 0
    ) {
      // In production, ReactFiberErrorLogger logs error objects directly.
      // They are noisy too so we'll try to ignore them.
      return true;
    }
  }
  // Looks legit
  return false;
};