diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 72e41fe..26080ce 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -20,26 +20,23 @@ export async function handle({ event, resolve }) { }), }; - // eslint-disable-next-line init-declarations - let response: Response; - const start = performance.now(); - try { - response = await resolve(event); - } catch (err) { - if (isValiError(err)) { - const valibotErrorPaths = err.issues.map(issue => getDotPath(issue)).filter(path => path !== null); - event.locals.ctx.logger.fatal({ valibotError: err, valibotErrorPaths }, 'valibot validation failed'); - } else if (err instanceof AssertionError) { - event.locals.ctx.logger.fatal({ nodeAssertionError: err }, 'assertion error encountered'); + const response = await resolve(event); + const requestTimeMillis = performance.now() - start; + event.locals.ctx.logger.info({ requestTimeMillis }); + return response; +} + +export function handleError({ error, event }) { + if (typeof event.locals.ctx !== 'undefined') { + if (isValiError(error)) { + const valibotErrorPaths = error.issues.map(issue => getDotPath(issue)).filter(path => path !== null); + event.locals.ctx.logger.fatal({ valibotError: error, valibotErrorPaths }, 'valibot validation failed'); + } else if (error instanceof AssertionError) { + event.locals.ctx.logger.fatal({ nodeAssertionError: error }, 'assertion error encountered'); } else { - event.locals.ctx.logger.fatal(err, 'unknown error encountered'); + event.locals.ctx.logger.fatal(error, 'unknown error encountered'); } - throw err; - } finally { - const requestTimeMillis = performance.now() - start; - event.locals.ctx.logger.info({ requestTimeMillis }); } - - return response; + throw error; }