UNPKG

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
"use strict"; 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