/** * Copyright (c) HashiCorp, Inc. * SPDX-License-Identifier: MPL-2.0 */ export default { isLocalStorageSupported() { try { const key = `__storage__test`; window.localStorage.setItem(key, null); window.localStorage.removeItem(key); return true; } catch (e) { // modify the e object so we can customize the error message. // e.message is readOnly. e.errors = [`This is likely due to your browser's cookie settings.`]; throw e; } }, getItem(key) { const item = window.localStorage.getItem(key); return item && JSON.parse(item); }, setItem(key, val) { window.localStorage.setItem(key, JSON.stringify(val)); }, removeItem(key) { return window.localStorage.removeItem(key); }, keys() { return Object.keys(window.localStorage); }, cleanupStorage(string, keyToKeep) { if (!string) return; const relevantKeys = this.keys().filter((str) => str.startsWith(string)); relevantKeys?.forEach((key) => { if (key !== keyToKeep) { localStorage.removeItem(key); } }); }, };