31 lines
1.1 KiB
JavaScript
31 lines
1.1 KiB
JavaScript
import { toBuffer } from "./utils.mjs";
|
|
export function normalizeLambdaIncomingHeaders(headers) {
|
|
return Object.fromEntries(
|
|
Object.entries(headers || {}).map(([key, value]) => [
|
|
key.toLowerCase(),
|
|
value
|
|
])
|
|
);
|
|
}
|
|
export function normalizeLambdaOutgoingHeaders(headers, stripCookies = false) {
|
|
const entries = stripCookies ? Object.entries(headers).filter(([key]) => !["set-cookie"].includes(key)) : Object.entries(headers);
|
|
return Object.fromEntries(
|
|
entries.map(([k, v]) => [k, Array.isArray(v) ? v.join(",") : String(v)])
|
|
);
|
|
}
|
|
export async function normalizeLambdaOutgoingBody(body, headers) {
|
|
if (typeof body === "string") {
|
|
return { type: "text", body };
|
|
}
|
|
if (!body) {
|
|
return { type: "text", body: "" };
|
|
}
|
|
const buffer = await toBuffer(body);
|
|
const contentType = headers["content-type"] || "";
|
|
return isTextType(contentType) ? { type: "text", body: buffer.toString("utf8") } : { type: "binary", body: buffer.toString("base64") };
|
|
}
|
|
const TEXT_TYPE_RE = /^text\/|\/(javascript|json|xml)|utf-?8/;
|
|
function isTextType(contentType = "") {
|
|
return TEXT_TYPE_RE.test(contentType);
|
|
}
|