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
28 "react-dom": "catalog:"28 "react-dom": "catalog:"
29 },29 },
30 "devDependencies": {30 "devDependencies": {
31 "@electric-sql/pglite": "^0.4.3",
32 "@tailwindcss/vite": "catalog:",31 "@tailwindcss/vite": "catalog:",
33 "@types/pg": "^8.15.4",32 "@types/pg": "^8.15.4",
34 "@types/react": "catalog:",33 "@types/react": "catalog:",
apps/cloud/src/env.ts+0−2
@@ -12,7 +12,6 @@ const sharedShape = { · 11 unmodified lines
12 12
13const serverShape = {13const serverShape = {
14 DATABASE_URL: Env.stringOr("DATABASE_URL", ""),14 DATABASE_URL: Env.stringOr("DATABASE_URL", ""),
15 PGLITE_DATA_DIR: Env.stringOr("PGLITE_DATA_DIR", ".pglite"),
16 ENCRYPTION_KEY: Env.stringOr(15 ENCRYPTION_KEY: Env.stringOr(
17 "ENCRYPTION_KEY",16 "ENCRYPTION_KEY",
18 "local-dev-encryption-key",17 "local-dev-encryption-key",
@@ -28,7 +27,6 @@ type SharedEnv = Readonly<{ · 9 unmodified lines
28 27
29type ServerEnv = SharedEnv & Readonly<{28type ServerEnv = SharedEnv & Readonly<{
30 DATABASE_URL: string;29 DATABASE_URL: string;
31 PGLITE_DATA_DIR: string;
32 ENCRYPTION_KEY: string;30 ENCRYPTION_KEY: string;
33 WORKOS_API_KEY: string;31 WORKOS_API_KEY: string;
34 WORKOS_CLIENT_ID: string;32 WORKOS_CLIENT_ID: string;
apps/cloud/src/services/db.ts+9−26
@@ -30,6 +30,11 @@ const resolveHyperdriveUrl = Effect.tryPromise({ · 29 unmodified lines
30 30
31const resolveConnectionString = resolveHyperdriveUrl.pipe(31const resolveConnectionString = resolveHyperdriveUrl.pipe(
32 Effect.map((url) => url ?? (server.DATABASE_URL || undefined)),32 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 ),
33);38);
34 39
35// ---------------------------------------------------------------------------40// ---------------------------------------------------------------------------
@@ -47,22 +52,6 @@ const acquirePostgres = (connectionString: string) => · 11 unmodified lines
47const releasePostgres = ({ pool }: { pool: { end: () => Promise<void> } }) =>52const releasePostgres = ({ pool }: { pool: { end: () => Promise<void> } }) =>
48 Effect.promise(() => pool.end()).pipe(Effect.orElseSucceed(() => undefined));53 Effect.promise(() => pool.end()).pipe(Effect.orElseSucceed(() => undefined));
49 54
50// ---------------------------------------------------------------------------
51// PGlite — local dev fallback
52// ---------------------------------------------------------------------------
53
54const 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
61const releasePglite = ({ client }: { client: { close?: () => Promise<void> } }) =>
62 Effect.promise(() => client.close?.() ?? Promise.resolve()).pipe(
63 Effect.orElseSucceed(() => undefined),
64 );
65
66// ---------------------------------------------------------------------------55// ---------------------------------------------------------------------------
67// Service56// Service
68// ---------------------------------------------------------------------------57// ---------------------------------------------------------------------------
@@ -75,16 +64,10 @@ export class DbService extends Context.Tag("@executor/cloud/DbService")< · 6 unmodified lines
75 this,64 this,
76 Effect.gen(function* () {65 Effect.gen(function* () {
77 const connectionString = yield* resolveConnectionString;66 const connectionString = yield* resolveConnectionString;
78 67 const { db } = yield* Effect.acquireRelease(
79 if (connectionString) {68 acquirePostgres(connectionString),
80 const { db } = yield* Effect.acquireRelease(69 releasePostgres,
81 acquirePostgres(connectionString),70 );
82 releasePostgres,
83 );
84 return db;
85 }
86
87 const { db } = yield* Effect.acquireRelease(acquirePglite, releasePglite);
88 return db;71 return db;
89 }),72 }),
90 );73 );