Skip to content

Commit dfeb6ad

Browse files
committed
Use old library for comparing Sets and Maps
1 parent 163db80 commit dfeb6ad

File tree

5 files changed

+39
-35
lines changed

5 files changed

+39
-35
lines changed

src/DailyProvider.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { DailyMeeting } from './DailyMeeting';
1515
import { DailyParticipants } from './DailyParticipants';
1616
import { DailyRecordings } from './DailyRecordings';
1717
import { DailyRoom } from './DailyRoom';
18-
import { deepEqual } from './lib/deepEqual';
18+
import { customDeepEqual } from './lib/customDeepEqual';
1919

2020
type BaseProps =
2121
| DailyFactoryOptions
@@ -127,7 +127,7 @@ export const DailyProvider: React.FC<React.PropsWithChildren<Props>> = ({
127127
/**
128128
* Props have changed. Destroy current instance, so a new one can be created.
129129
*/
130-
if (!deepEqual(lastUsedProps.current, props)) {
130+
if (!customDeepEqual(lastUsedProps.current, props)) {
131131
destroyCallObject(callObject);
132132
}
133133
/**

src/hooks/useParticipantProperty.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
participantState,
1111
} from '../DailyParticipants';
1212
import { RECOIL_PREFIX } from '../lib/constants';
13-
import { deepEqual } from '../lib/deepEqual';
13+
import { customDeepEqual } from '../lib/customDeepEqual';
1414
import type { NumericKeys } from '../types/NumericKeys';
1515
import type { Paths } from '../types/paths';
1616
import type { PathValue } from '../types/pathValue';
@@ -78,7 +78,7 @@ export const useParticipantProperty = <
7878
*/
7979
const maybeUpdateProperties = useCallback((properties: any[]) => {
8080
setProperties((prevProperties) => {
81-
if (deepEqual(properties, prevProperties)) return prevProperties;
81+
if (customDeepEqual(properties, prevProperties)) return prevProperties;
8282
return properties;
8383
});
8484
}, []);

src/hooks/useScreenShare.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
ExtendedDailyParticipant,
1010
participantState,
1111
} from '../DailyParticipants';
12-
import { deepEqual } from '../lib/deepEqual';
12+
import { customDeepEqual } from '../lib/customDeepEqual';
1313
import { useDaily } from './useDaily';
1414
import { useDailyEvent } from './useDailyEvent';
1515
import { useParticipantIds } from './useParticipantIds';
@@ -75,7 +75,7 @@ export const useScreenShare = ({
7575
*/
7676
const maybeUpdateScreens = useCallback((screens: ScreenShare[]) => {
7777
setScreens((prevScreens) => {
78-
if (deepEqual(screens, prevScreens)) return prevScreens;
78+
if (customDeepEqual(screens, prevScreens)) return prevScreens;
7979
return screens;
8080
});
8181
}, []);

src/lib/deepEqual.ts renamed to src/lib/customDeepEqual.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
import deepEqual from 'fast-deep-equal/es6';
12
/**
23
* Compares two variables for deep equality.
34
* Gracefully handles equality checks on MediaStreamTracks by comparing their ids.
45
*/
5-
export function deepEqual(a: any, b: any): boolean {
6+
export function customDeepEqual(a: any, b: any): boolean {
67
if (a === b) return true;
78

89
// Handle special case for MediaStream
@@ -11,7 +12,7 @@ export function deepEqual(a: any, b: any): boolean {
1112
a.id === b.id &&
1213
a.active === b.active &&
1314
a.getTracks().length === b.getTracks().length &&
14-
a.getTracks().every((track, idx) => deepEqual(track, b.getTracks()[idx]))
15+
a.getTracks().every((track, idx) => customDeepEqual(track, b.getTracks()[idx]))
1516
);
1617
}
1718

@@ -30,14 +31,14 @@ export function deepEqual(a: any, b: any): boolean {
3031
return a.source === b.source && a.flags === b.flags;
3132
}
3233

33-
// Handle special case for Set
34+
// Handle special case for Set - use fast-deep-equal for this
3435
if (a instanceof Set && b instanceof Set) {
35-
return deepEqual([...a], [...b]);
36+
return deepEqual(a, b);
3637
}
3738

38-
// Handle special case for Map
39+
// Handle special case for Map - use fast-deep-equal for this
3940
if (a instanceof Map && b instanceof Map) {
40-
return deepEqual(Object.fromEntries(a), Object.fromEntries(b));
41+
return deepEqual(a, b);
4142
}
4243

4344
// If a or b are not objects or null, they can't be deeply equal
@@ -66,7 +67,7 @@ export function deepEqual(a: any, b: any): boolean {
6667
(key in a && !(key in b)) ||
6768
(key in b && !(key in a)) ||
6869
// Both keys exist in both object -> run nested equality check
69-
!deepEqual(a[key], b[key])
70+
!customDeepEqual(a[key], b[key])
7071
)
7172
return false;
7273
}

test/lib/deepEqual.test.ts

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import { FakeMediaStreamTrack } from 'fake-mediastreamtrack';
44

5-
import { deepEqual } from '../../src/lib/deepEqual';
5+
import { customDeepEqual } from '../../src/lib/customDeepEqual';
66

77
describe('deepEqual', () => {
88
describe('Primitives and simple types', () => {
@@ -15,7 +15,7 @@ describe('deepEqual', () => {
1515
${undefined} | ${undefined} | ${true}
1616
${42} | ${'42'} | ${false}
1717
`('returns $expected for a: $a and b: $b', ({ a, b, expected }) => {
18-
expect(deepEqual(a, b)).toBe(expected);
18+
expect(customDeepEqual(a, b)).toBe(expected);
1919
});
2020
});
2121

@@ -28,7 +28,7 @@ describe('deepEqual', () => {
2828
${[1, [2, 3]]} | ${[1, 2, 3]} | ${false}
2929
${[]} | ${[]} | ${true}
3030
`('returns $expected for a: $a and b: $b', ({ a, b, expected }) => {
31-
expect(deepEqual(a, b)).toBe(expected);
31+
expect(customDeepEqual(a, b)).toBe(expected);
3232
});
3333
});
3434

@@ -41,11 +41,12 @@ describe('deepEqual', () => {
4141
${{ key1: 'value' }} | ${{ key2: 'value' }} | ${false}
4242
${{}} | ${{}} | ${true}
4343
`('returns $expected for a: $a and b: $b', ({ a, b, expected }) => {
44-
expect(deepEqual(a, b)).toBe(expected);
44+
expect(customDeepEqual(a, b)).toBe(expected);
4545
});
4646
});
4747

4848
describe('MediaStream', () => {
49+
// @ts-ignore
4950
const streamA = new MediaStream();
5051
afterEach(() => {
5152
streamA.getTracks().forEach((track) => {
@@ -54,23 +55,24 @@ describe('deepEqual', () => {
5455
});
5556
});
5657
it('returns true when streams are equal', () => {
57-
expect(deepEqual(streamA, streamA)).toBe(true);
58+
expect(customDeepEqual(streamA, streamA)).toBe(true);
5859
});
5960
it('returns true when equal stream has the same tracks', () => {
6061
const track = new FakeMediaStreamTrack({ kind: 'audio' });
6162
streamA.addTrack(track);
62-
expect(deepEqual(streamA, streamA)).toBe(true);
63+
expect(customDeepEqual(streamA, streamA)).toBe(true);
6364
});
6465
it('returns false when streams are not equal', () => {
66+
// @ts-ignore
6567
const streamB = new MediaStream();
66-
expect(deepEqual(streamA, streamB)).toBe(false);
68+
expect(customDeepEqual(streamA, streamB)).toBe(false);
6769
});
6870
it('returns false when amount of tracks differs', () => {
6971
const track = new FakeMediaStreamTrack({ kind: 'audio' });
7072
// @ts-ignore
7173
const streamC = new MediaStream([], streamA.id);
7274
streamA.addTrack(track);
73-
expect(deepEqual(streamA, streamC)).toBe(false);
75+
expect(customDeepEqual(streamA, streamC)).toBe(false);
7476
});
7577
it('returns false when track id differs', () => {
7678
const track1 = new FakeMediaStreamTrack({ kind: 'audio' });
@@ -80,7 +82,7 @@ describe('deepEqual', () => {
8082
const streamC = new MediaStream([], streamA.id);
8183
streamA.addTrack(track1);
8284
streamC.addTrack(track2);
83-
expect(deepEqual(streamA, streamC)).toBe(false);
85+
expect(customDeepEqual(streamA, streamC)).toBe(false);
8486
});
8587
});
8688

@@ -92,7 +94,7 @@ describe('deepEqual', () => {
9294
${new FakeMediaStreamTrack({ id: '1', kind: 'audio', readyState: 'live' })} | ${new FakeMediaStreamTrack({ id: '1', kind: 'video', readyState: 'live' })} | ${false}
9395
${new FakeMediaStreamTrack({ id: '1', kind: 'audio', readyState: 'live' })} | ${new FakeMediaStreamTrack({ id: '1', kind: 'audio', readyState: 'ended' })} | ${false}
9496
`('returns $expected for a: $a and b: $b', ({ a, b, expected }) => {
95-
expect(deepEqual(a, b)).toBe(expected);
97+
expect(customDeepEqual(a, b)).toBe(expected);
9698
});
9799
});
98100

@@ -103,7 +105,7 @@ describe('deepEqual', () => {
103105
${new Date('2023-01-01')} | ${new Date('2022-01-01')} | ${false}
104106
${new Date('2023-01-01')} | ${'2023-01-01'} | ${false}
105107
`('returns $expected for a: $a and b: $b', ({ a, b, expected }) => {
106-
expect(deepEqual(a, b)).toBe(expected);
108+
expect(customDeepEqual(a, b)).toBe(expected);
107109
});
108110
});
109111

@@ -114,19 +116,20 @@ describe('deepEqual', () => {
114116
${/test/g} | ${/test/gi} | ${false}
115117
${/test/g} | ${'/test/g'} | ${false}
116118
`('returns $expected for a: $a and b: $b', ({ a, b, expected }) => {
117-
expect(deepEqual(a, b)).toBe(expected);
119+
expect(customDeepEqual(a, b)).toBe(expected);
118120
});
119121
});
120122

121-
describe('Map', () => {
123+
describe('Set', () => {
122124
it.each`
123-
a | b | expected
124-
${new Set()} | ${new Set()} | ${true}
125-
${new Set(['a'])} | ${new Set(['b'])} | ${false}
126-
${new Set(['a'])} | ${new Set(['a', 'b'])} | ${false}
127-
${new Set(['a'])} | ${['a']} | ${false}
125+
a | b | expected
126+
${new Set()} | ${new Set()} | ${true}
127+
${new Set(['a'])} | ${new Set(['b'])} | ${false}
128+
${new Set(['a'])} | ${new Set(['a', 'b'])} | ${false}
129+
${new Set(['a'])} | ${['a']} | ${false}
130+
${new Set(['audio', 'video', 'screenVideo', 'screenAudio'])} | ${new Set(['audio', 'video', 'screenVideo', 'screenAudio'])} | ${true}
128131
`('returns $expected for a: $a and b: $b', ({ a, b, expected }) => {
129-
expect(deepEqual(a, b)).toBe(expected);
132+
expect(customDeepEqual(a, b)).toBe(expected);
130133
});
131134
});
132135

@@ -137,7 +140,7 @@ describe('deepEqual', () => {
137140
${new Map([['a', 1]])} | ${new Map([['b', 1]])} | ${false}
138141
${new Map([['a', 1]])} | ${new Map([['a', 1], ['b', 1]])} | ${false}
139142
`('returns $expected for a: $a and b: $b', ({ a, b, expected }) => {
140-
expect(deepEqual(a, b)).toBe(expected);
143+
expect(customDeepEqual(a, b)).toBe(expected);
141144
});
142145
});
143146

@@ -149,7 +152,7 @@ describe('deepEqual', () => {
149152
${funcA} | ${funcA} | ${true}
150153
${funcA} | ${funcB} | ${false}
151154
`('returns $expected for a: $a and b: $b', ({ a, b, expected }) => {
152-
expect(deepEqual(a, b)).toBe(expected);
155+
expect(customDeepEqual(a, b)).toBe(expected);
153156
});
154157
});
155158

@@ -179,7 +182,7 @@ describe('deepEqual', () => {
179182
${complexObjA} | ${complexObjB} | ${true}
180183
${complexObjA} | ${complexObjC} | ${false}
181184
`('returns $expected for a: $a and b: $b', ({ a, b, expected }) => {
182-
expect(deepEqual(a, b)).toBe(expected);
185+
expect(customDeepEqual(a, b)).toBe(expected);
183186
});
184187
});
185188
});

0 commit comments

Comments
 (0)