Update packages, change to node16

This commit is contained in:
Lucas Costi
2022-04-05 10:05:12 +10:00
parent ab59b778e5
commit a8dd2c1169
542 changed files with 66325 additions and 65198 deletions

View File

@@ -1,82 +1,172 @@
type HookMethod<O, R> = (options: O) => R | Promise<R>
type HookMethod<Options, Result> = (
options: Options
) => Result | Promise<Result>
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 BeforeHook<Options> = (options: Options) => void | Promise<void>
type ErrorHook<Options, Error> = (
error: Error,
options: Options
) => void | Promise<void>
type AfterHook<Options, Result> = (
result: Result,
options: Options
) => void | Promise<void>
type WrapHook<Options, Result> = (
hookMethod: HookMethod<Options, Result>,
options: Options
) => Result | Promise<Result>
type AnyHook<O, R, E> =
| BeforeHook<O>
| ErrorHook<O, E>
| AfterHook<O, R>
| WrapHook<O, R>
type AnyHook<Options, Result, Error> =
| BeforeHook<Options>
| ErrorHook<Options, Error>
| AfterHook<Options, Result>
| WrapHook<Options, Result>
export interface HookCollection {
type TypeStoreKeyLong = 'Options' | 'Result' | 'Error'
type TypeStoreKeyShort = 'O' | 'R' | 'E'
type TypeStore =
| ({ [key in TypeStoreKeyLong]?: any } &
{ [key in TypeStoreKeyShort]?: never })
| ({ [key in TypeStoreKeyLong]?: never } &
{ [key in TypeStoreKeyShort]?: any })
type GetType<
Store extends TypeStore,
LongKey extends TypeStoreKeyLong,
ShortKey extends TypeStoreKeyShort
> = LongKey extends keyof Store
? Store[LongKey]
: ShortKey extends keyof Store
? Store[ShortKey]
: any
export interface HookCollection<
HooksType extends Record<string, TypeStore> = Record<
string,
{ Options: any; Result: any; Error: any }
>,
HookName extends keyof HooksType = keyof HooksType
> {
/**
* Invoke before and after hooks
*/
(
name: string | string[],
hookMethod: HookMethod<any, any>,
options?: any
): Promise<any>
<Name extends HookName>(
name: Name | Name[],
hookMethod: HookMethod<
GetType<HooksType[Name], 'Options', 'O'>,
GetType<HooksType[Name], 'Result', 'R'>
>,
options?: GetType<HooksType[Name], 'Options', 'O'>
): Promise<GetType<HooksType[Name], 'Result', 'R'>>
/**
* Add `before` hook for given `name`
*/
before(name: string, beforeHook: BeforeHook<any>): void
before<Name extends HookName>(
name: Name,
beforeHook: BeforeHook<GetType<HooksType[Name], 'Options', 'O'>>
): void
/**
* Add `error` hook for given `name`
*/
error(name: string, errorHook: ErrorHook<any, any>): void
error<Name extends HookName>(
name: Name,
errorHook: ErrorHook<
GetType<HooksType[Name], 'Options', 'O'>,
GetType<HooksType[Name], 'Error', 'E'>
>
): void
/**
* Add `after` hook for given `name`
*/
after(name: string, afterHook: AfterHook<any, any>): void
after<Name extends HookName>(
name: Name,
afterHook: AfterHook<
GetType<HooksType[Name], 'Options', 'O'>,
GetType<HooksType[Name], 'Result', 'R'>
>
): void
/**
* Add `wrap` hook for given `name`
*/
wrap(name: string, wrapHook: WrapHook<any, any>): void
wrap<Name extends HookName>(
name: Name,
wrapHook: WrapHook<
GetType<HooksType[Name], 'Options', 'O'>,
GetType<HooksType[Name], 'Result', 'R'>
>
): void
/**
* Remove added hook for given `name`
*/
remove(name: string, hook: AnyHook<any, any, any>): void
remove<Name extends HookName>(
name: Name,
hook: AnyHook<
GetType<HooksType[Name], 'Options', 'O'>,
GetType<HooksType[Name], 'Result', 'R'>,
GetType<HooksType[Name], 'Error', 'E'>
>
): void
/**
* Public API
*/
api: Pick<
HookCollection<HooksType>,
'before' | 'error' | 'after' | 'wrap' | 'remove'
>
}
export interface HookSingular<O, R, E> {
export interface HookSingular<Options, Result, Error> {
/**
* Invoke before and after hooks
*/
(hookMethod: HookMethod<O, R>, options?: O): Promise<R>
(hookMethod: HookMethod<Options, Result>, options?: Options): Promise<Result>
/**
* Add `before` hook
*/
before(beforeHook: BeforeHook<O>): void
before(beforeHook: BeforeHook<Options>): void
/**
* Add `error` hook
*/
error(errorHook: ErrorHook<O, E>): void
error(errorHook: ErrorHook<Options, Error>): void
/**
* Add `after` hook
*/
after(afterHook: AfterHook<O, R>): void
after(afterHook: AfterHook<Options, Result>): void
/**
* Add `wrap` hook
*/
wrap(wrapHook: WrapHook<O, R>): void
wrap(wrapHook: WrapHook<Options, Result>): void
/**
* Remove added hook
*/
remove(hook: AnyHook<O, R, E>): void
remove(hook: AnyHook<Options, Result, Error>): void
/**
* Public API
*/
api: Pick<
HookSingular<Options, Result, Error>,
'before' | 'error' | 'after' | 'wrap' | 'remove'
>
}
type Collection = new () => HookCollection
type Singular = new <O = any, R = any, E = any>() => HookSingular<O, R, E>
type Collection = new <
HooksType extends Record<string, TypeStore> = Record<
string,
{ Options: any; Result: any; Error: any }
>
>() => HookCollection<HooksType>
type Singular = new <
Options = any,
Result = any,
Error = any
>() => HookSingular<Options, Result, Error>
interface Hook {
new (): HookCollection
new <
HooksType extends Record<string, TypeStore> = Record<
string,
{ Options: any; Result: any; Error: any }
>
>(): HookCollection<HooksType>
/**
* Creates a collection of hooks