@quereus/sync 0.3.4
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 +155 -0
- package/dist/src/clock/hlc.d.ts +105 -0
- package/dist/src/clock/hlc.d.ts.map +1 -0
- package/dist/src/clock/hlc.js +251 -0
- package/dist/src/clock/hlc.js.map +1 -0
- package/dist/src/clock/index.d.ts +6 -0
- package/dist/src/clock/index.d.ts.map +1 -0
- package/dist/src/clock/index.js +6 -0
- package/dist/src/clock/index.js.map +1 -0
- package/dist/src/clock/site.d.ts +58 -0
- package/dist/src/clock/site.d.ts.map +1 -0
- package/dist/src/clock/site.js +137 -0
- package/dist/src/clock/site.js.map +1 -0
- package/dist/src/create-sync-module.d.ts +85 -0
- package/dist/src/create-sync-module.d.ts.map +1 -0
- package/dist/src/create-sync-module.js +54 -0
- package/dist/src/create-sync-module.js.map +1 -0
- package/dist/src/index.d.ts +31 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +42 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/metadata/change-log.d.ts +67 -0
- package/dist/src/metadata/change-log.d.ts.map +1 -0
- package/dist/src/metadata/change-log.js +107 -0
- package/dist/src/metadata/change-log.js.map +1 -0
- package/dist/src/metadata/column-version.d.ts +58 -0
- package/dist/src/metadata/column-version.d.ts.map +1 -0
- package/dist/src/metadata/column-version.js +100 -0
- package/dist/src/metadata/column-version.js.map +1 -0
- package/dist/src/metadata/index.d.ts +11 -0
- package/dist/src/metadata/index.d.ts.map +1 -0
- package/dist/src/metadata/index.js +11 -0
- package/dist/src/metadata/index.js.map +1 -0
- package/dist/src/metadata/keys.d.ts +180 -0
- package/dist/src/metadata/keys.d.ts.map +1 -0
- package/dist/src/metadata/keys.js +390 -0
- package/dist/src/metadata/keys.js.map +1 -0
- package/dist/src/metadata/peer-state.d.ts +52 -0
- package/dist/src/metadata/peer-state.d.ts.map +1 -0
- package/dist/src/metadata/peer-state.js +87 -0
- package/dist/src/metadata/peer-state.js.map +1 -0
- package/dist/src/metadata/schema-migration.d.ts +60 -0
- package/dist/src/metadata/schema-migration.d.ts.map +1 -0
- package/dist/src/metadata/schema-migration.js +126 -0
- package/dist/src/metadata/schema-migration.js.map +1 -0
- package/dist/src/metadata/schema-version.d.ts +163 -0
- package/dist/src/metadata/schema-version.d.ts.map +1 -0
- package/dist/src/metadata/schema-version.js +307 -0
- package/dist/src/metadata/schema-version.js.map +1 -0
- package/dist/src/metadata/tombstones.d.ts +67 -0
- package/dist/src/metadata/tombstones.d.ts.map +1 -0
- package/dist/src/metadata/tombstones.js +125 -0
- package/dist/src/metadata/tombstones.js.map +1 -0
- package/dist/src/sync/events.d.ts +117 -0
- package/dist/src/sync/events.d.ts.map +1 -0
- package/dist/src/sync/events.js +56 -0
- package/dist/src/sync/events.js.map +1 -0
- package/dist/src/sync/index.d.ts +8 -0
- package/dist/src/sync/index.d.ts.map +1 -0
- package/dist/src/sync/index.js +8 -0
- package/dist/src/sync/index.js.map +1 -0
- package/dist/src/sync/manager.d.ts +146 -0
- package/dist/src/sync/manager.d.ts.map +1 -0
- package/dist/src/sync/manager.js +8 -0
- package/dist/src/sync/manager.js.map +1 -0
- package/dist/src/sync/protocol.d.ts +282 -0
- package/dist/src/sync/protocol.d.ts.map +1 -0
- package/dist/src/sync/protocol.js +16 -0
- package/dist/src/sync/protocol.js.map +1 -0
- package/dist/src/sync/store-adapter.d.ts +42 -0
- package/dist/src/sync/store-adapter.d.ts.map +1 -0
- package/dist/src/sync/store-adapter.js +232 -0
- package/dist/src/sync/store-adapter.js.map +1 -0
- package/dist/src/sync/sync-manager-impl.d.ts +106 -0
- package/dist/src/sync/sync-manager-impl.d.ts.map +1 -0
- package/dist/src/sync/sync-manager-impl.js +1307 -0
- package/dist/src/sync/sync-manager-impl.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SyncManager implementation.
|
|
3
|
+
*
|
|
4
|
+
* Coordinates CRDT metadata tracking and sync operations.
|
|
5
|
+
*/
|
|
6
|
+
import type { KVStore, StoreEventEmitter } from '@quereus/store';
|
|
7
|
+
import type { TableSchema } from '@quereus/quereus';
|
|
8
|
+
/**
|
|
9
|
+
* Callback to get table schema by name.
|
|
10
|
+
* Used to map column indices to actual column names.
|
|
11
|
+
*/
|
|
12
|
+
export type GetTableSchemaCallback = (schemaName: string, tableName: string) => TableSchema | undefined;
|
|
13
|
+
import { type HLC } from '../clock/hlc.js';
|
|
14
|
+
import { type SiteId } from '../clock/site.js';
|
|
15
|
+
import type { SyncManager, SnapshotCheckpoint } from './manager.js';
|
|
16
|
+
import type { SyncConfig, ChangeSet, ApplyResult, Snapshot, SnapshotChunk, SnapshotProgress, ApplyToStoreCallback } from './protocol.js';
|
|
17
|
+
import { SyncEventEmitterImpl } from './events.js';
|
|
18
|
+
/**
|
|
19
|
+
* Implementation of SyncManager.
|
|
20
|
+
*/
|
|
21
|
+
export declare class SyncManagerImpl implements SyncManager {
|
|
22
|
+
private readonly kv;
|
|
23
|
+
private readonly config;
|
|
24
|
+
private readonly hlcManager;
|
|
25
|
+
private readonly columnVersions;
|
|
26
|
+
private readonly tombstones;
|
|
27
|
+
private readonly peerStates;
|
|
28
|
+
private readonly changeLog;
|
|
29
|
+
private readonly schemaMigrations;
|
|
30
|
+
private readonly syncEvents;
|
|
31
|
+
private readonly applyToStore?;
|
|
32
|
+
private readonly getTableSchema?;
|
|
33
|
+
private pendingChanges;
|
|
34
|
+
private currentTransactionId;
|
|
35
|
+
private constructor();
|
|
36
|
+
/**
|
|
37
|
+
* Create a new SyncManager, initializing or loading site identity.
|
|
38
|
+
*
|
|
39
|
+
* @param kv - KV store for sync metadata
|
|
40
|
+
* @param storeEvents - Store event emitter to subscribe to local changes
|
|
41
|
+
* @param config - Sync configuration
|
|
42
|
+
* @param syncEvents - Sync event emitter for UI integration
|
|
43
|
+
* @param applyToStore - Optional callback for applying remote changes to the store
|
|
44
|
+
* @param getTableSchema - Optional callback for getting table schema by name
|
|
45
|
+
*/
|
|
46
|
+
static create(kv: KVStore, storeEvents: StoreEventEmitter, config: SyncConfig, syncEvents: SyncEventEmitterImpl, applyToStore?: ApplyToStoreCallback, getTableSchema?: GetTableSchemaCallback): Promise<SyncManagerImpl>;
|
|
47
|
+
getSiteId(): SiteId;
|
|
48
|
+
getCurrentHLC(): HLC;
|
|
49
|
+
/**
|
|
50
|
+
* Handle a data change event from the store.
|
|
51
|
+
* Records CRDT metadata for the change.
|
|
52
|
+
* Skips remote events to prevent duplicate recording.
|
|
53
|
+
*/
|
|
54
|
+
private handleDataChange;
|
|
55
|
+
/**
|
|
56
|
+
* Handle a schema change event from the store.
|
|
57
|
+
* Records schema migrations for sync.
|
|
58
|
+
* Skips remote events to prevent duplicate recording.
|
|
59
|
+
*/
|
|
60
|
+
private handleSchemaChange;
|
|
61
|
+
private recordColumnVersions;
|
|
62
|
+
private persistHLCState;
|
|
63
|
+
getChangesSince(peerSiteId: SiteId, sinceHLC?: HLC): Promise<ChangeSet[]>;
|
|
64
|
+
/**
|
|
65
|
+
* Fallback: collect all changes when no sinceHLC is provided.
|
|
66
|
+
*/
|
|
67
|
+
private collectAllChanges;
|
|
68
|
+
applyChanges(changes: ChangeSet[]): Promise<ApplyResult>;
|
|
69
|
+
/**
|
|
70
|
+
* Resolve CRDT conflicts for a change WITHOUT writing metadata.
|
|
71
|
+
* This is phase 1 of the two-phase apply: resolve first, then after
|
|
72
|
+
* data is written to store, call commitChangeMetadata to persist CRDT state.
|
|
73
|
+
*
|
|
74
|
+
* Write order (for crash safety):
|
|
75
|
+
* 1. Resolve all changes (this method) - no writes
|
|
76
|
+
* 2. Apply data to store (applyToStore callback)
|
|
77
|
+
* 3. Commit CRDT metadata (commitChangeMetadata)
|
|
78
|
+
*
|
|
79
|
+
* If crash occurs after data but before metadata, re-sync will re-apply
|
|
80
|
+
* the same changes. Since CRDT operations are idempotent (same HLC → same
|
|
81
|
+
* LWW outcome), this is safe.
|
|
82
|
+
*/
|
|
83
|
+
private resolveChange;
|
|
84
|
+
/**
|
|
85
|
+
* Commit CRDT metadata for resolved changes.
|
|
86
|
+
* This is phase 2 of the two-phase apply: called AFTER data is written to store.
|
|
87
|
+
*/
|
|
88
|
+
private commitChangeMetadata;
|
|
89
|
+
canDeltaSync(peerSiteId: SiteId, sinceHLC: HLC): Promise<boolean>;
|
|
90
|
+
getSnapshot(): Promise<Snapshot>;
|
|
91
|
+
applySnapshot(snapshot: Snapshot): Promise<void>;
|
|
92
|
+
updatePeerSyncState(peerSiteId: SiteId, hlc: HLC): Promise<void>;
|
|
93
|
+
getPeerSyncState(peerSiteId: SiteId): Promise<HLC | undefined>;
|
|
94
|
+
pruneTombstones(): Promise<number>;
|
|
95
|
+
/**
|
|
96
|
+
* Get the sync event emitter for UI integration.
|
|
97
|
+
*/
|
|
98
|
+
getEventEmitter(): SyncEventEmitterImpl;
|
|
99
|
+
getSnapshotStream(chunkSize?: number): AsyncIterable<SnapshotChunk>;
|
|
100
|
+
applySnapshotStream(chunks: AsyncIterable<SnapshotChunk>, onProgress?: (progress: SnapshotProgress) => void): Promise<void>;
|
|
101
|
+
getSnapshotCheckpoint(snapshotId: string): Promise<SnapshotCheckpoint | undefined>;
|
|
102
|
+
private saveSnapshotCheckpoint;
|
|
103
|
+
private clearSnapshotCheckpoint;
|
|
104
|
+
resumeSnapshotStream(checkpoint: SnapshotCheckpoint): AsyncIterable<SnapshotChunk>;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=sync-manager-impl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-manager-impl.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-manager-impl.ts"],"names":[],"mappings":"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"}
|