History

Remove PGlite fallback from cloud app (#120)

Cloud always uses Postgres via Hyperdrive or DATABASE_URL.

Rhys Sullivan committed 7 months ago

Commit 2f65dae1 parent 22129163 files · +9 −29Browse files

Unified · Split

3 files
  1. apps/cloud/package.json +0 −1
  2. apps/cloud/src/env.ts +0 −2
  3. apps/cloud/src/services/db.ts +9 −26
apps/cloud/package.json+0−1
@@ -28,7 +28,6 @@ · 27 unmodified lines
2828 "react-dom": "catalog:"
2929 },
3030 "devDependencies": {
31− "@electric-sql/pglite": "^0.4.3",
3231 "@tailwindcss/vite": "catalog:",
3332 "@types/pg": "^8.15.4",
3433 "@types/react": "catalog:",
apps/cloud/src/env.ts+0−2
@@ -12,7 +12,6 @@ const sharedShape = { · 11 unmodified lines
1212
1313 const serverShape = {
1414 DATABASE_URL: Env.stringOr("DATABASE_URL", ""),
15− PGLITE_DATA_DIR: Env.stringOr("PGLITE_DATA_DIR", ".pglite"),
1615 ENCRYPTION_KEY: Env.stringOr(
1716 "ENCRYPTION_KEY",
1817 "local-dev-encryption-key",
@@ -28,7 +27,6 @@ type SharedEnv = Readonly<{ · 9 unmodified lines
2827
2928 type ServerEnv = SharedEnv & Readonly<{
3029 DATABASE_URL: string;
31− PGLITE_DATA_DIR: string;
3230 ENCRYPTION_KEY: string;
3331 WORKOS_API_KEY: string;
3432 WORKOS_CLIENT_ID: string;
apps/cloud/src/services/db.ts+9−26
@@ -30,6 +30,11 @@ const resolveHyperdriveUrl = Effect.tryPromise({ · 29 unmodified lines
3030
3131 const resolveConnectionString = resolveHyperdriveUrl.pipe(
3232 Effect.map((url) => url ?? (server.DATABASE_URL || undefined)),
33+ Effect.flatMap((url) =>
34+ url
35+ ? Effect.succeed(url)
36+ : Effect.fail(new Error("No database connection string available (set DATABASE_URL or configure Hyperdrive)")),
37+ ),
3338 );
3439
3540 // ---------------------------------------------------------------------------
@@ -47,22 +52,6 @@ const acquirePostgres = (connectionString: string) => · 11 unmodified lines
4752 const releasePostgres = ({ pool }: { pool: { end: () => Promise<void> } }) =>
4853 Effect.promise(() => pool.end()).pipe(Effect.orElseSucceed(() => undefined));
4954
50−// ---------------------------------------------------------------------------
51−// PGlite — local dev fallback
52−// ---------------------------------------------------------------------------
53−
54−const acquirePglite = Effect.tryPromise(async () => {
55− const { PGlite } = await import("@electric-sql/pglite");
56− const { drizzle } = await import("drizzle-orm/pglite");
57− const client = new PGlite(server.PGLITE_DATA_DIR);
58− return { db: drizzle(client, { schema }) as DrizzleDb, client };
59−});
60−
61−const releasePglite = ({ client }: { client: { close?: () => Promise<void> } }) =>
62− Effect.promise(() => client.close?.() ?? Promise.resolve()).pipe(
63− Effect.orElseSucceed(() => undefined),
64− );
65−
6655 // ---------------------------------------------------------------------------
6756 // Service
6857 // ---------------------------------------------------------------------------
@@ -75,16 +64,10 @@ export class DbService extends Context.Tag("@executor/cloud/DbService")< · 6 unmodified lines
7564 this,
7665 Effect.gen(function* () {
7766 const connectionString = yield* resolveConnectionString;
78−
79− if (connectionString) {
80− const { db } = yield* Effect.acquireRelease(
81− acquirePostgres(connectionString),
82− releasePostgres,
83− );
84− return db;
85− }
86−
87− const { db } = yield* Effect.acquireRelease(acquirePglite, releasePglite);
67+ const { db } = yield* Effect.acquireRelease(
68+ acquirePostgres(connectionString),
69+ releasePostgres,
70+ );
8871 return db;
8972 }),
9073 );