hooksi
Version:
Lightweight events hooking module
124 lines (123 loc) • 4.49 kB
TypeScript
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>;
}