fix+regres+errorhandling

This commit is contained in:
Jacob Nguyen
2025-01-12 21:47:36 -06:00
parent bfe8d1d904
commit 31c2695cf8
4 changed files with 16 additions and 12 deletions

View File

@@ -1,4 +1,4 @@
import type { Emitter } from '../core/interfaces';
import type { Emitter, Logging } from '../core/interfaces';
import { SernError } from '../core/structures/enums'
import { Ok, wrapAsync} from '../core/structures/result';
import type { Module } from '../types/core-modules';
@@ -37,19 +37,24 @@ export async function callInitPlugins(_module: Module, deps: Dependencies, emit?
return module
}
export function executeModule(emitter: Emitter, { module, args } : ExecutePayload) {
export function executeModule(emitter: Emitter, logger: Logging|undefined, { module, args } : ExecutePayload) {
const moduleCalled = wrapAsync(async () => {
return module.execute(...args);
})
moduleCalled
.then(() => {
emitter.emit('module.activate', resultPayload('success', module))
.then((res) => {
if(res.ok) {
emitter.emit('module.activate', resultPayload('success', module))
} else {
if(!emitter.emit('error', resultPayload('failure', module, res.error))) {
// node crashes here.
logger?.error({ 'message': res.error })
}
}
})
.catch(err => {
if(!emitter.emit('error', resultPayload('failure', module, err))) {
console.error(err)
}
throw err
})
};

View File

@@ -12,6 +12,7 @@ export function interactionHandler(deps: UnpackedDependencies, defaultPrefix?: s
//i wish javascript had clojure destructuring
const { '@sern/client': client,
'@sern/modules': moduleManager,
'@sern/logger': log,
'@sern/emitter': reporter } = deps
client.on('interactionCreate', async (event) => {
@@ -52,6 +53,6 @@ export function interactionHandler(deps: UnpackedDependencies, defaultPrefix?: s
payload.args[1].state = result.value
// note: do not await this. will be blocking if long task (ie waiting for modal input)
executeModule(reporter, payload);
executeModule(reporter, log, payload);
});
}

View File

@@ -48,7 +48,7 @@ export function messageHandler (deps: UnpackedDependencies, defaultPrefix?: stri
//@ts-ignore
payload.args[1].state = result.value
executeModule(emitter, { module, args: payload.args })
executeModule(emitter, log, payload)
})
}

View File

@@ -46,8 +46,6 @@ export default async function(deps: UnpackedDependencies, wrapper: Wrapper) {
}
} catch(e) {
const err = e instanceof Error ? e : Error(inspect(e, { colors: true }));
//@ts-ignore
if(!report.emit('error', resultPayload('failure', module, err))) {
logger?.error({ message: inspect(err) });
}