diff --git a/src/core/ioc/base.ts b/src/core/ioc/base.ts index 36ab71f0..459f61fe 100644 --- a/src/core/ioc/base.ts +++ b/src/core/ioc/base.ts @@ -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(); diff --git a/src/core/structures/default-services.ts b/src/core/structures/default-services.ts index 75001ee2..be2d3df1 100644 --- a/src/core/structures/default-services.ts +++ b/src/core/structures/default-services.ts @@ -52,14 +52,17 @@ export class Cron extends EventEmitter { modules: Map = 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 { diff --git a/src/handlers/event-utils.ts b/src/handlers/event-utils.ts index dc52eb90..103a62a3 100644 --- a/src/handlers/event-utils.ts +++ b/src/handlers/event-utils.ts @@ -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 = diff --git a/src/handlers/user-defined-events.ts b/src/handlers/user-defined-events.ts index 572b0d17..35b382cc 100644 --- a/src/handlers/user-defined-events.ts +++ b/src/handlers/user-defined-events.ts @@ -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'); } diff --git a/src/types/core-modules.ts b/src/types/core-modules.ts index bbb82e1e..58684ac1 100644 --- a/src/types/core-modules.ts +++ b/src/types/core-modules.ts @@ -50,9 +50,9 @@ export interface ExternalEventCommand extends Module { execute(...args: unknown[]): Awaitable; } export interface CronEventCommand extends Module { + type: EventType.Cron; name?: string; pattern: string; - type: EventType.Cron; execute(...args: unknown[]): Awaitable; } @@ -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