@sqlite-sync/core 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,20 +1,23 @@
1
- import { S as SQLiteDbWrapper, L as Logger, T as TypedEvent, C as CrdtEventType, a as CrdtEventOrigin, P as PersistedCrdtEvent, E as EventsPushRequest, b as EventsPushResponse, c as ExecuteParams, d as ExecuteResult, e as EventsPullRequest, f as EventsPullResponse, g as TypedBroadcastChannel } from './crdt-sync-remote-source-rrqinqLn.js';
2
- export { q as CrdtEventStatus, m as CrdtStorage, o as CrdtSyncRemoteSource, s as CrdtUpdateLogItem, t as CrdtUpdateLogPayload, R as DatabaseIntrospection, G as DeferredPromise, H as DistributiveOmit, K as KyselyQueryFactory, J as LogLevel, M as MetaItem, k as PendingCrdtEvent, h as PreparedStatement, Q as QueryBuilderOutput, i as SQLiteTransactionWrapper, v as SyncIdCounter, O as TableMetadata, j as applyCrdtEventMutations, p as crdtSchema, B as createAsyncAutoFlushBuffer, A as createAutoFlushBuffer, l as createCrdtStorage, n as createCrdtSyncRemoteSource, x as createDeferredPromise, u as createSyncIdCounter, D as createTypedEventTarget, y as ensureSingletonExecution, w as generateId, N as introspectDb, F as jsonSafeParse, z as orderBy, r as registerCrdtFunctions, I as startPerformanceLogger } from './crdt-sync-remote-source-rrqinqLn.js';
3
- import { Driver, DatabaseConnection, Kysely, Migration, Migrator } from 'kysely';
4
- export { c as createCrdtSyncProducer, d as dummyKysely } from './crdt-sync-producer-0toEpGf0.js';
1
+ import * as kysely from 'kysely';
2
+ import { Kysely, SchemaModule, SelectQueryBuilder } from 'kysely';
3
+ import { S as SQLiteDbWrapper, L as Logger, T as TypedEvent, a as SQLiteTransactionWrapper, b as StoredValue, C as CrdtStorage, P as PersistedCrdtEvent, G as GetEventsOptions, E as ExecuteParams, c as ExecuteResult, Q as QueryBuilderOutput, K as KyselyQueryFactory, W as WorkerState } from './crdt-sync-remote-source-idoIjMcs.js';
4
+ export { z as CrdtEventOrigin, A as CrdtEventStatus, B as CrdtEventType, u as CrdtSyncRemoteSource, F as CrdtUpdateLogItem, I as CrdtUpdateLogPayload, D as DatabaseIntrospection, U as DeferredPromise, V as DistributiveOmit, w as EventsPullRequest, x as EventsPushRequest, y as EventsPushResponse, H as HLC, f as HLCCounter, h as LogLevel, M as MigratableEvent, m as Migrations, n as MigrationsDb, r as PendingCrdtEvent, N as PreparedStatement, o as SyncDbMigrator, g as TableMetadata, _ as TypedBroadcastChannel, $ as TypedEventTarget, a2 as WorkerConfig, d as compareHLC, p as createCrdtApplyFunction, t as createCrdtStorage, v as createCrdtSyncRemoteSource, O as createDeferredPromise, k as createMigrations, l as createMigrator, q as createSQLiteCrdtApplyFunction, J as createStoredValue, R as createTypedEventTarget, e as deserializeHLC, X as generateId, i as introspectDb, Y as jsonSafeParse, Z as quoteId, s as serializeHLC, j as startPerformanceLogger, a0 as tryCatch, a1 as tryCatchAsync } from './crdt-sync-remote-source-idoIjMcs.js';
5
+ import { S as SyncDbSchema } from './crdt-schema-DQ1cYsFE.js';
6
+ export { C as CreateCrdtSchemaOptions, c as createSyncDbSchema } from './crdt-schema-DQ1cYsFE.js';
5
7
  import '@sqlite.org/sqlite-wasm';
6
8
 
