62 lines
2.0 KiB
JavaScript
62 lines
2.0 KiB
JavaScript
|
import { encodeUrl } from '@tinyhttp/encode-url';
|
||
|
import { getRequestHeader } from '@tinyhttp/req';
|
||
|
import { vary } from '@tinyhttp/vary';
|
||
|
import mime from 'mime';
|
||
|
const charsetRegExp = /;\s*charset\s*=/;
|
||
|
export const setHeader = (res) => (field, val) => {
|
||
|
if (typeof field === 'string') {
|
||
|
let value = Array.isArray(val) ? val.map(String) : String(val);
|
||
|
// add charset to content-type
|
||
|
if (field.toLowerCase() === 'content-type') {
|
||
|
if (Array.isArray(value)) {
|
||
|
throw new TypeError('Content-Type cannot be set to an Array');
|
||
|
}
|
||
|
if (!charsetRegExp.test(value)) {
|
||
|
const charset = 'UTF-8'; // UTF-8 is the default charset for all types
|
||
|
if (typeof charset === 'string')
|
||
|
value += `; charset=${charset.toLowerCase()}`;
|
||
|
}
|
||
|
}
|
||
|
res.setHeader(field, value);
|
||
|
}
|
||
|
else {
|
||
|
for (const key in field) {
|
||
|
setHeader(res)(key, field[key]);
|
||
|
}
|
||
|
}
|
||
|
return res;
|
||
|
};
|
||
|
export const setLocationHeader = (req, res) => (url) => {
|
||
|
let loc = url;
|
||
|
// "back" is an alias for the referrer
|
||
|
if (url === 'back')
|
||
|
loc = getRequestHeader(req)('Referrer') || '/';
|
||
|
// set location
|
||
|
res.setHeader('Location', encodeUrl(loc));
|
||
|
return res;
|
||
|
};
|
||
|
export const getResponseHeader = (res) => {
|
||
|
return (field) => {
|
||
|
return res.getHeader(field);
|
||
|
};
|
||
|
};
|
||
|
export const setLinksHeader = (res) => (links) => {
|
||
|
let link = res.getHeader('Link') || '';
|
||
|
if (link)
|
||
|
link += ', ';
|
||
|
res.setHeader('Link', link +
|
||
|
Object.keys(links)
|
||
|
.map((rel) => `<${links[rel]}>; rel="${rel}"`)
|
||
|
.join(', '));
|
||
|
return res;
|
||
|
};
|
||
|
export const setVaryHeader = (res) => (field) => {
|
||
|
vary(res, field);
|
||
|
return res;
|
||
|
};
|
||
|
export const setContentType = (res) => (type) => {
|
||
|
const ct = type.indexOf('/') === -1 ? mime.getType(type) : type;
|
||
|
setHeader(res)('Content-Type', ct);
|
||
|
return res;
|
||
|
};
|
||
|
//# sourceMappingURL=headers.js.map
|