UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

54 lines (51 loc) • 1.57 kB
import { assertOpen, requireKey, requireName, requireValue } from "./keyValueValidate.mjs"; function storagePrefix(name) { return `One.Database.kv|${name}|`; } function openKeyValue(options) { const name = requireName(options?.name); if (typeof localStorage === "undefined") { throw new Error("Database.openKeyValue requires localStorage in this runtime"); } const prefix = storagePrefix(name); let closed = false; function matchingKeys() { const keys = []; for (let index = 0; index < localStorage.length; index++) { const stored = localStorage.key(index); if (stored?.startsWith(prefix)) keys.push(stored); } return keys; } return Object.freeze({ getItem(key) { assertOpen("Database.getItem", closed); requireKey("Database.getItem", key); return localStorage.getItem(prefix + key); }, setItem(key, value) { assertOpen("Database.setItem", closed); requireKey("Database.setItem", key); requireValue("Database.setItem", value); localStorage.setItem(prefix + key, value); }, removeItem(key) { assertOpen("Database.removeItem", closed); requireKey("Database.removeItem", key); localStorage.removeItem(prefix + key); }, getAllKeys() { assertOpen("Database.getAllKeys", closed); return matchingKeys().map((stored) => stored.slice(prefix.length)).sort(); }, clear() { assertOpen("Database.clear", closed); for (const stored of matchingKeys()) localStorage.removeItem(stored); }, close() { closed = true; } }); } export { openKeyValue }; //# sourceMappingURL=keyValue.mjs.map