Skip to content

Commit 690f74f

Browse files
authored
ref(replay): TS fixes for replay (#6286)
1 parent 9193b71 commit 690f74f

23 files changed

+108
-73
lines changed

packages/core/test/mocks/transport.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { Transport } from '@sentry/types';
12
import { SyncPromise } from '@sentry/utils';
23
import { TextEncoder } from 'util';
34

@@ -7,7 +8,12 @@ async function sleep(delay: number): Promise<void> {
78
return new SyncPromise(resolve => setTimeout(resolve, delay));
89
}
910

10-
export function makeFakeTransport(delay: number = 2000) {
11+
export function makeFakeTransport(delay: number = 2000): {
12+
makeTransport: () => Transport;
13+
getSendCalled: () => number;
14+
getSentCount: () => number;
15+
delay: number;
16+
} {
1117
let sendCalled = 0;
1218
let sentCount = 0;
1319
const makeTransport = () =>

packages/replay/jest.setup.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ type SentReplayExpected = {
3535
};
3636
};
3737
replayEventHeader?: { type: 'replay_event' };
38-
replayEventPayload?: Record<string, any>;
38+
replayEventPayload?: Record<string, unknown>;
3939
recordingHeader?: { type: 'replay_recording'; length: number };
40-
recordingPayloadHeader?: Record<string, any>;
40+
recordingPayloadHeader?: Record<string, unknown>;
4141
events?: string | Uint8Array;
4242
};
4343

@@ -101,9 +101,13 @@ const toHaveSentReplay = function (
101101
}
102102

103103
const results = expected
104-
? Object.entries(actualObj)
105-
.map(([key, val]: [keyof SentReplayExpected, any]) => {
106-
return [!expectedObj?.[key] || this.equals(expectedObj[key], val), key, expectedObj?.[key], val];
104+
? Object.keys(expectedObj)
105+
.map(key => {
106+
const actualVal = actualObj[key as keyof SentReplayExpected];
107+
const expectedVal = expectedObj[key as keyof SentReplayExpected];
108+
const matches = !expectedVal || this.equals(actualVal, expectedVal);
109+
110+
return [matches, key, expectedVal, actualVal];
107111
})
108112
.filter(([passed]) => !passed)
109113
: [];

packages/replay/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"homepage": "https://github.com/getsentry/sentry-replay#readme",
4646
"devDependencies": {
4747
"@babel/core": "^7.17.5",
48-
"@sentry/browser": "7.21.0",
48+
"@sentry/browser": "7.21.1",
4949
"@types/lodash.debounce": "^4.0.7",
5050
"@types/lodash.throttle": "^4.1.7",
5151
"@types/pako": "^2.0.0",
@@ -54,9 +54,9 @@
5454
"tslib": "^1.9.3"
5555
},
5656
"dependencies": {
57-
"@sentry/core": "7.21.0",
58-
"@sentry/types": "7.21.0",
59-
"@sentry/utils": "7.21.0",
57+
"@sentry/core": "7.21.1",
58+
"@sentry/types": "7.21.1",
59+
"@sentry/utils": "7.21.1",
6060
"lodash.debounce": "^4.0.8",
6161
"rrweb": "^1.1.3"
6262
},
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Breadcrumb, Scope } from '@sentry/types';
2+
3+
import { InstrumentationTypeBreadcrumb } from '../types';
4+
import { DomHandlerData, handleDom } from './handleDom';
5+
import { handleScope } from './handleScope';
6+
7+
export function breadcrumbHandler(type: InstrumentationTypeBreadcrumb, handlerData: unknown): Breadcrumb | null {
8+
if (type === 'scope') {
9+
return handleScope(handlerData as Scope);
10+
}
11+
12+
return handleDom(handlerData as DomHandlerData);
13+
}

packages/replay/src/coreHandlers/getBreadcrumbHandler.ts

Lines changed: 0 additions & 13 deletions
This file was deleted.

packages/replay/src/coreHandlers/getSpanHandler.ts

Lines changed: 0 additions & 18 deletions
This file was deleted.

packages/replay/src/coreHandlers/handleDom.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,19 @@ import { record } from 'rrweb';
44

55
import { createBreadcrumb } from '../util/createBreadcrumb';
66

7-
export function handleDom(handlerData: any): Breadcrumb | null {
7+
export interface DomHandlerData {
8+
name: string;
9+
event: Node | { target: Node };
10+
}
11+
12+
export function handleDom(handlerData: DomHandlerData): Breadcrumb | null {
813
// Taken from https://github.com/getsentry/sentry-javascript/blob/master/packages/browser/src/integrations/breadcrumbs.ts#L112
914
let target;
1015
let targetNode;
1116

1217
// Accessing event.target can throw (see getsentry/raven-js#838, #768)
1318
try {
14-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
15-
targetNode = (handlerData.event.target as Node) || (handlerData.event as unknown as Node);
19+
targetNode = getTargetNode(handlerData);
1620
target = htmlTreeAsString(targetNode);
1721
} catch (e) {
1822
target = '<unknown>';
@@ -23,12 +27,24 @@ export function handleDom(handlerData: any): Breadcrumb | null {
2327
}
2428

2529
return createBreadcrumb({
26-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
2730
category: `ui.${handlerData.name}`,
2831
message: target,
2932
data: {
3033
// Not sure why this errors, Node should be correct (Argument of type 'Node' is not assignable to parameter of type 'INode')
34+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
3135
...(targetNode ? { nodeId: record.mirror.getId(targetNode as any) } : {}),
3236
},
3337
});
3438
}
39+
40+
function getTargetNode(handlerData: DomHandlerData): Node {
41+
if (isEventWithTarget(handlerData.event)) {
42+
return handlerData.event.target;
43+
}
44+
45+
return handlerData.event;
46+
}
47+
48+
function isEventWithTarget(event: unknown): event is { target: Node } {
49+
return !!(event as { target?: Node }).target;
50+
}

packages/replay/src/coreHandlers/handleFetch.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ReplayPerformanceEntry } from '../createPerformanceEntry';
22
import { isIngestHost } from '../util/isIngestHost';
33

4-
interface FetchHandlerData {
4+
export interface FetchHandlerData {
55
args: Parameters<typeof fetch>;
66
fetchData: {
77
method: string;

packages/replay/src/coreHandlers/handleHistory.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ReplayPerformanceEntry } from '../createPerformanceEntry';
22

3-
interface HistoryHandlerData {
3+
export interface HistoryHandlerData {
44
from: string;
55
to: string;
66
}

packages/replay/src/coreHandlers/handleXhr.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ interface SentryWrappedXMLHttpRequest extends XMLHttpRequest {
1919
__sentry_own_request__?: boolean;
2020
}
2121

22-
interface XhrHandlerData {
22+
export interface XhrHandlerData {
2323
args: [string, string];
2424
xhr: SentryWrappedXMLHttpRequest;
2525
startTimestamp: number;

0 commit comments

Comments
 (0)