cron works now, poc

This commit is contained in:
Jacob Nguyen
2024-05-15 16:52:33 -05:00
parent d905f08993
commit 203e8c8ecf
5 changed files with 17 additions and 12 deletions

View File

@@ -71,7 +71,7 @@ async function composeRoot(
__add_container('@sern/logger', new __Services.DefaultLogging());
}
__add_container('@sern/errors', new __Services.DefaultErrorHandling());
__add_container('@sern/cron', {})
__add_container('@sern/cron', new __Services.Cron())
__add_container('@sern/modules', new Map())
__add_container('@sern/emitter', new EventEmitter())
//Build the container based on the callback provided by the user
@@ -98,7 +98,7 @@ export async function makeDependencies (conf: ValidDependencyConfig) {
__add_container('@sern/logger', new __Services.DefaultLogging);
}
__add_container('@sern/errors', new __Services.DefaultErrorHandling());
__add_container('@sern/cron', {})
__add_container('@sern/cron', new __Services.Cron())
__add_container('@sern/modules', new Map())
__add_container('@sern/emitter', new EventEmitter())
await useContainerRaw().ready();

View File

@@ -52,14 +52,17 @@ export class Cron extends EventEmitter {
modules: Map<string, CronEventCommand> = new Map();
private sanityCheck(eventName: string | symbol) : asserts eventName is string {
if(typeof eventName === 'symbol') throw Error("Cron cannot add symbol based listener")
if(!cron.validate(eventName)) {
throw Error("Invalid cron expression while adding")
}
}
addCronModule(module: Module) {
if(module.type !== EventType.Cron) {
throw Error("Can only add cron modules");
}
//@ts-ignore
if(!cron.validate(module.pattern)) {
throw Error("Invalid cron expression while adding")
}
this.modules.set(module.name!, module as CronEventCommand);
}
addListener(eventName: string | symbol, listener: AnyFunction): this {

View File

@@ -55,7 +55,7 @@ const createResult = createResultResolver<
* @param module
* @param source
*/
export function eventDispatcher(module: Module, source: unknown) {
export function eventDispatcher(module: Module, source: unknown) {
assert.ok(source instanceof EventEmitter, `${source} is not an EventEmitter`);
const execute: OperatorFunction<unknown[], unknown> =

View File

@@ -15,9 +15,12 @@ const intoDispatcher = (deps: UnpackedDependencies) =>
return eventDispatcher(module, deps['@sern/client']);
case EventType.External:
return eventDispatcher(module, deps[module.emitter]);
case EventType.Cron:
//@ts-ignore TODO
return eventDispatcher(module, deps['@sern/cron'])
case EventType.Cron: {
//@ts-ignore
const cron = deps['@sern/cron'];
cron.addCronModule(module);
return eventDispatcher(module, cron)
}
default:
throw Error(SernError.InvalidModuleType + ' while creating event handler');
}

View File

@@ -50,9 +50,9 @@ export interface ExternalEventCommand extends Module {
execute(...args: unknown[]): Awaitable<unknown>;
}
export interface CronEventCommand extends Module {
type: EventType.Cron;
name?: string;
pattern: string;
type: EventType.Cron;
execute(...args: unknown[]): Awaitable<unknown>;
}
@@ -168,8 +168,7 @@ export interface EventModuleDefs {
[EventType.Sern]: SernEventCommand;
[EventType.Discord]: DiscordEventCommand;
[EventType.External]: ExternalEventCommand;
//TODO
[EventType.Cron]: ExternalEventCommand;
[EventType.Cron]: CronEventCommand;
}
export interface SernAutocompleteData