@grafana/faro-web-sdk
Version:
Faro instrumentations, metas, transports for web.
75 lines • 2.6 kB
JavaScript
import { faro } from '@grafana/faro-core';
export const webStorageType = {
session: 'sessionStorage',
local: 'localStorage',
};
/**
* Check if selected web storage mechanism is available.
* @param type storage mechanism to test availability for.
* @returns
*/
export function isWebStorageAvailable(type) {
var _a;
try {
let storage;
storage = window[type];
const testItem = '__faro_storage_test__';
storage.setItem(testItem, testItem);
storage.removeItem(testItem);
return true;
}
catch (error) {
// the above can throw
(_a = faro.internalLogger) === null || _a === void 0 ? void 0 : _a.info(`Web storage of type ${type} is not available. Reason: ${error}`);
return false;
}
}
/**
* Get item from SessionStorage or LocalStorage.
* @param key: the item key.
* @param webStorageMechanism: wether the item shall be received form local storage or session storage. Defaults to local storage.
*/
export function getItem(key, webStorageMechanism) {
if (isWebStorageTypeAvailable(webStorageMechanism)) {
return window[webStorageMechanism].getItem(key);
}
return null;
}
/**
* Store item in SessionStorage or LocalStorage.
* @param key: the item key.
* @param value: the item data.
* @param webStorageMechanism: wether the item shall be received form local storage or session storage. Defaults to local storage.
*/
export function setItem(key, value, webStorageMechanism) {
if (isWebStorageTypeAvailable(webStorageMechanism)) {
try {
window[webStorageMechanism].setItem(key, value);
}
catch (_error) {
// do nothing
}
}
}
/**
* Remove item from SessionStorage or LocalStorage.
* @param key: the item key.
* @param webStorageMechanism: wether the item shall be received form local storage or session storage. Defaults to local storage.
*/
export function removeItem(key, webStorageMechanism) {
if (isWebStorageTypeAvailable(webStorageMechanism)) {
window[webStorageMechanism].removeItem(key);
}
}
export const isLocalStorageAvailable = isWebStorageAvailable(webStorageType.local);
export const isSessionStorageAvailable = isWebStorageAvailable(webStorageType.session);
function isWebStorageTypeAvailable(webStorageMechanism) {
if (webStorageMechanism === webStorageType.local) {
return isLocalStorageAvailable;
}
if (webStorageMechanism === webStorageType.session) {
return isSessionStorageAvailable;
}
return false;
}
//# sourceMappingURL=webStorage.js.map