UNPKG

@hapiness/core

Version:

Project to have a HapiJS (https://hapijs.com/) based framework to create easier NodeJS back-end with some awesome features

46 lines 1.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const rxjs_1 = require("rxjs"); const decorators_1 = require("./decorators"); const logger_1 = require("./logger"); class HookManager { /** * Check if a token has a hook implemented * * @param {string} hook * @param {Type} token * @returns boolean */ static hasLifecycleHook(hook, token) { return token instanceof decorators_1.Type && hook in token.prototype; } /** * Trigger the hook if * it is implemented * * @param {string} hook * @param {Type} token * @param {T} instance * @param {any[]} args * @param {boolean} throwErr * @returns Observable */ static triggerHook(hook, token, instance, args, throwErr) { return rxjs_1.Observable .merge(rxjs_1.Observable .of(this.hasLifecycleHook(hook, token)) .filter(_ => !!_) .map(_ => Reflect.apply(instance[hook], instance, args || [])) .flatMap(_ => (_ instanceof rxjs_1.Observable) ? _ : !!_ ? rxjs_1.Observable.of(_) : rxjs_1.Observable.empty()), rxjs_1.Observable .of(this.hasLifecycleHook(hook, token)) .filter(_ => !_ && throwErr) .flatMap(_ => rxjs_1.Observable.throw(new Error(`Hook missing ${hook} on ${token.name}`)))) .do(_ => this.logger.debug(`Triggering hook '${hook}' on '${token.name}'`)); } } HookManager.logger = new logger_1.InternalLogger('hook'); exports.HookManager = HookManager; //# sourceMappingURL=hook.js.map