react-native-exception-handler icon indicating copy to clipboard operation
react-native-exception-handler copied to clipboard

Does not work for node_modules

Open IncredibleMrTim opened this issue 6 years ago • 0 comments
trafficstars

Hey

I am only able to get this to work for issues at the application level, if an error is thrown from any package in the node_modules, it is not captured.

below is my GlobalErrorHandler, i have imported this into my app.js file at the top of my application so was expecting it to capture any exception in the application.

the expected behaviour would be for the this.test() exception to be thrown and from node_modules/AnotherUIDependency and captured by the globalErrorHandler

app.js

...
import { GlobalErrorHandler } from 'MASKED/globalErrorHandler'
...

globalErrorHandler.js

import { Alert } from 'react-native'
import { GlobalStrings } from 'MASKED'
import RNExitApp from 'react-native-exit-app'
import {
  setJSExceptionHandler,
  setNativeExceptionHandler
} from 'react-native-exception-handler'

errorHandler = (e, isFatal) => {
  Alert.alert(
    GlobalStrings.globalErrorHandler.title,
    // eslint-disable-next-line no-undef
    errorMessage(e, isFatal, __DEV__),
    [
      {
        text: GlobalStrings.globalErrorHandler.exit,
        onPress: () => {
          RNExitApp.exitApp()
        }
      }
    ],
    { cancelable: false }
  )
}

errorMessage = (e, isFatal, isDev) => {
  let val = null
  if (isDev) {
    val =
      GlobalStrings.globalErrorHandler.error +
      `: ${isFatal ? GlobalStrings.globalErrorHandler.fatal : ''}` +
      '\n\n' +
      e.name +
      ':' +
      e.message
  } else {
    if (!isFatal) {
      val = GlobalStrings.globalErrorHandler.exceptionMessage
    } else {
      val = GlobalStrings.globalErrorHandler.nonFatal + ': ' + e
    }
  }
  return val
}

setJSExceptionHandler(errorHandler, true)
setNativeExceptionHandler(errorString => {
  Alert.alert(
    GlobalStrings.globalErrorHandler.nativeExceptionMessage + ': ' + errorString
  )
})

node_modules/AnotherUIDependency

...
export default class myComponent extends Component {
    render(
        return{
            this.test() // expected globalErrorHandler capture
            ...
        }
    )
}

IncredibleMrTim avatar Jul 11 '19 10:07 IncredibleMrTim