rjweb-server
Version:
Easy and Robust Way to create a Web Server with Many Easy-to-use Features in NodeJS
50 lines (49 loc) • 1.79 kB
JavaScript
import parseStatus from "./parseStatus";
import parseContent from "./parseContent";
async function writeHTTPMeta(res, ctx) {
const readyHeaders = {};
const readyCookies = {};
for (const header in ctx.response.headers) {
if (!ctx.response.headers[header])
continue;
const parsed = await parseContent(ctx.response.headers[header]);
readyHeaders[header] = parsed.content;
}
for (const cookie in ctx.response.cookies) {
if (!ctx.response.cookies[cookie] || !ctx.response.cookies[cookie].value)
continue;
const infos = ctx.response.cookies[cookie];
const parsed = await parseContent(infos.value);
let cookieString = `${cookie}=${encodeURIComponent(parsed.content.toString())}`;
if (infos.domain)
cookieString += `;Domain=${infos.domain}`;
if ("expires" in infos && infos.expires)
cookieString += `;Expires=${infos.expires.toUTCString()}`;
if ("maxAge" in infos && infos.maxAge !== void 0)
cookieString += `;Max-Age=${infos.maxAge}`;
if (infos.httpOnly)
cookieString += `;HttpOnly`;
if (infos.path)
cookieString += `;Path=${infos.path}`;
if (infos.sameSite)
cookieString += `;SameSite=${infos.sameSite[0].toUpperCase() + infos.sameSite.slice(1)}`;
if (infos.secure)
cookieString += `;Secure`;
readyCookies[cookie] = cookieString;
}
return () => {
if (!ctx.isAborted)
res.writeStatus(parseStatus(ctx.response.status, ctx.response.statusMessage));
for (const header in readyHeaders) {
if (!ctx.isAborted)
res.writeHeader(header, readyHeaders[header]);
}
for (const cookie in readyCookies) {
if (!ctx.isAborted)
res.writeHeader("set-cookie", readyCookies[cookie]);
}
};
}
export {
writeHTTPMeta as default
};