%PDF- %PDF-
Direktori : /home/emergentqj/actioncivile/pre-auth/.4cc3a2e1590a4463a5f392ddcc26929e/static/node_modules/@sentry/src/ |
Current File : /home/emergentqj/actioncivile/pre-auth/.4cc3a2e1590a4463a5f392ddcc26929e/static/node_modules/@sentry/src/aggregate-errors.ts |
import type { Event, EventHint, Exception, ExtendedError, StackParser } from '@sentry/types'; import { isInstanceOf } from './is'; import { truncate } from './string'; /** * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter. */ export function applyAggregateErrorsToEvent( exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception, parser: StackParser, maxValueLimit: number = 250, key: string, limit: number, event: Event, hint?: EventHint, ): void { if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) { return; } // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error const originalException: Exception | undefined = event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined; // We only create exception grouping if there is an exception in the event. if (originalException) { event.exception.values = truncateAggregateExceptions( aggregateExceptionsFromError( exceptionFromErrorImplementation, parser, limit, hint.originalException as ExtendedError, key, event.exception.values, originalException, 0, ), maxValueLimit, ); } } function aggregateExceptionsFromError( exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception, parser: StackParser, limit: number, error: ExtendedError, key: string, prevExceptions: Exception[], exception: Exception, exceptionId: number, ): Exception[] { if (prevExceptions.length >= limit + 1) { return prevExceptions; } let newExceptions = [...prevExceptions]; if (isInstanceOf(error[key], Error)) { applyExceptionGroupFieldsForParentException(exception, exceptionId); const newException = exceptionFromErrorImplementation(parser, error[key]); const newExceptionId = newExceptions.length; applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId); newExceptions = aggregateExceptionsFromError( exceptionFromErrorImplementation, parser, limit, error[key], key, [newException, ...newExceptions], newException, newExceptionId, ); } // This will create exception grouping for AggregateErrors // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError if (Array.isArray(error.errors)) { error.errors.forEach((childError, i) => { if (isInstanceOf(childError, Error)) { applyExceptionGroupFieldsForParentException(exception, exceptionId); const newException = exceptionFromErrorImplementation(parser, childError); const newExceptionId = newExceptions.length; applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId); newExceptions = aggregateExceptionsFromError( exceptionFromErrorImplementation, parser, limit, childError, key, [newException, ...newExceptions], newException, newExceptionId, ); } }); } return newExceptions; } function applyExceptionGroupFieldsForParentException(exception: Exception, exceptionId: number): void { // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default. exception.mechanism = exception.mechanism || { type: 'generic', handled: true }; exception.mechanism = { ...exception.mechanism, is_exception_group: true, exception_id: exceptionId, }; } function applyExceptionGroupFieldsForChildException( exception: Exception, source: string, exceptionId: number, parentId: number | undefined, ): void { // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default. exception.mechanism = exception.mechanism || { type: 'generic', handled: true }; exception.mechanism = { ...exception.mechanism, type: 'chained', source, exception_id: exceptionId, parent_id: parentId, }; } /** * Truncate the message (exception.value) of all exceptions in the event. * Because this event processor is ran after `applyClientOptions`, * we need to truncate the message of the added exceptions here. */ function truncateAggregateExceptions(exceptions: Exception[], maxValueLength: number): Exception[] { return exceptions.map(exception => { if (exception.value) { exception.value = truncate(exception.value, maxValueLength); } return exception; }); }