@sern/handler
Version:
A complete, customizable, typesafe, & reactive framework for discord bots.
82 lines • 2.5 kB
JavaScript
;
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