@quereus/plugin-sync 0.3.1 → 0.3.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/README.md +2 -1
- package/package.json +4 -4
- package/dist/src/clock/hlc.d.ts +0 -105
- package/dist/src/clock/hlc.d.ts.map +0 -1
- package/dist/src/clock/hlc.js +0 -251
- package/dist/src/clock/hlc.js.map +0 -1
- package/dist/src/clock/index.d.ts +0 -6
- package/dist/src/clock/index.d.ts.map +0 -1
- package/dist/src/clock/index.js +0 -6
- package/dist/src/clock/index.js.map +0 -1
- package/dist/src/clock/site.d.ts +0 -58
- package/dist/src/clock/site.d.ts.map +0 -1
- package/dist/src/clock/site.js +0 -137
- package/dist/src/clock/site.js.map +0 -1
- package/dist/src/create-sync-module.d.ts +0 -85
- package/dist/src/create-sync-module.d.ts.map +0 -1
- package/dist/src/create-sync-module.js +0 -54
- package/dist/src/create-sync-module.js.map +0 -1
- package/dist/src/index.d.ts +0 -31
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -42
- package/dist/src/index.js.map +0 -1
- package/dist/src/metadata/change-log.d.ts +0 -67
- package/dist/src/metadata/change-log.d.ts.map +0 -1
- package/dist/src/metadata/change-log.js +0 -107
- package/dist/src/metadata/change-log.js.map +0 -1
- package/dist/src/metadata/column-version.d.ts +0 -58
- package/dist/src/metadata/column-version.d.ts.map +0 -1
- package/dist/src/metadata/column-version.js +0 -100
- package/dist/src/metadata/column-version.js.map +0 -1
- package/dist/src/metadata/index.d.ts +0 -11
- package/dist/src/metadata/index.d.ts.map +0 -1
- package/dist/src/metadata/index.js +0 -11
- package/dist/src/metadata/index.js.map +0 -1
- package/dist/src/metadata/keys.d.ts +0 -180
- package/dist/src/metadata/keys.d.ts.map +0 -1
- package/dist/src/metadata/keys.js +0 -390
- package/dist/src/metadata/keys.js.map +0 -1
- package/dist/src/metadata/peer-state.d.ts +0 -52
- package/dist/src/metadata/peer-state.d.ts.map +0 -1
- package/dist/src/metadata/peer-state.js +0 -87
- package/dist/src/metadata/peer-state.js.map +0 -1
- package/dist/src/metadata/schema-migration.d.ts +0 -60
- package/dist/src/metadata/schema-migration.d.ts.map +0 -1
- package/dist/src/metadata/schema-migration.js +0 -126
- package/dist/src/metadata/schema-migration.js.map +0 -1
- package/dist/src/metadata/schema-version.d.ts +0 -163
- package/dist/src/metadata/schema-version.d.ts.map +0 -1
- package/dist/src/metadata/schema-version.js +0 -307
- package/dist/src/metadata/schema-version.js.map +0 -1
- package/dist/src/metadata/tombstones.d.ts +0 -67
- package/dist/src/metadata/tombstones.d.ts.map +0 -1
- package/dist/src/metadata/tombstones.js +0 -125
- package/dist/src/metadata/tombstones.js.map +0 -1
- package/dist/src/sync/events.d.ts +0 -117
- package/dist/src/sync/events.d.ts.map +0 -1
- package/dist/src/sync/events.js +0 -56
- package/dist/src/sync/events.js.map +0 -1
- package/dist/src/sync/index.d.ts +0 -8
- package/dist/src/sync/index.d.ts.map +0 -1
- package/dist/src/sync/index.js +0 -8
- package/dist/src/sync/index.js.map +0 -1
- package/dist/src/sync/manager.d.ts +0 -146
- package/dist/src/sync/manager.d.ts.map +0 -1
- package/dist/src/sync/manager.js +0 -8
- package/dist/src/sync/manager.js.map +0 -1
- package/dist/src/sync/protocol.d.ts +0 -282
- package/dist/src/sync/protocol.d.ts.map +0 -1
- package/dist/src/sync/protocol.js +0 -16
- package/dist/src/sync/protocol.js.map +0 -1
- package/dist/src/sync/store-adapter.d.ts +0 -42
- package/dist/src/sync/store-adapter.d.ts.map +0 -1
- package/dist/src/sync/store-adapter.js +0 -232
- package/dist/src/sync/store-adapter.js.map +0 -1
- package/dist/src/sync/sync-manager-impl.d.ts +0 -91
- package/dist/src/sync/sync-manager-impl.d.ts.map +0 -1
- package/dist/src/sync/sync-manager-impl.js +0 -1123
- package/dist/src/sync/sync-manager-impl.js.map +0 -1
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Factory function to create a sync-enabled store module.
|
|
3
|
-
*
|
|
4
|
-
* This wraps an existing store module (LevelDB or IndexedDB) with
|
|
5
|
-
* CRDT sync capabilities.
|
|
6
|
-
*/
|
|
7
|
-
import type { KVStore, StoreEventEmitter } from '@quereus/plugin-store';
|
|
8
|
-
import type { TableSchema } from '@quereus/quereus';
|
|
9
|
-
import { SyncEventEmitterImpl } from './sync/events.js';
|
|
10
|
-
import { type SyncConfig, type ApplyToStoreCallback } from './sync/protocol.js';
|
|
11
|
-
import type { SyncManager } from './sync/manager.js';
|
|
12
|
-
/**
|
|
13
|
-
* Function to get table schema by name.
|
|
14
|
-
* Used to map column indices to column names for sync.
|
|
15
|
-
*/
|
|
16
|
-
export type GetTableSchemaCallback = (schemaName: string, tableName: string) => TableSchema | undefined;
|
|
17
|
-
/**
|
|
18
|
-
* Result of creating a sync module.
|
|
19
|
-
*/
|
|
20
|
-
export interface CreateSyncModuleResult {
|
|
21
|
-
/** The sync manager for sync operations */
|
|
22
|
-
syncManager: SyncManager;
|
|
23
|
-
/** Event emitter for reactive UI integration */
|
|
24
|
-
syncEvents: SyncEventEmitterImpl;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Options for creating a sync module.
|
|
28
|
-
*/
|
|
29
|
-
export interface CreateSyncModuleOptions extends Partial<SyncConfig> {
|
|
30
|
-
/**
|
|
31
|
-
* Callback for applying remote changes to the store.
|
|
32
|
-
*
|
|
33
|
-
* When provided, the SyncManager will call this to apply data and schema
|
|
34
|
-
* changes from remote replicas. The store should emit events with
|
|
35
|
-
* `remote: true` when this is called.
|
|
36
|
-
*
|
|
37
|
-
* If not provided, the SyncManager will only update CRDT metadata
|
|
38
|
-
* and emit sync events, but will not modify actual data. The application
|
|
39
|
-
* is responsible for applying changes separately.
|
|
40
|
-
*/
|
|
41
|
-
applyToStore?: ApplyToStoreCallback;
|
|
42
|
-
/**
|
|
43
|
-
* Callback for getting table schema by name.
|
|
44
|
-
*
|
|
45
|
-
* When provided, the SyncManager uses this to get actual column names
|
|
46
|
-
* for sync. This is required for proper column-level CRDT tracking.
|
|
47
|
-
*
|
|
48
|
-
* If not provided, column names will be derived from row indices (col_0,
|
|
49
|
-
* col_1, etc.), which may not match across replicas if table schemas differ.
|
|
50
|
-
*/
|
|
51
|
-
getTableSchema?: GetTableSchemaCallback;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Create a sync-enabled module.
|
|
55
|
-
*
|
|
56
|
-
* This function:
|
|
57
|
-
* 1. Creates a SyncManager that tracks CRDT metadata
|
|
58
|
-
* 2. Subscribes to store events to record changes
|
|
59
|
-
* 3. Returns the sync manager and event emitter for UI integration
|
|
60
|
-
*
|
|
61
|
-
* @param kv - The KV store to use for metadata storage
|
|
62
|
-
* @param storeEvents - The store's event emitter
|
|
63
|
-
* @param config - Optional sync configuration
|
|
64
|
-
*
|
|
65
|
-
* @example
|
|
66
|
-
* ```typescript
|
|
67
|
-
* import { LevelDBStore, StoreEventEmitter } from '@quereus/plugin-store';
|
|
68
|
-
* import { createSyncModule } from '@quereus/plugin-sync';
|
|
69
|
-
*
|
|
70
|
-
* const storeEvents = new StoreEventEmitter();
|
|
71
|
-
* const kv = await LevelDBStore.open({ path: './data' });
|
|
72
|
-
*
|
|
73
|
-
* const { syncManager, syncEvents } = await createSyncModule(kv, storeEvents);
|
|
74
|
-
*
|
|
75
|
-
* // Subscribe to sync events for UI
|
|
76
|
-
* syncEvents.onRemoteChange((event) => {
|
|
77
|
-
* console.log('Remote changes:', event.changes.length);
|
|
78
|
-
* });
|
|
79
|
-
*
|
|
80
|
-
* // Use syncManager for sync operations
|
|
81
|
-
* const changes = await syncManager.getChangesSince(peerSiteId, lastHLC);
|
|
82
|
-
* ```
|
|
83
|
-
*/
|
|
84
|
-
export declare function createSyncModule(kv: KVStore, storeEvents: StoreEventEmitter, options?: CreateSyncModuleOptions): Promise<CreateSyncModuleResult>;
|
|
85
|
-
//# sourceMappingURL=create-sync-module.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-sync-module.d.ts","sourceRoot":"","sources":["../../src/create-sync-module.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAuB,KAAK,UAAU,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;AAExG;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,2CAA2C;IAC3C,WAAW,EAAE,WAAW,CAAC;IACzB,gDAAgD;IAChD,UAAU,EAAE,oBAAoB,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,OAAO,CAAC,UAAU,CAAC;IAClE;;;;;;;;;;OAUG;IACH,YAAY,CAAC,EAAE,oBAAoB,CAAC;IAEpC;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,OAAO,EACX,WAAW,EAAE,iBAAiB,EAC9B,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,sBAAsB,CAAC,CAuBjC"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Factory function to create a sync-enabled store module.
|
|
3
|
-
*
|
|
4
|
-
* This wraps an existing store module (LevelDB or IndexedDB) with
|
|
5
|
-
* CRDT sync capabilities.
|
|
6
|
-
*/
|
|
7
|
-
import { SyncManagerImpl } from './sync/sync-manager-impl.js';
|
|
8
|
-
import { SyncEventEmitterImpl } from './sync/events.js';
|
|
9
|
-
import { DEFAULT_SYNC_CONFIG } from './sync/protocol.js';
|
|
10
|
-
/**
|
|
11
|
-
* Create a sync-enabled module.
|
|
12
|
-
*
|
|
13
|
-
* This function:
|
|
14
|
-
* 1. Creates a SyncManager that tracks CRDT metadata
|
|
15
|
-
* 2. Subscribes to store events to record changes
|
|
16
|
-
* 3. Returns the sync manager and event emitter for UI integration
|
|
17
|
-
*
|
|
18
|
-
* @param kv - The KV store to use for metadata storage
|
|
19
|
-
* @param storeEvents - The store's event emitter
|
|
20
|
-
* @param config - Optional sync configuration
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```typescript
|
|
24
|
-
* import { LevelDBStore, StoreEventEmitter } from '@quereus/plugin-store';
|
|
25
|
-
* import { createSyncModule } from '@quereus/plugin-sync';
|
|
26
|
-
*
|
|
27
|
-
* const storeEvents = new StoreEventEmitter();
|
|
28
|
-
* const kv = await LevelDBStore.open({ path: './data' });
|
|
29
|
-
*
|
|
30
|
-
* const { syncManager, syncEvents } = await createSyncModule(kv, storeEvents);
|
|
31
|
-
*
|
|
32
|
-
* // Subscribe to sync events for UI
|
|
33
|
-
* syncEvents.onRemoteChange((event) => {
|
|
34
|
-
* console.log('Remote changes:', event.changes.length);
|
|
35
|
-
* });
|
|
36
|
-
*
|
|
37
|
-
* // Use syncManager for sync operations
|
|
38
|
-
* const changes = await syncManager.getChangesSince(peerSiteId, lastHLC);
|
|
39
|
-
* ```
|
|
40
|
-
*/
|
|
41
|
-
export async function createSyncModule(kv, storeEvents, options = {}) {
|
|
42
|
-
const { applyToStore, getTableSchema, ...configOverrides } = options;
|
|
43
|
-
const fullConfig = {
|
|
44
|
-
...DEFAULT_SYNC_CONFIG,
|
|
45
|
-
...configOverrides,
|
|
46
|
-
};
|
|
47
|
-
const syncEvents = new SyncEventEmitterImpl();
|
|
48
|
-
const syncManager = await SyncManagerImpl.create(kv, storeEvents, fullConfig, syncEvents, applyToStore, getTableSchema);
|
|
49
|
-
return {
|
|
50
|
-
syncManager,
|
|
51
|
-
syncEvents,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=create-sync-module.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-sync-module.js","sourceRoot":"","sources":["../../src/create-sync-module.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAA8C,MAAM,oBAAoB,CAAC;AAgDrG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAW,EACX,WAA8B,EAC9B,UAAmC,EAAE;IAErC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,CAAC;IAErE,MAAM,UAAU,GAAe;QAC7B,GAAG,mBAAmB;QACtB,GAAG,eAAe;KACnB,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE9C,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,MAAM,CAC9C,EAAE,EACF,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,EACZ,cAAc,CACf,CAAC;IAEF,OAAO;QACL,WAAW;QACX,UAAU;KACX,CAAC;AACJ,CAAC"}
|
package/dist/src/index.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sync Plugin for Quereus
|
|
3
|
-
*
|
|
4
|
-
* Provides multi-master CRDT replication with automatic conflict resolution.
|
|
5
|
-
*
|
|
6
|
-
* Features:
|
|
7
|
-
* - Fully automatic: All tables are CRDT-enabled without opt-in
|
|
8
|
-
* - Column-level LWW: Fine-grained conflict resolution
|
|
9
|
-
* - Transport agnostic: Bring your own WebSocket/HTTP/WebRTC
|
|
10
|
-
* - Reactive hooks: UI integration for real-time updates
|
|
11
|
-
* - Offline-first: Works with local changes that sync later
|
|
12
|
-
*
|
|
13
|
-
* Usage:
|
|
14
|
-
* import { createSyncModule } from '@quereus/plugin-sync';
|
|
15
|
-
* import { LevelDBModule, StoreEventEmitter } from '@quereus/plugin-store';
|
|
16
|
-
*
|
|
17
|
-
* const storeEvents = new StoreEventEmitter();
|
|
18
|
-
* const store = new LevelDBModule(storeEvents);
|
|
19
|
-
* const { syncModule, syncManager, syncEvents } = createSyncModule(store, storeEvents);
|
|
20
|
-
*
|
|
21
|
-
* db.registerVtabModule('store', syncModule);
|
|
22
|
-
*/
|
|
23
|
-
export { type HLC, HLCManager, compareHLC, hlcEquals, createHLC, serializeHLC, deserializeHLC, type SerializedHLC, hlcToJson, hlcFromJson, type SiteId, generateSiteId, siteIdToBase64, siteIdFromBase64, toBase64Url, fromBase64Url, siteIdEquals, type SiteIdentity, serializeSiteIdentity, deserializeSiteIdentity, SITE_ID_KEY, } from './clock/index.js';
|
|
24
|
-
export { type ColumnChange, type RowDeletion, type Change, type SchemaMigrationType, type SchemaMigration, type ChangeSet, type ApplyResult, type ColumnVersionEntry, type TableSnapshot, type Snapshot, type PeerSyncState, type SnapshotChunkType, type SnapshotHeaderChunk, type SnapshotTableStartChunk, type SnapshotColumnVersionsChunk, type SnapshotTableEndChunk, type SnapshotSchemaMigrationChunk, type SnapshotFooterChunk, type SnapshotChunk, type SnapshotProgress, type ApplyToStoreOptions, type DataChangeToApply, type SchemaChangeToApply, type ApplyToStoreResult, type ApplyToStoreCallback, type SyncConfig, DEFAULT_SYNC_CONFIG, } from './sync/protocol.js';
|
|
25
|
-
export { type SyncManager, type SnapshotCheckpoint } from './sync/manager.js';
|
|
26
|
-
export { SyncManagerImpl } from './sync/sync-manager-impl.js';
|
|
27
|
-
export { createStoreAdapter, type SyncStoreAdapterOptions } from './sync/store-adapter.js';
|
|
28
|
-
export { createSyncModule, type CreateSyncModuleResult, type CreateSyncModuleOptions, type GetTableSchemaCallback, } from './create-sync-module.js';
|
|
29
|
-
export { type RemoteChangeEvent, type LocalChangeEvent, type ConflictEvent, type SyncState, type Unsubscribe, type SyncEventEmitter, SyncEventEmitterImpl, } from './sync/events.js';
|
|
30
|
-
export { SYNC_KEY_PREFIX, buildColumnVersionKey, buildTombstoneKey, buildTransactionKey, buildPeerStateKey, buildSchemaMigrationKey, buildColumnVersionScanBounds, buildTombstoneScanBounds, buildSchemaMigrationScanBounds, encodePK, decodePK, type ColumnVersion, ColumnVersionStore, serializeColumnVersion, deserializeColumnVersion, type Tombstone, TombstoneStore, serializeTombstone, deserializeTombstone, type PeerState, PeerStateStore, serializePeerState, deserializePeerState, type SchemaVersion, type SchemaVersionType, type SchemaChangeOperation, SchemaVersionStore, buildSchemaVersionKey, buildSchemaVersionScanBounds, buildAllSchemaVersionsScanBounds, serializeSchemaVersion, deserializeSchemaVersion, parseSchemaVersionKey, getDestructiveness, getOperationDestructiveness, shouldApplySchemaChangeByOperation, } from './metadata/index.js';
|
|
31
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAEL,KAAK,GAAG,EACR,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,YAAY,EACZ,cAAc,EAEd,KAAK,aAAa,EAClB,SAAS,EACT,WAAW,EAEX,KAAK,MAAM,EACX,cAAc,EAEd,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,KAAK,YAAY,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,MAAM,EAEX,KAAK,mBAAmB,EACxB,KAAK,eAAe,EAEpB,KAAK,SAAS,EAEd,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,aAAa,EAElB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EAErB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAEzB,KAAK,UAAU,EACf,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAG3F,OAAO,EACL,gBAAgB,EAChB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAEL,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,4BAA4B,EAC5B,wBAAwB,EACxB,8BAA8B,EAC9B,QAAQ,EACR,QAAQ,EAER,KAAK,aAAa,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EAExB,KAAK,SAAS,EACd,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EAEpB,KAAK,SAAS,EACd,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EAEpB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,kBAAkB,EAClB,qBAAqB,EACrB,4BAA4B,EAC5B,gCAAgC,EAChC,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EAErB,kBAAkB,EAClB,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,qBAAqB,CAAC"}
|
package/dist/src/index.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sync Plugin for Quereus
|
|
3
|
-
*
|
|
4
|
-
* Provides multi-master CRDT replication with automatic conflict resolution.
|
|
5
|
-
*
|
|
6
|
-
* Features:
|
|
7
|
-
* - Fully automatic: All tables are CRDT-enabled without opt-in
|
|
8
|
-
* - Column-level LWW: Fine-grained conflict resolution
|
|
9
|
-
* - Transport agnostic: Bring your own WebSocket/HTTP/WebRTC
|
|
10
|
-
* - Reactive hooks: UI integration for real-time updates
|
|
11
|
-
* - Offline-first: Works with local changes that sync later
|
|
12
|
-
*
|
|
13
|
-
* Usage:
|
|
14
|
-
* import { createSyncModule } from '@quereus/plugin-sync';
|
|
15
|
-
* import { LevelDBModule, StoreEventEmitter } from '@quereus/plugin-store';
|
|
16
|
-
*
|
|
17
|
-
* const storeEvents = new StoreEventEmitter();
|
|
18
|
-
* const store = new LevelDBModule(storeEvents);
|
|
19
|
-
* const { syncModule, syncManager, syncEvents } = createSyncModule(store, storeEvents);
|
|
20
|
-
*
|
|
21
|
-
* db.registerVtabModule('store', syncModule);
|
|
22
|
-
*/
|
|
23
|
-
// Clock module
|
|
24
|
-
export { HLCManager, compareHLC, hlcEquals, createHLC, serializeHLC, deserializeHLC, hlcToJson, hlcFromJson, generateSiteId,
|
|
25
|
-
// Base64url encoding
|
|
26
|
-
siteIdToBase64, siteIdFromBase64, toBase64Url, fromBase64Url, siteIdEquals, serializeSiteIdentity, deserializeSiteIdentity, SITE_ID_KEY, } from './clock/index.js';
|
|
27
|
-
// Sync protocol types
|
|
28
|
-
export { DEFAULT_SYNC_CONFIG, } from './sync/protocol.js';
|
|
29
|
-
export { SyncManagerImpl } from './sync/sync-manager-impl.js';
|
|
30
|
-
// Store adapter for applying remote changes
|
|
31
|
-
export { createStoreAdapter } from './sync/store-adapter.js';
|
|
32
|
-
// Factory function
|
|
33
|
-
export { createSyncModule, } from './create-sync-module.js';
|
|
34
|
-
// Reactive events
|
|
35
|
-
export { SyncEventEmitterImpl, } from './sync/events.js';
|
|
36
|
-
// Metadata storage
|
|
37
|
-
export {
|
|
38
|
-
// Key builders
|
|
39
|
-
SYNC_KEY_PREFIX, buildColumnVersionKey, buildTombstoneKey, buildTransactionKey, buildPeerStateKey, buildSchemaMigrationKey, buildColumnVersionScanBounds, buildTombstoneScanBounds, buildSchemaMigrationScanBounds, encodePK, decodePK, ColumnVersionStore, serializeColumnVersion, deserializeColumnVersion, TombstoneStore, serializeTombstone, deserializeTombstone, PeerStateStore, serializePeerState, deserializePeerState, SchemaVersionStore, buildSchemaVersionKey, buildSchemaVersionScanBounds, buildAllSchemaVersionsScanBounds, serializeSchemaVersion, deserializeSchemaVersion, parseSchemaVersionKey,
|
|
40
|
-
// Most destructive wins
|
|
41
|
-
getDestructiveness, getOperationDestructiveness, shouldApplySchemaChangeByOperation, } from './metadata/index.js';
|
|
42
|
-
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,eAAe;AACf,OAAO,EAGL,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,YAAY,EACZ,cAAc,EAGd,SAAS,EACT,WAAW,EAGX,cAAc;AACd,qBAAqB;AACrB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,YAAY,EAEZ,qBAAqB,EACrB,uBAAuB,EACvB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,sBAAsB;AACtB,OAAO,EAkCL,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,4CAA4C;AAC5C,OAAO,EAAE,kBAAkB,EAAgC,MAAM,yBAAyB,CAAC;AAE3F,mBAAmB;AACnB,OAAO,EACL,gBAAgB,GAIjB,MAAM,yBAAyB,CAAC;AAEjC,kBAAkB;AAClB,OAAO,EAOL,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B,mBAAmB;AACnB,OAAO;AACL,eAAe;AACf,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,4BAA4B,EAC5B,wBAAwB,EACxB,8BAA8B,EAC9B,QAAQ,EACR,QAAQ,EAGR,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EAGxB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EAGpB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EAKpB,kBAAkB,EAClB,qBAAqB,EACrB,4BAA4B,EAC5B,gCAAgC,EAChC,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB;AACrB,wBAAwB;AACxB,kBAAkB,EAClB,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,qBAAqB,CAAC"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HLC-indexed change log for efficient delta sync.
|
|
3
|
-
*
|
|
4
|
-
* The change log stores references to changes indexed by HLC timestamp,
|
|
5
|
-
* enabling efficient getChangesSince() queries without scanning all data.
|
|
6
|
-
*/
|
|
7
|
-
import type { KVStore, WriteBatch } from '@quereus/plugin-store';
|
|
8
|
-
import type { SqlValue } from '@quereus/quereus';
|
|
9
|
-
import type { HLC } from '../clock/hlc.js';
|
|
10
|
-
import { type ChangeLogEntryType } from './keys.js';
|
|
11
|
-
/**
|
|
12
|
-
* Change log entry stored in KV.
|
|
13
|
-
*/
|
|
14
|
-
export interface ChangeLogEntry {
|
|
15
|
-
readonly hlc: HLC;
|
|
16
|
-
readonly entryType: ChangeLogEntryType;
|
|
17
|
-
readonly schema: string;
|
|
18
|
-
readonly table: string;
|
|
19
|
-
readonly pk: SqlValue[];
|
|
20
|
-
readonly column?: string;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Change log store for HLC-indexed change tracking.
|
|
24
|
-
*
|
|
25
|
-
* Each mutation (column update or row deletion) creates an entry in the
|
|
26
|
-
* change log, keyed by HLC. This allows efficient range scans to find
|
|
27
|
-
* all changes since a given timestamp.
|
|
28
|
-
*/
|
|
29
|
-
export declare class ChangeLogStore {
|
|
30
|
-
private readonly kv;
|
|
31
|
-
constructor(kv: KVStore);
|
|
32
|
-
/**
|
|
33
|
-
* Record a column change in the change log.
|
|
34
|
-
*/
|
|
35
|
-
recordColumnChange(hlc: HLC, schema: string, table: string, pk: SqlValue[], column: string): Promise<void>;
|
|
36
|
-
/**
|
|
37
|
-
* Record a column change in a batch.
|
|
38
|
-
*/
|
|
39
|
-
recordColumnChangeBatch(batch: WriteBatch, hlc: HLC, schema: string, table: string, pk: SqlValue[], column: string): void;
|
|
40
|
-
/**
|
|
41
|
-
* Record a row deletion in the change log.
|
|
42
|
-
*/
|
|
43
|
-
recordDeletion(hlc: HLC, schema: string, table: string, pk: SqlValue[]): Promise<void>;
|
|
44
|
-
/**
|
|
45
|
-
* Record a row deletion in a batch.
|
|
46
|
-
*/
|
|
47
|
-
recordDeletionBatch(batch: WriteBatch, hlc: HLC, schema: string, table: string, pk: SqlValue[]): void;
|
|
48
|
-
/**
|
|
49
|
-
* Get all change log entries after a given HLC.
|
|
50
|
-
* Returns entries in HLC order (oldest first).
|
|
51
|
-
*/
|
|
52
|
-
getChangesSince(sinceHLC: HLC): AsyncIterable<ChangeLogEntry>;
|
|
53
|
-
/**
|
|
54
|
-
* Get all change log entries.
|
|
55
|
-
*/
|
|
56
|
-
getAllChanges(): AsyncIterable<ChangeLogEntry>;
|
|
57
|
-
/**
|
|
58
|
-
* Delete change log entries up to a given HLC.
|
|
59
|
-
* Used for pruning old entries after they've been synced to all peers.
|
|
60
|
-
*/
|
|
61
|
-
pruneEntriesBefore(beforeHLC: HLC): Promise<number>;
|
|
62
|
-
/**
|
|
63
|
-
* Delete a specific change log entry (used during snapshot application).
|
|
64
|
-
*/
|
|
65
|
-
deleteEntryBatch(batch: WriteBatch, hlc: HLC, entryType: ChangeLogEntryType, schema: string, table: string, pk: SqlValue[], column?: string): void;
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=change-log.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"change-log.d.ts","sourceRoot":"","sources":["../../../src/metadata/change-log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAKL,KAAK,kBAAkB,EACxB,MAAM,WAAW,CAAC;AAEnB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,OAAO;IAExC;;OAEG;IACG,kBAAkB,CACtB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,QAAQ,EAAE,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAMhB;;OAEG;IACH,uBAAuB,CACrB,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,QAAQ,EAAE,EACd,MAAM,EAAE,MAAM,GACb,IAAI;IAKP;;OAEG;IACG,cAAc,CAClB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,QAAQ,EAAE,GACb,OAAO,CAAC,IAAI,CAAC;IAKhB;;OAEG;IACH,mBAAmB,CACjB,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,QAAQ,EAAE,GACb,IAAI;IAKP;;;OAGG;IACI,eAAe,CAAC,QAAQ,EAAE,GAAG,GAAG,aAAa,CAAC,cAAc,CAAC;IAUpE;;OAEG;IACI,aAAa,IAAI,aAAa,CAAC,cAAc,CAAC;IAUrD;;;OAGG;IACG,kBAAkB,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBzD;;OAEG;IACH,gBAAgB,CACd,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,kBAAkB,EAC7B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,QAAQ,EAAE,EACd,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;CAIR"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HLC-indexed change log for efficient delta sync.
|
|
3
|
-
*
|
|
4
|
-
* The change log stores references to changes indexed by HLC timestamp,
|
|
5
|
-
* enabling efficient getChangesSince() queries without scanning all data.
|
|
6
|
-
*/
|
|
7
|
-
import { buildChangeLogKey, buildChangeLogScanBoundsAfter, buildAllChangeLogScanBounds, parseChangeLogKey, } from './keys.js';
|
|
8
|
-
/**
|
|
9
|
-
* Change log store for HLC-indexed change tracking.
|
|
10
|
-
*
|
|
11
|
-
* Each mutation (column update or row deletion) creates an entry in the
|
|
12
|
-
* change log, keyed by HLC. This allows efficient range scans to find
|
|
13
|
-
* all changes since a given timestamp.
|
|
14
|
-
*/
|
|
15
|
-
export class ChangeLogStore {
|
|
16
|
-
kv;
|
|
17
|
-
constructor(kv) {
|
|
18
|
-
this.kv = kv;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Record a column change in the change log.
|
|
22
|
-
*/
|
|
23
|
-
async recordColumnChange(hlc, schema, table, pk, column) {
|
|
24
|
-
const key = buildChangeLogKey(hlc, 'column', schema, table, pk, column);
|
|
25
|
-
// Value is empty - all info is in the key
|
|
26
|
-
await this.kv.put(key, new Uint8Array(0));
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Record a column change in a batch.
|
|
30
|
-
*/
|
|
31
|
-
recordColumnChangeBatch(batch, hlc, schema, table, pk, column) {
|
|
32
|
-
const key = buildChangeLogKey(hlc, 'column', schema, table, pk, column);
|
|
33
|
-
batch.put(key, new Uint8Array(0));
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Record a row deletion in the change log.
|
|
37
|
-
*/
|
|
38
|
-
async recordDeletion(hlc, schema, table, pk) {
|
|
39
|
-
const key = buildChangeLogKey(hlc, 'delete', schema, table, pk);
|
|
40
|
-
await this.kv.put(key, new Uint8Array(0));
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Record a row deletion in a batch.
|
|
44
|
-
*/
|
|
45
|
-
recordDeletionBatch(batch, hlc, schema, table, pk) {
|
|
46
|
-
const key = buildChangeLogKey(hlc, 'delete', schema, table, pk);
|
|
47
|
-
batch.put(key, new Uint8Array(0));
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Get all change log entries after a given HLC.
|
|
51
|
-
* Returns entries in HLC order (oldest first).
|
|
52
|
-
*/
|
|
53
|
-
async *getChangesSince(sinceHLC) {
|
|
54
|
-
const bounds = buildChangeLogScanBoundsAfter(sinceHLC);
|
|
55
|
-
for await (const entry of this.kv.iterate(bounds)) {
|
|
56
|
-
const parsed = parseChangeLogKey(entry.key);
|
|
57
|
-
if (parsed) {
|
|
58
|
-
yield parsed;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Get all change log entries.
|
|
64
|
-
*/
|
|
65
|
-
async *getAllChanges() {
|
|
66
|
-
const bounds = buildAllChangeLogScanBounds();
|
|
67
|
-
for await (const entry of this.kv.iterate(bounds)) {
|
|
68
|
-
const parsed = parseChangeLogKey(entry.key);
|
|
69
|
-
if (parsed) {
|
|
70
|
-
yield parsed;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Delete change log entries up to a given HLC.
|
|
76
|
-
* Used for pruning old entries after they've been synced to all peers.
|
|
77
|
-
*/
|
|
78
|
-
async pruneEntriesBefore(beforeHLC) {
|
|
79
|
-
const bounds = buildAllChangeLogScanBounds();
|
|
80
|
-
const batch = this.kv.batch();
|
|
81
|
-
let count = 0;
|
|
82
|
-
for await (const entry of this.kv.iterate(bounds)) {
|
|
83
|
-
const parsed = parseChangeLogKey(entry.key);
|
|
84
|
-
if (!parsed)
|
|
85
|
-
continue;
|
|
86
|
-
// Compare HLCs - stop when we reach entries >= beforeHLC
|
|
87
|
-
if (parsed.hlc.wallTime > beforeHLC.wallTime)
|
|
88
|
-
break;
|
|
89
|
-
if (parsed.hlc.wallTime === beforeHLC.wallTime) {
|
|
90
|
-
if (parsed.hlc.counter >= beforeHLC.counter)
|
|
91
|
-
break;
|
|
92
|
-
}
|
|
93
|
-
batch.delete(entry.key);
|
|
94
|
-
count++;
|
|
95
|
-
}
|
|
96
|
-
await batch.write();
|
|
97
|
-
return count;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Delete a specific change log entry (used during snapshot application).
|
|
101
|
-
*/
|
|
102
|
-
deleteEntryBatch(batch, hlc, entryType, schema, table, pk, column) {
|
|
103
|
-
const key = buildChangeLogKey(hlc, entryType, schema, table, pk, column);
|
|
104
|
-
batch.delete(key);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
//# sourceMappingURL=change-log.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"change-log.js","sourceRoot":"","sources":["../../../src/metadata/change-log.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Column version tracking for LWW conflict resolution.
|
|
3
|
-
*
|
|
4
|
-
* Each column of each row has an associated HLC timestamp.
|
|
5
|
-
* When merging changes, the column with the higher HLC wins.
|
|
6
|
-
*/
|
|
7
|
-
import type { SqlValue } from '@quereus/quereus';
|
|
8
|
-
import type { KVStore, WriteBatch } from '@quereus/plugin-store';
|
|
9
|
-
import { type HLC } from '../clock/hlc.js';
|
|
10
|
-
/**
|
|
11
|
-
* Column version record stored in the KV store.
|
|
12
|
-
*/
|
|
13
|
-
export interface ColumnVersion {
|
|
14
|
-
hlc: HLC;
|
|
15
|
-
value: SqlValue;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Serialize a column version for storage.
|
|
19
|
-
* Format: 26 bytes HLC + JSON value
|
|
20
|
-
*/
|
|
21
|
-
export declare function serializeColumnVersion(cv: ColumnVersion): Uint8Array;
|
|
22
|
-
/**
|
|
23
|
-
* Deserialize a column version from storage.
|
|
24
|
-
*/
|
|
25
|
-
export declare function deserializeColumnVersion(buffer: Uint8Array): ColumnVersion;
|
|
26
|
-
/**
|
|
27
|
-
* Column version store operations.
|
|
28
|
-
*/
|
|
29
|
-
export declare class ColumnVersionStore {
|
|
30
|
-
private readonly kv;
|
|
31
|
-
constructor(kv: KVStore);
|
|
32
|
-
/**
|
|
33
|
-
* Get the version of a specific column.
|
|
34
|
-
*/
|
|
35
|
-
getColumnVersion(schemaName: string, tableName: string, pk: SqlValue[], column: string): Promise<ColumnVersion | undefined>;
|
|
36
|
-
/**
|
|
37
|
-
* Set the version of a specific column.
|
|
38
|
-
*/
|
|
39
|
-
setColumnVersion(schemaName: string, tableName: string, pk: SqlValue[], column: string, version: ColumnVersion): Promise<void>;
|
|
40
|
-
/**
|
|
41
|
-
* Set column version in a batch.
|
|
42
|
-
*/
|
|
43
|
-
setColumnVersionBatch(batch: WriteBatch, schemaName: string, tableName: string, pk: SqlValue[], column: string, version: ColumnVersion): void;
|
|
44
|
-
/**
|
|
45
|
-
* Get all column versions for a row.
|
|
46
|
-
*/
|
|
47
|
-
getRowVersions(schemaName: string, tableName: string, pk: SqlValue[]): Promise<Map<string, ColumnVersion>>;
|
|
48
|
-
/**
|
|
49
|
-
* Delete all column versions for a row.
|
|
50
|
-
*/
|
|
51
|
-
deleteRowVersions(schemaName: string, tableName: string, pk: SqlValue[]): Promise<void>;
|
|
52
|
-
/**
|
|
53
|
-
* Check if a column write should be applied (LWW comparison).
|
|
54
|
-
* Returns true if the incoming HLC is newer than the current version.
|
|
55
|
-
*/
|
|
56
|
-
shouldApplyWrite(schemaName: string, tableName: string, pk: SqlValue[], column: string, incomingHLC: HLC): Promise<boolean>;
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=column-version.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"column-version.d.ts","sourceRoot":"","sources":["../../../src/metadata/column-version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,KAAK,GAAG,EAA4C,MAAM,iBAAiB,CAAC;AAGrF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,aAAa,GAAG,UAAU,CASpE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,aAAa,CAK1E;AAED;;GAEG;AACH,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,OAAO;IAExC;;OAEG;IACG,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,QAAQ,EAAE,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAOrC;;OAEG;IACG,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,QAAQ,EAAE,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC;IAKhB;;OAEG;IACH,qBAAqB,CACnB,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,QAAQ,EAAE,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,GACrB,IAAI;IAKP;;OAEG;IACG,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,QAAQ,EAAE,GACb,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAgBtC;;OAEG;IACG,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,QAAQ,EAAE,GACb,OAAO,CAAC,IAAI,CAAC;IAWhB;;;OAGG;IACG,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,QAAQ,EAAE,EACd,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,GAAG,GACf,OAAO,CAAC,OAAO,CAAC;CAKpB"}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Column version tracking for LWW conflict resolution.
|
|
3
|
-
*
|
|
4
|
-
* Each column of each row has an associated HLC timestamp.
|
|
5
|
-
* When merging changes, the column with the higher HLC wins.
|
|
6
|
-
*/
|
|
7
|
-
import { serializeHLC, deserializeHLC, compareHLC } from '../clock/hlc.js';
|
|
8
|
-
import { buildColumnVersionKey, buildColumnVersionScanBounds } from './keys.js';
|
|
9
|
-
/**
|
|
10
|
-
* Serialize a column version for storage.
|
|
11
|
-
* Format: 26 bytes HLC + JSON value
|
|
12
|
-
*/
|
|
13
|
-
export function serializeColumnVersion(cv) {
|
|
14
|
-
const hlcBytes = serializeHLC(cv.hlc);
|
|
15
|
-
const valueJson = JSON.stringify(cv.value);
|
|
16
|
-
const valueBytes = new TextEncoder().encode(valueJson);
|
|
17
|
-
const result = new Uint8Array(hlcBytes.length + valueBytes.length);
|
|
18
|
-
result.set(hlcBytes, 0);
|
|
19
|
-
result.set(valueBytes, hlcBytes.length);
|
|
20
|
-
return result;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Deserialize a column version from storage.
|
|
24
|
-
*/
|
|
25
|
-
export function deserializeColumnVersion(buffer) {
|
|
26
|
-
const hlc = deserializeHLC(buffer.slice(0, 26));
|
|
27
|
-
const valueJson = new TextDecoder().decode(buffer.slice(26));
|
|
28
|
-
const value = JSON.parse(valueJson);
|
|
29
|
-
return { hlc, value };
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Column version store operations.
|
|
33
|
-
*/
|
|
34
|
-
export class ColumnVersionStore {
|
|
35
|
-
kv;
|
|
36
|
-
constructor(kv) {
|
|
37
|
-
this.kv = kv;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Get the version of a specific column.
|
|
41
|
-
*/
|
|
42
|
-
async getColumnVersion(schemaName, tableName, pk, column) {
|
|
43
|
-
const key = buildColumnVersionKey(schemaName, tableName, pk, column);
|
|
44
|
-
const data = await this.kv.get(key);
|
|
45
|
-
if (!data)
|
|
46
|
-
return undefined;
|
|
47
|
-
return deserializeColumnVersion(data);
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Set the version of a specific column.
|
|
51
|
-
*/
|
|
52
|
-
async setColumnVersion(schemaName, tableName, pk, column, version) {
|
|
53
|
-
const key = buildColumnVersionKey(schemaName, tableName, pk, column);
|
|
54
|
-
await this.kv.put(key, serializeColumnVersion(version));
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Set column version in a batch.
|
|
58
|
-
*/
|
|
59
|
-
setColumnVersionBatch(batch, schemaName, tableName, pk, column, version) {
|
|
60
|
-
const key = buildColumnVersionKey(schemaName, tableName, pk, column);
|
|
61
|
-
batch.put(key, serializeColumnVersion(version));
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Get all column versions for a row.
|
|
65
|
-
*/
|
|
66
|
-
async getRowVersions(schemaName, tableName, pk) {
|
|
67
|
-
const bounds = buildColumnVersionScanBounds(schemaName, tableName, pk);
|
|
68
|
-
const versions = new Map();
|
|
69
|
-
for await (const entry of this.kv.iterate(bounds)) {
|
|
70
|
-
// Extract column name from key
|
|
71
|
-
const keyStr = new TextDecoder().decode(entry.key);
|
|
72
|
-
const lastColon = keyStr.lastIndexOf(':');
|
|
73
|
-
const column = keyStr.slice(lastColon + 1);
|
|
74
|
-
versions.set(column, deserializeColumnVersion(entry.value));
|
|
75
|
-
}
|
|
76
|
-
return versions;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Delete all column versions for a row.
|
|
80
|
-
*/
|
|
81
|
-
async deleteRowVersions(schemaName, tableName, pk) {
|
|
82
|
-
const bounds = buildColumnVersionScanBounds(schemaName, tableName, pk);
|
|
83
|
-
const batch = this.kv.batch();
|
|
84
|
-
for await (const entry of this.kv.iterate(bounds)) {
|
|
85
|
-
batch.delete(entry.key);
|
|
86
|
-
}
|
|
87
|
-
await batch.write();
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Check if a column write should be applied (LWW comparison).
|
|
91
|
-
* Returns true if the incoming HLC is newer than the current version.
|
|
92
|
-
*/
|
|
93
|
-
async shouldApplyWrite(schemaName, tableName, pk, column, incomingHLC) {
|
|
94
|
-
const current = await this.getColumnVersion(schemaName, tableName, pk, column);
|
|
95
|
-
if (!current)
|
|
96
|
-
return true;
|
|
97
|
-
return compareHLC(incomingHLC, current.hlc) > 0;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
//# sourceMappingURL=column-version.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"column-version.js","sourceRoot":"","sources":["../../../src/metadata/column-version.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Metadata module exports.
|
|
3
|
-
*/
|
|
4
|
-
export * from './keys.js';
|
|
5
|
-
export * from './column-version.js';
|
|
6
|
-
export * from './tombstones.js';
|
|
7
|
-
export * from './peer-state.js';
|
|
8
|
-
export * from './schema-migration.js';
|
|
9
|
-
export * from './schema-version.js';
|
|
10
|
-
export * from './change-log.js';
|
|
11
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/metadata/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Metadata module exports.
|
|
3
|
-
*/
|
|
4
|
-
export * from './keys.js';
|
|
5
|
-
export * from './column-version.js';
|
|
6
|
-
export * from './tombstones.js';
|
|
7
|
-
export * from './peer-state.js';
|
|
8
|
-
export * from './schema-migration.js';
|
|
9
|
-
export * from './schema-version.js';
|
|
10
|
-
export * from './change-log.js';
|
|
11
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/metadata/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC"}
|