diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/tests/unit/kv_test.ts | 32 | ||||
-rw-r--r-- | cli/tsc/dts/lib.deno.unstable.d.ts | 16 |
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; } |