leblebijs/src/json.ts

33 lines
911 B
TypeScript

import { Server } from "./compose";
import type { BufferedRequest, BufferedResponse } from "./core/bufferedServer";
export type JSONRequest<Data> = Omit<BufferedRequest, "body"> & { body: Data };
export type JSONResponse<Data> = Omit<BufferedResponse, "body"> & {
body: Data;
};
export function jsonResponse<Request, Data>(
app: Server<Request, JSONResponse<Data>>,
): Server<Request, BufferedResponse> {
return async function jsonResp(request) {
const out = await app(request);
return {
...out,
body: JSON.stringify(out.body),
};
};
}
export function jsonRequest<Response, Data>(
app: Server<JSONRequest<Data | undefined>, Response>,
): Server<BufferedRequest, Response> {
return async function jsonReq(request) {
let body: any | undefined;
if (request.body.length > 0) {
body = JSON.parse(request.body);
}
return app({ ...request, body });
};
}