import { jsonRes } from '../response'; import type { NextApiResponse } from 'next'; import { withNextCors } from './cors'; import { ApiRequestProps } from '../../type/next'; export type NextApiHandler = ( req: ApiRequestProps, res: NextApiResponse ) => unknown | Promise; export const NextEntry = ({ beforeCallback = [] }: { beforeCallback?: Promise[] }) => { return (...args: NextApiHandler[]): NextApiHandler => { return async function api(req: ApiRequestProps, res: NextApiResponse) { try { await Promise.all([withNextCors(req, res), ...beforeCallback]); let response = null; for (const handler of args) { response = await handler(req, res); } const contentType = res.getHeader('Content-Type'); if ((!contentType || contentType === 'application/json') && !res.writableFinished) { return jsonRes(res, { code: 200, data: response }); } } catch (error) { return jsonRes(res, { code: 500, error, url: req.url }); } }; }; };