From cd949901c4b83056a2daa9a8740c29977cf39fae Mon Sep 17 00:00:00 2001 From: JacobLinCool Date: Thu, 14 Dec 2023 11:18:42 +0800 Subject: [PATCH] fix: d1 shim fallback logic --- .changeset/tricky-garlics-pump.md | 5 +++++ src/lib/server/d1.ts | 10 +++++----- src/lib/server/db/dbms.ts | 11 ++++++++--- 3 files changed, 18 insertions(+), 8 deletions(-) create mode 100644 .changeset/tricky-garlics-pump.md diff --git a/.changeset/tricky-garlics-pump.md b/.changeset/tricky-garlics-pump.md new file mode 100644 index 0000000..1dd97c9 --- /dev/null +++ b/.changeset/tricky-garlics-pump.md @@ -0,0 +1,5 @@ +--- +"d1-manager": patch +--- + +Change D1 shim fallback logic diff --git a/src/lib/server/d1.ts b/src/lib/server/d1.ts index c9e9926..670b992 100644 --- a/src/lib/server/d1.ts +++ b/src/lib/server/d1.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ // adapted from https://github.com/cloudflare/workers-sdk/blob/main/packages/wrangler/templates/d1-beta-facade.js -export class D1Database { +export class D1Shim { binding: Fetcher; constructor(binding: Fetcher) { @@ -102,11 +102,11 @@ export class D1Database { } class D1PreparedStatement { - database: D1Database; + database: D1Shim; statement: any; params: any; - constructor(database: D1Database, statement: any, values?: any) { + constructor(database: D1Shim, statement: any, values?: any) { this.database = database; this.statement = statement; this.params = values || []; @@ -160,7 +160,7 @@ class D1PreparedStatement { async all() { return firstIfArray(await this.database._send("/query", this.statement, this.params)); } - async raw() { + async raw(): Promise { const s = firstIfArray(await this.database._send("/query", this.statement, this.params)); const raw = []; for (const r in s.results) { @@ -169,7 +169,7 @@ class D1PreparedStatement { }); raw.push(entry); } - return raw; + return raw as any; } } diff --git a/src/lib/server/db/dbms.ts b/src/lib/server/db/dbms.ts index 72f0d13..51be0b5 100644 --- a/src/lib/server/db/dbms.ts +++ b/src/lib/server/db/dbms.ts @@ -1,16 +1,21 @@ -import { D1Database } from "../d1"; +import type { D1Database } from "@cloudflare/workers-types"; +import { D1Shim } from "../d1"; -export function DBMS(env: Record): Record { +export function DBMS( + env: Record, +): Record { const keys = Object.keys(env).filter( (k) => k.startsWith("DB") || k.startsWith("__D1_BETA__DB"), ); + console.log("Database Bindings:", keys.join(", ")); + const results: Record = {}; for (const k of keys) { const e = env[k]; if (typeof e === "string") { continue; } - const db = "fetch" in e ? new D1Database(e) : e; + const db = "prepare" in e ? e : new D1Shim(e); results[k.replace(/^(__D1_BETA__)?DB_?/, "") || "default"] = db; } return results;