UNPKG

@bigmi/client

Version:

Reactive primitives for Bitcoin apps.

55 lines (54 loc) 1.59 kB
import { deserialize } from "../utils/deserialize.js"; import { serialize } from "../utils/serialize.js"; //#region src/factories/createStorage.ts function createStorage(parameters) { const { deserialize: deserialize$1 = deserialize, key: prefix = "bigmi", serialize: serialize$1 = serialize, storage = noopStorage } = parameters; function unwrap(value) { if (value instanceof Promise) return value.then((x) => x).catch(() => null); return value; } return { ...storage, key: prefix, async getItem(key, defaultValue) { const unwrapped = await unwrap(storage.getItem(`${prefix}.${key}`)); if (unwrapped) return deserialize$1(unwrapped) ?? null; return defaultValue ?? null; }, async setItem(key, value) { const storageKey = `${prefix}.${key}`; if (value === null) await unwrap(storage.removeItem(storageKey)); else await unwrap(storage.setItem(storageKey, serialize$1(value))); }, async removeItem(key) { await unwrap(storage.removeItem(`${prefix}.${key}`)); } }; } const noopStorage = { getItem: () => null, setItem: () => {}, removeItem: () => {} }; function getDefaultStorage() { const storage = (() => { if (typeof window !== "undefined" && window.localStorage) return window.localStorage; return noopStorage; })(); return { getItem(key) { return storage.getItem(key); }, removeItem(key) { storage.removeItem(key); }, setItem(key, value) { try { storage.setItem(key, value); } catch {} } }; } //#endregion export { createStorage, getDefaultStorage, noopStorage }; //# sourceMappingURL=createStorage.js.map