UNPKG

sw-helper

Version:

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

91 lines 3.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var DB_PREFIX = 'sw-helper-'; var DB_VERSION = 1; var STORE_NAME = 'store'; var URL_PROPERTY = 'url'; var TIMESTAMP_PROPERTY = 'timestamp'; var cacheNameToDbPromise = {}; function openDb(cacheName) { return new Promise(function (resolve, reject) { var request = indexedDB.open(DB_PREFIX + cacheName, DB_VERSION); request.onupgradeneeded = function () { var objectStore = request.result.createObjectStore(STORE_NAME, { keyPath: URL_PROPERTY }); objectStore.createIndex(TIMESTAMP_PROPERTY, TIMESTAMP_PROPERTY, { unique: false }); }; request.onsuccess = function () { resolve(request.result); }; request.onerror = function () { reject(request.error); }; }); } function getDb(cacheName) { if (!(cacheName in cacheNameToDbPromise)) { cacheNameToDbPromise[cacheName] = openDb(cacheName); } return cacheNameToDbPromise[cacheName]; } function setTimestampForUrl(db, data) { return new Promise(function (resolve, reject) { var transaction = db.transaction(STORE_NAME, 'readwrite'); var objectStore = transaction.objectStore(STORE_NAME); objectStore.put(data); transaction.oncomplete = function () { resolve(db); }; transaction.onabort = function () { reject(transaction.error); }; }); } function expireOldEntries(db) { return new Promise(function (resolve, reject) { var urls = []; var transaction = db.transaction(STORE_NAME, 'readwrite'); var objectStore = transaction.objectStore(STORE_NAME); var index = objectStore.index(TIMESTAMP_PROPERTY); let now = Date.now(); index.openCursor().onsuccess = function (cursorEvent) { let cursor = cursorEvent.target.result; if (cursor) { if (now > cursor.value[TIMESTAMP_PROPERTY]) { let url = cursor.value[URL_PROPERTY]; urls.push(url); objectStore.delete(url); cursor.continue(); } } }; transaction.oncomplete = function () { resolve(urls); }; transaction.onabort = reject; }); } function expireEntries(db) { return expireOldEntries(db).then(function (oldUrls) { return oldUrls; }); } function getTimestampForUrl(db, url) { return new Promise(function (resolve, reject) { var transaction = db.transaction(STORE_NAME, 'readonly'); var objectStore = transaction.objectStore(STORE_NAME); var request = objectStore.get(url); request.onsuccess = function () { resolve(request.result); }; request.onerror = function () { reject(request.result); }; }); } exports.default = { getDb, setTimestampForUrl, expireEntries, getTimestampForUrl }; //# sourceMappingURL=idb.js.map