mirror of
https://github.com/sern-handler/handler
synced 2026-06-06 01:16:55 +00:00
* step 1 * Refactorings * command modules do not depend on anything but itself * tearing it up * Remove module store, manager, and Intializable type * consolidate interfaces in single file * consolidate default services in single file * TEAR IT UP * fix text compile * the end of sern init?? * Presence namespaced types removed * internal namespace * clean up dependencies * fix test * fix circular dependency * still broken but progress * remove barrel for core/structs * reffactor * refactor allat * more refactoring * prototyping linking static handler * cleanup tests, codegen, and importing handler * some refactor * generify partition * for now copy paste new ioc system * removeiti * fdsfD * ensure container is init'd * fix absPath gen * working on bun compat * refactor and clean up and reenter v3 module loading * dsfsd * refactor, add cron types, reinstante module loader * ready handler revamped so much cleaner * fdssdf * refactor deps list * add more tests, polish up ioc * up to speed with event modules * i think cron works * cron works now, poc * ksdjkldsfld * updating ioc api, experimenting with cron * save b4 thunder and lightning * plugin data reduction & args changes * freeze module after plugins, updateModule, and more * simplify plugin args and prepare for reduction among plugins * add deps to plugin calls and execute * plugin system loking better, tbd type * porg * initplugins inject deps, inconspicuos * fix faiklling test * fix initPlugins not reassigning * parsingParams kinda * proper mapping * dynamic customIds * handling customId params working * testing n shi * inlineinignsd * consolidate fmt * once on eventModules * refact,simplf * readd vitest and Asset fn * fix typings * assets fn complete * more intuitive context.options and Asset typings * add init hooks not firing * -file,-updateModule,publish? * fix: ioc deps not created correctly * documentation, add json for Asset * remove asset * ss * finish ioc transition * nvm, now i did * s * update locals api, docs, tests * fix tests * fix up tests and cleanup * fix * Update src/core/functions.ts Co-authored-by: Evo <85353424+EvolutionX-10@users.noreply.github.com> * better documentation * temp fix * namespace presence types again * revising cron modules and better error messages * scheduler ids * more descriptive errors * refactor to not type leak and job cancellation * refactor n better signatures for task scheduler * documentation * fix swap not accepting functions * change task signature --------- Co-authored-by: Evo <85353424+EvolutionX-10@users.noreply.github.com>
90 lines
2.6 KiB
TypeScript
90 lines
2.6 KiB
TypeScript
import { ScheduledTask } from '../../types/core-modules';
|
|
import type { LogPayload, Logging, ErrorHandling, Disposable } from '../interfaces';
|
|
import { CronJob } from 'cron';
|
|
|
|
/**
|
|
* @internal
|
|
* @since 2.0.0
|
|
* Version 4.0.0 will internalize this api. Please refrain from using the defaults!
|
|
*/
|
|
export class DefaultErrorHandling implements ErrorHandling {
|
|
crash(err: Error): never {
|
|
throw err;
|
|
}
|
|
updateAlive(err: Error) {
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* @internal
|
|
* @since 2.0.0
|
|
* Version 4.0.0 will internalize this api. Please refrain from using ModuleStore!
|
|
*/
|
|
export class DefaultLogging implements Logging {
|
|
private date() { return new Date() }
|
|
debug(payload: LogPayload): void {
|
|
console.debug(`DEBUG: ${this.date().toISOString()} -> ${payload.message}`);
|
|
}
|
|
|
|
error(payload: LogPayload): void {
|
|
console.error(`ERROR: ${this.date().toISOString()} -> ${payload.message}`);
|
|
}
|
|
|
|
info(payload: LogPayload): void {
|
|
console.info(`INFO: ${this.date().toISOString()} -> ${payload.message}`);
|
|
}
|
|
|
|
warning(payload: LogPayload): void {
|
|
console.warn(`WARN: ${this.date().toISOString()} -> ${payload.message}`);
|
|
}
|
|
}
|
|
|
|
|
|
export class TaskScheduler implements Disposable {
|
|
private __tasks: Map<string, CronJob<any, any>> = new Map();
|
|
|
|
schedule(uuid: string, task: ScheduledTask, deps: Dependencies) {
|
|
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(this: CronJob) {
|
|
task.execute({ id: uuid,
|
|
lastTimeExecution: this.lastExecution,
|
|
nextTimeExecution: this.nextDate().toJSDate() }, { deps })
|
|
}
|
|
const job = 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: string): boolean {
|
|
const job = this.__tasks.get(taskName);
|
|
if (job) {
|
|
job.stop();
|
|
this.__tasks.delete(taskName);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
get tasks(): string[] {
|
|
return Array.from(this.__tasks.keys());
|
|
}
|
|
|
|
dispose() {
|
|
this.__tasks.forEach((_, id) => {
|
|
this.kill(id);
|
|
this.__tasks.delete(id);
|
|
})
|
|
}
|
|
|
|
}
|