UNPKG

sw-helper

Version:

[![NPM](http://img.shields.io/npm/v/preact-router.svg)](https://www.npmjs.com/package/preact-router)

66 lines 2.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const idb_1 = require("../dao/idb"); const log_1 = require("../extras/log"); var updateCache = function (options) { var requestClone = options.request.clone(); return fetch(requestClone) .then(function (response) { if (response && response.status === 200) { var responseClone = response.clone(); caches.open(options.cacheName).then(function (cache) { cache.put(options.getKey(options.request), responseClone); log_1.default('[SW] New Data Cached', options.request.url); if (options.config.maxAgeSeconds !== undefined) { idb_1.default.getDb(options.cacheName) .then((db) => idb_1.default.setTimestampForUrl(db, { url: JSON.stringify(options.getKey(options.request)), timestamp: Date.now() + (options.config.maxAgeSeconds * 1000) })) .then((db) => { let urls = idb_1.default.expireEntries(db); urls.then(urlsToDelete => { var deletionPromises = urlsToDelete.map(function (urlToDelete) { return cache.delete(urlToDelete); }); return Promise.all(deletionPromises).then(function () { log_1.default('Done with cache cleanup.'); }); }); }); } }); } return response; }) .catch(function (err) { log_1.default('[SW] Error Fetching & Caching New Data', err); }); }; exports.default = (e, cacheName, cacheFiles, getKey, config) => { e.respondWith(caches.match(getKey(e.request)) .then(function (response) { if (response && response.status === 200) { log_1.default("[SW] Found in Cache", e.request.url, response); if (config.maxAgeSeconds) { return idb_1.default.getDb(cacheName).then((db) => idb_1.default.getTimestampForUrl(db, JSON.stringify(getKey(e.request))) .then((result) => { if (result && result.timestamp > Date.now()) { return response; } else { log_1.default("[SW] Cache expired for ", e.request.url); return updateCache({ request: e.request, cacheName, getKey, config }); } })); } else { return response; } } else { return updateCache({ request: e.request, cacheName, getKey, config }); } })); }; //# sourceMappingURL=cacheFirst.js.map