0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-03 17:34:47 -05:00

fix(ext/kv): throw on the Kv constructor (#18978)

Closes #18963

---------

Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
This commit is contained in:
Luca Casonato 2023-05-03 23:08:42 +02:00 committed by GitHub
parent 632395da89
commit d905f20cad
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 2 deletions

View file

@ -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 // This function is never called, it is just used to check that all the types
// are behaving as expected. // are behaving as expected.
async function _typeCheckingTests() { async function _typeCheckingTests() {

View file

@ -23,7 +23,7 @@ const encodeCursor: (
async function openKv(path: string) { async function openKv(path: string) {
const rid = await core.opAsync("op_kv_database_open", path); const rid = await core.opAsync("op_kv_database_open", path);
return new Kv(rid); return new Kv(rid, kvSymbol);
} }
interface RawKvEntry { interface RawKvEntry {
@ -43,10 +43,17 @@ type RawValue = {
value: bigint; value: bigint;
}; };
const kvSymbol = Symbol("KvRid");
class Kv { class Kv {
#rid: number; #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; this.#rid = rid;
} }