summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Casonato <hello@lcas.dev>2023-05-03 23:08:42 +0200
committerGitHub <noreply@github.com>2023-05-03 23:08:42 +0200
commitd905f20cadfd95b927027a3c597d578db606984e (patch)
tree70664b2187e1864cb713092c5e918bf044454cf5
parent632395da89c767913cb88edfb437d02772fe84b9 (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.ts6
-rw-r--r--ext/kv/01_db.ts11
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;
}