UNPKG

@whook/whook

Version:

Build strong and efficient REST web services.

61 lines 1.86 kB
import { YError } from 'yerror'; import { identity } from './utils.js'; export function mergeVaryHeaders(baseHeader, addedValue) { if (addedValue.includes(',')) { throw new YError('E_BAD_VARY_VALUE', [addedValue]); } const baseHeaderValues = (baseHeader instanceof Array ? baseHeader : [baseHeader]) .map((value) => value .split(',') .filter(identity) .map((v) => v.trim().toLowerCase())) .reduce((allValues, values) => [...allValues, ...values], []); if (baseHeaderValues.includes('*') || addedValue.trim() === '*') { return '*'; } return [ ...new Set([...baseHeaderValues, addedValue.trim().toLowerCase()].filter(identity)), ].join(', '); } export function lowerCaseHeaders(object) { return Object.keys(object).reduce((finalObject, key) => ({ ...finalObject, [key.toLowerCase()]: object[key], }), {}); } /** * Pick the first header value if exists * @function * @param {string} name * The header name * @param {Object} headers * The headers map * @return {string} * The value if defined. */ export function pickFirstHeaderValue(name, headers) { return headers[name] instanceof Array ? headers[name][0] : headers[name]; } /** * Pick header values * @function * @param {string} name * The header name * @param {Object} headers * The headers map * @return {Array} * The values in an array. */ export function pickAllHeaderValues(name, headers = {}) { return headers[name] instanceof Array ? headers[name] : [headers[name]]; } export function castWhookHeaders(headers = {}) { const whookHeaders = {}; for (const key in headers) { if (typeof headers[key] !== 'undefined') { whookHeaders[key] = headers[key]; } } return whookHeaders; } //# sourceMappingURL=headers.js.map