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 { SernError } from '../core/structures/enums'
import { Ok, wrapAsync} from '../core/structures/result'; import { Ok, wrapAsync} from '../core/structures/result';
import type { Module } from '../types/core-modules'; import type { Module } from '../types/core-modules';
@@ -37,20 +37,25 @@ export async function callInitPlugins(_module: Module, deps: Dependencies, emit?
return module 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 () => { const moduleCalled = wrapAsync(async () => {
return module.execute(...args); return module.execute(...args);
}) })
moduleCalled moduleCalled
.then(() => { .then((res) => {
emitter.emit('module.activate', resultPayload('success', module)) if(res.ok) {
}) emitter.emit('module.activate', resultPayload('success', module))
.catch(err => { } else {
if(!emitter.emit('error', resultPayload('failure', module, err))) { if(!emitter.emit('error', resultPayload('failure', module, res.error))) {
console.error(err) // node crashes here.
logger?.error({ 'message': res.error })
}
} }
}) })
.catch(err => {
throw err
})
}; };

View File

@@ -12,6 +12,7 @@ export function interactionHandler(deps: UnpackedDependencies, defaultPrefix?: s
//i wish javascript had clojure destructuring //i wish javascript had clojure destructuring
const { '@sern/client': client, const { '@sern/client': client,
'@sern/modules': moduleManager, '@sern/modules': moduleManager,
'@sern/logger': log,
'@sern/emitter': reporter } = deps '@sern/emitter': reporter } = deps
client.on('interactionCreate', async (event) => { client.on('interactionCreate', async (event) => {
@@ -52,6 +53,6 @@ export function interactionHandler(deps: UnpackedDependencies, defaultPrefix?: s
payload.args[1].state = result.value payload.args[1].state = result.value
// note: do not await this. will be blocking if long task (ie waiting for modal input) // 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 //@ts-ignore
payload.args[1].state = result.value 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) { } catch(e) {
const err = e instanceof Error ? e : Error(inspect(e, { colors: true })); const err = e instanceof Error ? e : Error(inspect(e, { colors: true }));
//@ts-ignore
if(!report.emit('error', resultPayload('failure', module, err))) { if(!report.emit('error', resultPayload('failure', module, err))) {
logger?.error({ message: inspect(err) }); logger?.error({ message: inspect(err) });
} }