You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

40 lines
1.1 KiB

import log4js from "logger";
interface IConfig {
}
const defaultConfig: IConfig = {
}
const logger = log4js.getLogger("ERROR");
export const defineWrappedResponseHandler = <T extends EventHandlerRequest, D>(
handlerOrConfig?: EventHandler<T, D> | IConfig,
_handler?: EventHandler<T, D>,
): EventHandler<T, D> => {
const handler = typeof handlerOrConfig === 'function' ? handlerOrConfig : _handler;
if (!handler) {
throw new Error('handler or config is required');
}
const config = Object.assign({ ...defaultConfig }, typeof handlerOrConfig === 'object' ? handlerOrConfig : {});
return defineEventHandler<T>(async (event) => {
try {
const response = await handler(event)
return response
} catch (error) {
const requestId = event.context.requestId ?? "(no-request-id)";
logger.error(
`[${requestId}]`,
event?.method ?? "",
event?.path ?? "(no request)",
`[request]`,
"\n",
error
);
return error
}
})
}