{"version":3,"file":"error.mjs","names":[],"sources":["../../../src/domain/error/error.ts"],"sourcesContent":["import type { ClocksState } from '@openobserve/js-core/time'\nimport { isIndexableObject } from '@openobserve/js-core/util'\nimport { sanitize } from '../../tools/serialisation/sanitize'\nimport type { Context } from '../../tools/serialisation/context'\nimport { jsonStringify } from '../../tools/serialisation/jsonStringify'\nimport type { StackTrace } from '../../tools/stackTrace/computeStackTrace'\nimport { computeStackTrace } from '../../tools/stackTrace/computeStackTrace'\nimport { toStackTraceString } from '../../tools/stackTrace/handlingStack'\nimport type { ErrorSource, ErrorHandling, RawError, RawErrorCause, ErrorWithCause, NonErrorPrefix } from './error.types'\n\nexport const NO_ERROR_STACK_PRESENT_MESSAGE = 'No stack, consider using an instance of Error'\n\ninterface RawErrorParams {\n  stackTrace?: StackTrace\n  originalError: unknown\n  handlingStack?: string\n  componentStack?: string\n  startClocks: ClocksState\n  nonErrorPrefix: NonErrorPrefix\n  useFallbackStack?: boolean\n  source: ErrorSource\n  handling: ErrorHandling\n}\n\nfunction computeErrorBase({\n  originalError,\n  stackTrace,\n  source,\n  useFallbackStack = true,\n  nonErrorPrefix,\n}: {\n  originalError: unknown\n  stackTrace?: StackTrace\n  source: ErrorSource\n  useFallbackStack?: boolean\n  nonErrorPrefix?: NonErrorPrefix\n}) {\n  const isErrorInstance = isError(originalError)\n  if (!stackTrace && isErrorInstance) {\n    stackTrace = computeStackTrace(originalError)\n  }\n\n  return {\n    source,\n    type: stackTrace ? stackTrace.name : undefined,\n    message: computeMessage(stackTrace, isErrorInstance, nonErrorPrefix, originalError),\n    stack: stackTrace ? toStackTraceString(stackTrace) : useFallbackStack ? NO_ERROR_STACK_PRESENT_MESSAGE : undefined,\n  }\n}\n\nexport function computeRawError({\n  stackTrace,\n  originalError,\n  handlingStack,\n  componentStack,\n  startClocks,\n  nonErrorPrefix,\n  useFallbackStack = true,\n  source,\n  handling,\n}: RawErrorParams): RawError {\n  const errorBase = computeErrorBase({ originalError, stackTrace, source, useFallbackStack, nonErrorPrefix })\n\n  return {\n    startClocks,\n    handling,\n    handlingStack,\n    componentStack,\n    originalError,\n    ...errorBase,\n    causes: isError(originalError) ? flattenErrorCauses(originalError, source) : undefined,\n    fingerprint: tryToGetFingerprint(originalError),\n    context: tryToGetErrorContext(originalError),\n  }\n}\n\nfunction computeMessage(\n  stackTrace: StackTrace | undefined,\n  isErrorInstance: boolean,\n  nonErrorPrefix: NonErrorPrefix | undefined,\n  originalError: unknown\n) {\n  // Favor stackTrace message only if tracekit has really been able to extract something meaningful (message + name)\n  // TODO rework tracekit integration to avoid scattering error building logic\n  return stackTrace?.message && stackTrace?.name\n    ? stackTrace.message\n    : !isErrorInstance\n      ? nonErrorPrefix\n        ? `${nonErrorPrefix} ${jsonStringify(sanitize(originalError))!}`\n        : jsonStringify(sanitize(originalError))!\n      : 'Empty message'\n}\n\nexport function tryToGetFingerprint(originalError: unknown) {\n  return isError(originalError) && 'oo_fingerprint' in originalError ? String(originalError.oo_fingerprint) : undefined\n}\n\nexport function tryToGetErrorContext(originalError: unknown) {\n  if (isIndexableObject(originalError)) {\n    return originalError.dd_context as Context | undefined\n  }\n}\n\nexport function getFileFromStackTraceString(stack: string) {\n  return /@ (.+)/.exec(stack)?.[1]\n}\n\nexport function isError(error: unknown): error is Error {\n  try {\n    return error instanceof Error || Object.prototype.toString.call(error) === '[object Error]'\n  } catch {\n    return false\n  }\n}\n\nexport function flattenErrorCauses(error: ErrorWithCause, parentSource: ErrorSource): RawErrorCause[] | undefined {\n  const causes: RawErrorCause[] = []\n  let currentCause = error.cause\n\n  while (currentCause !== undefined && currentCause !== null && causes.length < 10) {\n    const causeBase = computeErrorBase({\n      originalError: currentCause,\n      source: parentSource,\n      useFallbackStack: false,\n    })\n\n    causes.push(causeBase)\n\n    currentCause = isError(currentCause) ? (currentCause as ErrorWithCause).cause : undefined\n  }\n\n  return causes.length ? causes : undefined\n}\n"],"mappings":";;;;;;AAUA,MAAa,iCAAiC;AAc9C,SAAS,iBAAiB,EACxB,eACA,YACA,QACA,mBAAmB,MACnB,kBAOC;CACD,MAAM,kBAAkB,QAAQ,aAAa;CAC7C,IAAI,CAAC,cAAc,iBACjB,aAAa,kBAAkB,aAAa;CAG9C,OAAO;EACL;EACA,MAAM,aAAa,WAAW,OAAO,KAAA;EACrC,SAAS,eAAe,YAAY,iBAAiB,gBAAgB,aAAa;EAClF,OAAO,aAAa,mBAAmB,UAAU,IAAI,mBAAmB,iCAAiC,KAAA;CAC3G;AACF;AAEA,SAAgB,gBAAgB,EAC9B,YACA,eACA,eACA,gBACA,aACA,gBACA,mBAAmB,MACnB,QACA,YAC2B;CAG3B,OAAO;EACL;EACA;EACA;EACA;EACA;EACA,GARgB,iBAAiB;GAAE;GAAe;GAAY;GAAQ;GAAkB;EAAe,CAQ5F;EACX,QAAQ,QAAQ,aAAa,IAAI,mBAAmB,eAAe,MAAM,IAAI,KAAA;EAC7E,aAAa,oBAAoB,aAAa;EAC9C,SAAS,qBAAqB,aAAa;CAC7C;AACF;AAEA,SAAS,eACP,YACA,iBACA,gBACA,eACA;CAGA,OAAO,YAAY,WAAW,YAAY,OACtC,WAAW,UACX,CAAC,kBACC,iBACE,GAAG,eAAe,GAAG,cAAc,SAAS,aAAa,CAAC,MAC1D,cAAc,SAAS,aAAa,CAAC,IACvC;AACR;AAEA,SAAgB,oBAAoB,eAAwB;CAC1D,OAAO,QAAQ,aAAa,KAAK,oBAAoB,gBAAgB,OAAO,cAAc,cAAc,IAAI,KAAA;AAC9G;AAEA,SAAgB,qBAAqB,eAAwB;CAC3D,IAAI,kBAAkB,aAAa,GACjC,OAAO,cAAc;AAEzB;AAEA,SAAgB,4BAA4B,OAAe;CACzD,OAAO,SAAS,KAAK,KAAK,CAAC,GAAG;AAChC;AAEA,SAAgB,QAAQ,OAAgC;CACtD,IAAI;EACF,OAAO,iBAAiB,SAAS,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM;CAC7E,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,mBAAmB,OAAuB,cAAwD;CAChH,MAAM,SAA0B,CAAC;CACjC,IAAI,eAAe,MAAM;CAEzB,OAAO,iBAAiB,KAAA,KAAa,iBAAiB,QAAQ,OAAO,SAAS,IAAI;EAChF,MAAM,YAAY,iBAAiB;GACjC,eAAe;GACf,QAAQ;GACR,kBAAkB;EACpB,CAAC;EAED,OAAO,KAAK,SAAS;EAErB,eAAe,QAAQ,YAAY,IAAK,aAAgC,QAAQ,KAAA;CAClF;CAEA,OAAO,OAAO,SAAS,SAAS,KAAA;AAClC"}