@neuroequality/neuroadapt-core
Version:
Core sensory, cognitive, and preference management for NeuroAdapt SDK
100 lines (99 loc) • 2.54 kB
JavaScript
class LocalStoragePreferenceStorage {
constructor(prefix = "neuroadapt:preferences:") {
this.prefix = prefix;
}
async get(key) {
try {
const data = localStorage.getItem(this.getStorageKey(key));
if (!data) {
return null;
}
return JSON.parse(data);
} catch (error) {
console.warn(`Failed to get preferences for key "${key}":`, error);
return null;
}
}
async set(key, preferences) {
try {
const serialized = JSON.stringify(preferences, null, 2);
localStorage.setItem(this.getStorageKey(key), serialized);
} catch (error) {
throw new Error(`Failed to save preferences for key "${key}": ${error instanceof Error ? error.message : "Unknown error"}`);
}
}
async remove(key) {
try {
localStorage.removeItem(this.getStorageKey(key));
} catch (error) {
console.warn(`Failed to remove preferences for key "${key}":`, error);
}
}
async list() {
try {
const keys = [];
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
if (key == null ? void 0 : key.startsWith(this.prefix)) {
keys.push(key.substring(this.prefix.length));
}
}
return keys;
} catch (error) {
console.warn("Failed to list preference keys:", error);
return [];
}
}
async exists(key) {
try {
return localStorage.getItem(this.getStorageKey(key)) !== null;
} catch (error) {
console.warn(`Failed to check existence for key "${key}":`, error);
return false;
}
}
getStorageKey(key) {
return `${this.prefix}${key}`;
}
/**
* Clear all preferences from storage (for testing/reset)
*/
async clear() {
try {
const keys = await this.list();
for (const key of keys) {
await this.remove(key);
}
} catch (error) {
console.warn("Failed to clear preferences storage:", error);
}
}
}
class MemoryPreferenceStorage {
constructor() {
this.storage = /* @__PURE__ */ new Map();
}
async get(key) {
return this.storage.get(key) ?? null;
}
async set(key, preferences) {
this.storage.set(key, preferences);
}
async remove(key) {
this.storage.delete(key);
}
async list() {
return Array.from(this.storage.keys());
}
async exists(key) {
return this.storage.has(key);
}
async clear() {
this.storage.clear();
}
}
export {
LocalStoragePreferenceStorage,
MemoryPreferenceStorage
};
//# sourceMappingURL=storage.js.map