convertFirebaseDatabaseException function

FirebaseException convertFirebaseDatabaseException(
  1. Object exception, [
  2. StackTrace? stackTrace
])

Implementation

FirebaseException convertFirebaseDatabaseException(Object exception,
    [StackTrace? stackTrace]) {
  final castedJSObject = exception as core_interop.JSError;
  String code = 'unknown';
  String message = castedJSObject.message?.toDart ?? '';
  String lowerCaseMessage = message.toLowerCase();

  // FirebaseWeb SDK for Database has no error codes, so we manually map known
  // messages to known error codes for cross platform consistency.
  if (lowerCaseMessage.contains('index not defined')) {
    code = 'index-not-defined';
  } else if (lowerCaseMessage.contains('permission denied') ||
      lowerCaseMessage.contains('permission_denied')) {
    code = 'permission-denied';
  } else if (lowerCaseMessage
      .contains('transaction needs to be run again with current data')) {
    code = 'data-stale';
  } else if (lowerCaseMessage.contains('transaction had too many retries')) {
    code = 'max-retries';
  } else if (lowerCaseMessage.contains('service is unavailable')) {
    code = 'unavailable';
  } else if (lowerCaseMessage.contains('network error')) {
    code = 'network-error';
  } else if (lowerCaseMessage.contains('write was canceled')) {
    code = 'write-cancelled';
  }

  return FirebaseException(
    plugin: 'firebase_database',
    code: code,
    message: message,
    stackTrace: stackTrace,
  );
}