cal.pub0.org/packages/lib/server/defaultResponder.ts

29 lines
943 B
TypeScript
Raw Normal View History

2022-06-10 18:38:46 +00:00
import type { NextApiRequest, NextApiResponse } from "next";
import { getServerErrorFromUnknown } from "./getServerErrorFromUnknown";
import { performance } from "./perfObserver";
2022-06-10 18:38:46 +00:00
type Handle<T> = (req: NextApiRequest, res: NextApiResponse) => Promise<T>;
/** Allows us to get type inference from API handler responses */
function defaultResponder<T>(f: Handle<T>) {
return async (req: NextApiRequest, res: NextApiResponse) => {
let ok = false;
2022-06-10 18:38:46 +00:00
try {
performance.mark("Start");
const result = await f(req, res);
ok = true;
if (result) res.json(result);
2022-06-10 18:38:46 +00:00
} catch (err) {
const error = getServerErrorFromUnknown(err);
2022-06-10 18:38:46 +00:00
res.statusCode = error.statusCode;
res.json({ message: error.message });
} finally {
performance.mark("End");
performance.measure(`[${ok ? "OK" : "ERROR"}][$1] ${req.method} '${req.url}'`, "Start", "End");
2022-06-10 18:38:46 +00:00
}
};
}
export default defaultResponder;