diff options
author | Luca Casonato <hello@lcas.dev> | 2023-05-03 23:08:42 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-03 23:08:42 +0200 |
commit | d905f20cadfd95b927027a3c597d578db606984e (patch) | |
tree | 70664b2187e1864cb713092c5e918bf044454cf5 | |
parent | 632395da89c767913cb88edfb437d02772fe84b9 (diff) |
fix(ext/kv): throw on the Kv constructor (#18978)
Closes #18963
---------
Co-authored-by: Bartek IwaĆczuk <biwanczuk@gmail.com>
-rw-r--r-- | cli/tests/unit/kv_test.ts | 6 | ||||
-rw-r--r-- | ext/kv/01_db.ts | 11 |
2 files changed, 15 insertions, 2 deletions
diff --git a/cli/tests/unit/kv_test.ts b/cli/tests/unit/kv_test.ts index 3a3476857..3c5efa588 100644 --- a/cli/tests/unit/kv_test.ts +++ b/cli/tests/unit/kv_test.ts @@ -1256,6 +1256,12 @@ dbTest("keys must be arrays", async (db) => { ); }); +Deno.test("Deno.Kv constructor throws", () => { + assertThrows(() => { + new Deno.Kv(); + }); +}); + // This function is never called, it is just used to check that all the types // are behaving as expected. async function _typeCheckingTests() { diff --git a/ext/kv/01_db.ts b/ext/kv/01_db.ts index ca37aa840..f8181cc2e 100644 --- a/ext/kv/01_db.ts +++ b/ext/kv/01_db.ts @@ -23,7 +23,7 @@ const encodeCursor: ( async function openKv(path: string) { const rid = await core.opAsync("op_kv_database_open", path); - return new Kv(rid); + return new Kv(rid, kvSymbol); } interface RawKvEntry { @@ -43,10 +43,17 @@ type RawValue = { value: bigint; }; +const kvSymbol = Symbol("KvRid"); + class Kv { #rid: number; - constructor(rid: number) { + constructor(rid: number = undefined, symbol: symbol = undefined) { + if (kvSymbol !== symbol) { + throw new TypeError( + "Deno.Kv can not be constructed, use Deno.openKv instead.", + ); + } this.#rid = rid; } |