UNPKG

simplify-storage

Version:

A library for working with different types of storage (localStorage, sessionStorage, cookieStorage)

148 lines 4.82 kB
class CookieStorage { get length() { return document.cookie ? document.cookie.split("; ").length : 0; } setItem(key, value) { document.cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}; path=/`; } getItem(key) { const matches = document.cookie.match(new RegExp(`(?:^|; )${encodeURIComponent(key).replace(/([.$?*|{}()[\]\\\/+^])/g, "\\$1")}=([^;]*)`)); return matches ? decodeURIComponent(matches[1]) : null; } removeItem(key) { document.cookie = `${encodeURIComponent(key)}=; max-age=-1; path=/`; } clear() { const items = this.getAllItems(); items.forEach((item) => this.removeItem(item.key)); } key(index) { const items = this.getAllItems(); return items.length > index ? items[index].key : null; } getAllItems() { return document.cookie.split("; ").map((cookie) => { const [key, value] = cookie.split("="); return { key: decodeURIComponent(key), value: decodeURIComponent(value) }; }); } hasItem(key) { return this.getItem(key) !== null; } } function setStorageByType(type) { switch (type.toLowerCase()) { case "l": case "local": return localStorage; case "s": case "session": return sessionStorage; case "c": case "cookie": return new CookieStorage(); default: throw new Error("Incorrect type of storage (session, local, cookie)"); } } function setInStorage(key, data, type = "local") { if (!key) { throw new Error("Not acceptable value of key in storage"); } if (data == null) { console.warn("Data is null or undefined, it may be dangerous"); } const storage = setStorageByType(type); const dataType = Array.isArray(data) ? "array" : typeof data; switch (dataType) { case "object": case "array": storage.setItem(key, `${dataType}_prfx_${JSON.stringify(data)}`); break; default: storage.setItem(key, `${dataType}_prfx_${String(data)}`); break; } } function changeStringStorageDataType(type, dataString) { let data; try { switch (type.toLowerCase()) { case "array": data = JSON.parse(dataString); if (!Array.isArray(data)) { throw new Error("Parsed data is not an array"); } break; case "object": data = JSON.parse(dataString); if (typeof data !== "object" || data === null || Array.isArray(data)) { throw new Error("Parsed data is not an object"); } break; case "number": data = Number(dataString); if (isNaN(data)) { throw new Error("Data is not a valid number"); } break; case "string": data = dataString; break; case "boolean": data = dataString.toLowerCase() === "true"; break; default: throw new Error("Unsupported type"); } } catch (error) { console.error("Error parsing data: ", error); return null; // Return null on error } return data; } function getFromStorage(key, type) { if (!key) { throw new Error("Impossible key"); } const storage = setStorageByType(type); const dataStorage = storage.getItem(key); if (!dataStorage) { return null; } const [dataType, dataString] = dataStorage.split("_prfx_"); return changeStringStorageDataType(dataType, dataString); } function removeFromStorage(key, type = "local") { if (!key) { throw new Error("Impossible key"); } const storage = setStorageByType(type); storage.removeItem(key); } function clearStorage(type = "local") { const storage = setStorageByType(type); storage.clear(); } function getAllStorageItems(type = "local") { const storage = setStorageByType(type); const items = []; for (let i = 0; i < storage.length; i++) { const key = storage.key(i); if (key) { const value = getFromStorage(key, type); items.push({ key, value }); } } return items; } function hasItemInStorage(key, type = "local") { if (!key) { throw new Error("Impossible key"); } const storage = setStorageByType(type); return storage.getItem(key) !== null; } export { setInStorage, getFromStorage, removeFromStorage, clearStorage, getAllStorageItems, hasItemInStorage, CookieStorage, }; //# sourceMappingURL=script.js.map