1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import {BreadcrumbType, Crumb} from 'sentry/types/breadcrumbs';
- /**
- * Generate breadcrumb descriptions based on type
- */
- export function getDescription(crumb: Crumb, startTimestampMs?: number) {
- if (crumb.data && 'action' in crumb.data) {
- switch (crumb.data.action) {
- case 'largest-contentful-paint':
- if (crumb.timestamp && startTimestampMs) {
- return `${new Date(crumb.timestamp).getTime() - startTimestampMs}ms`;
- }
- break;
- default:
- break;
- }
- }
- switch (crumb.type) {
- case BreadcrumbType.NAVIGATION:
- return `${crumb.data?.to ?? ''}`;
- case BreadcrumbType.DEFAULT:
- return JSON.stringify(crumb.data);
- default:
- return crumb.message || '';
- }
- }
- /**
- * Get title of breadcrumb
- */
- export function getTitle(crumb: Crumb) {
- // Supports replay specific breadcrumbs
- if (crumb.data && 'label' in crumb.data && crumb.data.label) {
- return crumb.data.label;
- }
- const [type, action] = crumb.category?.split('.') || [];
- if (type === 'ui') {
- return `User ${action || ''}`;
- }
- return `${type} ${action || ''}`;
- }
- /**
- * Generate breadcrumb title + descriptions
- */
- export function getDetails(crumb: Crumb, startTimestampMs?: number) {
- return {title: getTitle(crumb), description: getDescription(crumb, startTimestampMs)};
- }
|