From ea78a98f6944cf84d84d814ef97b75d7355518de Mon Sep 17 00:00:00 2001 From: Jacob Nguyen <76754747+jacoobes@users.noreply.github.com> Date: Thu, 18 May 2023 21:36:41 -0500 Subject: [PATCH] refactor: remove cast --- src/core/types/modules.ts | 2 +- src/handler/events/generic.ts | 20 ++++++++++++++++++-- src/handler/events/user-defined.ts | 3 +-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/core/types/modules.ts b/src/core/types/modules.ts index 9b58eda..efaf7b0 100644 --- a/src/core/types/modules.ts +++ b/src/core/types/modules.ts @@ -54,7 +54,7 @@ export interface SernEventCommand; } diff --git a/src/handler/events/generic.ts b/src/handler/events/generic.ts index a39a220..eca1d69 100644 --- a/src/handler/events/generic.ts +++ b/src/handler/events/generic.ts @@ -9,10 +9,12 @@ import { throwError, tap, MonoTypeOperatorFunction, + catchError, + finalize, } from 'rxjs'; -import { ModuleManager } from '../../core'; +import { ErrorHandling, Logging, ModuleManager, useContainerRaw } from '../../core'; import { SernError } from '../../core/structures/errors'; -import { callPlugin, everyPluginOk, filterMap, filterMapTo } from '../../core/operators'; +import { callPlugin, everyPluginOk, filterMap, filterMapTo, handleError } from '../../core/operators'; import { defaultModuleLoader } from '../../core/module-loading'; import { CommandModule, Module, AnyModule } from '../../core/types/modules'; import { contextArgs, createDispatcher, dispatchMessage } from './dispatchers'; @@ -214,3 +216,17 @@ export function makeModuleExecutor< }), ); } + +export function handleCrash( + errorHandler: ErrorHandling, + logger?: Logging, +) { + return pipe( + catchError(handleError(errorHandler, logger)), + finalize(() => { + logger?.info({ message: 'A stream closed or reached end of lifetime' }); + useContainerRaw()?.disposeAll() + .then(() => logger?.info({ message: 'Cleaning container and crashing' })); + }) + ); +} diff --git a/src/handler/events/user-defined.ts b/src/handler/events/user-defined.ts index 3e2af87..082c4ae 100644 --- a/src/handler/events/user-defined.ts +++ b/src/handler/events/user-defined.ts @@ -8,7 +8,6 @@ import { buildModules, callInitPlugins } from './generic'; import { handleError } from '../../core/operators'; import { Service, useContainerRaw } from '../../core/ioc'; import { DependencyList, Processed } from '../types'; -import { Dependencies } from '../../core/ioc/types'; export function makeEventsHandler( [emitter, err, log, moduleManager, client]: DependencyList, @@ -22,7 +21,7 @@ export function makeEventsHandler( case EventType.Discord: return eventDispatcher(e, client); case EventType.External: - return eventDispatcher(e, Service(e.emitter as keyof Dependencies)); + return eventDispatcher(e, Service(e.emitter)); default: return err.crash( Error(SernError.InvalidModuleType + ' while creating event handler'),