Skip to content

Commit 856489a

Browse files
committed
refactor types to remove circular import
1 parent 143ef71 commit 856489a

File tree

5 files changed

+184
-165
lines changed

5 files changed

+184
-165
lines changed

packages/replay/src/coreHandlers/handleScope.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ import type { Breadcrumb, Scope } from '@sentry/types';
22
import { normalize } from '@sentry/utils';
33

44
import { CONSOLE_ARG_MAX_SIZE } from '../constants';
5-
import type { ReplayContainer, ReplayFrame } from '../types';
5+
import type { ReplayContainer } from '../types';
66
import { createBreadcrumb } from '../util/createBreadcrumb';
77
import { fixJson } from '../util/truncateJson/fixJson';
88
import { addBreadcrumbEvent } from './util/addBreadcrumbEvent';
9+
import { ReplayFrame } from '../types/replayFrame';
910

1011
let _LAST_BREADCRUMB: null | Breadcrumb = null;
1112

packages/replay/src/types/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export * from './performance';
2+
export * from './replay';
3+
export * from './replayFrame';
4+
export * from './rrweb';
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
import type { customEvent } from '@sentry-internal/rrweb';
2+
import type { Breadcrumb, FetchBreadcrumbData, XhrBreadcrumbData } from '@sentry/types';
3+
4+
export type AllPerformanceEntry = PerformancePaintTiming | PerformanceResourceTiming | PerformanceNavigationTiming;
5+
6+
// PerformancePaintTiming and PerformanceNavigationTiming are only available with TS 4.4 and newer
7+
// Therefore, we're exporting them here to make them available in older TS versions
8+
export type PerformancePaintTiming = PerformanceEntry;
9+
export type PerformanceNavigationTiming = PerformanceEntry &
10+
PerformanceResourceTiming & {
11+
type: string;
12+
transferSize: number;
13+
14+
/**
15+
* A DOMHighResTimeStamp representing the time immediately before the user agent
16+
* sets the document's readyState to "interactive".
17+
*/
18+
domInteractive: number;
19+
20+
/**
21+
* A DOMHighResTimeStamp representing the time immediately before the current
22+
* document's DOMContentLoaded event handler starts.
23+
*/
24+
domContentLoadedEventStart: number;
25+
/**
26+
* A DOMHighResTimeStamp representing the time immediately after the current
27+
* document's DOMContentLoaded event handler completes.
28+
*/
29+
domContentLoadedEventEnd: number;
30+
31+
/**
32+
* A DOMHighResTimeStamp representing the time immediately before the current
33+
* document's load event handler starts.
34+
*/
35+
loadEventStart: number;
36+
37+
/**
38+
* A DOMHighResTimeStamp representing the time immediately after the current
39+
* document's load event handler completes.
40+
*/
41+
loadEventEnd: number;
42+
43+
/**
44+
* A DOMHighResTimeStamp representing the time immediately before the user agent
45+
* sets the document's readyState to "complete".
46+
*/
47+
domComplete: number;
48+
49+
/**
50+
* A number representing the number of redirects since the last non-redirect
51+
* navigation in the current browsing context.
52+
*/
53+
redirectCount: number;
54+
};
55+
export type ExperimentalPerformanceResourceTiming = PerformanceResourceTiming & {
56+
// Experimental, see: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseStatus
57+
// Requires Chrome 109
58+
responseStatus?: number;
59+
};
60+
61+
export type PaintData = undefined;
62+
63+
/**
64+
* See https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming
65+
*
66+
* Note `navigation.push` will not have any data
67+
*/
68+
export type NavigationData = Partial<
69+
Pick<
70+
PerformanceNavigationTiming,
71+
| 'decodedBodySize'
72+
| 'encodedBodySize'
73+
| 'duration'
74+
| 'domInteractive'
75+
| 'domContentLoadedEventEnd'
76+
| 'domContentLoadedEventStart'
77+
| 'loadEventStart'
78+
| 'loadEventEnd'
79+
| 'domComplete'
80+
| 'redirectCount'
81+
>
82+
> & {
83+
/**
84+
* Transfer size of resource
85+
*/
86+
size?: number;
87+
};
88+
89+
export type ResourceData = Pick<PerformanceResourceTiming, 'decodedBodySize' | 'encodedBodySize'> & {
90+
/**
91+
* Transfer size of resource
92+
*/
93+
size: number;
94+
/**
95+
* HTTP status code. Note this is experimental and not available on all browsers.
96+
*/
97+
statusCode?: number;
98+
};
99+
100+
export interface LargestContentfulPaintData {
101+
/**
102+
* Render time (in ms) of the LCP
103+
*/
104+
value: number;
105+
size: number;
106+
/**
107+
* The recording id of the LCP node. -1 if not found
108+
*/
109+
nodeId?: number;
110+
}
111+
112+
/**
113+
* Entries that come from window.performance
114+
*/
115+
export type AllPerformanceEntryData = PaintData | NavigationData | ResourceData | LargestContentfulPaintData;
116+
117+
export interface MemoryData {
118+
memory: {
119+
jsHeapSizeLimit: number;
120+
totalJSHeapSize: number;
121+
usedJSHeapSize: number;
122+
};
123+
}
124+
125+
export interface NetworkRequestData {
126+
method?: string;
127+
statusCode?: number;
128+
requestBodySize?: number;
129+
responseBodySize?: number;
130+
}
131+
132+
export interface HistoryData {
133+
previous: string;
134+
}
135+
136+
export type AllEntryData = AllPerformanceEntryData | MemoryData | NetworkRequestData | HistoryData;
137+
interface BaseReplayFrame {
138+
timestamp: number;
139+
/**
140+
* For compatibility reasons
141+
*/
142+
type: string;
143+
category: string;
144+
data?: Record<string, any>;
145+
message?: string;
146+
}
147+
148+
export interface ReplayPerformanceEntry<T> {
149+
/**
150+
* One of these types https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry/entryType
151+
*/
152+
type: string;
153+
154+
/**
155+
* A more specific description of the performance entry
156+
*/
157+
name: string;
158+
159+
/**
160+
* The start timestamp in seconds
161+
*/
162+
start: number;
163+
164+
/**
165+
* The end timestamp in seconds
166+
*/
167+
end: number;
168+
169+
/**
170+
* Additional unstructured data to be included
171+
*/
172+
data: T;
173+
}
174+

