@nahisaho/yata-scale 1.8.5

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 (158) hide show
  1. package/README.md +66 -0
  2. package/dist/CacheManager.d.ts +107 -0
  3. package/dist/CacheManager.d.ts.map +1 -0
  4. package/dist/CacheManager.js +343 -0
  5. package/dist/CacheManager.js.map +1 -0
  6. package/dist/IndexManager.d.ts +103 -0
  7. package/dist/IndexManager.d.ts.map +1 -0
  8. package/dist/IndexManager.js +385 -0
  9. package/dist/IndexManager.js.map +1 -0
  10. package/dist/MigrationHelper.d.ts +91 -0
  11. package/dist/MigrationHelper.d.ts.map +1 -0
  12. package/dist/MigrationHelper.js +220 -0
  13. package/dist/MigrationHelper.js.map +1 -0
  14. package/dist/QueryCoordinator.d.ts +76 -0
  15. package/dist/QueryCoordinator.d.ts.map +1 -0
  16. package/dist/QueryCoordinator.js +298 -0
  17. package/dist/QueryCoordinator.js.map +1 -0
  18. package/dist/ShardManager.d.ts +48 -0
  19. package/dist/ShardManager.d.ts.map +1 -0
  20. package/dist/ShardManager.js +193 -0
  21. package/dist/ShardManager.js.map +1 -0
  22. package/dist/SyncController.d.ts +102 -0
  23. package/dist/SyncController.d.ts.map +1 -0
  24. package/dist/SyncController.js +286 -0
  25. package/dist/SyncController.js.map +1 -0
  26. package/dist/YataScaleManager.d.ts +75 -0
  27. package/dist/YataScaleManager.d.ts.map +1 -0
  28. package/dist/YataScaleManager.js +265 -0
  29. package/dist/YataScaleManager.js.map +1 -0
  30. package/dist/cache/CacheManager.d.ts +116 -0
  31. package/dist/cache/CacheManager.d.ts.map +1 -0
  32. package/dist/cache/CacheManager.js +286 -0
  33. package/dist/cache/CacheManager.js.map +1 -0
  34. package/dist/cache/InvalidationManager.d.ts +91 -0
  35. package/dist/cache/InvalidationManager.d.ts.map +1 -0
  36. package/dist/cache/InvalidationManager.js +155 -0
  37. package/dist/cache/InvalidationManager.js.map +1 -0
  38. package/dist/cache/L1Cache.d.ts +97 -0
  39. package/dist/cache/L1Cache.d.ts.map +1 -0
  40. package/dist/cache/L1Cache.js +225 -0
  41. package/dist/cache/L1Cache.js.map +1 -0
  42. package/dist/cache/L2Cache.d.ts +93 -0
  43. package/dist/cache/L2Cache.d.ts.map +1 -0
  44. package/dist/cache/L2Cache.js +248 -0
  45. package/dist/cache/L2Cache.js.map +1 -0
  46. package/dist/cache/L3Cache.d.ts +101 -0
  47. package/dist/cache/L3Cache.d.ts.map +1 -0
  48. package/dist/cache/L3Cache.js +229 -0
  49. package/dist/cache/L3Cache.js.map +1 -0
  50. package/dist/cache/index.d.ts +12 -0
  51. package/dist/cache/index.d.ts.map +1 -0
  52. package/dist/cache/index.js +11 -0
  53. package/dist/cache/index.js.map +1 -0
  54. package/dist/errors.d.ts +255 -0
  55. package/dist/errors.d.ts.map +1 -0
  56. package/dist/errors.js +515 -0
  57. package/dist/errors.js.map +1 -0
  58. package/dist/index/BPlusTreeIndex.d.ts +101 -0
  59. package/dist/index/BPlusTreeIndex.d.ts.map +1 -0
  60. package/dist/index/BPlusTreeIndex.js +310 -0
  61. package/dist/index/BPlusTreeIndex.js.map +1 -0
  62. package/dist/index/BloomFilter.d.ts +85 -0
  63. package/dist/index/BloomFilter.d.ts.map +1 -0
  64. package/dist/index/BloomFilter.js +215 -0
  65. package/dist/index/BloomFilter.js.map +1 -0
  66. package/dist/index/FullTextIndex.d.ts +87 -0
  67. package/dist/index/FullTextIndex.d.ts.map +1 -0
  68. package/dist/index/FullTextIndex.js +213 -0
  69. package/dist/index/FullTextIndex.js.map +1 -0
  70. package/dist/index/GraphIndex.d.ts +116 -0
  71. package/dist/index/GraphIndex.d.ts.map +1 -0
  72. package/dist/index/GraphIndex.js +308 -0
  73. package/dist/index/GraphIndex.js.map +1 -0
  74. package/dist/index/IndexManager.d.ts +105 -0
  75. package/dist/index/IndexManager.d.ts.map +1 -0
  76. package/dist/index/IndexManager.js +287 -0
  77. package/dist/index/IndexManager.js.map +1 -0
  78. package/dist/index/index.d.ts +12 -0
  79. package/dist/index/index.d.ts.map +1 -0
  80. package/dist/index/index.js +11 -0
  81. package/dist/index/index.js.map +1 -0
  82. package/dist/index.d.ts +12 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +12 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/query/DistributedExecutor.d.ts +78 -0
  87. package/dist/query/DistributedExecutor.d.ts.map +1 -0
  88. package/dist/query/DistributedExecutor.js +232 -0
  89. package/dist/query/DistributedExecutor.js.map +1 -0
  90. package/dist/query/QueryCoordinator.d.ts +98 -0
  91. package/dist/query/QueryCoordinator.d.ts.map +1 -0
  92. package/dist/query/QueryCoordinator.js +246 -0
  93. package/dist/query/QueryCoordinator.js.map +1 -0
  94. package/dist/query/QueryPlanner.d.ts +88 -0
  95. package/dist/query/QueryPlanner.d.ts.map +1 -0
  96. package/dist/query/QueryPlanner.js +235 -0
  97. package/dist/query/QueryPlanner.js.map +1 -0
  98. package/dist/query/WorkerPool.d.ts +108 -0
  99. package/dist/query/WorkerPool.d.ts.map +1 -0
  100. package/dist/query/WorkerPool.js +195 -0
  101. package/dist/query/WorkerPool.js.map +1 -0
  102. package/dist/query/index.d.ts +11 -0
  103. package/dist/query/index.d.ts.map +1 -0
  104. package/dist/query/index.js +10 -0
  105. package/dist/query/index.js.map +1 -0
  106. package/dist/shard/GraphPartitionStrategy.d.ts +65 -0
  107. package/dist/shard/GraphPartitionStrategy.d.ts.map +1 -0
  108. package/dist/shard/GraphPartitionStrategy.js +208 -0
  109. package/dist/shard/GraphPartitionStrategy.js.map +1 -0
  110. package/dist/shard/HashPartitionStrategy.d.ts +56 -0
  111. package/dist/shard/HashPartitionStrategy.d.ts.map +1 -0
  112. package/dist/shard/HashPartitionStrategy.js +169 -0
  113. package/dist/shard/HashPartitionStrategy.js.map +1 -0
  114. package/dist/shard/RangePartitionStrategy.d.ts +63 -0
  115. package/dist/shard/RangePartitionStrategy.d.ts.map +1 -0
  116. package/dist/shard/RangePartitionStrategy.js +157 -0
  117. package/dist/shard/RangePartitionStrategy.js.map +1 -0
  118. package/dist/shard/Rebalancer.d.ts +70 -0
  119. package/dist/shard/Rebalancer.d.ts.map +1 -0
  120. package/dist/shard/Rebalancer.js +184 -0
  121. package/dist/shard/Rebalancer.js.map +1 -0
  122. package/dist/shard/ShardManager.d.ts +123 -0
  123. package/dist/shard/ShardManager.d.ts.map +1 -0
  124. package/dist/shard/ShardManager.js +353 -0
  125. package/dist/shard/ShardManager.js.map +1 -0
  126. package/dist/shard/ShardRouter.d.ts +102 -0
  127. package/dist/shard/ShardRouter.d.ts.map +1 -0
  128. package/dist/shard/ShardRouter.js +181 -0
  129. package/dist/shard/ShardRouter.js.map +1 -0
  130. package/dist/shard/index.d.ts +13 -0
  131. package/dist/shard/index.d.ts.map +1 -0
  132. package/dist/shard/index.js +12 -0
  133. package/dist/shard/index.js.map +1 -0
  134. package/dist/sync/ConflictResolver.d.ts +71 -0
  135. package/dist/sync/ConflictResolver.d.ts.map +1 -0
  136. package/dist/sync/ConflictResolver.js +214 -0
  137. package/dist/sync/ConflictResolver.js.map +1 -0
  138. package/dist/sync/SyncController.d.ts +150 -0
  139. package/dist/sync/SyncController.d.ts.map +1 -0
  140. package/dist/sync/SyncController.js +304 -0
  141. package/dist/sync/SyncController.js.map +1 -0
  142. package/dist/sync/VectorClock.d.ts +102 -0
  143. package/dist/sync/VectorClock.d.ts.map +1 -0
  144. package/dist/sync/VectorClock.js +189 -0
  145. package/dist/sync/VectorClock.js.map +1 -0
  146. package/dist/sync/WALManager.d.ts +120 -0
  147. package/dist/sync/WALManager.d.ts.map +1 -0
  148. package/dist/sync/WALManager.js +240 -0
  149. package/dist/sync/WALManager.js.map +1 -0
  150. package/dist/sync/index.d.ts +11 -0
  151. package/dist/sync/index.d.ts.map +1 -0
  152. package/dist/sync/index.js +10 -0
  153. package/dist/sync/index.js.map +1 -0
  154. package/dist/types.d.ts +323 -0
  155. package/dist/types.d.ts.map +1 -0
  156. package/dist/types.js +7 -0
  157. package/dist/types.js.map +1 -0
  158. package/package.json +86 -0
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @nahisaho/yata-scale - Shard Module
3
+ *
4
+ * Exports for shard management functionality
5
+ */
6
+ export { ShardManager } from './ShardManager.js';
7
+ export { HashPartitionStrategy } from './HashPartitionStrategy.js';
8
+ export { RangePartitionStrategy } from './RangePartitionStrategy.js';
9
+ export { GraphPartitionStrategy } from './GraphPartitionStrategy.js';
10
+ export { ShardRouter } from './ShardRouter.js';
11
+ export { Rebalancer } from './Rebalancer.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shard/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @nahisaho/yata-scale - Conflict Resolver
3
+ *
4
+ * Resolves conflicts in distributed updates
5
+ */
6
+ import type { Entity, Relationship, Conflict, ConflictResolution } from '../types.js';
7
+ /**
8
+ * Conflict resolution strategy
9
+ */
10
+ export type ResolutionStrategy = 'last-writer-wins' | 'first-writer-wins' | 'merge' | 'custom';
11
+ /**
12
+ * Custom resolver function
13
+ */
14
+ export type CustomResolver<T> = (local: T, remote: T, conflict: Conflict) => T;
15
+ /**
16
+ * Conflict resolver for distributed updates
17
+ */
18
+ export declare class ConflictResolver {
19
+ private readonly defaultStrategy;
20
+ private readonly customResolvers;
21
+ constructor(defaultStrategy?: ResolutionStrategy);
22
+ /**
23
+ * Register custom resolver for entity type
24
+ */
25
+ registerResolver<T>(entityType: string, resolver: CustomResolver<T>): void;
26
+ /**
27
+ * Detect conflict between two entities
28
+ */
29
+ detectEntityConflict(local: Entity, remote: Entity): Conflict | null;
30
+ /**
31
+ * Find conflicting fields between two entities
32
+ */
33
+ private findConflictingFields;
34
+ /**
35
+ * Resolve entity conflict
36
+ */
37
+ resolveEntityConflict(local: Entity, remote: Entity, conflict: Conflict): ConflictResolution;
38
+ /**
39
+ * Last writer wins resolution
40
+ */
41
+ private lastWriterWins;
42
+ /**
43
+ * First writer wins resolution
44
+ */
45
+ private firstWriterWins;
46
+ /**
47
+ * Merge entities (field-level LWW)
48
+ */
49
+ private mergeEntities;
50
+ /**
51
+ * Resolve relationship conflict
52
+ */
53
+ resolveRelationshipConflict(local: Relationship, remote: Relationship): ConflictResolution;
54
+ /**
55
+ * Batch resolve conflicts
56
+ */
57
+ resolveAll(conflicts: Array<{
58
+ local: Entity;
59
+ remote: Entity;
60
+ conflict: Conflict;
61
+ }>): ConflictResolution[];
62
+ /**
63
+ * Get default strategy
64
+ */
65
+ getDefaultStrategy(): ResolutionStrategy;
66
+ /**
67
+ * Check if custom resolver exists
68
+ */
69
+ hasCustomResolver(entityType: string): boolean;
70
+ }
71
+ //# sourceMappingURL=ConflictResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConflictResolver.d.ts","sourceRoot":"","sources":["../../src/sync/ConflictResolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,kBAAkB,GAClB,mBAAmB,GACnB,OAAO,GACP,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAC9B,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,EACT,QAAQ,EAAE,QAAQ,KACf,CAAC,CAAC;AAEP;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmD;gBAEvE,eAAe,GAAE,kBAAuC;IAIpE;;OAEG;IACH,gBAAgB,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;IAI1E;;OAEG;IACH,oBAAoB,CAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,QAAQ,GAAG,IAAI;IAuBlB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA+B7B;;OAEG;IACH,qBAAqB,CACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GACjB,kBAAkB;IA4BrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiErB;;OAEG;IACH,2BAA2B,CACzB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,YAAY,GACnB,kBAAkB;IAcrB;;OAEG;IACH,UAAU,CACR,SAAS,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC,GACtE,kBAAkB,EAAE;IAMvB;;OAEG;IACH,kBAAkB,IAAI,kBAAkB;IAIxC;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;CAG/C"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * @nahisaho/yata-scale - Conflict Resolver
3
+ *
4
+ * Resolves conflicts in distributed updates
5
+ */
6
+ import { VectorClock } from './VectorClock.js';
7
+ /**
8
+ * Conflict resolver for distributed updates
9
+ */
10
+ export class ConflictResolver {
11
+ defaultStrategy;
12
+ customResolvers = new Map();
13
+ constructor(defaultStrategy = 'last-writer-wins') {
14
+ this.defaultStrategy = defaultStrategy;
15
+ }
16
+ /**
17
+ * Register custom resolver for entity type
18
+ */
19
+ registerResolver(entityType, resolver) {
20
+ this.customResolvers.set(entityType, resolver);
21
+ }
22
+ /**
23
+ * Detect conflict between two entities
24
+ */
25
+ detectEntityConflict(local, remote) {
26
+ if (local.id !== remote.id) {
27
+ return null;
28
+ }
29
+ const localClock = new VectorClock(local.metadata.vectorClock);
30
+ const remoteClock = new VectorClock(remote.metadata.vectorClock);
31
+ if (localClock.isConcurrentWith(remoteClock)) {
32
+ return {
33
+ type: 'update-update',
34
+ entityId: local.id,
35
+ localVersion: local.metadata.version,
36
+ remoteVersion: remote.metadata.version,
37
+ localTimestamp: local.metadata.updatedAt,
38
+ remoteTimestamp: remote.metadata.updatedAt,
39
+ conflictingFields: this.findConflictingFields(local, remote),
40
+ };
41
+ }
42
+ return null;
43
+ }
44
+ /**
45
+ * Find conflicting fields between two entities
46
+ */
47
+ findConflictingFields(local, remote) {
48
+ const conflicts = [];
49
+ // Check name
50
+ if (local.name !== remote.name) {
51
+ conflicts.push('name');
52
+ }
53
+ // Check namespace
54
+ if (local.namespace !== remote.namespace) {
55
+ conflicts.push('namespace');
56
+ }
57
+ // Check attributes
58
+ const allKeys = new Set([
59
+ ...Object.keys(local.attributes),
60
+ ...Object.keys(remote.attributes),
61
+ ]);
62
+ for (const key of allKeys) {
63
+ const localVal = local.attributes[key];
64
+ const remoteVal = remote.attributes[key];
65
+ if (JSON.stringify(localVal) !== JSON.stringify(remoteVal)) {
66
+ conflicts.push(`attributes.${key}`);
67
+ }
68
+ }
69
+ return conflicts;
70
+ }
71
+ /**
72
+ * Resolve entity conflict
73
+ */
74
+ resolveEntityConflict(local, remote, conflict) {
75
+ // Check for custom resolver
76
+ const customResolver = this.customResolvers.get(local.type);
77
+ if (customResolver) {
78
+ const resolved = customResolver(local, remote, conflict);
79
+ return {
80
+ resolution: 'merged',
81
+ winner: resolved,
82
+ mergedFields: conflict.conflictingFields,
83
+ };
84
+ }
85
+ // Use default strategy
86
+ switch (this.defaultStrategy) {
87
+ case 'last-writer-wins':
88
+ return this.lastWriterWins(local, remote, conflict);
89
+ case 'first-writer-wins':
90
+ return this.firstWriterWins(local, remote, conflict);
91
+ case 'merge':
92
+ return this.mergeEntities(local, remote, conflict);
93
+ default:
94
+ return this.lastWriterWins(local, remote, conflict);
95
+ }
96
+ }
97
+ /**
98
+ * Last writer wins resolution
99
+ */
100
+ lastWriterWins(local, remote, conflict) {
101
+ const winner = local.metadata.updatedAt > remote.metadata.updatedAt
102
+ ? local
103
+ : remote;
104
+ return {
105
+ resolution: local.metadata.updatedAt > remote.metadata.updatedAt
106
+ ? 'local-wins'
107
+ : 'remote-wins',
108
+ winner,
109
+ };
110
+ }
111
+ /**
112
+ * First writer wins resolution
113
+ */
114
+ firstWriterWins(local, remote, conflict) {
115
+ const winner = local.metadata.updatedAt < remote.metadata.updatedAt
116
+ ? local
117
+ : remote;
118
+ return {
119
+ resolution: local.metadata.updatedAt < remote.metadata.updatedAt
120
+ ? 'local-wins'
121
+ : 'remote-wins',
122
+ winner,
123
+ };
124
+ }
125
+ /**
126
+ * Merge entities (field-level LWW)
127
+ */
128
+ mergeEntities(local, remote, conflict) {
129
+ // Start with local entity
130
+ const merged = {
131
+ ...local,
132
+ attributes: { ...local.attributes },
133
+ metadata: {
134
+ ...local.metadata,
135
+ updatedAt: new Date(),
136
+ version: Math.max(local.metadata.version, remote.metadata.version) + 1,
137
+ },
138
+ };
139
+ const mergedFields = [];
140
+ // Merge name (LWW)
141
+ if (local.name !== remote.name) {
142
+ if (remote.metadata.updatedAt > local.metadata.updatedAt) {
143
+ merged.name = remote.name;
144
+ mergedFields.push('name');
145
+ }
146
+ }
147
+ // Merge namespace (LWW)
148
+ if (local.namespace !== remote.namespace) {
149
+ if (remote.metadata.updatedAt > local.metadata.updatedAt) {
150
+ merged.namespace = remote.namespace;
151
+ mergedFields.push('namespace');
152
+ }
153
+ }
154
+ // Merge attributes (field-level LWW)
155
+ const allKeys = new Set([
156
+ ...Object.keys(local.attributes),
157
+ ...Object.keys(remote.attributes),
158
+ ]);
159
+ for (const key of allKeys) {
160
+ const localVal = local.attributes[key];
161
+ const remoteVal = remote.attributes[key];
162
+ if (JSON.stringify(localVal) !== JSON.stringify(remoteVal)) {
163
+ // Use remote if it's newer
164
+ if (remote.metadata.updatedAt > local.metadata.updatedAt) {
165
+ merged.attributes[key] = remoteVal;
166
+ mergedFields.push(`attributes.${key}`);
167
+ }
168
+ }
169
+ }
170
+ // Merge vector clocks
171
+ const mergedClock = new VectorClock(local.metadata.vectorClock);
172
+ mergedClock.merge(new VectorClock(remote.metadata.vectorClock));
173
+ merged.metadata.vectorClock = mergedClock.toValue();
174
+ return {
175
+ resolution: 'merged',
176
+ winner: merged,
177
+ mergedFields,
178
+ };
179
+ }
180
+ /**
181
+ * Resolve relationship conflict
182
+ */
183
+ resolveRelationshipConflict(local, remote) {
184
+ // Relationships are simpler - use LWW
185
+ const winner = local.metadata.updatedAt > remote.metadata.updatedAt
186
+ ? local
187
+ : remote;
188
+ return {
189
+ resolution: local.metadata.updatedAt > remote.metadata.updatedAt
190
+ ? 'local-wins'
191
+ : 'remote-wins',
192
+ winner,
193
+ };
194
+ }
195
+ /**
196
+ * Batch resolve conflicts
197
+ */
198
+ resolveAll(conflicts) {
199
+ return conflicts.map(({ local, remote, conflict }) => this.resolveEntityConflict(local, remote, conflict));
200
+ }
201
+ /**
202
+ * Get default strategy
203
+ */
204
+ getDefaultStrategy() {
205
+ return this.defaultStrategy;
206
+ }
207
+ /**
208
+ * Check if custom resolver exists
209
+ */
210
+ hasCustomResolver(entityType) {
211
+ return this.customResolvers.has(entityType);
212
+ }
213
+ }
214
+ //# sourceMappingURL=ConflictResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConflictResolver.js","sourceRoot":"","sources":["../../src/sync/ConflictResolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * @nahisaho/yata-scale - Sync Controller
3
+ *
4
+ * Coordinates synchronization between nodes
5
+ */
6
+ import { type Result } from 'neverthrow';
7
+ import type { SyncSession, Entity, Relationship } from '../types.js';
8
+ import { SyncError, SyncConnectionError } from '../errors.js';
9
+ import { VectorClock } from './VectorClock.js';
10
+ import { ConflictResolver, type ResolutionStrategy } from './ConflictResolver.js';
11
+ import { WALManager } from './WALManager.js';
12
+ /**
13
+ * Sync state
14
+ */
15
+ export type SyncState = 'idle' | 'syncing' | 'conflict' | 'error';
16
+ /**
17
+ * Sync delta
18
+ */
19
+ export interface SyncDelta {
20
+ readonly entities: Entity[];
21
+ readonly relationships: Relationship[];
22
+ readonly deletedEntityIds: string[];
23
+ readonly deletedRelationshipIds: string[];
24
+ readonly vectorClock: Record<string, number>;
25
+ }
26
+ /**
27
+ * Peer connection
28
+ */
29
+ export interface PeerConnection {
30
+ readonly peerId: string;
31
+ readonly endpoint: string;
32
+ readonly lastSyncTime?: Date;
33
+ readonly vectorClock: VectorClock;
34
+ }
35
+ /**
36
+ * Sync result
37
+ */
38
+ export interface SyncResult {
39
+ readonly success: boolean;
40
+ readonly entitiesSynced: number;
41
+ readonly relationshipsSynced: number;
42
+ readonly conflictsResolved: number;
43
+ readonly errors: string[];
44
+ readonly duration: number;
45
+ }
46
+ /**
47
+ * Sync controller for managing distributed synchronization
48
+ */
49
+ export declare class SyncController {
50
+ private readonly nodeId;
51
+ private readonly wal;
52
+ private readonly conflictResolver;
53
+ private readonly vectorClock;
54
+ private state;
55
+ private activeSessions;
56
+ private peers;
57
+ constructor(nodeId: string, resolutionStrategy?: ResolutionStrategy);
58
+ /**
59
+ * Register a peer
60
+ */
61
+ registerPeer(peerId: string, endpoint: string): void;
62
+ /**
63
+ * Unregister a peer
64
+ */
65
+ unregisterPeer(peerId: string): void;
66
+ /**
67
+ * Record entity create
68
+ */
69
+ recordCreate(entity: Entity): void;
70
+ /**
71
+ * Record entity update
72
+ */
73
+ recordUpdate(entity: Entity, previous?: Entity): void;
74
+ /**
75
+ * Record entity delete
76
+ */
77
+ recordDelete(entityId: string, previous?: Entity): void;
78
+ /**
79
+ * Record relationship create
80
+ */
81
+ recordRelationshipCreate(relationship: Relationship): void;
82
+ /**
83
+ * Record relationship update
84
+ */
85
+ recordRelationshipUpdate(relationship: Relationship, previous?: Relationship): void;
86
+ /**
87
+ * Record relationship delete
88
+ */
89
+ recordRelationshipDelete(relationshipId: string, previous?: Relationship): void;
90
+ /**
91
+ * Get local delta since a sequence number
92
+ */
93
+ getLocalDelta(sinceSequence: number): SyncDelta;
94
+ /**
95
+ * Apply remote delta
96
+ */
97
+ applyRemoteDelta(delta: SyncDelta, localEntities: Map<string, Entity>, localRelationships: Map<string, Relationship>): Result<SyncResult, SyncError>;
98
+ /**
99
+ * Start sync session with peer
100
+ */
101
+ startSession(peerId: string): Result<SyncSession, SyncConnectionError>;
102
+ /**
103
+ * End sync session
104
+ */
105
+ endSession(peerId: string): void;
106
+ /**
107
+ * Get current sync state
108
+ */
109
+ getState(): SyncState;
110
+ /**
111
+ * Get vector clock
112
+ */
113
+ getVectorClock(): VectorClock;
114
+ /**
115
+ * Get WAL manager
116
+ */
117
+ getWAL(): WALManager;
118
+ /**
119
+ * Get conflict resolver
120
+ */
121
+ getConflictResolver(): ConflictResolver;
122
+ /**
123
+ * Get active sessions
124
+ */
125
+ getActiveSessions(): SyncSession[];
126
+ /**
127
+ * Get registered peers
128
+ */
129
+ getPeers(): PeerConnection[];
130
+ /**
131
+ * Get node ID
132
+ */
133
+ getNodeId(): string;
134
+ /**
135
+ * Get sync statistics
136
+ */
137
+ getStats(): {
138
+ nodeId: string;
139
+ state: SyncState;
140
+ activeSessions: number;
141
+ registeredPeers: number;
142
+ walSequence: number;
143
+ vectorClock: Record<string, number>;
144
+ };
145
+ /**
146
+ * Reset sync state
147
+ */
148
+ reset(): void;
149
+ }
150
+ //# sourceMappingURL=SyncController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncController.d.ts","sourceRoot":"","sources":["../../src/sync/SyncController.ts"],"names":[],"mappings":"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"}