UNPKG

@hacksaw/hono-google-cloud-logging

Version:

Google Cloud Logging Middleware for Hono

84 lines (83 loc) 2.62 kB
export function buildRequest(req) { const headers = buildHeaders(req); return new Request(buildUrl(req).toString(), { method: req.method || "GET", headers, body: buildBody(req, headers), }); } export async function handleResponse(res, honoResponse) { res.status(honoResponse.status); for (const [key, value] of honoResponse.headers.entries()) { res.setHeader(key, value); } const contentType = honoResponse.headers.get("content-type") || ""; if (contentType.includes("application/json")) { const json = await honoResponse.json(); res.json(json); } else if (isTextContentType(contentType)) { const text = await honoResponse.text(); res.send(text); } else { const buffer = await honoResponse.arrayBuffer(); res.end(Buffer.from(buffer)); } } function isTextContentType(contentType) { return (contentType.includes("text/html") || contentType.includes("text/plain") || contentType.includes("application/xml") || contentType.includes("text/css") || contentType.includes("application/javascript")); } function buildUrl(req) { const url = new URL(req.url || "/", `${req.protocol}://${req.headers.host || "localhost"}`); for (const [key, value] of Object.entries(req.query || {})) { if (Array.isArray(value)) { for (const v of value) { url.searchParams.append(key, v); } } else if (value !== undefined) { url.searchParams.append(key, value); } } return url; } function buildHeaders(req) { const headers = new Headers(); for (const [key, value] of Object.entries(req.headers)) { if (value) { if (Array.isArray(value)) { for (const v of value) { headers.append(key, v); } } else { headers.append(key, value); } } } return headers; } function buildBody(req, headers) { let body = null; if (req.method !== "GET" && req.method !== "HEAD" && req.body) { if (Buffer.isBuffer(req.body)) { body = req.body; } else if (typeof req.body === "string") { body = req.body; } // Handle JSON body (object) else if (typeof req.body === "object") { body = JSON.stringify(req.body); if (!headers.has("content-type")) { headers.set("content-type", "application/json"); } } } return body; }