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([]))); })