packages/replay/src/types.ts renamed to packages/replay/src/types/replay.ts

Lines changed: 3 additions & 163 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,13 @@ import type {
77
XhrBreadcrumbHint,
88
} from '@sentry/types';
99

10-
import type { eventWithTime, recordOptions } from './types/rrweb';
11-
export * from './types/replayFrame';
10+
import type {AllPerformanceEntry} from './performance';
11+
import type { eventWithTime, recordOptions } from './rrweb';
12+
1213

1314
export type RecordingEvent = eventWithTime;
1415
export type RecordingOptions = recordOptions;
1516

16-
export type AllPerformanceEntry = PerformancePaintTiming | PerformanceResourceTiming | PerformanceNavigationTiming;
17-
1817
export interface SendReplayData {
1918
recordingData: ReplayRecordingData;
2019
replayId: string;
@@ -40,138 +39,6 @@ export interface WorkerRequest {
4039
arg?: string;
4140
}
4241

43-
// PerformancePaintTiming and PerformanceNavigationTiming are only available with TS 4.4 and newer
44-
// Therefore, we're exporting them here to make them available in older TS versions
45-
export type PerformancePaintTiming = PerformanceEntry;
46-
export type PerformanceNavigationTiming = PerformanceEntry &
47-
PerformanceResourceTiming & {
48-
type: string;
49-
transferSize: number;
50-
51-
/**
52-
* A DOMHighResTimeStamp representing the time immediately before the user agent
53-
* sets the document's readyState to "interactive".
54-
*/
55-
domInteractive: number;
56-
57-
/**
58-
* A DOMHighResTimeStamp representing the time immediately before the current
59-
* document's DOMContentLoaded event handler starts.
60-
*/
61-
domContentLoadedEventStart: number;
62-
/**
63-
* A DOMHighResTimeStamp representing the time immediately after the current
64-
* document's DOMContentLoaded event handler completes.
65-
*/
66-
domContentLoadedEventEnd: number;
67-
68-
/**
69-
* A DOMHighResTimeStamp representing the time immediately before the current
70-
* document's load event handler starts.
71-
*/
72-
loadEventStart: number;
73-
74-
/**
75-
* A DOMHighResTimeStamp representing the time immediately after the current
76-
* document's load event handler completes.
77-
*/
78-
loadEventEnd: number;
79-
80-
/**
81-
* A DOMHighResTimeStamp representing the time immediately before the user agent
82-
* sets the document's readyState to "complete".
83-
*/
84-
domComplete: number;
85-
86-
/**
87-
* A number representing the number of redirects since the last non-redirect
88-
* navigation in the current browsing context.
89-
*/
90-
redirectCount: number;
91-
};
92-
export type ExperimentalPerformanceResourceTiming = PerformanceResourceTiming & {
93-
// Experimental, see: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseStatus
94-
// Requires Chrome 109
95-
responseStatus?: number;
96-
};
97-
98-
export type PaintData = undefined;
99-
100-
/**
101-
* See https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming
102-
*
103-
* Note `navigation.push` will not have any data
104-
*/
105-
export type NavigationData = Partial<
106-
Pick<
107-
PerformanceNavigationTiming,
108-
| 'decodedBodySize'
109-
| 'encodedBodySize'
110-
| 'duration'
111-
| 'domInteractive'
112-
| 'domContentLoadedEventEnd'
113-
| 'domContentLoadedEventStart'
114-
| 'loadEventStart'
115-
| 'loadEventEnd'
116-
| 'domComplete'
117-
| 'redirectCount'
118-
>
119-
> & {
120-
/**
121-
* Transfer size of resource
122-
*/
123-
size?: number;
124-
};
125-
126-
export type ResourceData = Pick<PerformanceResourceTiming, 'decodedBodySize' | 'encodedBodySize'> & {
127-
/**
128-
* Transfer size of resource
129-
*/
130-
size: number;
131-
/**
132-
* HTTP status code. Note this is experimental and not available on all browsers.
133-
*/
134-
statusCode?: number;
135-
};
136-
137-
export interface LargestContentfulPaintData {
138-
/**
139-
* Render time (in ms) of the LCP
140-
*/
141-
value: number;
142-
size: number;
143-
/**
144-
* The recording id of the LCP node. -1 if not found
145-
*/
146-
nodeId?: number;
147-
}
148-
149-
/**
150-
* Entries that come from window.performance
151-
*/
152-
export type AllPerformanceEntryData = PaintData | NavigationData | ResourceData | LargestContentfulPaintData;
153-
154-
export interface MemoryData {
155-
memory: {
156-
jsHeapSizeLimit: number;
157-
totalJSHeapSize: number;
158-
usedJSHeapSize: number;
159-
};
160-
}
161-
162-
export interface NetworkRequestData {
163-
method?: string;
164-
statusCode?: number;
165-
requestBodySize?: number;
166-
responseBodySize?: number;
167-
}
168-
169-
export interface HistoryData {
170-
previous: string;
171-
}
172-
173-
export type AllEntryData = AllPerformanceEntryData | MemoryData | NetworkRequestData | HistoryData;
174-
17542
/**
17643
* The response from the worker
17744
*/
@@ -545,33 +412,6 @@ export interface ReplayContainer {
545412
setInitialState(): void;
546413
}
547414

548-
export interface ReplayPerformanceEntry<T> {
549-
/**
550-
* One of these types https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry/entryType
551-
*/
552-
type: string;
553-
554-
/**
555-
* A more specific description of the performance entry
556-
*/
557-
name: string;
558-
559-
/**
560-
* The start timestamp in seconds
561-
*/
562-
start: number;
563-
564-
/**
565-
* The end timestamp in seconds
566-
*/
567-
end: number;
568-
569-
/**
570-
* Additional unstructured data to be included
571-
*/
572-
data: T;
573-
}
574-
575415
type RequestBody = null | Blob | BufferSource | FormData | URLSearchParams | string;
576416

577417
export type XhrHint = XhrBreadcrumbHint & {

packages/replay/src/types/replayFrame.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { customEvent } from '@sentry-internal/rrweb';
22
import type { Breadcrumb, FetchBreadcrumbData, XhrBreadcrumbData } from '@sentry/types';
33

4-
import type { AllEntryData } from '../types';
4+
import {AllEntryData} from './performance';
55

66
interface BaseReplayFrame {
77
timestamp: number;

0 commit comments

Comments
 (0)