Skip to content

Commit 5dec05b

Browse files
committed
feat(db): switch to @clawnify/db dual-binding adapter
Templates now work on both prod (Workers for Platforms + D1) and preview (Dynamic Workers Facet via env.STORAGE). The shared adapter in @clawnify/db detects the binding at runtime; no template-side branching needed. Fixes the 'Cannot read properties of undefined (reading prepare)' error on <slug>.draft.clawnify.com where env.DB is not bound.
1 parent 721458c commit 5dec05b

4 files changed

Lines changed: 11 additions & 36 deletions

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"typecheck": "tsc --noEmit"
1111
},
1212
"dependencies": {
13+
"@clawnify/db": "^0.2.0",
1314
"@radix-ui/react-dialog": "^1.1.15",
1415
"@radix-ui/react-dropdown-menu": "^2.1.16",
1516
"@radix-ui/react-label": "^2.1.8",

pnpm-lock.yaml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/server/db.ts

Lines changed: 1 addition & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1 @@
1-
let _db: D1Database;
2-
3-
export function initDB(db: D1Database) {
4-
_db = db;
5-
}
6-
7-
export async function query<T = Record<string, unknown>>(
8-
sql: string,
9-
params: unknown[] = [],
10-
): Promise<T[]> {
11-
const stmt = _db.prepare(sql).bind(...params);
12-
const { results } = await stmt.all<T>();
13-
return results ?? [];
14-
}
15-
16-
export async function get<T = Record<string, unknown>>(
17-
sql: string,
18-
params: unknown[] = [],
19-
): Promise<T | undefined> {
20-
const stmt = _db.prepare(sql).bind(...params);
21-
const row = await stmt.first<T>();
22-
return row ?? undefined;
23-
}
24-
25-
export async function run(
26-
sql: string,
27-
params: unknown[] = [],
28-
): Promise<{ changes: number; lastInsertRowid: number }> {
29-
const stmt = _db.prepare(sql).bind(...params);
30-
const result = await stmt.run();
31-
return {
32-
changes: result.meta?.changes ?? 0,
33-
lastInsertRowid: Number(result.meta?.last_row_id ?? 0),
34-
};
35-
}
1+
export { initDB, query, get, run } from "@clawnify/db";

src/server/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ type Env = { Bindings: { DB: D1Database } };
77
const app = new Hono<Env>();
88

99
app.use("*", async (c, next) => {
10-
initDB(c.env.DB);
10+
initDB(c.env);
1111
await next();
1212
});
1313

0 commit comments

Comments
 (0)