UNPKG

5.9 kBSource Map (JSON)View Raw
1{"version":3,"file":"reportingobserver.js","sources":["../../../src/reportingobserver.ts"],"sourcesContent":["import type { EventProcessor, Hub, Integration } from '@sentry/types';\nimport { GLOBAL_OBJ, supportsReportingObserver } from '@sentry/utils';\n\nconst WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\ninterface Report {\n [key: string]: unknown;\n type: ReportTypes;\n url: string;\n body?: ReportBody;\n}\n\ntype ReportTypes = 'crash' | 'deprecation' | 'intervention';\n\ntype ReportBody = CrashReportBody | DeprecationReportBody | InterventionReportBody;\n\ninterface CrashReportBody {\n [key: string]: unknown;\n crashId: string;\n reason?: string;\n}\n\ninterface DeprecationReportBody {\n [key: string]: unknown;\n id: string;\n anticipatedRemoval?: Date;\n message: string;\n sourceFile?: string;\n lineNumber?: number;\n columnNumber?: number;\n}\n\ninterface InterventionReportBody {\n [key: string]: unknown;\n id: string;\n message: string;\n sourceFile?: string;\n lineNumber?: number;\n columnNumber?: number;\n}\n\n/** Reporting API integration - https://w3c.github.io/reporting/ */\nexport class ReportingObserver implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'ReportingObserver';\n\n /**\n * @inheritDoc\n */\n public readonly name: string = ReportingObserver.id;\n\n /**\n * Returns current hub.\n */\n private _getCurrentHub?: () => Hub;\n\n /**\n * @inheritDoc\n */\n public constructor(\n private readonly _options: {\n types?: ReportTypes[];\n } = {\n types: ['crash', 'deprecation', 'intervention'],\n },\n ) {}\n\n /**\n * @inheritDoc\n */\n public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n if (!supportsReportingObserver()) {\n return;\n }\n\n this._getCurrentHub = getCurrentHub;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n const observer = new (WINDOW as any).ReportingObserver(this.handler.bind(this), {\n buffered: true,\n types: this._options.types,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n observer.observe();\n }\n\n /**\n * @inheritDoc\n */\n public handler(reports: Report[]): void {\n const hub = this._getCurrentHub && this._getCurrentHub();\n if (!hub || !hub.getIntegration(ReportingObserver)) {\n return;\n }\n for (const report of reports) {\n hub.withScope(scope => {\n scope.setExtra('url', report.url);\n\n const label = `ReportingObserver [${report.type}]`;\n let details = 'No details available';\n\n if (report.body) {\n // Object.keys doesn't work on ReportBody, as all properties are inheirted\n const plainBody: {\n [key: string]: unknown;\n } = {};\n\n // eslint-disable-next-line guard-for-in\n for (const prop in report.body) {\n plainBody[prop] = report.body[prop];\n }\n\n scope.setExtra('body', plainBody);\n\n if (report.type === 'crash') {\n const body = report.body as CrashReportBody;\n // A fancy way to create a message out of crashId OR reason OR both OR fallback\n details = [body.crashId || '', body.reason || ''].join(' ').trim() || details;\n } else {\n const body = report.body as DeprecationReportBody | InterventionReportBody;\n details = body.message || details;\n }\n }\n\n hub.captureMessage(`${label}: ${details}`);\n });\n }\n }\n}\n"],"names":[],"mappings":"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"}
\No newline at end of file