diff --git a/src/compat/_internal/tags.ts b/src/compat/_internal/tags.ts index 328ecf3e7..1fc392923 100644 --- a/src/compat/_internal/tags.ts +++ b/src/compat/_internal/tags.ts @@ -24,3 +24,4 @@ export const int32ArrayTag = '[object Int32Array]'; export const bigInt64ArrayTag = '[object BigInt64Array]'; export const float32ArrayTag = '[object Float32Array]'; export const float64ArrayTag = '[object Float64Array]'; +export const abortSignalTag = '[object AbortSignal]'; diff --git a/src/predicate/isEqual.spec.ts b/src/predicate/isEqual.spec.ts index 196292b07..2ec55243f 100644 --- a/src/predicate/isEqual.spec.ts +++ b/src/predicate/isEqual.spec.ts @@ -112,4 +112,18 @@ describe('isEqual', () => { expect(isEqual(buffer3, buffer4)).toBe(false); }); + + it('should compare AbortSignal objects', () => { + const controller1 = new AbortController(); + const controller2 = new AbortController(); + + const signal1 = controller1.signal; + const signal2 = controller2.signal; + + expect(isEqual(signal1, signal2)).toBe(true); + + controller1.abort(); + + expect(isEqual(signal1, signal2)).toBe(false); + }); }); diff --git a/src/predicate/isEqualWith.ts b/src/predicate/isEqualWith.ts index 1d742c17f..2b3cd1082 100644 --- a/src/predicate/isEqualWith.ts +++ b/src/predicate/isEqualWith.ts @@ -2,6 +2,7 @@ import { isPlainObject } from './isPlainObject.ts'; import { getSymbols } from '../compat/_internal/getSymbols.ts'; import { getTag } from '../compat/_internal/getTag.ts'; import { + abortSignalTag, argumentsTag, arrayBufferTag, arrayTag, @@ -188,6 +189,10 @@ function areObjectsEqual( case functionTag: { return a === b; } + + case abortSignalTag: { + return a.aborted === b.aborted; + } } stack = stack ?? new Map();