From ca63d42d670837b918081d1fc1ebada553814b4c Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Wed, 2 Sep 2026 14:56:45 -0700 Subject: [PATCH] refactor(shared): move the node:sqlite Effect SQL client into shared (#7272) Co-authored-by: Claude Opus 5 (1M context) --- apps/server/scripts/migrate-dev-db.test.ts | 2 +- apps/server/scripts/migrate-dev-db.ts | 2 +- apps/server/scripts/t3-sqlite-state.test.ts | 2 +- apps/server/scripts/t3-sqlite-state.ts | 2 +- apps/server/src/persistence/Layers/Sqlite.ts | 2 +- .../Migrations/016_CanonicalizeModelSelections.test.ts | 2 +- .../Migrations/019_ProjectionSnapshotLookupIndexes.test.ts | 2 +- .../024_BackfillProjectionThreadShellSummary.test.ts | 2 +- .../025_CleanupInvalidProjectionPendingApprovals.test.ts | 2 +- .../Migrations/026_CanonicalizeModelSelectionOptions.test.ts | 2 +- .../Migrations/027_028_ProviderInstanceIdColumns.test.ts | 2 +- .../029_ProjectionThreadDetailOrderingIndexes.test.ts | 2 +- .../Migrations/031_AuthAuthorizationScopes.test.ts | 2 +- .../Migrations/035_ProjectionThreadTitleRegeneration.test.ts | 2 +- .../Migrations/040_ProjectionProjectFaviconPath.test.ts | 2 +- .../Migrations/041_AuthSessionClientConnection.test.ts | 2 +- .../Migrations/042_ProjectionThreadLinkedPullRequest.test.ts | 2 +- packages/shared/package.json | 4 ++++ .../shared/src/nodeSqliteClient.test.ts | 2 +- .../shared/src/nodeSqliteClient.ts | 0 20 files changed, 22 insertions(+), 18 deletions(-) rename apps/server/src/persistence/NodeSqliteClient.test.ts => packages/shared/src/nodeSqliteClient.test.ts (97%) rename apps/server/src/persistence/NodeSqliteClient.ts => packages/shared/src/nodeSqliteClient.ts (100%) diff --git a/apps/server/scripts/migrate-dev-db.test.ts b/apps/server/scripts/migrate-dev-db.test.ts index ddc5b7d57f86f0c0643321d20398951486069865..88308d370a6b611fb939471499f437e24365658d 100644 --- a/apps/server/scripts/migrate-dev-db.test.ts +++ b/apps/server/scripts/migrate-dev-db.test.ts @@ -6,7 +6,7 @@ import * as Path from "effect/Path"; import * as SqlClient from "effect/unstable/sql/SqlClient"; import { runMigrations } from "../src/persistence/Migrations.ts"; -import * as NodeSqliteClient from "../src/persistence/NodeSqliteClient.ts"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; import { runMigrateDevDb } from "./migrate-dev-db.ts"; const withDatabase = ( diff --git a/apps/server/scripts/migrate-dev-db.ts b/apps/server/scripts/migrate-dev-db.ts index 0958f2149f45f36ac907014ec34a8c1a4b8ecbee..5670f0d52b045bbeb93af95ebb13ca362c5d626a 100644 --- a/apps/server/scripts/migrate-dev-db.ts +++ b/apps/server/scripts/migrate-dev-db.ts @@ -39,7 +39,7 @@ import * as SqlClient from "effect/unstable/sql/SqlClient"; import { Command, Flag } from "effect/unstable/cli"; import { migrationManifest, runMigrations } from "../src/persistence/Migrations.ts"; -import * as NodeSqliteClient from "../src/persistence/NodeSqliteClient.ts"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; export class MigrateDevDbNotInWorktreeError extends Schema.TaggedErrorClass()( "MigrateDevDbNotInWorktreeError", diff --git a/apps/server/scripts/t3-sqlite-state.test.ts b/apps/server/scripts/t3-sqlite-state.test.ts index d1ef1368918bf411bc98bad56a3773e21a676fd6..ec236f4a67c0e8a61415b634a199282c67260905 100644 --- a/apps/server/scripts/t3-sqlite-state.test.ts +++ b/apps/server/scripts/t3-sqlite-state.test.ts @@ -5,7 +5,7 @@ import * as FileSystem from "effect/FileSystem"; import * as Path from "effect/Path"; import * as SqlClient from "effect/unstable/sql/SqlClient"; -import * as NodeSqliteClient from "../src/persistence/NodeSqliteClient.ts"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; import { runSqliteState } from "./t3-sqlite-state.ts"; const createFixtureDatabase = Effect.fn("createSqliteStateFixtureDatabase")(function* ( diff --git a/apps/server/scripts/t3-sqlite-state.ts b/apps/server/scripts/t3-sqlite-state.ts index de0402b36472aeaf2d62e26c918be3d6daab4be0..c34f4750c14cd731cd8b582ef67b7c815ea795ca 100644 --- a/apps/server/scripts/t3-sqlite-state.ts +++ b/apps/server/scripts/t3-sqlite-state.ts @@ -15,7 +15,7 @@ import * as Schema from "effect/Schema"; import * as SqlClient from "effect/unstable/sql/SqlClient"; import { Argument, Command, Flag } from "effect/unstable/cli"; -import * as NodeSqliteClient from "../src/persistence/NodeSqliteClient.ts"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; export const SqliteStateOperation = Schema.Literals(["query", "exec"]); export type SqliteStateOperation = typeof SqliteStateOperation.Type; diff --git a/apps/server/src/persistence/Layers/Sqlite.ts b/apps/server/src/persistence/Layers/Sqlite.ts index ec1ffdefac0fec0c9c4ea4a1a7f28f0491e57394..41d8f5baf3fd49219f9f37211c3c78647c05892d 100644 --- a/apps/server/src/persistence/Layers/Sqlite.ts +++ b/apps/server/src/persistence/Layers/Sqlite.ts @@ -18,7 +18,7 @@ type Loader = { }; const defaultSqliteClientLoaders = { bun: () => import("@effect/sql-sqlite-bun/SqliteClient"), - node: () => import("../NodeSqliteClient.ts"), + node: () => import("@t3tools/shared/nodeSqliteClient"), } satisfies Record Promise>; const makeRuntimeSqliteLayer = Effect.fn("makeRuntimeSqliteLayer")(function* ( diff --git a/apps/server/src/persistence/Migrations/016_CanonicalizeModelSelections.test.ts b/apps/server/src/persistence/Migrations/016_CanonicalizeModelSelections.test.ts index 5c5c6138ce78d177919dbbcd8c2d43d8739a2b5b..fff5a738622d142cba5d45ab2238db39ed76d7fb 100644 --- a/apps/server/src/persistence/Migrations/016_CanonicalizeModelSelections.test.ts +++ b/apps/server/src/persistence/Migrations/016_CanonicalizeModelSelections.test.ts @@ -4,7 +4,7 @@ import * as Layer from "effect/Layer"; import * as SqlClient from "effect/unstable/sql/SqlClient"; import { runMigrations } from "../Migrations.ts"; -import * as NodeSqliteClient from "../NodeSqliteClient.ts"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; const layer = it.layer(Layer.mergeAll(NodeSqliteClient.layerMemory())); diff --git a/apps/server/src/persistence/Migrations/019_ProjectionSnapshotLookupIndexes.test.ts b/apps/server/src/persistence/Migrations/019_ProjectionSnapshotLookupIndexes.test.ts index 2011613a9f9ae78da2a3f171195ea2fad0671f2f..040a9fa47b92de279c111f0bba6f19cb3c68a6b7 100644 --- a/apps/server/src/persistence/Migrations/019_ProjectionSnapshotLookupIndexes.test.ts +++ b/apps/server/src/persistence/Migrations/019_ProjectionSnapshotLookupIndexes.test.ts @@ -4,7 +4,7 @@ import * as Layer from "effect/Layer"; import * as SqlClient from "effect/unstable/sql/SqlClient"; import { runMigrations } from "../Migrations.ts"; -import * as NodeSqliteClient from "../NodeSqliteClient.ts"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; const layer = it.layer(Layer.mergeAll(NodeSqliteClient.layerMemory())); diff --git a/apps/server/src/persistence/Migrations/024_BackfillProjectionThreadShellSummary.test.ts b/apps/server/src/persistence/Migrations/024_BackfillProjectionThreadShellSummary.test.ts index 71dfe6fd004ea149ac0178876e4215f287b10caa..49585fb36f37430c2ad29163694856f4f2d390f2 100644 --- a/apps/server/src/persistence/Migrations/024_BackfillProjectionThreadShellSummary.test.ts +++ b/apps/server/src/persistence/Migrations/024_BackfillProjectionThreadShellSummary.test.ts @@ -4,7 +4,7 @@ import * as Layer from "effect/Layer"; import * as SqlClient from "effect/unstable/sql/SqlClient"; import { runMigrations } from "../Migrations.ts"; -import * as NodeSqliteClient from "../NodeSqliteClient.ts"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; const layer = it.layer(Layer.mergeAll(NodeSqliteClient.layerMemory())); diff --git a/apps/server/src/persistence/Migrations/025_CleanupInvalidProjectionPendingApprovals.test.ts b/apps/server/src/persistence/Migrations/025_CleanupInvalidProjectionPendingApprovals.test.ts index 752b1676efaedd5c5be153f47ba3e6cfa2811025..efdf88bf6c3b2187984eaa48e4ffd7229eecbf15 100644 --- a/apps/server/src/persistence/Migrations/025_CleanupInvalidProjectionPendingApprovals.test.ts +++ b/apps/server/src/persistence/Migrations/025_CleanupInvalidProjectionPendingApprovals.test.ts @@ -4,7 +4,7 @@ import * as Layer from "effect/Layer"; import * as SqlClient from "effect/unstable/sql/SqlClient"; import { runMigrations } from "../Migrations.ts"; -import * as NodeSqliteClient from "../NodeSqliteClient.ts"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; const layer = it.layer(Layer.mergeAll(NodeSqliteClient.layerMemory())); diff --git a/apps/server/src/persistence/Migrations/026_CanonicalizeModelSelectionOptions.test.ts b/apps/server/src/persistence/Migrations/026_CanonicalizeModelSelectionOptions.test.ts index 5160b4ab34b8a3e44c1561f3384c905cd1a8fa41..558183e216cc3321eddf165c76472f172be9ddf7 100644 --- a/apps/server/src/persistence/Migrations/026_CanonicalizeModelSelectionOptions.test.ts +++ b/apps/server/src/persistence/Migrations/026_CanonicalizeModelSelectionOptions.test.ts @@ -4,7 +4,7 @@ import * as Layer from "effect/Layer"; import * as SqlClient from "effect/unstable/sql/SqlClient"; import { runMigrations } from "../Migrations.ts"; -import * as NodeSqliteClient from "../NodeSqliteClient.ts"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; const layer = it.layer(Layer.mergeAll(NodeSqliteClient.layerMemory())); diff --git a/apps/server/src/persistence/Migrations/027_028_ProviderInstanceIdColumns.test.ts b/apps/server/src/persistence/Migrations/027_028_ProviderInstanceIdColumns.test.ts index 5c0d7e2a7a8d0e99c9e572136e0f80f0a15d5814..b5e4f5cf3a22a9580f81145b8fabec3025c0ebd6 100644 --- a/apps/server/src/persistence/Migrations/027_028_ProviderInstanceIdColumns.test.ts +++ b/apps/server/src/persistence/Migrations/027_028_ProviderInstanceIdColumns.test.ts @@ -4,7 +4,7 @@ import * as Layer from "effect/Layer"; import * as SqlClient from "effect/unstable/sql/SqlClient"; import { runMigrations } from "../Migrations.ts"; -import * as NodeSqliteClient from "../NodeSqliteClient.ts"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; const layer = it.layer(Layer.mergeAll(NodeSqliteClient.layerMemory())); diff --git a/apps/server/src/persistence/Migrations/029_ProjectionThreadDetailOrderingIndexes.test.ts b/apps/server/src/persistence/Migrations/029_ProjectionThreadDetailOrderingIndexes.test.ts index 4b0aa186cb4ba5b8f0ff985d5e033a0d82a24bef..7078450c96ec8775c96b4a7cdbbb786c5e76dac7 100644 --- a/apps/server/src/persistence/Migrations/029_ProjectionThreadDetailOrderingIndexes.test.ts +++ b/apps/server/src/persistence/Migrations/029_ProjectionThreadDetailOrderingIndexes.test.ts @@ -4,7 +4,7 @@ import * as Layer from "effect/Layer"; import * as SqlClient from "effect/unstable/sql/SqlClient"; import { runMigrations } from "../Migrations.ts"; -import * as NodeSqliteClient from "../NodeSqliteClient.ts"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; const layer = it.layer(Layer.mergeAll(NodeSqliteClient.layerMemory())); diff --git a/apps/server/src/persistence/Migrations/031_AuthAuthorizationScopes.test.ts b/apps/server/src/persistence/Migrations/031_AuthAuthorizationScopes.test.ts index cb50dc2c6cdb669ba6c4eb0b59789e2898a54264..63eba11aac7192aaec3bcc525a10cdfe42be82d4 100644 --- a/apps/server/src/persistence/Migrations/031_AuthAuthorizationScopes.test.ts +++ b/apps/server/src/persistence/Migrations/031_AuthAuthorizationScopes.test.ts @@ -4,7 +4,7 @@ import * as Layer from "effect/Layer"; import * as SqlClient from "effect/unstable/sql/SqlClient"; import { runMigrations } from "../Migrations.ts"; -import * as NodeSqliteClient from "../NodeSqliteClient.ts"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; const layer = it.layer(Layer.mergeAll(NodeSqliteClient.layerMemory())); diff --git a/apps/server/src/persistence/Migrations/035_ProjectionThreadTitleRegeneration.test.ts b/apps/server/src/persistence/Migrations/035_ProjectionThreadTitleRegeneration.test.ts index 755591201de2cc9acbd75ab5e2b1eb5d44a7de20..0e7f54812c21bdeaf7ab34440d53698a58454154 100644 --- a/apps/server/src/persistence/Migrations/035_ProjectionThreadTitleRegeneration.test.ts +++ b/apps/server/src/persistence/Migrations/035_ProjectionThreadTitleRegeneration.test.ts @@ -4,7 +4,7 @@ import * as Layer from "effect/Layer"; import * as SqlClient from "effect/unstable/sql/SqlClient"; import { runMigrations } from "../Migrations.ts"; -import * as NodeSqliteClient from "../NodeSqliteClient.ts"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; const layer = it.layer(Layer.mergeAll(NodeSqliteClient.layerMemory())); diff --git a/apps/server/src/persistence/Migrations/040_ProjectionProjectFaviconPath.test.ts b/apps/server/src/persistence/Migrations/040_ProjectionProjectFaviconPath.test.ts index 7fd43d9b2ece976789f87d1017f499a63769ca36..42728812500736fc80b564919caf92820f97d6ac 100644 --- a/apps/server/src/persistence/Migrations/040_ProjectionProjectFaviconPath.test.ts +++ b/apps/server/src/persistence/Migrations/040_ProjectionProjectFaviconPath.test.ts @@ -4,7 +4,7 @@ import * as Layer from "effect/Layer"; import * as SqlClient from "effect/unstable/sql/SqlClient"; import { runMigrations } from "../Migrations.ts"; -import * as NodeSqliteClient from "../NodeSqliteClient.ts"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; const layer = it.layer(Layer.mergeAll(NodeSqliteClient.layerMemory())); diff --git a/apps/server/src/persistence/Migrations/041_AuthSessionClientConnection.test.ts b/apps/server/src/persistence/Migrations/041_AuthSessionClientConnection.test.ts index 178338b783180a26b2bedbe1a49efe3f7f89d211..b19f1ce7cf2000185d98113ae44e9ef0e04c9744 100644 --- a/apps/server/src/persistence/Migrations/041_AuthSessionClientConnection.test.ts +++ b/apps/server/src/persistence/Migrations/041_AuthSessionClientConnection.test.ts @@ -4,7 +4,7 @@ import * as Layer from "effect/Layer"; import * as SqlClient from "effect/unstable/sql/SqlClient"; import { runMigrations } from "../Migrations.ts"; -import * as NodeSqliteClient from "../NodeSqliteClient.ts"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; const layer = it.layer(Layer.mergeAll(NodeSqliteClient.layerMemory())); diff --git a/apps/server/src/persistence/Migrations/042_ProjectionThreadLinkedPullRequest.test.ts b/apps/server/src/persistence/Migrations/042_ProjectionThreadLinkedPullRequest.test.ts index 1fe59df5072935a4ffa13f22acecb7dd7bc82110..02e7f2f6c59f5e1738773940d13316ad5ffa16bf 100644 --- a/apps/server/src/persistence/Migrations/042_ProjectionThreadLinkedPullRequest.test.ts +++ b/apps/server/src/persistence/Migrations/042_ProjectionThreadLinkedPullRequest.test.ts @@ -4,7 +4,7 @@ import * as Layer from "effect/Layer"; import * as SqlClient from "effect/unstable/sql/SqlClient"; import { runMigrations } from "../Migrations.ts"; -import * as NodeSqliteClient from "../NodeSqliteClient.ts"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; const layer = it.layer(Layer.mergeAll(NodeSqliteClient.layerMemory())); diff --git a/packages/shared/package.json b/packages/shared/package.json index 0753cc85aabbb314d53ae25aa231b36ec5bf7c25..fda7a91b1a2fc82ee597ee02a52388159535575f 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -246,6 +246,10 @@ "./claudeCompaction": { "types": "./src/claudeCompaction.ts", "import": "./src/claudeCompaction.ts" + }, + "./nodeSqliteClient": { + "types": "./src/nodeSqliteClient.ts", + "import": "./src/nodeSqliteClient.ts" } }, "scripts": { diff --git a/apps/server/src/persistence/NodeSqliteClient.test.ts b/packages/shared/src/nodeSqliteClient.test.ts similarity index 97% rename from apps/server/src/persistence/NodeSqliteClient.test.ts rename to packages/shared/src/nodeSqliteClient.test.ts index b17d3e0eb6a1890505d2124dd46e5b46e133e99c..6738892a9792f66a9efb7d1e9d21976824c29966 100644 --- a/apps/server/src/persistence/NodeSqliteClient.test.ts +++ b/packages/shared/src/nodeSqliteClient.test.ts @@ -3,7 +3,7 @@ import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; import * as SqlClient from "effect/unstable/sql/SqlClient"; -import * as SqliteClient from "./NodeSqliteClient.ts"; +import * as SqliteClient from "./nodeSqliteClient.ts"; const layer = it.layer(SqliteClient.layerMemory()); diff --git a/apps/server/src/persistence/NodeSqliteClient.ts b/packages/shared/src/nodeSqliteClient.ts similarity index 100% rename from apps/server/src/persistence/NodeSqliteClient.ts rename to packages/shared/src/nodeSqliteClient.ts -- 2.54.0