33 lines
911 B
TypeScript
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 });
|
|
};
|
|
}
|