@whook/whook
Version:
Build strong and efficient REST web services.
57 lines • 1.71 kB
JavaScript
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 pickAllHeaderValues(name, headers)[0];
}
/**
* 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) {
const headerValues = headers && typeof headers[name] === 'undefined'
? []
: typeof headers[name] === 'string'
? [headers[name]]
: headers[name];
return headerValues;
}
//# sourceMappingURL=headers.js.map