Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 23d9ff4

Browse files
committed
fix: handle deprecated hooks after being registred
1 parent 0d56527 commit 23d9ff4

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

src/hookable.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,18 @@ export class Hookable <
8686

8787
deprecateHook <NameT extends HookNameT> (name: NameT, deprecated: DeprecatedHook<HooksT>) {
8888
this._deprecatedHooks[name] = deprecated
89+
const _hooks = this._hooks[name] || []
90+
this._hooks[name] = undefined
91+
for (const hook of _hooks) {
92+
this.hook(name, hook as any)
93+
}
8994
}
9095

9196
deprecateHooks (deprecatedHooks: Record<HookNameT, DeprecatedHook<HooksT>>) {
9297
Object.assign(this._deprecatedHooks, deprecatedHooks)
98+
for (const name in deprecatedHooks) {
99+
this.deprecateHook(name, deprecatedHooks[name])
100+
}
93101
}
94102

95103
addHooks (configHooks: NestedHooks<HooksT>) {

test/hookable.test.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ describe('core: hookable', () => {
6666
expect(hook._hooks.c).toEqual([expect.any(Function), expect.any(Function), expect.any(Function)])
6767
})
6868

69+
test('should handle deprecation after registering', () => {
70+
const hook = createHooks()
71+
hook.hook('a', () => { })
72+
hook.hook('b', () => { })
73+
hook.deprecateHook('a', 'b')
74+
expect(console.warn).toBeCalledWith('a hook has been deprecated, please use b')
75+
expect(hook._hooks.a).toBeUndefined()
76+
expect(hook._hooks.b).toEqual([expect.any(Function), expect.any(Function)])
77+
})
78+
6979
test('deprecateHooks', () => {
7080
const hook = createHooks()
7181
hook.deprecateHooks({

0 commit comments

Comments
 (0)