Two related fixes:
1. Phone (and any LAN client) couldn't reach the web container because
the dev compose mapped 127.0.0.1:WEB_PORT instead of binding all
interfaces. Drop the loopback prefix.
2. Turbopack and NodeNext disagree on extension handling: bot's tsc
needs `.js` extensions in source imports; Turbopack's transpilePackages
path can't resolve those `.js` requests back to `.ts` source. Switch
to consuming the workspace packages via their compiled dist instead:
- packages/db + packages/shared point `main`/`exports` at ./dist/*
- drop transpilePackages from next.config.ts; web picks up the
compiled `.js` files directly
- dev compose command for web builds shared+db before running
`next dev` so dist is fresh when Turbopack starts
- put the `.js` extensions back in packages/db source so NodeNext
compilers (bot's tsc, packages/db's own tsc) are happy
16 lines
483 B
TypeScript
16 lines
483 B
TypeScript
import { drizzle, type NodePgDatabase } from "drizzle-orm/node-postgres";
|
|
import { Pool } from "pg";
|
|
import * as schema from "./schema.js";
|
|
|
|
export * from "./schema.js";
|
|
|
|
export type DB = NodePgDatabase<typeof schema>;
|
|
|
|
export type Reminder = typeof schema.reminders.$inferSelect;
|
|
|
|
export function createClient(databaseUrl: string): { db: DB; pool: Pool } {
|
|
const pool = new Pool({ connectionString: databaseUrl });
|
|
const db = drizzle(pool, { schema });
|
|
return { db, pool };
|
|
}
|