41 lines
1.4 KiB
JavaScript
41 lines
1.4 KiB
JavaScript
import { parseRange } from 'header-range-parser';
|
|
import { typeIs } from '@tinyhttp/type-is';
|
|
import { fresh } from './fresh.js';
|
|
export * from './accepts.js';
|
|
export * from '@tinyhttp/url';
|
|
export const getRequestHeader = (req) => {
|
|
return (header) => {
|
|
const lc = header.toLowerCase();
|
|
switch (lc) {
|
|
case 'referer':
|
|
case 'referrer':
|
|
return (req.headers.referrer || req.headers.referer);
|
|
default:
|
|
return req.headers[lc];
|
|
}
|
|
};
|
|
};
|
|
export const getRangeFromHeader = (req) => (size, options) => {
|
|
const range = getRequestHeader(req)('range');
|
|
if (!range)
|
|
return;
|
|
return parseRange(size, range, options);
|
|
};
|
|
export const getFreshOrStale = (req, res) => {
|
|
const method = req.method;
|
|
const status = res.statusCode;
|
|
// GET or HEAD for weak freshness validation only
|
|
if (method !== 'GET' && method !== 'HEAD')
|
|
return false;
|
|
// 2xx or 304 as per rfc2616 14.26
|
|
if ((status >= 200 && status < 300) || status === 304) {
|
|
return fresh(req.headers, {
|
|
etag: res.getHeader('ETag'),
|
|
'last-modified': res.getHeader('Last-Modified')
|
|
});
|
|
}
|
|
return false;
|
|
};
|
|
export const checkIfXMLHttpRequest = (req) => req.headers['x-requested-with'] === 'XMLHttpRequest';
|
|
export const reqIs = (req) => (...types) => typeIs(req.headers['content-type'], ...types);
|
|
//# sourceMappingURL=index.js.map
|