summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/tests/unit/kv_test.ts32
-rw-r--r--cli/tsc/dts/lib.deno.unstable.d.ts16
2 files changed, 47 insertions, 1 deletions
diff --git a/cli/tests/unit/kv_test.ts b/cli/tests/unit/kv_test.ts
index f46099ed1..28c913f21 100644
--- a/cli/tests/unit/kv_test.ts
+++ b/cli/tests/unit/kv_test.ts
@@ -2216,3 +2216,35 @@ dbTest("key watch", async (db) => {
await work;
await reader.cancel();
});
+
+dbTest("set with key versionstamp suffix", async (db) => {
+ const result1 = await Array.fromAsync(db.list({ prefix: ["a"] }));
+ assertEquals(result1, []);
+
+ const setRes1 = await db.set(["a", db.commitVersionstamp()], "b");
+ assert(setRes1.ok);
+ assert(setRes1.versionstamp > ZERO_VERSIONSTAMP);
+
+ const result2 = await Array.fromAsync(db.list({ prefix: ["a"] }));
+ assertEquals(result2.length, 1);
+ assertEquals(result2[0].key[1], setRes1.versionstamp);
+ assertEquals(result2[0].value, "b");
+ assertEquals(result2[0].versionstamp, setRes1.versionstamp);
+
+ const setRes2 = await db.atomic().set(["a", db.commitVersionstamp()], "c")
+ .commit();
+ assert(setRes2.ok);
+ assert(setRes2.versionstamp > setRes1.versionstamp);
+
+ const result3 = await Array.fromAsync(db.list({ prefix: ["a"] }));
+ assertEquals(result3.length, 2);
+ assertEquals(result3[1].key[1], setRes2.versionstamp);
+ assertEquals(result3[1].value, "c");
+ assertEquals(result3[1].versionstamp, setRes2.versionstamp);
+
+ await assertRejects(
+ async () => await db.set(["a", db.commitVersionstamp(), "a"], "x"),
+ TypeError,
+ "expected string, number, bigint, ArrayBufferView, boolean",
+ );
+});
diff --git a/cli/tsc/dts/lib.deno.unstable.d.ts b/cli/tsc/dts/lib.deno.unstable.d.ts
index 7778870e1..f1c239ed2 100644
--- a/cli/tsc/dts/lib.deno.unstable.d.ts
+++ b/cli/tsc/dts/lib.deno.unstable.d.ts
@@ -1488,7 +1488,13 @@ declare namespace Deno {
*
* @category KV
*/
- export type KvKeyPart = Uint8Array | string | number | bigint | boolean;
+ export type KvKeyPart =
+ | Uint8Array
+ | string
+ | number
+ | bigint
+ | boolean
+ | symbol;
/** **UNSTABLE**: New API, yet to be vetted.
*
@@ -2099,6 +2105,14 @@ declare namespace Deno {
*/
close(): void;
+ /**
+ * Get a symbol that represents the versionstamp of the current atomic
+ * operation. This symbol can be used as the last part of a key in
+ * `.set()`, both directly on the `Kv` object and on an `AtomicOperation`
+ * object created from this `Kv` instance.
+ */
+ commitVersionstamp(): symbol;
+
[Symbol.dispose](): void;
}