@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.
Files changed (78) hide show
  1. package/README.md +155 -0
  2. package/dist/src/clock/hlc.d.ts +105 -0
  3. package/dist/src/clock/hlc.d.ts.map +1 -0
  4. package/dist/src/clock/hlc.js +251 -0
  5. package/dist/src/clock/hlc.js.map +1 -0
  6. package/dist/src/clock/index.d.ts +6 -0
  7. package/dist/src/clock/index.d.ts.map +1 -0
  8. package/dist/src/clock/index.js +6 -0
  9. package/dist/src/clock/index.js.map +1 -0
  10. package/dist/src/clock/site.d.ts +58 -0
  11. package/dist/src/clock/site.d.ts.map +1 -0
  12. package/dist/src/clock/site.js +137 -0
  13. package/dist/src/clock/site.js.map +1 -0
  14. package/dist/src/create-sync-module.d.ts +85 -0
  15. package/dist/src/create-sync-module.d.ts.map +1 -0
  16. package/dist/src/create-sync-module.js +54 -0
  17. package/dist/src/create-sync-module.js.map +1 -0
  18. package/dist/src/index.d.ts +31 -0
  19. package/dist/src/index.d.ts.map +1 -0
  20. package/dist/src/index.js +42 -0
  21. package/dist/src/index.js.map +1 -0
  22. package/dist/src/metadata/change-log.d.ts +67 -0
  23. package/dist/src/metadata/change-log.d.ts.map +1 -0
  24. package/dist/src/metadata/change-log.js +107 -0
  25. package/dist/src/metadata/change-log.js.map +1 -0
  26. package/dist/src/metadata/column-version.d.ts +58 -0
  27. package/dist/src/metadata/column-version.d.ts.map +1 -0
  28. package/dist/src/metadata/column-version.js +100 -0
  29. package/dist/src/metadata/column-version.js.map +1 -0
  30. package/dist/src/metadata/index.d.ts +11 -0
  31. package/dist/src/metadata/index.d.ts.map +1 -0
  32. package/dist/src/metadata/index.js +11 -0
  33. package/dist/src/metadata/index.js.map +1 -0
  34. package/dist/src/metadata/keys.d.ts +180 -0
  35. package/dist/src/metadata/keys.d.ts.map +1 -0
  36. package/dist/src/metadata/keys.js +390 -0
  37. package/dist/src/metadata/keys.js.map +1 -0
  38. package/dist/src/metadata/peer-state.d.ts +52 -0
  39. package/dist/src/metadata/peer-state.d.ts.map +1 -0
  40. package/dist/src/metadata/peer-state.js +87 -0
  41. package/dist/src/metadata/peer-state.js.map +1 -0
  42. package/dist/src/metadata/schema-migration.d.ts +60 -0
  43. package/dist/src/metadata/schema-migration.d.ts.map +1 -0
  44. package/dist/src/metadata/schema-migration.js +126 -0
  45. package/dist/src/metadata/schema-migration.js.map +1 -0
  46. package/dist/src/metadata/schema-version.d.ts +163 -0
  47. package/dist/src/metadata/schema-version.d.ts.map +1 -0
  48. package/dist/src/metadata/schema-version.js +307 -0
  49. package/dist/src/metadata/schema-version.js.map +1 -0
  50. package/dist/src/metadata/tombstones.d.ts +67 -0
  51. package/dist/src/metadata/tombstones.d.ts.map +1 -0
  52. package/dist/src/metadata/tombstones.js +125 -0
  53. package/dist/src/metadata/tombstones.js.map +1 -0
  54. package/dist/src/sync/events.d.ts +117 -0
  55. package/dist/src/sync/events.d.ts.map +1 -0
  56. package/dist/src/sync/events.js +56 -0
  57. package/dist/src/sync/events.js.map +1 -0
  58. package/dist/src/sync/index.d.ts +8 -0
  59. package/dist/src/sync/index.d.ts.map +1 -0
  60. package/dist/src/sync/index.js +8 -0
  61. package/dist/src/sync/index.js.map +1 -0
  62. package/dist/src/sync/manager.d.ts +146 -0
  63. package/dist/src/sync/manager.d.ts.map +1 -0
  64. package/dist/src/sync/manager.js +8 -0
  65. package/dist/src/sync/manager.js.map +1 -0
  66. package/dist/src/sync/protocol.d.ts +282 -0
  67. package/dist/src/sync/protocol.d.ts.map +1 -0
  68. package/dist/src/sync/protocol.js +16 -0
  69. package/dist/src/sync/protocol.js.map +1 -0
  70. package/dist/src/sync/store-adapter.d.ts +42 -0
  71. package/dist/src/sync/store-adapter.d.ts.map +1 -0
  72. package/dist/src/sync/store-adapter.js +232 -0
  73. package/dist/src/sync/store-adapter.js.map +1 -0
  74. package/dist/src/sync/sync-manager-impl.d.ts +106 -0
  75. package/dist/src/sync/sync-manager-impl.d.ts.map +1 -0
  76. package/dist/src/sync/sync-manager-impl.js +1307 -0
  77. package/dist/src/sync/sync-manager-impl.js.map +1 -0
  78. 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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"}