{"version":3,"file":"nathanclaire-rum-angular.mjs","sources":["../../src/EdgeRumService.ts","../../src/ErrorCapture.ts","../../src/RouterCapture.ts","../../src/IonicLifecycleCapture.ts","../../src/EdgeRumModule.ts","../../src/nathanclaire-rum-angular.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport {\n  EdgeRum,\n  type EventAttributes,\n  type RumTimer,\n  type UserContext,\n} from '@nathanclaire/rum';\n\n@Injectable({ providedIn: 'root' })\nexport class EdgeRumService {\n  identify(user: UserContext): void {\n    EdgeRum.identify(user);\n  }\n\n  track(name: string, attributes?: EventAttributes): void {\n    EdgeRum.track(name, attributes);\n  }\n\n  trackScreen(name: string, attributes?: EventAttributes): void {\n    EdgeRum.trackScreen(name, attributes);\n  }\n\n  time(name: string): RumTimer {\n    return EdgeRum.time(name);\n  }\n\n  captureError(error: Error, context?: Record<string, unknown>): void {\n    EdgeRum.captureError(error, context);\n  }\n\n  disable(): void {\n    EdgeRum.disable();\n  }\n\n  enable(): void {\n    EdgeRum.enable();\n  }\n\n  getSessionId(): string {\n    return EdgeRum.getSessionId();\n  }\n}\n","import { ErrorHandler, Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { EdgeRum } from '@nathanclaire/rum';\n\nexport const ERROR_ROUTE_PROVIDER = new InjectionToken<() => string>('ERROR_ROUTE_PROVIDER');\n\nconst TEMPLATE_PATTERN = /([A-Z][A-Za-z0-9_]*)_Template_/;\nconst HOST_BINDING_PATTERN = /([A-Z][A-Za-z0-9_]*)_HostBindings/;\n\nfunction extractComponentName(stack: string | undefined): string | null {\n  if (!stack) {\n    return null;\n  }\n  const templateMatch = TEMPLATE_PATTERN.exec(stack);\n  if (templateMatch && templateMatch[1]) {\n    return templateMatch[1];\n  }\n  const hostMatch = HOST_BINDING_PATTERN.exec(stack);\n  if (hostMatch && hostMatch[1]) {\n    return hostMatch[1];\n  }\n  return null;\n}\n\nfunction toError(value: unknown): Error {\n  if (value instanceof Error) {\n    return value;\n  }\n  if (typeof value === 'string') {\n    return new Error(value);\n  }\n  if (value && typeof value === 'object' && 'message' in value) {\n    const message = (value as { message?: unknown }).message;\n    const err = new Error(typeof message === 'string' ? message : 'Unknown error');\n    const stack = (value as { stack?: unknown }).stack;\n    if (typeof stack === 'string') {\n      err.stack = stack;\n    }\n    return err;\n  }\n  return new Error('Unknown error');\n}\n\nfunction currentRoute(): string {\n  if (typeof window !== 'undefined' && window.location) {\n    return `${window.location.pathname}${window.location.search}`;\n  }\n  return '';\n}\n\n@Injectable()\nexport class EdgeRumErrorCapture extends ErrorHandler {\n  private readonly routeProvider: () => string;\n\n  constructor(\n    @Optional() @Inject(ERROR_ROUTE_PROVIDER) routeProvider?: (() => string) | null,\n  ) {\n    super();\n    this.routeProvider = routeProvider ?? currentRoute;\n  }\n\n  override handleError(error: unknown): void {\n    try {\n      const err = toError(error);\n      const component = extractComponentName(err.stack);\n      const route = this.routeProvider();\n      const context: Record<string, string | number | boolean> = {\n        cause: 'AngularError',\n        error_context: `screen:${route}`,\n        handled: true,\n      };\n      if (component !== null) {\n        context['component'] = component;\n      }\n      EdgeRum.captureError(err, context);\n    } catch {\n      // Never let capture path break the host app.\n    }\n    super.handleError(error);\n  }\n}\n","import { Injectable, type OnDestroy } from '@angular/core';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports -- Router must be a value import for Angular DI injection\nimport { Router } from '@angular/router';\nimport type {\n  ActivatedRouteSnapshot,\n  Event as RouterEvent,\n  NavigationError,\n  NavigationStart,\n} from '@angular/router';\nimport type { Subscription } from 'rxjs';\nimport { __recordEvent, __setCurrentRoute, __setLastNavigationMethod, type EventAttributes } from '@nathanclaire/rum';\n\ntype NavigationMethod = 'push' | 'pop' | 'replace' | 'initial' | 'cancel';\n\ntype RouteType = 'main_flow' | 'deeplink' | 'settings' | 'modal';\n\nconst EVENT_TYPE = {\n  NavigationStart: 0,\n  NavigationEnd: 1,\n  NavigationCancel: 2,\n  NavigationError: 3,\n} as const;\n\nfunction normaliseRoute(root: ActivatedRouteSnapshot): string {\n  const segments: string[] = [];\n  let node: ActivatedRouteSnapshot | undefined = root;\n  while (node) {\n    const path = node.routeConfig?.path;\n    if (path && path.length > 0) {\n      segments.push(path);\n    }\n    node = node.children[0];\n  }\n  const joined = segments.join('/');\n  return joined.length === 0 ? '/' : `/${joined}`;\n}\n\nfunction hasArguments(url: string, root: ActivatedRouteSnapshot): boolean {\n  if (url.includes('?') || url.includes(';')) {\n    return true;\n  }\n  let node: ActivatedRouteSnapshot | undefined = root;\n  while (node) {\n    if (Object.keys(node.params).length > 0) {\n      return true;\n    }\n    node = node.children[0];\n  }\n  return false;\n}\n\nfunction classifyRoute(pattern: string): RouteType {\n  if (pattern.startsWith('/settings')) {\n    return 'settings';\n  }\n  if (pattern.includes('modal')) {\n    return 'modal';\n  }\n  if (pattern.includes(':')) {\n    return 'deeplink';\n  }\n  return 'main_flow';\n}\n\ninterface PendingNav {\n  readonly id: number;\n  readonly trigger: NavigationStart['navigationTrigger'];\n  readonly replaceUrl: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class RouterCapture implements OnDestroy {\n  private readonly subscription: Subscription;\n  private previousRoute: string | null = null;\n  private isFirstNavigation = true;\n  private pending: PendingNav | null = null;\n\n  constructor(private readonly router: Router) {\n    this.subscription = this.router.events.subscribe((event: RouterEvent) => {\n      this.handleEvent(event);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n  }\n\n  private handleEvent(event: RouterEvent): void {\n    switch (event.type) {\n      case EVENT_TYPE.NavigationStart: {\n        const start = event as NavigationStart;\n        this.pending = {\n          id: start.id,\n          trigger: start.navigationTrigger,\n          replaceUrl: this.router.getCurrentNavigation()?.extras?.replaceUrl === true,\n        };\n        return;\n      }\n      case EVENT_TYPE.NavigationEnd: {\n        this.emitRouteChange(this.methodForEnd());\n        return;\n      }\n      case EVENT_TYPE.NavigationCancel: {\n        this.emitRouteChange('cancel');\n        return;\n      }\n      case EVENT_TYPE.NavigationError: {\n        this.emitNavigationError(event as NavigationError);\n        return;\n      }\n      default:\n        return;\n    }\n  }\n\n  private methodForEnd(): NavigationMethod {\n    if (this.isFirstNavigation) {\n      return 'initial';\n    }\n    if (this.pending?.trigger === 'popstate' || this.pending?.trigger === 'hashchange') {\n      return 'pop';\n    }\n    if (this.pending?.replaceUrl) {\n      return 'replace';\n    }\n    return 'push';\n  }\n\n  private emitRouteChange(method: NavigationMethod): void {\n    const root = this.router.routerState.snapshot.root;\n    const toRoute = normaliseRoute(root);\n    const url = this.router.routerState.snapshot.url;\n\n    const navAttrs: EventAttributes = {\n      'navigation.to_screen': toRoute,\n      'navigation.method': method,\n      'navigation.route_type': classifyRoute(toRoute),\n      'navigation.has_arguments': hasArguments(url, root),\n      'navigation.timestamp': new Date().toISOString(),\n    };\n    if (this.previousRoute !== null) {\n      navAttrs['navigation.from_screen'] = this.previousRoute;\n    }\n\n    __recordEvent('navigation', navAttrs);\n    __setCurrentRoute(toRoute);\n    __setLastNavigationMethod(method);\n\n    this.previousRoute = toRoute;\n    this.isFirstNavigation = false;\n    this.pending = null;\n  }\n\n  private emitNavigationError(event: NavigationError): void {\n    const error: unknown = event.error;\n    const message =\n      error instanceof Error ? error.message : typeof error === 'string' ? error : 'Navigation failed';\n    const stacktrace = error instanceof Error && error.stack ? error.stack : '';\n\n    const attrs: EventAttributes = {\n      exception_type: 'NavigationError',\n      message,\n      stacktrace,\n      is_fatal: false,\n      handled: false,\n      error_context: `navigation:${event.url}`,\n      cause: 'NavigationError',\n      runtime: 'webview',\n    };\n\n    __recordEvent('app.crash', attrs);\n    this.pending = null;\n  }\n}\n","import { Inject, Injectable, InjectionToken, Optional, type OnDestroy } from '@angular/core';\nimport {\n  __beginScreen,\n  __flushActiveScreen,\n  __getCurrentRoute,\n  __getLastNavigationMethod,\n} from '@nathanclaire/rum';\n\nexport const LIFECYCLE_EVENT_SOURCE = new InjectionToken<EventTarget>('LIFECYCLE_EVENT_SOURCE');\n\nconst DID_ENTER = 'ionViewDidEnter';\nconst DID_LEAVE = 'ionViewDidLeave';\n\nfunction resolveScreenName(target: EventTarget | null): string {\n  // Prefer the canonical route from the SDK state — keeps screen.* keys in\n  // sync with the navigation.to_screen used by visited_screens / dashboards.\n  const route = __getCurrentRoute();\n  if (route && route !== '/') return route;\n  // Fall back to the Ionic component tag for the pre-first-navigation case.\n  if (target && typeof (target as Element).tagName === 'string') {\n    const tag = (target as Element).tagName;\n    if (tag) return tag.toLowerCase();\n  }\n  return 'unknown';\n}\n\n@Injectable({ providedIn: 'root' })\nexport class IonicLifecycleCapture implements OnDestroy {\n  private readonly source: EventTarget | null;\n  private readonly didEnter = (e: Event): void => this.onDidEnter(e);\n  private readonly didLeave = (): void => this.onDidLeave();\n\n  constructor(\n    @Optional() @Inject(LIFECYCLE_EVENT_SOURCE) source?: EventTarget | null,\n  ) {\n    this.source = source ?? (typeof document !== 'undefined' ? document : null);\n    if (this.source) {\n      this.source.addEventListener(DID_ENTER, this.didEnter);\n      this.source.addEventListener(DID_LEAVE, this.didLeave);\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (!this.source) {\n      return;\n    }\n    this.source.removeEventListener(DID_ENTER, this.didEnter);\n    this.source.removeEventListener(DID_LEAVE, this.didLeave);\n  }\n\n  private onDidEnter(event: Event): void {\n    __beginScreen(resolveScreenName(event.target));\n  }\n\n  private onDidLeave(): void {\n    __flushActiveScreen(__getLastNavigationMethod());\n  }\n}\n","import {\n  APP_INITIALIZER,\n  ErrorHandler,\n  InjectionToken,\n  NgModule,\n  Optional,\n  type ModuleWithProviders,\n  type Provider,\n} from '@angular/core';\nimport { EdgeRum, type EdgeRumConfig } from '@nathanclaire/rum';\n\nimport { EdgeRumErrorCapture } from './ErrorCapture';\nimport { EdgeRumService } from './EdgeRumService';\nimport { RouterCapture } from './RouterCapture';\nimport { IonicLifecycleCapture } from './IonicLifecycleCapture';\n\nexport const EDGE_RUM_CONFIG = new InjectionToken<EdgeRumConfig>('EDGE_RUM_CONFIG');\n\nexport function edgeRumInitializerFactory(\n  config: EdgeRumConfig,\n  // Injected to force instantiation — constructors subscribe to Router/Ionic events\n  _router: RouterCapture, // eslint-disable-line @typescript-eslint/no-unused-vars\n  _lifecycle: IonicLifecycleCapture | null, // eslint-disable-line @typescript-eslint/no-unused-vars\n): () => void {\n  return () => {\n    EdgeRum.init(config);\n  };\n}\n\nfunction buildProviders(config: EdgeRumConfig): Provider[] {\n  return [\n    { provide: EDGE_RUM_CONFIG, useValue: config },\n    EdgeRumService,\n    RouterCapture,\n    IonicLifecycleCapture,\n    {\n      provide: APP_INITIALIZER,\n      useFactory: edgeRumInitializerFactory,\n      deps: [EDGE_RUM_CONFIG, RouterCapture, [new Optional(), IonicLifecycleCapture]],\n      multi: true,\n    },\n    { provide: ErrorHandler, useClass: EdgeRumErrorCapture },\n  ];\n}\n\n@NgModule({})\nexport class EdgeRumModule {\n  static forRoot(config: EdgeRumConfig): ModuleWithProviders<EdgeRumModule> {\n    return {\n      ngModule: EdgeRumModule,\n      providers: buildProviders(config),\n    };\n  }\n}\n\nexport function provideEdgeRum(config: EdgeRumConfig): Provider[] {\n  return buildProviders(config);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}