Skip to content

Commit 12ae235

Browse files
mepukaclaude
andcommitted
fix: use Migrator.fromRecord for compiled binary support
Replace filesystem-based migration loading with static imports and Migrator.fromRecord so migrations work in bun build --compile binaries where FS.readDirectory cannot scan the virtual $bunfs filesystem. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 254de73 commit 12ae235

4 files changed

Lines changed: 36 additions & 14 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import migration_001 from "./001_init.js";
2+
3+
export const storeCatalogMigrations = {
4+
"001_init": migration_001
5+
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import migration_001 from "./001_init.js";
2+
import migration_002 from "./002_event_log.js";
3+
import migration_003 from "./003_fts_and_derived.js";
4+
import migration_004 from "./004_query_indexes.js";
5+
import migration_005 from "./005_post_lang.js";
6+
import migration_006 from "./006_has_embed.js";
7+
import migration_007 from "./007_event_seq_and_checkpoints.js";
8+
import migration_008 from "./008_image_alt_text.js";
9+
import migration_009 from "./009_store_sources.js";
10+
import migration_010 from "./010_quote_count.js";
11+
import migration_011 from "./011_reply_refs.js";
12+
13+
export const storeIndexMigrations = {
14+
"001_init": migration_001,
15+
"002_event_log": migration_002,
16+
"003_fts_and_derived": migration_003,
17+
"004_query_indexes": migration_004,
18+
"005_post_lang": migration_005,
19+
"006_has_embed": migration_006,
20+
"007_event_seq_and_checkpoints": migration_007,
21+
"008_image_alt_text": migration_008,
22+
"009_store_sources": migration_009,
23+
"010_quote_count": migration_010,
24+
"011_reply_refs": migration_011
25+
};

src/services/store-db.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { FileSystem, Path } from "@effect/platform";
22
import { Context, Effect, Exit, Layer, Ref, Scope } from "effect";
33
import * as Reactivity from "@effect/experimental/Reactivity";
44
import * as Migrator from "@effect/sql/Migrator";
5-
import * as MigratorFileSystem from "@effect/sql/Migrator/FileSystem";
5+
import { storeIndexMigrations } from "../db/migrations/store-index/index.js";
66
import * as SqlClient from "@effect/sql/SqlClient";
77
import { SqliteClient } from "@effect/sql-sqlite-bun";
88
import { StoreIoError } from "../domain/errors.js";
@@ -49,9 +49,6 @@ import { AppConfigService } from "./app-config.js";
4949
* @module services/store-db
5050
*/
5151

52-
const migrationsDir = decodeURIComponent(
53-
new URL("../db/migrations/store-index", import.meta.url).pathname
54-
);
5552

5653
const toStoreIoError = (path: StorePath) => (cause: unknown) =>
5754
StoreIoError.make({ path, cause });
@@ -140,7 +137,7 @@ export class StoreDb extends Context.Tag("@skygent/StoreDb")<
140137
const clientLock = yield* Effect.makeSemaphore(1);
141138

142139
const migrate = Migrator.make({})({
143-
loader: MigratorFileSystem.fromFileSystem(migrationsDir)
140+
loader: Migrator.fromRecord(storeIndexMigrations)
144141
});
145142

146143
const optimizeClient = (client: SqlClient.SqlClient) =>
@@ -186,8 +183,7 @@ export class StoreDb extends Context.Tag("@skygent/StoreDb")<
186183
yield* client`PRAGMA optimize=0x10002`;
187184
yield* client`PRAGMA foreign_keys = ON`;
188185
yield* migrate.pipe(
189-
Effect.provideService(SqlClient.SqlClient, client),
190-
Effect.provideService(FileSystem.FileSystem, fs)
186+
Effect.provideService(SqlClient.SqlClient, client)
191187
);
192188

193189
return { client, scope: clientScope };

src/services/store-manager.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ import { FileSystem, Path } from "@effect/platform";
5959
import { Chunk, Clock, Context, Effect, Exit, Layer, Option, Schema, Scope } from "effect";
6060
import * as Reactivity from "@effect/experimental/Reactivity";
6161
import * as Migrator from "@effect/sql/Migrator";
62-
import * as MigratorFileSystem from "@effect/sql/Migrator/FileSystem";
62+
import { storeCatalogMigrations } from "../db/migrations/store-catalog/index.js";
6363
import * as SqlClient from "@effect/sql/SqlClient";
6464
import * as SqlSchema from "@effect/sql/SqlSchema";
6565
import { SqliteClient } from "@effect/sql-sqlite-bun";
@@ -68,9 +68,6 @@ import { StoreConfig, StoreMetadata, StoreRef } from "../domain/store.js";
6868
import { StoreName, StorePath } from "../domain/primitives.js";
6969
import { AppConfigService } from "./app-config.js";
7070

71-
const migrationsDir = decodeURIComponent(
72-
new URL("../db/migrations/store-catalog", import.meta.url).pathname
73-
);
7471

7572
const storeRootKey = (name: StoreName) => `stores/${name}`;
7673
const manifestPath = Schema.decodeUnknownSync(StorePath)("stores");
@@ -233,11 +230,10 @@ export class StoreManager extends Context.Tag("@skygent/StoreManager")<
233230
);
234231

235232
const migrate = Migrator.make({})({
236-
loader: MigratorFileSystem.fromFileSystem(migrationsDir)
233+
loader: Migrator.fromRecord(storeCatalogMigrations)
237234
});
238235
yield* migrate.pipe(
239-
Effect.provideService(SqlClient.SqlClient, client),
240-
Effect.provideService(FileSystem.FileSystem, fs)
236+
Effect.provideService(SqlClient.SqlClient, client)
241237
);
242238

243239
const decodeMetadataRow = (row: typeof storeRow.Type) =>

0 commit comments

Comments
 (0)