mirror of
https://github.com/diligencia/semantic-branch-version.git
synced 2024-11-27 13:33:51 +08:00
97 lines
2.1 KiB
TypeScript
97 lines
2.1 KiB
TypeScript
|
type HookMethod<O, R> = (options: O) => R | Promise<R>
|
||
|
|
||
|
type BeforeHook<O> = (options: O) => void
|
||
|
type ErrorHook<O, E> = (error: E, options: O) => void
|
||
|
type AfterHook<O, R> = (result: R, options: O) => void
|
||
|
type WrapHook<O, R> = (
|
||
|
hookMethod: HookMethod<O, R>,
|
||
|
options: O
|
||
|
) => R | Promise<R>
|
||
|
|
||
|
type AnyHook<O, R, E> =
|
||
|
| BeforeHook<O>
|
||
|
| ErrorHook<O, E>
|
||
|
| AfterHook<O, R>
|
||
|
| WrapHook<O, R>
|
||
|
|
||
|
export interface HookCollection {
|
||
|
/**
|
||
|
* Invoke before and after hooks
|
||
|
*/
|
||
|
(
|
||
|
name: string | string[],
|
||
|
hookMethod: HookMethod<any, any>,
|
||
|
options?: any
|
||
|
): Promise<any>
|
||
|
/**
|
||
|
* Add `before` hook for given `name`
|
||
|
*/
|
||
|
before(name: string, beforeHook: BeforeHook<any>): void
|
||
|
/**
|
||
|
* Add `error` hook for given `name`
|
||
|
*/
|
||
|
error(name: string, errorHook: ErrorHook<any, any>): void
|
||
|
/**
|
||
|
* Add `after` hook for given `name`
|
||
|
*/
|
||
|
after(name: string, afterHook: AfterHook<any, any>): void
|
||
|
/**
|
||
|
* Add `wrap` hook for given `name`
|
||
|
*/
|
||
|
wrap(name: string, wrapHook: WrapHook<any, any>): void
|
||
|
/**
|
||
|
* Remove added hook for given `name`
|
||
|
*/
|
||
|
remove(name: string, hook: AnyHook<any, any, any>): void
|
||
|
}
|
||
|
|
||
|
export interface HookSingular<O, R, E> {
|
||
|
/**
|
||
|
* Invoke before and after hooks
|
||
|
*/
|
||
|
(hookMethod: HookMethod<O, R>, options?: O): Promise<R>
|
||
|
/**
|
||
|
* Add `before` hook
|
||
|
*/
|
||
|
before(beforeHook: BeforeHook<O>): void
|
||
|
/**
|
||
|
* Add `error` hook
|
||
|
*/
|
||
|
error(errorHook: ErrorHook<O, E>): void
|
||
|
/**
|
||
|
* Add `after` hook
|
||
|
*/
|
||
|
after(afterHook: AfterHook<O, R>): void
|
||
|
/**
|
||
|
* Add `wrap` hook
|
||
|
*/
|
||
|
wrap(wrapHook: WrapHook<O, R>): void
|
||
|
/**
|
||
|
* Remove added hook
|
||
|
*/
|
||
|
remove(hook: AnyHook<O, R, E>): void
|
||
|
}
|
||
|
|
||
|
type Collection = new () => HookCollection
|
||
|
type Singular = new <O = any, R = any, E = any>() => HookSingular<O, R, E>
|
||
|
|
||
|
interface Hook {
|
||
|
new (): HookCollection
|
||
|
|
||
|
/**
|
||
|
* Creates a collection of hooks
|
||
|
*/
|
||
|
Collection: Collection
|
||
|
|
||
|
/**
|
||
|
* Creates a nameless hook that supports strict typings
|
||
|
*/
|
||
|
Singular: Singular
|
||
|
}
|
||
|
|
||
|
export const Hook: Hook
|
||
|
export const Collection: Collection
|
||
|
export const Singular: Singular
|
||
|
|
||
|
export default Hook
|