UNPKG

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
"use strict"; 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;