@bigmi/client
Version:
Reactive primitives for Bitcoin apps.
55 lines (54 loc) • 1.59 kB
JavaScript
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