{"version":3,"file":"trackRuntimeError.mjs","names":[],"sources":["../../../src/domain/error/trackRuntimeError.ts"],"sourcesContent":["import { clocksNow } from '@openobserve/js-core/time'\nimport { instrumentMethod } from '../../tools/instrumentMethod'\nimport { Observable } from '../../tools/observable'\nimport type { StackTrace } from '../../tools/stackTrace/computeStackTrace'\nimport { computeStackTraceFromOnErrorMessage } from '../../tools/stackTrace/computeStackTrace'\nimport { globalObject } from '../../tools/globalObject'\nimport { DOM_EVENT, isEventSupported } from '../../browser/addEventListener'\nimport { noop } from '../../tools/utils/functionUtils'\nimport { computeRawError, isError } from './error'\nimport type { RawError } from './error.types'\nimport { ErrorHandling, ErrorSource, NonErrorPrefix } from './error.types'\n\nexport type UnhandledErrorCallback = (originalError: unknown, stackTrace?: StackTrace) => any\n\nexport function trackRuntimeError() {\n  return new Observable<RawError>((observer) => {\n    const handleRuntimeError = (originalError: unknown, stackTrace?: StackTrace) => {\n      const rawError = computeRawError({\n        stackTrace,\n        originalError,\n        startClocks: clocksNow(),\n        nonErrorPrefix: NonErrorPrefix.UNCAUGHT,\n        source: ErrorSource.SOURCE,\n        handling: ErrorHandling.UNHANDLED,\n      })\n      observer.notify(rawError)\n    }\n    const { stop: stopInstrumentingOnError } = instrumentOnError(handleRuntimeError)\n    const { stop: stopInstrumentingOnUnhandledRejection } = instrumentUnhandledRejection(handleRuntimeError)\n\n    return () => {\n      stopInstrumentingOnError()\n      stopInstrumentingOnUnhandledRejection()\n    }\n  })\n}\n\nexport function instrumentOnError(callback: UnhandledErrorCallback) {\n  return instrumentMethod(globalObject, 'onerror', ({ parameters: [messageObj, url, line, column, errorObj] }) => {\n    let stackTrace\n    if (!isError(errorObj)) {\n      stackTrace = computeStackTraceFromOnErrorMessage(messageObj, url, line, column)\n    }\n    callback(errorObj ?? messageObj, stackTrace)\n  })\n}\n\nexport function instrumentUnhandledRejection(callback: UnhandledErrorCallback) {\n  // Salesforce LWS does not support the unhandledrejection event. https://developer.salesforce.com/tools/lws-distortion-viewer\n  if (!isEventSupported(globalObject.window, DOM_EVENT.UNHANDLED_REJECTION)) {\n    return { stop: noop }\n  }\n\n  return instrumentMethod(globalObject, 'onunhandledrejection', ({ parameters: [e] }) => {\n    callback(e.reason || 'Empty reason')\n  })\n}\n"],"mappings":";;;;;;;;;;AAcA,SAAgB,oBAAoB;CAClC,OAAO,IAAI,YAAsB,aAAa;EAC5C,MAAM,sBAAsB,eAAwB,eAA4B;GAC9E,MAAM,WAAW,gBAAgB;IAC/B;IACA;IACA,aAAa,UAAU;IACvB,gBAAA;IACA,QAAQ,YAAY;IACpB,UAAA;GACF,CAAC;GACD,SAAS,OAAO,QAAQ;EAC1B;EACA,MAAM,EAAE,MAAM,6BAA6B,kBAAkB,kBAAkB;EAC/E,MAAM,EAAE,MAAM,0CAA0C,6BAA6B,kBAAkB;EAEvG,aAAa;GACX,yBAAyB;GACzB,sCAAsC;EACxC;CACF,CAAC;AACH;AAEA,SAAgB,kBAAkB,UAAkC;CAClE,OAAO,iBAAiB,cAAc,YAAY,EAAE,YAAY,CAAC,YAAY,KAAK,MAAM,QAAQ,gBAAgB;EAC9G,IAAI;EACJ,IAAI,CAAC,QAAQ,QAAQ,GACnB,aAAa,oCAAoC,YAAY,KAAK,MAAM,MAAM;EAEhF,SAAS,YAAY,YAAY,UAAU;CAC7C,CAAC;AACH;AAEA,SAAgB,6BAA6B,UAAkC;CAE7E,IAAI,CAAC,iBAAiB,aAAa,QAAA,oBAAqC,GACtE,OAAO,EAAE,MAAM,KAAK;CAGtB,OAAO,iBAAiB,cAAc,yBAAyB,EAAE,YAAY,CAAC,SAAS;EACrF,SAAS,EAAE,UAAU,cAAc;CACrC,CAAC;AACH"}