UNPKG

@valo/cache

Version:
187 lines 7.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CacheService = void 0; var tslib_1 = require("tslib"); var CacheService = /** @class */ (function () { function CacheService(dbName, dbVersion, verbose) { if (dbVersion === void 0) { dbVersion = 1; } if (verbose === void 0) { verbose = false; } this.dbName = dbName; this.dbVersion = dbVersion; this.verbose = verbose; this.storeName = "CacheStore"; this.db = null; this.db = null; } /** * Initialize the database */ CacheService.prototype.init = function () { return tslib_1.__awaiter(this, void 0, void 0, function () { var _this = this; return tslib_1.__generator(this, function (_a) { if (this.db) { return [2 /*return*/, true]; } return [2 /*return*/, new Promise(function (resolve, reject) { var request = indexedDB.open(_this.dbName, _this.dbVersion); request.onerror = reject.bind(null, false); request.onsuccess = function () { _this.db = request.result; resolve(true); }; request.onupgradeneeded = function (event) { var db = request.result; if (db.objectStoreNames.contains(_this.storeName)) { _this.log("Clearing out version " + event.oldVersion + " cache"); db.deleteObjectStore(_this.storeName); } _this.log("Creating version " + event.newVersion + " cache"); db.createObjectStore(_this.storeName); }; })]; }); }); }; /** * Retrieve data from the cache * @param cacheKey */ CacheService.prototype.get = function (cacheKey) { return tslib_1.__awaiter(this, void 0, void 0, function () { var _this = this; return tslib_1.__generator(this, function (_a) { return [2 /*return*/, new Promise(function (resolve, reject) { if (!_this.db) { reject("Database doesn't exist."); return; } var store = _this.db.transaction([_this.storeName]).objectStore(_this.storeName); var request = store.get(cacheKey); request.onerror = reject.bind(null, "Error getting cached data " + cacheKey); request.onsuccess = function (event) { if (request.result) { var result = request.result; var storeObj = JSON.parse(result); if (new Date(storeObj.expiration) <= new Date()) { _this.delete(cacheKey); resolve(undefined); } resolve(storeObj.value); } else { reject("Nothing found for " + cacheKey); } }; })]; }); }); }; /** * Add data to the cache * @param cacheKey * @param data * @param expire */ CacheService.prototype.put = function (cacheKey, data, expire) { return tslib_1.__awaiter(this, void 0, void 0, function () { var _this = this; return tslib_1.__generator(this, function (_a) { return [2 /*return*/, new Promise(function (resolve, reject) { if (!_this.db) { reject("Database doesn't exist."); return; } var store = _this.db.transaction([_this.storeName], 'readwrite').objectStore(_this.storeName); var request = store.put(_this.createPersistable(data, expire), cacheKey); request.onerror = function (err) { _this.log("Failed to store data cache: " + err); resolve(false); }; request.onsuccess = function (err) { _this.log("Successfully stored " + cacheKey + " cache data"); resolve(true); }; })]; }); }); }; /** * Delete the key from the cache * @param cacheKey */ CacheService.prototype.delete = function (cacheKey) { return tslib_1.__awaiter(this, void 0, void 0, function () { var _this = this; return tslib_1.__generator(this, function (_a) { return [2 /*return*/, new Promise(function (resolve, reject) { if (!_this.db) { reject("Database doesn't exist."); return; } var store = _this.db.transaction([_this.storeName], 'readwrite').objectStore(_this.storeName); var request = store.delete(cacheKey); request.onerror = function (err) { _this.log("Failed to delete cache: " + err); reject("Failed to delete cache: " + err); }; request.onsuccess = function (err) { _this.log("Successfully stored " + cacheKey + " cache data"); resolve(); }; })]; }); }); }; /** * Flush the whole cache store */ CacheService.prototype.flush = function () { return tslib_1.__awaiter(this, void 0, void 0, function () { var _this = this; return tslib_1.__generator(this, function (_a) { return [2 /*return*/, new Promise(function (resolve, reject) { if (!_this.db) { reject("Database doesn't exist."); return; } var store = _this.db.transaction([_this.storeName], 'readwrite').objectStore(_this.storeName); var request = store.clear(); request.onerror = function (err) { _this.log("Failed to clear cache: " + err); reject("Failed to clear cache: " + err); }; request.onsuccess = function (err) { _this.log("Successfully cleared cache store"); resolve(); }; })]; }); }); }; /** * Creates a presistable object for the store * @param data * @param expire */ CacheService.prototype.createPersistable = function (data, expire) { if (typeof expire === "undefined") { // Create expiration date - 1 hour expire = new Date(); expire.setTime(expire.getTime() + 1 * 3600000); } return JSON.stringify({ value: data, expiration: expire }); }; /** * Logging * @param message */ CacheService.prototype.log = function (message) { if (this.verbose) { console.log(message); } }; return CacheService; }()); exports.CacheService = CacheService; //# sourceMappingURL=CacheService.js.map