index.d.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. type HookMethod<O, R> = (options: O) => R | Promise<R>
  2. type BeforeHook<O> = (options: O) => void
  3. type ErrorHook<O, E> = (error: E, options: O) => void
  4. type AfterHook<O, R> = (result: R, options: O) => void
  5. type WrapHook<O, R> = (
  6. hookMethod: HookMethod<O, R>,
  7. options: O
  8. ) => R | Promise<R>
  9. type AnyHook<O, R, E> =
  10. | BeforeHook<O>
  11. | ErrorHook<O, E>
  12. | AfterHook<O, R>
  13. | WrapHook<O, R>
  14. export interface HookCollection {
  15. /**
  16. * Invoke before and after hooks
  17. */
  18. (
  19. name: string | string[],
  20. hookMethod: HookMethod<any, any>,
  21. options?: any
  22. ): Promise<any>
  23. /**
  24. * Add `before` hook for given `name`
  25. */
  26. before(name: string, beforeHook: BeforeHook<any>): void
  27. /**
  28. * Add `error` hook for given `name`
  29. */
  30. error(name: string, errorHook: ErrorHook<any, any>): void
  31. /**
  32. * Add `after` hook for given `name`
  33. */
  34. after(name: string, afterHook: AfterHook<any, any>): void
  35. /**
  36. * Add `wrap` hook for given `name`
  37. */
  38. wrap(name: string, wrapHook: WrapHook<any, any>): void
  39. /**
  40. * Remove added hook for given `name`
  41. */
  42. remove(name: string, hook: AnyHook<any, any, any>): void
  43. }
  44. export interface HookSingular<O, R, E> {
  45. /**
  46. * Invoke before and after hooks
  47. */
  48. (hookMethod: HookMethod<O, R>, options?: O): Promise<R>
  49. /**
  50. * Add `before` hook
  51. */
  52. before(beforeHook: BeforeHook<O>): void
  53. /**
  54. * Add `error` hook
  55. */
  56. error(errorHook: ErrorHook<O, E>): void
  57. /**
  58. * Add `after` hook
  59. */
  60. after(afterHook: AfterHook<O, R>): void
  61. /**
  62. * Add `wrap` hook
  63. */
  64. wrap(wrapHook: WrapHook<O, R>): void
  65. /**
  66. * Remove added hook
  67. */
  68. remove(hook: AnyHook<O, R, E>): void
  69. }
  70. type Collection = new () => HookCollection
  71. type Singular = new <O = any, R = any, E = any>() => HookSingular<O, R, E>
  72. interface Hook {
  73. new (): HookCollection
  74. /**
  75. * Creates a collection of hooks
  76. */
  77. Collection: Collection
  78. /**
  79. * Creates a nameless hook that supports strict typings
  80. */
  81. Singular: Singular
  82. }
  83. export const Hook: Hook
  84. export const Collection: Collection
  85. export const Singular: Singular
  86. export default Hook