From 0fc0782e55647fce31b0adc66c2fdbf2a02743b0 Mon Sep 17 00:00:00 2001 From: Jacob Nguyen <76754747+jacoobes@users.noreply.github.com> Date: Mon, 13 Jun 2022 01:18:23 -0500 Subject: [PATCH] feat: change typings of sern emitter --- src/handler/events/interactionCreate.ts | 4 ++-- src/handler/events/messageEvent.ts | 4 ++-- src/handler/events/observableHandling.ts | 22 ++++++++++++++++++++++ src/handler/events/readyEvent.ts | 1 - src/handler/sernEmitter.ts | 5 ++--- 5 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/handler/events/interactionCreate.ts b/src/handler/events/interactionCreate.ts index 2c8e5c1..543db94 100644 --- a/src/handler/events/interactionCreate.ts +++ b/src/handler/events/interactionCreate.ts @@ -216,10 +216,10 @@ export function onInteractionCreate(wrapper: Wrapper) { } if (ePlugArr.every(e => e.ok)) { await execute(); - wrapper.sernEmitter?.emit('module.activate', { success: true, module: mod! }); + wrapper.sernEmitter?.emit('module.activate', { type: 'success', module: mod! }); } else { wrapper.sernEmitter?.emit('module.activate', { - success: false, + type: 'failure', module: mod!, reason: SernError.PluginFailure, }); diff --git a/src/handler/events/messageEvent.ts b/src/handler/events/messageEvent.ts index d1d0013..dd5c155 100644 --- a/src/handler/events/messageEvent.ts +++ b/src/handler/events/messageEvent.ts @@ -53,11 +53,11 @@ export const onMessageCreate = (wrapper: Wrapper) => { next({ mod, ctx, args, res }) { if (res.every(pl => pl.ok)) { Promise.resolve(mod.execute(ctx, args)).then(() => { - wrapper.sernEmitter?.emit('module.activate', { success: true, module: mod! }); + wrapper.sernEmitter?.emit('module.activate', { type: 'success', module: mod! }); }); } else { wrapper.sernEmitter?.emit('module.activate', { - success: false, + type: 'failure', module: mod!, reason: SernError.PluginFailure, }); diff --git a/src/handler/events/observableHandling.ts b/src/handler/events/observableHandling.ts index ca74454..0967390 100644 --- a/src/handler/events/observableHandling.ts +++ b/src/handler/events/observableHandling.ts @@ -3,6 +3,7 @@ import { Observable, throwError } from 'rxjs'; import { SernError } from '../structures/errors'; import type { Module, ModuleDefs } from '../structures/module'; import { correctModuleType } from '../utilities/predicates'; +import type { Result } from 'ts-results'; export function filterCorrectModule(cmdType: T) { return (src: Observable) => new Observable(subscriber => { @@ -42,3 +43,24 @@ export function ignoreNonBot(prefix: string) { }); }); } + +/** + * If the current value in Result stream is an error, calls callback. + * @param cb + */ +export function errTap(cb: (err: SernError) => void) { + return (src: Observable>) => + new Observable<{ mod: Module; absPath: string }>(subscriber => { + return src.subscribe({ + next(value) { + if (value.err) { + cb(value.val); + } else { + subscriber.next(value.val); + } + }, + error: e => subscriber.error(e), + complete: () => subscriber.complete(), + }); + }); +} diff --git a/src/handler/events/readyEvent.ts b/src/handler/events/readyEvent.ts index 57ac4d8..033c7f6 100644 --- a/src/handler/events/readyEvent.ts +++ b/src/handler/events/readyEvent.ts @@ -23,7 +23,6 @@ import { match } from 'ts-pattern'; import { SernError } from '../structures/errors'; import type { DefinitelyDefined } from '../../types/handler'; import { CommandType, PluginType } from '../structures/enums'; -import { elseMap, elseMapTo, resultMap } from 'ts-results/rxjs-operators'; import { errTap } from './observableHandling'; export const onReady = (wrapper: Wrapper) => { diff --git a/src/handler/sernEmitter.ts b/src/handler/sernEmitter.ts index c3e4fa3..a31d60a 100644 --- a/src/handler/sernEmitter.ts +++ b/src/handler/sernEmitter.ts @@ -2,9 +2,8 @@ import { EventEmitter } from 'events'; import type { Module } from './structures/module'; type Payload = - | { success: true; module: Module } - | { success: false; module: Module | undefined; reason: string | Error }; - + | { type: 'success'; module: Module } + | { type: 'failure'; module: Module | undefined; reason: string | Error }; export type SernEventsMapping = { ['module.register']: [Payload]; ['module.activate']: [Payload];