Examples
import { KV } from "@cross/kv";
const db = new KV();
await db.open("data/mydatabase.db");
await db.set(["users", 1], { name: "Alice", email: "alice@example.com" });
const user = await db.get(["users", 1]);
console.log(user);
await db.delete(["users", 1]);
const user = await db.get(["users", 1]);
console.log(user);
await db.set(["users", 1, "profile"], {
name: "Bob",
age: 30,
});
await db.set(["users", 1, "settings"], {
theme: "dark",
notifications: true,
});
await db.set(["users", 1, "contacts"], {
phone: "+1234567890",
address: "123 Main St",
});
const userData = await db.listAll(["users", 1]);
console.log(userData);
await db.set(["products", 1], { name: "Widget", price: 10 });
await db.set(["products", 2], { name: "Gadget", price: 20 });
await db.set(["products", 3], { name: "Doohickey", price: 30 });
await db.set(["products", 4], { name: "Thingamajig", price: 40 });
const products = await db.listAll(["products", { from: 2, to: 3 }]);
console.log(products);
await db.set(["products", "electronics", 1], { name: "Laptop" });
await db.set(["products", "electronics", 2], { name: "Phone" });
await db.set(["products", "books", 1], { name: "Novel" });
await db.set(["products", "books", 2], { name: "Textbook" });
const electronics = await db.listAll(["products", "electronics"]);
const someElectronics = await db.listAll([
"products",
"electronics",
{ from: 1, to: 1 },
]);
db.watch(["users", 1, "interests"], (entry) => {
console.log("User 1 interests updated:", entry.value);
});
await db.set(["users", 1, "interests"], ["coding", "gaming"]);
db.watch(["users", {}, "interests"], (entry) => {
const userId = entry.key[1];
console.log(`User ${userId} interests updated:`, entry.value);
});
await db.set(["users", 1, "interests"], ["coding"]);
await db.set(["users", 2, "interests"], ["sports"]);
const callback = (entry) => {
console.log("Changed:", entry);
};
db.watch(["users"], callback);
db.unwatch(["users"], callback);
for (let i = 1; i <= 10; i++) {
await db.set(["users", i], { id: i, name: `User ${i}` });
}
for await (const entry of db.iterate(["users"])) {
console.log(entry.key, entry.value);
}
for await (const entry of db.iterate(["users"], 5)) {
console.log(entry.key, entry.value);
}
for await (const entry of db.iterate(["users"], undefined, true)) {
console.log(entry.key, entry.value);
}
db.beginTransaction();
try {
await db.set(["accounts", "checking", "balance"], 1000);
await db.set(["accounts", "savings", "balance"], 5000);
await db.set(["accounts", "metadata", "lastUpdated"], new Date());
await db.endTransaction();
console.log("Transaction committed successfully");
} catch (error) {
console.error("Transaction failed:", error);
}
async function transfer(from: string, to: string, amount: number) {
db.beginTransaction();
try {
const fromBalance = (await db.get(["accounts", from, "balance"])) as number;
const toBalance = (await db.get(["accounts", to, "balance"])) as number;
if (fromBalance < amount) {
throw new Error("Insufficient funds");
}
await db.set(["accounts", from, "balance"], fromBalance - amount);
await db.set(["accounts", to, "balance"], toBalance + amount);
await db.endTransaction();
console.log(`Transferred ${amount} from ${from} to ${to}`);
} catch (error) {
console.error("Transfer failed:", error);
}
}
await transfer("checking", "savings", 100);
const db = new KV();
await db.open("data/mydatabase.db");
db.on("sync", (eventData) => {
switch (eventData.result) {
case "ready":
console.log("No new updates");
break;
case "success":
console.log("Synchronization successful, new transactions added");
break;
case "ledgerInvalidated":
console.log(
"Ledger recreated, database reopened and index resynchronized",
);
break;
case "error":
console.error(
"An error occurred during synchronization:",
eventData.error,
);
break;
}
});
const db = new KV({
autoSync: false,
});
await db.open("data/mydatabase.db");
await db.sync();
const data = await db.get(["my", "key"]);
await db.vacuum();
console.log("Database optimized");
await db.set(["config", "name"], "MyApp");
await db.set(["config", "version"], 1);
await db.set(["config", "enabled"], true);
await db.set(["config", "tags"], ["tag1", "tag2", "tag3"]);
await db.set(["config", "created"], new Date());
await db.set(
["config", "mapping"],
new Map([["key1", "value1"], ["key2", "value2"]]),
);
await db.set(["config", "unique"], new Set([1, 2, 3]));
await db.set(["config", "settings"], {
ui: {
theme: "dark",
fontSize: 14,
},
features: {
experimental: true,
beta: ["feature1", "feature2"],
},
});