rittenhop-dev/versions/5.94.2/node_modules/@sentry/utils/esm/eventbuilder.js
2024-09-23 19:40:12 -04:00

162 lines
4.1 KiB
JavaScript

import { isError, isPlainObject, isParameterizedString } from './is.js';
import { addExceptionTypeValue, addExceptionMechanism } from './misc.js';
import { normalizeToSize } from './normalize.js';
import { extractExceptionKeysForMessage } from './object.js';
/**
* Extracts stack frames from the error.stack string
*/
function parseStackFrames(stackParser, error) {
return stackParser(error.stack || '', 1);
}
/**
* Extracts stack frames from the error and builds a Sentry Exception
*/
function exceptionFromError(stackParser, error) {
const exception = {
type: error.name || error.constructor.name,
value: error.message,
};
const frames = parseStackFrames(stackParser, error);
if (frames.length) {
exception.stacktrace = { frames };
}
return exception;
}
function getMessageForObject(exception) {
if ('name' in exception && typeof exception.name === 'string') {
let message = `'${exception.name}' captured as exception`;
if ('message' in exception && typeof exception.message === 'string') {
message += ` with message '${exception.message}'`;
}
return message;
} else if ('message' in exception && typeof exception.message === 'string') {
return exception.message;
} else {
// This will allow us to group events based on top-level keys
// which is much better than creating new group when any key/value change
return `Object captured as exception with keys: ${extractExceptionKeysForMessage(
exception ,
)}`;
}
}
/**
* Builds and Event from a Exception
*
* TODO(v8): Remove getHub fallback
* @hidden
*/
function eventFromUnknownInput(
// eslint-disable-next-line deprecation/deprecation
getHubOrClient,
stackParser,
exception,
hint,
) {
const client =
typeof getHubOrClient === 'function'
? // eslint-disable-next-line deprecation/deprecation
getHubOrClient().getClient()
: getHubOrClient;
let ex = exception;
const providedMechanism =
hint && hint.data && (hint.data ).mechanism;
const mechanism = providedMechanism || {
handled: true,
type: 'generic',
};
let extras;
if (!isError(exception)) {
if (isPlainObject(exception)) {
const normalizeDepth = client && client.getOptions().normalizeDepth;
extras = { ['__serialized__']: normalizeToSize(exception , normalizeDepth) };
const message = getMessageForObject(exception);
ex = (hint && hint.syntheticException) || new Error(message);
(ex ).message = message;
} else {
// This handles when someone does: `throw "something awesome";`
// We use synthesized Error here so we can extract a (rough) stack trace.
ex = (hint && hint.syntheticException) || new Error(exception );
(ex ).message = exception ;
}
mechanism.synthetic = true;
}
const event = {
exception: {
values: [exceptionFromError(stackParser, ex )],
},
};
if (extras) {
event.extra = extras;
}
addExceptionTypeValue(event, undefined, undefined);
addExceptionMechanism(event, mechanism);
return {
...event,
event_id: hint && hint.event_id,
};
}
/**
* Builds and Event from a Message
* @hidden
*/
function eventFromMessage(
stackParser,
message,
// eslint-disable-next-line deprecation/deprecation
level = 'info',
hint,
attachStacktrace,
) {
const event = {
event_id: hint && hint.event_id,
level,
};
if (attachStacktrace && hint && hint.syntheticException) {
const frames = parseStackFrames(stackParser, hint.syntheticException);
if (frames.length) {
event.exception = {
values: [
{
value: message,
stacktrace: { frames },
},
],
};
}
}
if (isParameterizedString(message)) {
const { __sentry_template_string__, __sentry_template_values__ } = message;
event.logentry = {
message: __sentry_template_string__,
params: __sentry_template_values__,
};
return event;
}
event.message = message;
return event;
}
export { eventFromMessage, eventFromUnknownInput, exceptionFromError, parseStackFrames };
//# sourceMappingURL=eventbuilder.js.map