im_wower
·
2026-03-29
index.ts
1import { DatabaseSync } from "node:sqlite";
2import { createD1Client, type D1EnvVars } from "./client.js";
3import { SyncQueue } from "./sync-queue.js";
4import { D1SyncWorker } from "./sync-worker.js";
5import type { SyncWorkerConfig } from "./types.js";
6
7export { D1Client, createD1Client, type D1EnvVars } from "./client.js";
8export { SyncQueue } from "./sync-queue.js";
9export { D1SyncWorker, type SyncWorkerDeps } from "./sync-worker.js";
10export {
11 D1_SYNC_QUEUE_SCHEMA_SQL,
12 DEFAULT_BASE_DELAY_MS,
13 DEFAULT_BATCH_SIZE,
14 DEFAULT_MAX_ATTEMPTS,
15 DEFAULT_MAX_DELAY_MS,
16 DEFAULT_POLL_INTERVAL_MS,
17 DEFAULT_TIMEOUT_MS,
18 type D1ApiError,
19 type D1ApiResponse,
20 type D1ClientConfig,
21 type D1PreparedStatement,
22 type D1QueryMeta,
23 type D1QueryResult,
24 type EnqueueSyncInput,
25 type SyncOperation,
26 type SyncQueueRecord,
27 type SyncStatus,
28 type SyncWorkerConfig
29} from "./types.js";
30
31// ---------------------------------------------------------------------------
32// Convenience factory — creates a D1SyncWorker from env vars + DB path.
33// Returns null if D1 is not configured.
34// ---------------------------------------------------------------------------
35
36export interface CreateD1SyncWorkerOptions {
37 env: Record<string, string | undefined>;
38 databasePath: string;
39 fetchImpl?: typeof globalThis.fetch;
40 syncWorkerConfig?: SyncWorkerConfig;
41 log?: (message: string) => void;
42}
43
44export function createD1SyncWorker(
45 options: CreateD1SyncWorkerOptions
46): D1SyncWorker | null {
47 const d1 = createD1Client(options.env, { fetchImpl: options.fetchImpl });
48
49 if (d1 == null) {
50 return null;
51 }
52
53 const db = new DatabaseSync(options.databasePath);
54 const queue = new SyncQueue(db);
55
56 return new D1SyncWorker({
57 d1,
58 queue,
59 config: options.syncWorkerConfig,
60 log: options.log
61 });
62}