UNPKG

@sentry/lynx-react

Version:
1 lines 6.08 kB
{"version":3,"file":"developmentSymbolicator.mjs","sources":["../../../src/integrations/developmentSymbolicator.ts"],"sourcesContent":["import { Integration, logger, StackFrame } from '@sentry/core';\nimport { getFetch } from '../utils/fetch';\nimport { getLynx } from '../environment';\n\nconst NAME = 'DevelopmentSymbolicator';\nconst PREFIX = `[${NAME}]`;\nconst SYMBOLICATOR_ENDPOINT = '/__sentry__/symbolicate';\n\nexport function developmentSymbolicatorIntegration(): Integration {\n return {\n name: NAME,\n processEvent: async (event) => {\n if (event.type !== undefined) {\n // Not an error event\n return event;\n }\n\n for (const exception of event.exception?.values ?? []) {\n const newFrames = await symbolicateFrames(exception.stacktrace?.frames);\n if (exception.stacktrace) {\n exception.stacktrace.frames = newFrames;\n }\n }\n\n for (const thread of event.threads?.values ?? []) {\n const newFrames = await symbolicateFrames(thread.stacktrace?.frames);\n if (thread.stacktrace) {\n thread.stacktrace.frames = newFrames;\n }\n }\n\n return event;\n },\n };\n}\n\nasync function symbolicateFrames(frames: StackFrame[] | undefined): Promise<StackFrame[] | undefined> {\n if (!frames) {\n return undefined;\n }\n\n if (frames.length === 0) {\n return frames;\n }\n\n try {\n const fetch = getFetch();\n if (!fetch) {\n logger.warn('No fetch implementation found');\n return frames;\n }\n\n const developmentServerUrl = getDevelopmentServerUrl();\n if (!developmentServerUrl) {\n logger.warn('No development server url found');\n return frames;\n }\n\n logger.debug(`${PREFIX} Symbolicating ${frames.length} frames using ${developmentServerUrl}.`);\n const response = await fetch(`${developmentServerUrl}${SYMBOLICATOR_ENDPOINT}`, {\n method: 'POST',\n body: JSON.stringify({ frames }),\n });\n\n const data = await response.json();\n\n if (!response.ok) {\n logger.error(`${PREFIX} Error symbolicating frames`, data);\n return frames;\n }\n\n return data.frames;\n } catch (error) {\n logger.error('Error symbolicating frames', error);\n return frames;\n }\n}\n\n/**\n * Returns the development server base url, e.g. http://192.168.0.94:3000\n *\n * Only works in development and on mobile platforms\n */\nexport function getDevelopmentServerUrl(): string | undefined {\n const lynx = getLynx();\n if (!lynx) {\n return undefined;\n }\n\n const sourceName = lynx.getApp?.()?._params?.srcName;\n if (typeof sourceName !== 'string') {\n return undefined;\n }\n\n return parseUrlFromSourceName(sourceName);\n}\n\n/**\n * Converts http://192.168.0.94:3000/main.lynx.bundle?fullscreen=true to http://192.168.0.94:3000\n */\nexport function parseUrlFromSourceName(sourceName: string): undefined | string {\n // Match protocol, hostname, and port, stopping before any path or query params\n // Can't use URL because it's noop in Lynx\n const match = sourceName.match(/^(.*?:\\/\\/[^/]+)/);\n return match ? match[1] : sourceName;\n}"],"names":[],"mappings":"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"}