UNPKG

timerjobs

Version:

TimerJobs is a simple way to create recurring tasks that can react to events.

80 lines 2.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Emitter = void 0; const eventemitter2_1 = require("eventemitter2"); class Emitter { constructor(timer, options) { var _a, _b; this.timer = timer; this.options = options; this.emitter = (_b = (_a = options.emitter) !== null && _a !== void 0 ? _a : Emitter.emitter) !== null && _b !== void 0 ? _b : new eventemitter2_1.EventEmitter2({ wildcard: true, delimiter: options.delimiter }); this.setupListeners(); } emit(action, { error = null, args = [] } = {}) { if (this.shouldEmit(this.options.emitLevel, error)) { const event = this.buildEvent(action, this.options.emitLevel, error); if (error) { args.unshift(error); } this.emitter.emit.call(this.emitter, event, ...args); } } shouldEmit(level, error) { return Boolean(level) || Boolean(error); } buildEvent(event, level, error) { const actualLevel = !level && error ? 1 : level; return event + this.getLevel(actualLevel); } get levels() { const { delimiter, namespace, reference } = this.options; const levels = { 1: '', 2: delimiter + namespace, 3: delimiter + reference, 4: delimiter + namespace + delimiter + reference, }; return levels; } getLevel(level) { return this.levels[level]; } setupListeners() { this.startSetup(); this.stopSetup(); this.restartSetup(); } startSetup() { const { startOn, startCallback } = this.options; if (startOn) { this.emitter.on(startOn, (...rest) => { if (this.timer.isStopped) { this.timer.start(); startCallback.apply(this.options.context, rest); } }); } } restartSetup() { const { restartOn, restartCallback } = this.options; if (restartOn) { this.emitter.on(restartOn, (...rest) => { if (this.timer.hasStarted) { this.timer.restart(); restartCallback.apply(this.options.context, rest); } }); } } stopSetup() { const { stopOn, stopCallback } = this.options; if (stopOn) { this.emitter.on(stopOn, (...rest) => { this.timer.stop(); stopCallback.apply(this.options.context, rest); }); } } } exports.Emitter = Emitter; //# sourceMappingURL=emitter.js.map