bugsnag/bugsnag-js

View on GitHub
packages/plugin-angular/src/index.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { ErrorHandler, Injectable } from '@angular/core'
import Bugsnag, { Client, Plugin } from '@bugsnag/js'

@Injectable()
export class BugsnagErrorHandler extends ErrorHandler {
  public bugsnagClient: Client;
  constructor (client?: Client) {
    super()
    if (client) {
      this.bugsnagClient = client
    } else {
      this.bugsnagClient = ((Bugsnag as any)._client as Client)
    }
  }

  public handleError (error: any): void {
    const handledState = {
      severity: 'error',
      severityReason: { type: 'unhandledException' },
      unhandled: true
    }

    const event = this.bugsnagClient.Event.create(
      error,
      true,
      handledState,
      'angular error handler',
      1
    )

    if (error.ngDebugContext) {
      event.addMetadata('angular', {
        component: error.ngDebugContext.component,
        context: error.ngDebugContext.context
      })
    }

    this.bugsnagClient._notify(event)
    ErrorHandler.prototype.handleError.call(this, error)
  }
}

const plugin: Plugin = {
  load: (client: Client): ErrorHandler => {
    return new BugsnagErrorHandler(client)
  },
  name: 'Angular'
}

export default plugin