From 38b44c3ba1bd7753cdb81492b517e4fd3a6af50e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Berthommier?= Date: Sun, 11 Apr 2021 17:40:34 +0200 Subject: [PATCH] fix: allow to hooks a function without middleware (#77) --- packages/hooks/src/index.ts | 10 ++++++---- packages/hooks/test/function.test.ts | 7 +++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/hooks/src/index.ts b/packages/hooks/src/index.ts index dd1170b..a12bf5a 100644 --- a/packages/hooks/src/index.ts +++ b/packages/hooks/src/index.ts @@ -25,6 +25,7 @@ export type MiddlewareOptions = { /** * Initializes a hook settings object with the given middleware. * @param mw The list of middleware + * @param options Middleware options (params, default, props) */ export function middleware (mw?: Middleware[], options?: MiddlewareOptions) { const manager = new HookManager().middleware(mw); @@ -55,7 +56,8 @@ export function middleware (mw?: Middleware[], options?: MiddlewareOptions) { * (`middleware([]).params()` etc.) */ export function hooks ( - fn: F, manager: HookManager + fn: F&(() => void), + manager?: HookManager ): WrappedFunction; /** @@ -68,17 +70,17 @@ export function hooks (obj: O|(new (...args: any[]) => O), hookMap: HookMap ( - _manager?: HookOptions + manager?: HookOptions ): any; // Fallthrough to actual implementation export function hooks (...args: any[]) { const [ target, _hooks ] = args; - if (typeof target === 'function' && (_hooks instanceof HookManager || Array.isArray(_hooks))) { + if (typeof target === 'function' && (_hooks instanceof HookManager || Array.isArray(_hooks) || args.length === 1)) { return functionHooks(target, _hooks); } diff --git a/packages/hooks/test/function.test.ts b/packages/hooks/test/function.test.ts index 655284e..f6f5c4b 100644 --- a/packages/hooks/test/function.test.ts +++ b/packages/hooks/test/function.test.ts @@ -21,6 +21,13 @@ describe('functionHooks', () => { assert.notStrictEqual(getManager(fn), null); }); + it('returns a new function, without hooks', () => { + const fn = hooks(hello); + + assert.notDeepEqual(fn, hello); + assert.ok(getManager(fn) !== null); + }); + it('throws an error with non function', () => { assert.throws(() => functionHooks({}, middleware([]))); })