Skip to content

Commit 577b39d

Browse files
committed
fix(util): remove existence guards on EventTarget listener methods
on/off called addEventListener/removeEventListener via optional chaining, turning a call on a non-EventTarget into a silent no-op that hides subscription bugs. The type constraint already guarantees the methods exist; invalid runtime targets now throw. usePermission test mocks gain the listener methods a real PermissionStatus always has.
1 parent 2b07fd8 commit 577b39d

2 files changed

Lines changed: 4 additions & 3 deletions

File tree

src/usePermission/index.dom.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ describe('usePermission', () => {
99
new Promise((resolve) => {
1010
setTimeout(() => {
1111
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
12-
resolve({state: 'prompt'} as PermissionStatus);
12+
resolve({state: 'prompt', addEventListener() {}, removeEventListener() {}} as PermissionStatus);
1313
}, 1);
1414
}),
1515
);
@@ -79,6 +79,7 @@ describe('usePermission', () => {
7979
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-return
8080
setTimeout(() => listener(), 1);
8181
},
82+
removeEventListener() {},
8283
};
8384

8485
resolve(status);

src/util/misc.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export function on<T extends EventTarget>(
66
...args: Parameters<T['addEventListener']> | [string, EventListenerOrEventListenerObject | CallableFunction, ...any]
77
): void {
88
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
9-
object?.addEventListener?.(...(args as Parameters<HTMLElement['addEventListener']>));
9+
object?.addEventListener(...(args as Parameters<HTMLElement['addEventListener']>));
1010
}
1111

1212
export function off<T extends EventTarget>(
@@ -16,7 +16,7 @@ export function off<T extends EventTarget>(
1616
| [string, EventListenerOrEventListenerObject | CallableFunction, ...any]
1717
): void {
1818
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
19-
object?.removeEventListener?.(...(args as Parameters<HTMLElement['removeEventListener']>));
19+
object?.removeEventListener(...(args as Parameters<HTMLElement['removeEventListener']>));
2020
}
2121

2222
export const hasOwnProperty = <T extends Record<string | number | symbol, any>, K extends string | number | symbol>(

0 commit comments

Comments
 (0)