Skip to content

Commit 3637c66

Browse files
committed
wip
1 parent d6ef98c commit 3637c66

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed

packages/signals/signals-runtime/src/__tests__/signals-runtime.test.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,41 @@ describe(WebSignalsRuntime, () => {
8686
const result = signalsRuntime.filter(signal1, 'interaction')
8787
expect(result).toEqual([signal2, signal3])
8888
})
89+
90+
it('should handle referential comparison', () => {
91+
signalsRuntime.signalBuffer = [signal1, signal2]
92+
const result = signalsRuntime.filter(signal1, 'interaction')
93+
expect(result).toEqual([signal2])
94+
})
95+
96+
it('should handle comparison by id', () => {
97+
const young = { ...signal1, id: undefined }
98+
const middle = { ...signal1, id: 'unique-id3' }
99+
const old = { ...signal1, id: undefined }
100+
101+
signalsRuntime.signalBuffer = [young, middle, old]
102+
const result = signalsRuntime.filter(middle, 'instrumentation')
103+
expect(result).toEqual([old])
104+
})
105+
106+
it('should handle comparison by index', () => {
107+
const young = { ...signal1, index: 1, id: undefined }
108+
const middle = { ...signal1, index: 2, id: undefined }
109+
const old = { ...signal1, index: 3, id: undefined }
110+
111+
signalsRuntime.signalBuffer = [young, middle, old]
112+
const result = signalsRuntime.filter(middle, 'instrumentation')
113+
expect(result).toEqual([old])
114+
})
115+
116+
it('should handle deep comparison', () => {
117+
const signalCopy1 = { ...signal1 }
118+
const signalCopy2 = { ...signal1, foo: 123 }
119+
const signalCopy3 = { ...signal1, foo: 123 }
120+
signalsRuntime.signalBuffer = [signalCopy1, signalCopy2, signalCopy3]
121+
const result = signalsRuntime.filter(signalCopy1, 'instrumentation')
122+
expect(result[0]).toBe(signalCopy2)
123+
})
89124
})
90125

91126
describe('signalBuffer property', () => {

packages/signals/signals-runtime/src/shared/signals-runtime.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,20 @@ export abstract class SignalsRuntime<Signal extends BaseSignal = BaseSignal> {
4646
// or else, use JSON.stringify to do a deep comparison
4747
if (el === fromSignal) {
4848
return true
49-
} else if ('id' in el && 'id' in fromSignal) {
49+
} else if (
50+
// if both have id, compare id
51+
'id' in el &&
52+
'id' in fromSignal &&
53+
el.id !== undefined &&
54+
fromSignal.id !== undefined
55+
) {
5056
return el.id === fromSignal.id
51-
} else if ('index' in el && 'index' in fromSignal) {
57+
} else if (
58+
'index' in el &&
59+
'index' in fromSignal &&
60+
el.index !== undefined &&
61+
fromSignal.index !== undefined
62+
) {
5263
return el.index === fromSignal.index
5364
} else {
5465
return JSON.stringify(el) === JSON.stringify(fromSignal)

0 commit comments

Comments
 (0)