1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import { extractValInfo } from "https://esm.town/v/pomdtr/extractValInfo?v=26";
import { openKv } from "https://esm.town/v/pomdtr/kv?v=3";
import { sqlite } from "https://esm.town/v/std/sqlite?v=6";
import { DenoSyntheticKV } from "https://esm.town/v/stevekrouse/DenoSyntheticKV?v=10";
import { createStore, sqliteStore } from "https://esm.town/v/vladimyr/keyvhqSqlite";
import Keyv from "npm:@keyvhq/core";
type TestObj = { test: number };
// setup openKv
const kv1 = openKv<TestObj>();
// setup Keyv
const { slug: namespace } = extractValInfo(import.meta.url);
// const store = sqliteStore; /* same as: const store = createStore({ table: "keyv" }); */
const store = createStore({ table: "keyv" });
const kv2 = new Keyv<TestObj>({ namespace, store });
// setup DenoSyntheticKV
const kv3 = new DenoSyntheticKV("keyv");
await kv1.set("foo", { test: 42 });
console.log("@std/sqlite:", (await sqlite.execute("select * from keyv")).rows);
console.log("openKv:", await kv1.get("foo"));
console.log("Keyv:", await kv2.get("foo"));
// doesn't work because DenoSyntheticKV serializes key to {"json":"vladimyr/kv_example:foo"}
console.log("DenoSyntheticKV:", await kv3.get(`${namespace}:foo`));
let data = await kv2.get("foo");
data.test += 1;
await kv2.set("foo", data);
console.log("\n@std/sqlite:", (await sqlite.execute("select * from keyv")).rows);
console.log("openKv:", await kv1.get("foo"));
console.log("Keyv:", await kv2.get("foo"));
// doesn't work because DenoSyntheticKV serializes key to {"json":"vladimyr/kv_example:foo"}
console.log("DenoSyntheticKV:", await kv3.get(`${namespace}:foo`));
👆 This is a val. Vals are TypeScript snippets of code, written in the browser and run on our servers. Create scheduled functions, email yourself, and persist small pieces of data — all from the browser.