UNPKG

6.82 kBSource Map (JSON)View Raw
1{"version":3,"file":"extraerrordata.js","sources":["../../../src/extraerrordata.ts"],"sourcesContent":["import type { Contexts, Event, EventHint, EventProcessor, ExtendedError, Hub, Integration } from '@sentry/types';\nimport { addNonEnumerableProperty, isError, isPlainObject, logger, normalize } from '@sentry/utils';\n\n/** JSDoc */\ninterface ExtraErrorDataOptions {\n depth?: number;\n}\n\n/** Patch toString calls to return proper name for wrapped functions */\nexport class ExtraErrorData implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'ExtraErrorData';\n\n /**\n * @inheritDoc\n */\n public name: string = ExtraErrorData.id;\n\n /** JSDoc */\n private readonly _options: ExtraErrorDataOptions;\n\n /**\n * @inheritDoc\n */\n public constructor(options?: ExtraErrorDataOptions) {\n this._options = {\n depth: 3,\n ...options,\n };\n }\n\n /**\n * @inheritDoc\n */\n public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n addGlobalEventProcessor((event: Event, hint: EventHint) => {\n const self = getCurrentHub().getIntegration(ExtraErrorData);\n if (!self) {\n return event;\n }\n return self.enhanceEventWithErrorData(event, hint);\n });\n }\n\n /**\n * Attaches extracted information from the Error object to extra field in the Event\n */\n public enhanceEventWithErrorData(event: Event, hint: EventHint = {}): Event {\n if (!hint.originalException || !isError(hint.originalException)) {\n return event;\n }\n const exceptionName = (hint.originalException as ExtendedError).name || hint.originalException.constructor.name;\n\n const errorData = this._extractErrorData(hint.originalException as ExtendedError);\n\n if (errorData) {\n const contexts: Contexts = {\n ...event.contexts,\n };\n\n const normalizedErrorData = normalize(errorData, this._options.depth);\n\n if (isPlainObject(normalizedErrorData)) {\n // We mark the error data as \"already normalized\" here, because we don't want other normalization procedures to\n // potentially truncate the data we just already normalized, with a certain depth setting.\n addNonEnumerableProperty(normalizedErrorData, '__sentry_skip_normalization__', true);\n contexts[exceptionName] = normalizedErrorData;\n }\n\n return {\n ...event,\n contexts,\n };\n }\n\n return event;\n }\n\n /**\n * Extract extra information from the Error object\n */\n private _extractErrorData(error: ExtendedError): Record<string, unknown> | null {\n // We are trying to enhance already existing event, so no harm done if it won't succeed\n try {\n const nativeKeys = [\n 'name',\n 'message',\n 'stack',\n 'line',\n 'column',\n 'fileName',\n 'lineNumber',\n 'columnNumber',\n 'toJSON',\n ];\n\n const extraErrorInfo: Record<string, unknown> = {};\n\n // We want only enumerable properties, thus `getOwnPropertyNames` is redundant here, as we filter keys anyway.\n for (const key of Object.keys(error)) {\n if (nativeKeys.indexOf(key) !== -1) {\n continue;\n }\n const value = error[key];\n extraErrorInfo[key] = isError(value) ? value.toString() : value;\n }\n\n // Check if someone attached `toJSON` method to grab even more properties (eg. axios is doing that)\n if (typeof error.toJSON === 'function') {\n const serializedError = error.toJSON() as Record<string, unknown>;\n\n for (const key of Object.keys(serializedError)) {\n const value = serializedError[key];\n extraErrorInfo[key] = isError(value) ? value.toString() : value;\n }\n }\n\n return extraErrorInfo;\n } catch (oO) {\n __DEBUG_BUILD__ && logger.error('Unable to extract extra data from the Error object:', oO);\n }\n\n return null;\n }\n}\n"],"names":[],"mappings":"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"}
\No newline at end of file