rjweb-server
Version:
Easy and Robust Way to create a Web Server with Many Easy-to-use Features in NodeJS
51 lines (50 loc) • 2.27 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const toETag_1 = __importDefault(require("./toETag"));
const status_1 = __importDefault(require("../enums/status"));
const http_1 = require("http");
const parseContent_1 = __importDefault(require("./parseContent"));
const types_1 = require("util/types");
const toString_1 = __importDefault(require("./toString"));
/**
* Write HTTP Headers
* @since 9.0.0
*/ async function writeHeaders(body, context, rawContext) {
if (context.global.options.performance.eTag && body) {
const eTag = (0, toETag_1.default)(body, context.response.headers.toJSON(), context.response.cookies.toJSON(), context.response.status);
if (eTag) {
if (context.headers.get('if-none-match') === eTag) {
rawContext.status(status_1.default.NOT_MODIFIED, http_1.STATUS_CODES[context.response.status] || 'Unknown').write(new ArrayBuffer(0));
return false;
}
context.response.headers.set('etag', eTag);
}
}
for (const [key, value] of context.response.headers) {
rawContext.header(key, value);
}
for (const [cookie, data] of context.response.cookies) {
const parsed = await (0, parseContent_1.default)(data.value);
let cookieString = `${cookie}=${encodeURIComponent((0, toString_1.default)(parsed.content))}`;
if (data.domain)
cookieString += `;Domain=${data.domain}`;
if (typeof data.expires === 'number')
cookieString += `;Max-Age=${data.expires}`;
if ((0, types_1.isDate)(data.expires))
cookieString += `;Expires=${data.expires.toUTCString()}`;
if (data.httpOnly)
cookieString += ';HttpOnly';
if (data.path)
cookieString += `;Path=${data.path}`;
if (data.sameSite)
cookieString += `;SameSite=${data.sameSite[0].toUpperCase()}${data.sameSite.slice(1)}`;
if (data.secure)
cookieString += ';Secure';
rawContext.header('set-cookie', cookieString);
}
return true;
}
exports.default = writeHeaders;