UNPKG

4.42 kBTypeScriptView Raw
1import { ValidationOptions } from './instance-validator';
2import Model, {
3 BulkCreateOptions,
4 CountOptions,
5 CreateOptions,
6 DestroyOptions,
7 FindOptions,
8 InstanceDestroyOptions,
9 InstanceUpdateOptions,
10 ModelAttributes,
11 ModelOptions,
12 UpdateOptions,
13} from './model';
14import { Config, Options, Sequelize, SyncOptions } from './sequelize';
15
16export type HookReturn = Promise<void> | void;
17
18/**
19 * Options for Model.init. We mostly duplicate the Hooks here, since there is no way to combine the two
20 * interfaces.
21 */
22export interface ModelHooks<M extends Model = Model> {
23 beforeValidate(instance: M, options: ValidationOptions): HookReturn;
24 afterValidate(instance: M, options: ValidationOptions): HookReturn;
25 beforeCreate(attributes: M, options: CreateOptions): HookReturn;
26 afterCreate(attributes: M, options: CreateOptions): HookReturn;
27 beforeDestroy(instance: M, options: InstanceDestroyOptions): HookReturn;
28 afterDestroy(instance: M, options: InstanceDestroyOptions): HookReturn;
29 beforeUpdate(instance: M, options: InstanceUpdateOptions): HookReturn;
30 afterUpdate(instance: M, options: InstanceUpdateOptions): HookReturn;
31 beforeSave(instance: M, options: InstanceUpdateOptions | CreateOptions): HookReturn;
32 afterSave(instance: M, options: InstanceUpdateOptions | CreateOptions): HookReturn;
33 beforeBulkCreate(instances: M[], options: BulkCreateOptions): HookReturn;
34 afterBulkCreate(instances: M[], options: BulkCreateOptions): HookReturn;
35 beforeBulkDestroy(options: DestroyOptions): HookReturn;
36 afterBulkDestroy(options: DestroyOptions): HookReturn;
37 beforeBulkUpdate(options: UpdateOptions): HookReturn;
38 afterBulkUpdate(options: UpdateOptions): HookReturn;
39 beforeFind(options: FindOptions): HookReturn;
40 beforeCount(options: CountOptions): HookReturn;
41 beforeFindAfterExpandIncludeAll(options: FindOptions): HookReturn;
42 beforeFindAfterOptions(options: FindOptions): HookReturn;
43 afterFind(instancesOrInstance: M[] | M | null, options: FindOptions): HookReturn;
44 beforeSync(options: SyncOptions): HookReturn;
45 afterSync(options: SyncOptions): HookReturn;
46 beforeBulkSync(options: SyncOptions): HookReturn;
47 afterBulkSync(options: SyncOptions): HookReturn;
48}
49
50export interface SequelizeHooks extends ModelHooks {
51 beforeDefine(attributes: ModelAttributes, options: ModelOptions<Model>): void;
52 afterDefine(model: typeof Model): void;
53 beforeInit(config: Config, options: Options): void;
54 afterInit(sequelize: Sequelize): void;
55 beforeConnect(config: Config): HookReturn;
56 afterConnect(connection: unknown, config: Config): HookReturn;
57 beforeDisconnect(connection: unknown): HookReturn;
58 afterDisconnect(connection: unknown): HookReturn;
59}
60
61/**
62 * Virtual class for deduplication
63 */
64export class Hooks {
65 /**
66 * Add a hook to the model
67 *
68 * @param name Provide a name for the hook function. It can be used to remove the hook later or to order
69 * hooks based on some sort of priority system in the future.
70 */
71 public static addHook<C extends typeof Hooks, K extends keyof SequelizeHooks>(
72 hookType: K,
73 name: string,
74 fn: SequelizeHooks[K]
75 ): C;
76 public static addHook<C extends typeof Hooks, K extends keyof SequelizeHooks>(
77 hookType: K,
78 fn: SequelizeHooks[K]
79 ): C;
80
81 /**
82 * Remove hook from the model
83 */
84 public static removeHook<C extends typeof Hooks, K extends keyof SequelizeHooks>(hookType: K, name: string): C;
85
86 /**
87 * Check whether the mode has any hooks of this type
88 */
89 public static hasHook<K extends keyof SequelizeHooks>(hookType: K): boolean;
90 public static hasHooks<K extends keyof SequelizeHooks>(hookType: K): boolean;
91
92 /**
93 * Add a hook to the model
94 *
95 * @param name Provide a name for the hook function. It can be used to remove the hook later or to order
96 * hooks based on some sort of priority system in the future.
97 */
98 public addHook<K extends keyof SequelizeHooks>(hookType: K, name: string, fn: SequelizeHooks[K]): this;
99 public addHook<K extends keyof SequelizeHooks>(hookType: K, fn: SequelizeHooks[K]): this;
100 /**
101 * Remove hook from the model
102 */
103 public removeHook<K extends keyof SequelizeHooks>(hookType: K, name: string): this;
104
105 /**
106 * Check whether the mode has any hooks of this type
107 */
108 public hasHook<K extends keyof SequelizeHooks>(hookType: K): boolean;
109 public hasHooks<K extends keyof SequelizeHooks>(hookType: K): boolean;
110}