UNPKG

configcat-js

Version:

ConfigCat is a configuration as a service that lets you manage your features and configurations without actually deploying new code.

60 lines (59 loc) 2.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fromUtf8Base64 = exports.toUtf8Base64 = exports.getLocalStorage = exports.LocalStorageCache = void 0; var configcat_common_1 = require("configcat-common"); var LocalStorageCache = /** @class */ (function () { function LocalStorageCache(storage) { this.storage = storage; } LocalStorageCache.setup = function (kernel, localStorageGetter) { var localStorage = (localStorageGetter !== null && localStorageGetter !== void 0 ? localStorageGetter : getLocalStorage)(); if (localStorage) { kernel.defaultCacheFactory = function (options) { return new configcat_common_1.ExternalConfigCache(new LocalStorageCache(localStorage), options.logger); }; } return kernel; }; LocalStorageCache.prototype.set = function (key, value) { this.storage.setItem(key, toUtf8Base64(value)); }; LocalStorageCache.prototype.get = function (key) { var configString = this.storage.getItem(key); if (configString) { return fromUtf8Base64(configString); } }; return LocalStorageCache; }()); exports.LocalStorageCache = LocalStorageCache; function getLocalStorage() { var testKey = "__configcat_localStorage_test"; try { var storage = window.localStorage; storage.setItem(testKey, testKey); var retrievedItem = void 0; try { retrievedItem = storage.getItem(testKey); } finally { storage.removeItem(testKey); } if (retrievedItem === testKey) { return storage; } } catch (err) { /* intentional no-op */ } return null; } exports.getLocalStorage = getLocalStorage; function toUtf8Base64(str) { str = encodeURIComponent(str); str = str.replace(/%([0-9A-F]{2})/g, function (_, p1) { return String.fromCharCode(parseInt(p1, 16)); }); return btoa(str); } exports.toUtf8Base64 = toUtf8Base64; function fromUtf8Base64(str) { str = atob(str); str = str.replace(/[%\x80-\xFF]/g, function (m) { return "%" + m.charCodeAt(0).toString(16); }); return decodeURIComponent(str); } exports.fromUtf8Base64 = fromUtf8Base64;