UNPKG

@sern/handler

Version:

A complete, customizable, typesafe, & reactive framework for discord bots.

82 lines 2.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TaskScheduler = exports.DefaultLogging = exports.DefaultErrorHandling = void 0; const cron_1 = require("cron"); /** * @internal * @since 2.0.0 * Version 4.0.0 will internalize this api. Please refrain from using the defaults! */ class DefaultErrorHandling { crash(err) { throw err; } updateAlive(err) { throw err; } } exports.DefaultErrorHandling = DefaultErrorHandling; /** * @internal * @since 2.0.0 * Version 4.0.0 will internalize this api. Please refrain from using ModuleStore! */ class DefaultLogging { date() { return new Date(); } debug(payload) { console.debug(`DEBUG: ${this.date().toISOString()} -> ${payload.message}`); } error(payload) { console.error(`ERROR: ${this.date().toISOString()} -> ${payload.message}`); } info(payload) { console.info(`INFO: ${this.date().toISOString()} -> ${payload.message}`); } warning(payload) { console.warn(`WARN: ${this.date().toISOString()} -> ${payload.message}`); } } exports.DefaultLogging = DefaultLogging; class TaskScheduler { __tasks = new Map(); schedule(uuid, task, deps) { if (this.__tasks.has(uuid)) { throw Error("while scheduling a task \ found another task of same name. Not scheduling " + uuid + "again."); } try { const onTick = async function () { task.execute({ id: uuid, lastTimeExecution: this.lastExecution, nextTimeExecution: this.nextDate().toJSDate() }, { deps }); }; const job = cron_1.CronJob.from({ cronTime: task.trigger, onTick, timeZone: task.timezone }); job.start(); this.__tasks.set(uuid, job); } catch (error) { throw Error(`while scheduling a task ${uuid} ` + error); } } kill(taskName) { const job = this.__tasks.get(taskName); if (job) { job.stop(); this.__tasks.delete(taskName); return true; } return false; } get tasks() { return Array.from(this.__tasks.keys()); } dispose() { this.__tasks.forEach((_, id) => { this.kill(id); this.__tasks.delete(id); }); } } exports.TaskScheduler = TaskScheduler; //# sourceMappingURL=default-services.js.map