9
+ declare const dummyKysely: Kysely<any>;
10
+
7
11
  type TableName<Database> = keyof Database extends string ? keyof Database : never;
8
12
  type SQLiteReactiveDbOptions = {
9
- snapshot?: Uint8Array<ArrayBufferLike>;
10
- logger?: Logger;
13
+ snapshot: Uint8Array<ArrayBufferLike>;
14
+ logger: Logger;
11
15
  };
12
16
  type EventsMap = {
13
- "transaction-committed": void;
14
- "transaction-rolled-back": void;
15
- "any-table-changed": void;
17
+ "transaction-committed": undefined;
18
+ "transaction-rolled-back": undefined;
19
+ "any-table-changed": undefined;
16
20
  } & Record<`table:${string}`, void>;
17
- declare function createSQLiteReactiveDb<Database>(opts: SQLiteReactiveDbOptions): Promise<SQLiteReactiveDb<Database>>;
18
21
  declare class SQLiteReactiveDb<Database> {
19
22
  readonly db: SQLiteDbWrapper<Database>;
20
23
  private sqlite3;
@@ -23,12 +26,13 @@ declare class SQLiteReactiveDb<Database> {
23
26
  private eventTarget;
24
27
  private constructor();
25
28
  static create<Database>(opts: SQLiteReactiveDbOptions): Promise<SQLiteReactiveDb<Database>>;
29
+ private liveQueryStatements;
26
30
  createLiveQuery<TResult>(query: {
27
31
  sql: string;
28
32
  parameters: readonly unknown[];
29
33
  }): {
30
34
  getRows: () => TResult[];
31
- refresh: () => void;
35
+ refresh: (parameters?: readonly unknown[]) => void;
32
36
  subscribe: (onchange: () => void) => () => void;
33
37
  };
34
38
  subscribeToQueryChanges(params: {
@@ -51,125 +55,81 @@ declare class SQLiteReactiveDb<Database> {
51
55
  private registerDbHooks;
52
56
  createSnapshot(): Uint8Array<ArrayBuffer>;
53
57
  useSnapshot(snapshot: Uint8Array<ArrayBufferLike>): void;
58
+ dispose(): void;
54
59
  }
55
60
 
56
- interface HLC {
57
- timestamp: number;
58
- counter: number;
59
- nodeId: string;
60
- }
61
- declare class HLCCounter {
62
- private timestamp;
63
- private counter;
64
- private nodeId;
65
- private readonly getTimestamp;
66
- constructor(nodeId: string, getTimestamp: () => number);
67
- getCurrentHLC(): HLC;
68
- getNextHLC(): HLC;
69
- mergeHLC(hlc: HLC): void;
70
- }
71
- declare function serializeHLC(hlc: HLC): string;
72
- declare function deserializeHLC(serialized: string): {
73
- timestamp: number;
74
- counter: number;
75
- nodeId: string;
61
+ type KvStoreItem = {
62
+ key: string;
63
+ value: string;
64
+ };
65
+ declare function createKvStoreTableQuery(schema: SchemaModule, tableName: string): kysely.CreateTableBuilder<string, "key" | "value">;
66
+ declare function createSQLiteKvStore({ db, metaTableName, }: {
67
+ db: SQLiteTransactionWrapper<any>;
68
+ metaTableName: string;
69
+ }): {
70
+ get: (key: string) => string | null;
71
+ set: (key: string, value: string) => void;
72
+ remove: (key: string) => void;
73
+ createStringStoredValue: (key: string, defaultValue: string) => StoredValue<string>;
74
+ createNumberStoredValue: (key: string, defaultValue: number) => StoredValue<number>;
76
75
  };
77
- declare function compareHLC(one: HLC, two: HLC): number;
78
76
 
79
- type MemoryDbCrdtTableConfig = {
80
- baseTableName: string;
81
- crdtTableName: string;
82
- };
83
- type MemoryDbOptions<Database> = {
84
- reactiveDb: SQLiteReactiveDb<Database>;
85
- hlcCounter: HLCCounter;
86
- tabId: string;
87
- crdtTables: MemoryDbCrdtTableConfig[];
88
- };
89
- declare function createMemoryDb<Database>({ reactiveDb: _reactiveDb, hlcCounter, tabId, crdtTables, }: MemoryDbOptions<Database>): Promise<{
90
- crdtStorage: {
91
- enqueueEvents: (events: {
92
- type: CrdtEventType;
93
- timestamp: string;
94
- dataset: string;
95
- item_id: string;
96
- payload: string;
97
- origin: CrdtEventOrigin;
98
- }[]) => {
99
- firstEventSyncId: number;
100
- lastEventSyncId: number;
101
- };
102
- addEventListener: <K extends "event-applied" | "event-processing-done">(type: K, listener: (event: TypedEvent<{
103
- "event-applied": PersistedCrdtEvent;
104
- "event-processing-done": void;
105
- }[K]>) => void) => void;
106
- removeEventListener: <K extends "event-applied" | "event-processing-done">(type: K, listener: (event: TypedEvent<{
107
- "event-applied": PersistedCrdtEvent;
108
- "event-processing-done": void;
109
- }[K]>) => void) => void;
110
- dispatchEvent: <K extends "event-applied" | "event-processing-done">(type: K, payload: {
111
- "event-applied": PersistedCrdtEvent;
112
- "event-processing-done": void;
113
- }[K]) => void;
114
- };
115
- }>;
77
+ type SystemMigrationContext = {
78
+ eventsTableName: string;
79
+ updateLogTableName: string;
80
+ execute: (sql: string) => void;
81
+ };
82
+ type SystemMigration = {
83
+ version: number;
84
+ up: (ctx: SystemMigrationContext) => void;
85
+ };
86
+ declare const baseSystemMigrations: SystemMigration[];
87
+ declare function runSystemMigrations(opts: {
88
+ version: StoredValue<number>;
89
+ migrations: SystemMigration[];
90
+ eventsTableName: string;
91
+ updateLogTableName: string;
92
+ execute: (sql: string) => void;
93
+ transaction: (callback: () => void) => void;
94
+ }): void;
95
+ declare function applyWorkerDbSchema(db: SQLiteDbWrapper<any>): void;
96
+ declare function applyMemoryDbSchema(db: SQLiteDbWrapper<any>): void;
116
97
 
117
- type SyncedDbOptions = {
118
- dbPath: string;
119
- clearOnInit?: boolean;
120
- crdtTables: MemoryDbCrdtTableConfig[];
121
- worker: Worker;
98
+ type CrdtStorageMutator<Database> = ReturnType<typeof createCrdtStorageMutator<Database>>;
99
+ type CommitEventOptions<Database, Table extends keyof Database & string> = {
100
+ type: "item-created";
101
+ dataset: Table;
102
+ item_id: string;
103
+ payload: CreateEventPayload<Database, Table>;
104
+ } | {
105
+ type: "item-updated";
106
+ dataset: Table;
107
+ item_id: string;
108
+ payload: UpdateEventPayload<Database, Table>;
109
+ } | {
110
+ type: "item-deleted";
111
+ dataset: Table;
112
+ item_id: string;
113
+ };
114
+ type CreateEventPayload<Database, Table extends keyof Database> = Omit<Database[Table], "tombstone">;
115
+ type UpdateEventPayload<Database, Table extends keyof Database> = Omit<Partial<Database[Table]>, "id" | "tombstone">;
116
+ declare function createCrdtStorageMutator<Database>({ storage }: {
117
+ storage: CrdtStorage;
118
+ }): {
119
+ enqueueEvents: (events: CommitEventOptions<Database, keyof Database & string>[]) => void;
120
+ createEvent: <Table extends keyof Database & string>(event: CommitEventOptions<Database, Table>) => CommitEventOptions<Database, Table>;
121
+ enqueueEvent: (event: CommitEventOptions<Database, keyof Database & string>) => void;
122
122
  };
123
- declare function createSyncedDb<Database>(options: SyncedDbOptions): Promise<{
124
- db: SQLiteDbWrapper<Database>;
125
- reactiveDb: Omit<SQLiteReactiveDb<Database>, "db">;
126
- workerDb: {
127
- addEventListener: <K extends "new-notification">(type: K, listener: (event: TypedEvent<{
128
- "new-notification": WorkerNotificationMessage;
129
- }[K]>) => void) => void;
130
- removeEventListener: <K extends "new-notification">(type: K, listener: (event: TypedEvent<{
131
- "new-notification": WorkerNotificationMessage;
132
- }[K]>) => void) => void;
133
- getSnapshot: () => Promise<GetSnapshotResponse>;
134
- pushTabEvents: (request: EventsPushRequest) => Promise<EventsPushResponse>;
135
- execute: (query: ExecuteParams) => Promise<ExecuteResult<unknown>>;
136
- pullEvents: (params: EventsPullRequest) => Promise<EventsPullResponse>;
137
- postInitReady: () => Promise<void>;
138
- };
139
- }>;
140
- type SyncedDb<Database> = Awaited<ReturnType<typeof createSyncedDb<Database>>>;
141
123
 
142
- type SqliteDatabase = {
143
- execute: (opts: {
144
- sql: string;
145
- parameters: readonly unknown[];
146
- }) => {
147
- rows: unknown[];
148
- };
149
- close: () => void;
124
+ type CrdtSyncProducer = {
125
+ storage: CrdtStorage;
126
+ broadcastEvents: (request: {
127
+ newSyncId: number;
128
+ }) => void;
150
129
  };
151
- declare class SqliteDriver implements Driver {
152
- #private;
153
- constructor(db: SqliteDatabase);
154
- init(): Promise<void>;
155
- acquireConnection(): Promise<DatabaseConnection>;
156
- beginTransaction(connection: DatabaseConnection): Promise<void>;
157
- commitTransaction(connection: DatabaseConnection): Promise<void>;
158
- rollbackTransaction(connection: DatabaseConnection): Promise<void>;
159
- releaseConnection(): Promise<void>;
160
- destroy(): Promise<void>;
161
- }
162
- declare function createSQLiteKysely<Database>(sqliteDb: SqliteDatabase): Kysely<Database>;
130
+ declare const createCrdtSyncProducer: ({ storage, broadcastEvents }: CrdtSyncProducer) => void;
163
131
 
164
- type SyncDbMigratorOptions = {
165
- db: Kysely<unknown>;
166
- migrations: Record<string, Migration>;
167
- };
168
- declare function createSyncDbMigrator(options: SyncDbMigratorOptions): Migrator;
169
- declare function createSyncDbMigrations(migrations: Record<number, Migration>): Record<number, Migration>;
170
-
171
- declare function applyWorkerDbSchema(db: SQLiteDbWrapper<any>): void;
172
- declare function applyMemoryDbSchema(db: SQLiteDbWrapper<any>): void;
132
+ declare function applyKyselyEventsBatchFilters(query: SelectQueryBuilder<any, any, PersistedCrdtEvent>, opts: GetEventsOptions): SelectQueryBuilder<any, any, PersistedCrdtEvent>;
173
133
 
174
134
  declare function makeCrdtTable({ db, baseTableName, crdtTableName, }: {
175
135
  db: SQLiteDbWrapper<any>;
@@ -177,92 +137,42 @@ declare function makeCrdtTable({ db, baseTableName, crdtTableName, }: {
177
137
  crdtTableName: string;
178
138
  }): void;
179
139
 
180
- declare const syncDbWorkerLockName = "sync-db-worker-lock";
181
- type WorkerNotificationMessage = {
182
- notificationType: "new-event-chunk-applied";
183
- newSyncId: number;
184
- };
185
- type PushTabEventsResponse = {
186
- firstEventSyncId: number;
187
- lastEventSyncId: number;
188
- };
189
- type GetSnapshotResponse = {
190
- file: Uint8Array<ArrayBufferLike>;
191
- syncId: number;
192
- };
193
- interface WorkerRpc {
194
- getSnapshot: () => GetSnapshotResponse;
195
- pushTabEvents: (request: EventsPushRequest) => EventsPushResponse;
196
- execute: (query: ExecuteParams) => ExecuteResult<unknown>;
197
- pullEvents: (params: EventsPullRequest) => EventsPullResponse;
198
- postInitReady: () => void;
199
- }
200
- type WorkerRequestMethod = keyof WorkerRpc;
201
- type WorkerRequestMessage<TMethod extends WorkerRequestMethod = WorkerRequestMethod> = {
202
- type: "request";
203
- requestId: string;
204
- method: TMethod;
205
- args: Parameters<WorkerRpc[TMethod]>;
206
- };
207
- type WorkerResponseMessage<TMethod extends WorkerRequestMethod = WorkerRequestMethod> = {
208
- type: "response";
209
- requestId: string;
210
- data: ReturnType<WorkerRpc[TMethod]>;
211
- };
212
- type AsyncRpc<T> = {
213
- [K in keyof T]: T[K] extends (...args: infer U) => infer V ? (...args: U) => V extends Promise<infer W> ? Promise<W> : Promise<V> : never;
214
- };
215
- declare const broadcastChannelNames: {
216
- readonly requests: "sync-db-worker-requests";
217
- readonly responses: "sync-db-worker-responses";
218
- };
219
- type WorkerBroadcastChannels = {
220
- requests: TypedBroadcastChannel<WorkerRequestMessage>;
221
- responses: TypedBroadcastChannel<WorkerResponseMessage | WorkerNotificationMessage | WorkerInitResponse>;
222
- };
223
- declare const createBroadcastChannels: () => WorkerBroadcastChannels;
224
- type WorkerConfig = {
225
- dbPath: string;
226
- clientId: string;
140
+ type SyncedDbOptions<Database, Props = undefined> = {
141
+ dbId: string;
227
142
  clearOnInit?: boolean;
228
- syncServer: SyncServerConfig;
229
- };
230
- type SyncServerConfig = {
231
- host: string;
232
- room: string;
233
- };
234
- type WorkerInitMessage = {
235
- type: "init";
236
- config: WorkerConfig;
237
- };
238
- declare function isWorkerInitMessage(message: unknown): message is WorkerInitMessage;
239
- type WorkerInitResponse = {
240
- type: "init-ready";
241
- };
242
- declare function isWorkerInitResponse(message: unknown): message is WorkerInitResponse;
243
- declare function isWorkerRequestMessage(message: unknown): message is WorkerRequestMessage;
244
- declare function isWorkerResponseMessage(message: unknown): message is WorkerResponseMessage;
245
- declare function isWorkerNotificationMessage(message: unknown): message is WorkerNotificationMessage;
246
-
247
- declare const createWorkerDbClient: ({ broadcastChannels, }: {
248
- broadcastChannels: WorkerBroadcastChannels;
249
- }) => {
250
- addEventListener: <K extends "new-notification">(type: K, listener: (event: TypedEvent<{
251
- "new-notification": WorkerNotificationMessage;
252
- }[K]>) => void) => void;
253
- removeEventListener: <K extends "new-notification">(type: K, listener: (event: TypedEvent<{
254
- "new-notification": WorkerNotificationMessage;
255
- }[K]>) => void) => void;
256
- getSnapshot: () => Promise<GetSnapshotResponse>;
257
- pushTabEvents: (request: EventsPushRequest) => Promise<EventsPushResponse>;
258
- execute: (query: ExecuteParams) => Promise<ExecuteResult<unknown>>;
259
- pullEvents: (params: EventsPullRequest) => Promise<EventsPullResponse>;
260
- postInitReady: () => Promise<void>;
261
- };
262
- declare function initializeWorkerDb({ worker, broadcastChannels, config, }: {
263
143
  worker: Worker;
264
- broadcastChannels: WorkerBroadcastChannels;
265
- config: WorkerConfig;
266
- }): Promise<void>;
144
+ workerProps: Props;
145
+ syncDbSchema: SyncDbSchema<Database>;
146
+ };
147
+ declare function createSyncedDb<Database, Props = undefined>(options: SyncedDbOptions<Database, Props>): Promise<{
148
+ db: {
149
+ execute: <T = unknown>(opts: ExecuteParams | string | kysely.CompiledQuery<T>, meta?: {
150
+ loggerLevel?: "info" | "system";
151
+ }) => ExecuteResult<T>;
152
+ executeKysely: <TQuery extends kysely.Compilable<TResult>, TResult = QueryBuilderOutput<TQuery>>(factory: KyselyQueryFactory<Database, TQuery, TResult>, meta?: {
153
+ loggerLevel?: "info" | "system";
154
+ }) => ExecuteResult<TResult>;
155
+ executeTransaction: <T>(callback: (db: SQLiteTransactionWrapper<Database>) => T) => T;
156
+ createLiveQuery: <TResult>(query: {
157
+ sql: string;
158
+ parameters: readonly unknown[];
159
+ }) => {
160
+ getRows: () => TResult[];
161
+ refresh: (parameters?: readonly unknown[]) => void;
162
+ subscribe: (onchange: () => void) => () => void;
163
+ };
164
+ };
165
+ state: {
166
+ getState: () => WorkerState;
167
+ subscribe: (onChange: () => void) => () => void;
168
+ goOnline: () => Promise<void>;
169
+ goOffline: () => Promise<void>;
170
+ };
171
+ dispose: () => Promise<void>;
172
+ _internal: {
173
+ executeAsync: (query: ExecuteParams) => Promise<ExecuteResult<unknown>>;
174
+ };
175
+ }>;
176
+ type SyncedDb<Database> = Awaited<ReturnType<typeof createSyncedDb<Database>>>;
267
177
 
268
- export { type AsyncRpc, CrdtEventOrigin, CrdtEventType, EventsPullRequest, EventsPullResponse, EventsPushRequest, EventsPushResponse, ExecuteParams, ExecuteResult, type GetSnapshotResponse, type HLC, HLCCounter, Logger, type MemoryDbCrdtTableConfig, PersistedCrdtEvent, type PushTabEventsResponse, SQLiteDbWrapper, SQLiteReactiveDb, SqliteDriver, type SyncServerConfig, type SyncedDb, TypedBroadcastChannel, TypedEvent, type WorkerBroadcastChannels, type WorkerConfig, type WorkerInitMessage, type WorkerInitResponse, type WorkerNotificationMessage, type WorkerRequestMessage, type WorkerRequestMethod, type WorkerResponseMessage, type WorkerRpc, applyMemoryDbSchema, applyWorkerDbSchema, broadcastChannelNames, compareHLC, createBroadcastChannels, createMemoryDb, createSQLiteKysely, createSQLiteReactiveDb, createSyncDbMigrations, createSyncDbMigrator, createSyncedDb, createWorkerDbClient, deserializeHLC, initializeWorkerDb, isWorkerInitMessage, isWorkerInitResponse, isWorkerNotificationMessage, isWorkerRequestMessage, isWorkerResponseMessage, makeCrdtTable, serializeHLC, syncDbWorkerLockName };
178
+ export { CrdtStorage, type CrdtStorageMutator, ExecuteParams, ExecuteResult, type KvStoreItem, KyselyQueryFactory, Logger, PersistedCrdtEvent, QueryBuilderOutput, SQLiteDbWrapper, SQLiteReactiveDb, SQLiteTransactionWrapper, StoredValue, SyncDbSchema, type SyncedDb, type SystemMigration, type SystemMigrationContext, TypedEvent, WorkerState, applyKyselyEventsBatchFilters, applyMemoryDbSchema, applyWorkerDbSchema, baseSystemMigrations, createCrdtStorageMutator, createCrdtSyncProducer, createKvStoreTableQuery, createSQLiteKvStore, createSyncedDb, dummyKysely, makeCrdtTable, runSystemMigrations };