Skip to content

Commit ce4889d

Browse files
committed
refactor SpanFrame to use a base class and map op to data
1 parent 13092c3 commit ce4889d

File tree

1 file changed

+77
-16
lines changed

1 file changed

+77
-16
lines changed

packages/replay/src/types/replayFrame.ts

Lines changed: 77 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
import type { EventType } from '@sentry-internal/rrweb';
22
import type { Breadcrumb, FetchBreadcrumbData, XhrBreadcrumbData } from '@sentry/types';
33

4-
import type { AllEntryData } from './performance';
5-
6-
interface BaseReplayFrame {
4+
import type {
5+
HistoryData,
6+
LargestContentfulPaintData,
7+
MemoryData,
8+
NavigationData,
9+
NetworkRequestData,
10+
PaintData,
11+
ResourceData,
12+
} from './performance';
13+
import type { ReplayNetworkRequestData } from './replay';
14+
15+
interface BaseBreadcrumbFrame {
716
timestamp: number;
817
/**
918
* For compatibility reasons
@@ -29,32 +38,32 @@ interface ConsoleFrameData {
2938
logger: string;
3039
arguments?: unknown[];
3140
}
32-
interface ConsoleFrame extends BaseReplayFrame {
41+
interface ConsoleFrame extends BaseBreadcrumbFrame {
3342
category: 'console';
3443
level: Breadcrumb['level'];
3544
message: string;
3645
data: ConsoleFrameData;
3746
}
3847

3948
type ClickFrameData = BaseDomFrameData;
40-
interface ClickFrame extends BaseReplayFrame {
49+
interface ClickFrame extends BaseBreadcrumbFrame {
4150
category: 'ui.click';
4251
message: string;
4352
data: ClickFrameData;
4453
}
4554

46-
interface FetchFrame extends BaseReplayFrame {
55+
interface FetchFrame extends BaseBreadcrumbFrame {
4756
category: 'fetch';
4857
type: 'http';
4958
data: FetchBreadcrumbData;
5059
}
5160

52-
interface InputFrame extends BaseReplayFrame {
61+
interface InputFrame extends BaseBreadcrumbFrame {
5362
category: 'ui.input';
5463
message: string;
5564
}
5665

57-
interface XhrFrame extends BaseReplayFrame {
66+
interface XhrFrame extends BaseBreadcrumbFrame {
5867
category: 'xhr';
5968
type: 'http';
6069
data: XhrBreadcrumbData;
@@ -65,7 +74,7 @@ interface MutationFrameData {
6574
count: number;
6675
limit: boolean;
6776
}
68-
interface MutationFrame extends BaseReplayFrame {
77+
interface MutationFrame extends BaseBreadcrumbFrame {
6978
category: 'replay.mutations';
7079
data: MutationFrameData;
7180
}
@@ -77,16 +86,16 @@ interface KeyboardEventFrameData extends BaseDomFrameData {
7786
altKey: boolean;
7887
key: string;
7988
}
80-
interface KeyboardEventFrame extends BaseReplayFrame {
89+
interface KeyboardEventFrame extends BaseBreadcrumbFrame {
8190
category: 'ui.keyDown';
8291
data: KeyboardEventFrameData;
8392
}
8493

85-
interface BlurFrame extends BaseReplayFrame {
94+
interface BlurFrame extends BaseBreadcrumbFrame {
8695
category: 'ui.blur';
8796
}
8897

89-
interface FocusFrame extends BaseReplayFrame {
98+
interface FocusFrame extends BaseBreadcrumbFrame {
9099
category: 'ui.focus';
91100
}
92101

@@ -95,7 +104,7 @@ interface SlowClickFrameData extends ClickFrameData {
95104
timeAfterClickFs: number;
96105
endReason: string;
97106
}
98-
interface SlowClickFrame extends BaseReplayFrame {
107+
interface SlowClickFrame extends BaseBreadcrumbFrame {
99108
category: 'ui.slowClickDetected';
100109
data: SlowClickFrameData;
101110
}
@@ -125,16 +134,68 @@ export type BreadcrumbFrame =
125134
| FocusFrame
126135
| SlowClickFrame
127136
| MutationFrame
128-
| BaseReplayFrame;
137+
| BaseBreadcrumbFrame;
129138

130-
export interface SpanFrame {
139+
interface BaseSpanFrame {
131140
op: string;
132141
description: string;
133142
startTimestamp: number;
134143
endTimestamp: number;
135-
data: AllEntryData;
144+
data?: Record<string, any>;
136145
}
137146

147+
interface HistoryFrame extends BaseSpanFrame {
148+
data: HistoryData;
149+
op: 'navigation.push';
150+
}
151+
152+
interface LargestContentfulPaintFrame extends BaseSpanFrame {
153+
data: LargestContentfulPaintData;
154+
op: 'largest-contentful-paint';
155+
}
156+
157+
interface MemoryFrame extends BaseSpanFrame {
158+
data: MemoryData,
159+
op: 'memory',
160+
}
161+
162+
interface NavigationFrame extends BaseSpanFrame {
163+
data: NavigationData
164+
op: 'navigation.navigate' | 'navigation.reload' | 'navigation.back';
165+
}
166+
167+
interface NetworkRequestFrame extends BaseSpanFrame {
168+
data: NetworkRequestData | ReplayNetworkRequestData;
169+
op: 'resource.fetch'
170+
}
171+
172+
interface PaintFrame extends BaseSpanFrame {
173+
data: PaintData;
174+
op: 'paint';
175+
}
176+
177+
interface ResourceFrame extends BaseSpanFrame {
178+
data: ResourceData;
179+
op:
180+
| 'resource.css'
181+
| 'resource.iframe'
182+
| 'resource.img'
183+
| 'resource.link'
184+
| 'resource.other'
185+
| 'resource.script'
186+
| 'resource.xhr';
187+
}
188+
189+
export type SpanFrame =
190+
| BaseSpanFrame
191+
| HistoryFrame
192+
| LargestContentfulPaintFrame
193+
| MemoryFrame
194+
| NavigationFrame
195+
| NetworkRequestFrame
196+
| PaintFrame
197+
| ResourceFrame;
198+
138199
export type ReplayFrame = BreadcrumbFrame | SpanFrame;
139200

140201
interface RecordingCustomEvent {

0 commit comments

Comments
 (0)