UNPKG

one

Version:

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

71 lines (68 loc) • 2.18 kB
import { open } from "@op-engineering/op-sqlite"; import { assertOpen, requireKey, requireName, requireValue } from "./keyValueValidate.native.js"; var CREATE_TABLE = `CREATE TABLE IF NOT EXISTS one_kv ( key TEXT PRIMARY KEY NOT NULL, value TEXT NOT NULL )`; function openKeyValue(options) { var name = requireName(options === null || options === void 0 ? void 0 : options.name); var db = open({ name: `one-kv-${name}.sqlite` }); try { db.executeSync(CREATE_TABLE); } catch (error) { db.close(); throw error; } return createStore(db); } function createStore(db) { var closed = false; function connection(verb) { assertOpen(verb, closed); return db; } return Object.freeze({ getItem(key) { var _rows_; var db2 = connection("Database.getItem"); requireKey("Database.getItem", key); var rows = db2.executeSync("SELECT value FROM one_kv WHERE key = ?", [key]).rows; if (rows.length === 0) return null; var value = (_rows_ = rows[0]) === null || _rows_ === void 0 ? void 0 : _rows_.value; if (typeof value !== "string") { throw new Error("Database.getItem: stored value is not a string"); } return value; }, setItem(key, value) { var db2 = connection("Database.setItem"); requireKey("Database.setItem", key); requireValue("Database.setItem", value); db2.executeSync("INSERT INTO one_kv (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value", [key, value]); }, removeItem(key) { var db2 = connection("Database.removeItem"); requireKey("Database.removeItem", key); db2.executeSync("DELETE FROM one_kv WHERE key = ?", [key]); }, getAllKeys() { var rows = connection("Database.getAllKeys").executeSync("SELECT key FROM one_kv ORDER BY key").rows; return rows.map(function(row) { if (typeof row.key !== "string") { throw new Error("Database.getAllKeys: stored key is not a string"); } return row.key; }); }, clear() { connection("Database.clear").executeSync("DELETE FROM one_kv"); }, close() { if (closed) return; closed = true; db.close(); } }); } export { openKeyValue }; //# sourceMappingURL=keyValue.native.js.map