UNPKG

hooksi

Version:

Lightweight events hooking module

124 lines (123 loc) 4.49 kB
export declare type THooksMap<HooksDefinition> = Map<keyof HooksDefinition, HooksDefinition[keyof HooksDefinition][]>; export declare class Hooks<HooksDefinition extends { [name: string]: any; }> { private _hooksMap; constructor(); /** * Subscribe to a hook * * Can have as many callbacks as you want! * * The order of execution is the order of subscription * * @template HookName * @param {HookName} hookName * @param {HooksDefinition[HookName]} callback * @returns {this} * @memberof Hooks */ on<HookName extends keyof HooksDefinition>(hookName: HookName, callback: HooksDefinition[HookName]): this; /** * Unsubscribe a callback by it's ref * * Return true if found and removed! False if it wasn't found * * @template HookName * @param {HookName} hookName * @param {HooksDefinition[HookName]} callback * @returns {boolean} true if removed! false if not found! * @memberof Hooks */ unsubscribe<HookName extends keyof HooksDefinition>(hookName: HookName, callback: HooksDefinition[HookName]): boolean; /** * Unsubscribe all callbacks for a hook * * return true if callbacks where unsubscribed! False if none were already subscribed! * * @template HookName * @param {HookName} hookName * @returns {boolean} true if callbacks where unsubscribed! False if none were already subscribed! * @memberof Hooks */ unsubscribeAll<HookName extends keyof HooksDefinition>(hookName: HookName): boolean; /** * Synchronous Hook execution in code * * (That can be too the event emitter) * * @template HookName * @param {HookName} hookName * @param {*} _this this Context in the subscribing callbacks * @param {...Parameters<HooksDefinition[HookName]>} args call params (callback passed params) * @returns {this} * @memberof Hooks */ exec<HookName extends keyof HooksDefinition>(hookName: HookName, _this: any, ...args: Parameters<HooksDefinition[HookName]>): this; /** * Alias for exec * * Emit name alias * * May be preferred for readability when using the event emitter pattern * * @template HookName * @param {HookName} hookName * @param {*} _this this Context in the subscribing callbacks * @param {...Parameters<HooksDefinition[HookName]>} args call params (callback passed params) * @returns {this} * @memberof Hooks */ emit<HookName extends keyof HooksDefinition>(hookName: HookName, _this: any, ...args: Parameters<HooksDefinition[HookName]>): this; /** * Asynchronous Hook execution in code * * (That can be too the event emitter) * * @template HookName * @param {HookName} hookName * @param {*} _this this Context in the subscribing callbacks * @param {...Parameters<HooksDefinition[HookName]>} args call params (callback passed params) * @returns {Promise<any>[]} * @memberof Hooks */ execAsync<HookName extends keyof HooksDefinition>(hookName: HookName, _this: any, ...args: Parameters<HooksDefinition[HookName]>): Promise<any>[]; /** * Alias to execAsync * * Emit name alias * * @template HookName * @param {HookName} hookName * @param {*} _this this Context in the subscribing callbacks * @param {...Parameters<HooksDefinition[HookName]>} args call params (callback passed params) * @returns {Promise<any>[]} * @memberof Hooks */ emitAsync<HookName extends keyof HooksDefinition>(hookName: HookName, _this: any, ...args: Parameters<HooksDefinition[HookName]>): Promise<any>[]; /** * Check if there is a subscriber for a hook * * @template HookName * @param {HookName} hookName * @returns {boolean} * @memberof Hooks */ hasSubscriber<HookName extends keyof HooksDefinition>(hookName: HookName): boolean; /** * Get the list of the hook callbacks * * @template HookName * @param {HookName} hookName * @returns {(HooksDefinition[HookName][] | undefined)} * @memberof Hooks */ getHookCallbacks<HookName extends keyof HooksDefinition>(hookName: HookName): HooksDefinition[HookName][] | undefined; /** * Get the hooks map * * @returns {THooksMap<HooksDefinition>} * @memberof Hooks */ getHooksMap(): THooksMap<HooksDefinition>; }