semantic-network
Version:
A utility library for manipulating a list of links that form a semantic interface to a network of resources.
82 lines • 3.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CheckHeaders = void 0;
var cache_control_parser_1 = require("cache-control-parser");
/**
* The goal is to leave all heavy lifting to the browser (ie implement caching rules). The key issue
* here is whether to return the in-memory resource or push through to the browser request (ie xhr).
*/
var CheckHeaders = exports.CheckHeaders = /** @class */ (function () {
function CheckHeaders() {
}
/**
* The main issue is whether "time" is up and a potential refresh is required. This calculation is the
* last-modified + max-age. The server provides this as an absolute date in the expires header.
*/
CheckHeaders.checkExpiresHeaderStrategy = function (headers, now) {
var _a;
var expires = (_a = headers.expires, _a === void 0 ? undefined : _a);
/*
* The goal is to leave all heavy lifting to the browser (ie implement caching rules). The key issue
* here is whether to return the in-memory resource or push through to the browser request (ie xhr).
*
*/
if (expires) {
return now > new Date(expires);
}
return false;
};
/**
* Caters for the non-sensical situation where the Expires header is BEHIND the Date header.
* @param headers
*/
CheckHeaders.checkExpiresBeforeDateHeaderStrategy = function (headers) {
var _a, _b;
var date = (_a = headers.date, _a === void 0 ? undefined : _a), expires = (_b = headers.expires, _b === void 0 ? undefined : _b);
return !!(expires && date && new Date(date) > new Date(expires));
};
/**
* Looks through the 'cache-control' headers and checks for max-age and no-cache.
*/
CheckHeaders.checkNoCacheHeaderStrategy = function (headers) {
var _a, _b, _c, _d;
var cacheControl = (_a = headers["cache-control"], _a === void 0 ? undefined : _a);
if (cacheControl) {
var
/* in seconds */
maxAge = (_b = (0, cache_control_parser_1.parse)(cacheControl), _c = _b["max-age"], _c === void 0 ? undefined : _c), noCache = (_d = _b["no-cache"], _d === void 0 ? undefined : _d);
if (maxAge === 0 || noCache) {
return true;
}
}
return false;
};
/**
* Looks through the 'cache-control' headers and checks for expiry as the last served ('date') plus max-age being reached
*/
CheckHeaders.checkMaxAgeHeaderStrategy = function (headers, now) {
var _a, _b, _c;
var cacheControl = (_a = headers["cache-control"], _a === void 0 ? undefined : _a),
// date will need to be exposed (eg as CORS headers—Access-Control-Expose-Headers: Date)
date = (_b = headers["date"], _b === void 0 ? undefined : _b);
if (date && cacheControl) {
var
/* in seconds */
maxAge = (_c = (0, cache_control_parser_1.parse)(cacheControl)["max-age"], _c === void 0 ? undefined : _c);
if (maxAge) {
var lastServed = new Date(date);
lastServed.setTime(lastServed.getTime() + (maxAge || 0));
return now > lastServed;
}
}
return false;
};
CheckHeaders.defaultStrategies = [
CheckHeaders.checkExpiresBeforeDateHeaderStrategy,
CheckHeaders.checkExpiresHeaderStrategy,
CheckHeaders.checkNoCacheHeaderStrategy,
CheckHeaders.checkMaxAgeHeaderStrategy,
];
return CheckHeaders;
}());
//# sourceMappingURL=checkHeaders.js.map