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.
27 lines
875 B
27 lines
875 B
|
|
interface IConfig {
|
|
auth?: boolean;
|
|
authType?: 'token' | 'basic';
|
|
}
|
|
|
|
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 = typeof handlerOrConfig === 'object' ? handlerOrConfig : {};
|
|
return defineEventHandler<T>(async (event) => {
|
|
try {
|
|
// do something before the route handler
|
|
const response = await handler(event)
|
|
// do something after the route handler
|
|
return { response }
|
|
} catch (err) {
|
|
// Error handling
|
|
return { err }
|
|
}
|
|
})
|
|
}
|