@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,87 @@
1
+ /**
2
+ * @nahisaho/yata-scale - Full-Text Index
3
+ *
4
+ * Full-text search index with tokenization and ranking
5
+ */
6
+ import type { IndexStats } from '../types.js';
7
+ /**
8
+ * Document to index
9
+ */
10
+ export interface IndexDocument {
11
+ readonly id: string;
12
+ readonly content: string;
13
+ readonly boost?: number;
14
+ }
15
+ /**
16
+ * Search result
17
+ */
18
+ export interface SearchResult {
19
+ readonly id: string;
20
+ readonly score: number;
21
+ readonly highlights?: string[];
22
+ }
23
+ /**
24
+ * Full-text search index with BM25 ranking
25
+ */
26
+ export declare class FullTextIndex {
27
+ private invertedIndex;
28
+ private documentLengths;
29
+ private documentCount;
30
+ private totalLength;
31
+ private readonly k1;
32
+ private readonly b;
33
+ constructor();
34
+ /**
35
+ * Index a document
36
+ */
37
+ index(doc: IndexDocument): void;
38
+ /**
39
+ * Remove a document from index
40
+ */
41
+ removeDocument(id: string): boolean;
42
+ /**
43
+ * Search for documents
44
+ */
45
+ search(query: string, limit?: number): SearchResult[];
46
+ /**
47
+ * Fuzzy search using Levenshtein distance
48
+ */
49
+ fuzzySearch(query: string, maxDistance?: number, limit?: number): SearchResult[];
50
+ /**
51
+ * Tokenize text
52
+ */
53
+ private tokenize;
54
+ /**
55
+ * Simple stemmer (Porter-like for English)
56
+ */
57
+ private stem;
58
+ /**
59
+ * Calculate term frequencies
60
+ */
61
+ private calculateTermFrequencies;
62
+ /**
63
+ * Levenshtein distance for fuzzy matching
64
+ */
65
+ private levenshteinDistance;
66
+ /**
67
+ * Clear the index
68
+ */
69
+ clear(): void;
70
+ /**
71
+ * Get document count
72
+ */
73
+ get size(): number;
74
+ /**
75
+ * Get term count
76
+ */
77
+ get termCount(): number;
78
+ /**
79
+ * Get index statistics
80
+ */
81
+ getStats(): IndexStats;
82
+ /**
83
+ * Estimate memory size
84
+ */
85
+ private estimateSize;
86
+ }
87
+ //# sourceMappingURL=FullTextIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FullTextIndex.d.ts","sourceRoot":"","sources":["../../src/index/FullTextIndex.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAe;IAClC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAgB;;IAIlC;;OAEG;IACH,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAwB/B;;OAEG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAmBnC;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,YAAY,EAAE;IAoCzD;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,GAAE,MAAU,EAAE,KAAK,GAAE,MAAW,GAAG,YAAY,EAAE;IAsBvF;;OAEG;IACH,OAAO,CAAC,QAAQ;IAShB;;OAEG;IACH,OAAO,CAAC,IAAI;IAaZ;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4B3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;OAEG;IACH,QAAQ,IAAI,UAAU;IAWtB;;OAEG;IACH,OAAO,CAAC,YAAY;CAarB"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * @nahisaho/yata-scale - Full-Text Index
3
+ *
4
+ * Full-text search index with tokenization and ranking
5
+ */
6
+ /**
7
+ * Full-text search index with BM25 ranking
8
+ */
9
+ export class FullTextIndex {
10
+ invertedIndex = new Map();
11
+ documentLengths = new Map();
12
+ documentCount = 0;
13
+ totalLength = 0;
14
+ k1 = 1.2;
15
+ b = 0.75;
16
+ constructor() { }
17
+ /**
18
+ * Index a document
19
+ */
20
+ index(doc) {
21
+ const tokens = this.tokenize(doc.content);
22
+ const termFreqs = this.calculateTermFrequencies(tokens);
23
+ // Remove old document data if exists
24
+ if (this.documentLengths.has(doc.id)) {
25
+ this.removeDocument(doc.id);
26
+ }
27
+ // Add to inverted index
28
+ for (const [term, freq] of termFreqs) {
29
+ if (!this.invertedIndex.has(term)) {
30
+ this.invertedIndex.set(term, new Map());
31
+ }
32
+ const postings = this.invertedIndex.get(term);
33
+ postings.set(doc.id, freq * (doc.boost ?? 1));
34
+ }
35
+ // Track document length
36
+ this.documentLengths.set(doc.id, tokens.length);
37
+ this.totalLength += tokens.length;
38
+ this.documentCount++;
39
+ }
40
+ /**
41
+ * Remove a document from index
42
+ */
43
+ removeDocument(id) {
44
+ const length = this.documentLengths.get(id);
45
+ if (length === undefined) {
46
+ return false;
47
+ }
48
+ // Remove from all posting lists
49
+ for (const postings of this.invertedIndex.values()) {
50
+ postings.delete(id);
51
+ }
52
+ // Update stats
53
+ this.totalLength -= length;
54
+ this.documentLengths.delete(id);
55
+ this.documentCount--;
56
+ return true;
57
+ }
58
+ /**
59
+ * Search for documents
60
+ */
61
+ search(query, limit = 10) {
62
+ const queryTokens = this.tokenize(query);
63
+ const scores = new Map();
64
+ const avgDocLength = this.totalLength / Math.max(this.documentCount, 1);
65
+ for (const term of queryTokens) {
66
+ const postings = this.invertedIndex.get(term);
67
+ if (!postings)
68
+ continue;
69
+ // Calculate IDF
70
+ const idf = Math.log((this.documentCount - postings.size + 0.5) / (postings.size + 0.5) + 1);
71
+ // Calculate BM25 score for each document
72
+ for (const [docId, termFreq] of postings) {
73
+ const docLength = this.documentLengths.get(docId) ?? 0;
74
+ const numerator = termFreq * (this.k1 + 1);
75
+ const denominator = termFreq + this.k1 * (1 - this.b + (this.b * docLength) / avgDocLength);
76
+ const score = idf * (numerator / denominator);
77
+ scores.set(docId, (scores.get(docId) ?? 0) + score);
78
+ }
79
+ }
80
+ // Sort by score and return top results
81
+ const results = [...scores.entries()]
82
+ .sort((a, b) => b[1] - a[1])
83
+ .slice(0, limit)
84
+ .map(([id, score]) => ({ id, score }));
85
+ return results;
86
+ }
87
+ /**
88
+ * Fuzzy search using Levenshtein distance
89
+ */
90
+ fuzzySearch(query, maxDistance = 2, limit = 10) {
91
+ const queryTokens = this.tokenize(query);
92
+ const matchedTerms = new Set();
93
+ // Find similar terms
94
+ for (const queryToken of queryTokens) {
95
+ for (const indexTerm of this.invertedIndex.keys()) {
96
+ if (this.levenshteinDistance(queryToken, indexTerm) <= maxDistance) {
97
+ matchedTerms.add(indexTerm);
98
+ }
99
+ }
100
+ }
101
+ // Search with matched terms
102
+ if (matchedTerms.size === 0) {
103
+ return [];
104
+ }
105
+ const expandedQuery = [...matchedTerms].join(' ');
106
+ return this.search(expandedQuery, limit);
107
+ }
108
+ /**
109
+ * Tokenize text
110
+ */
111
+ tokenize(text) {
112
+ return text
113
+ .toLowerCase()
114
+ .replace(/[^\p{L}\p{N}\s]/gu, ' ')
115
+ .split(/\s+/)
116
+ .filter((token) => token.length > 1)
117
+ .map((token) => this.stem(token));
118
+ }
119
+ /**
120
+ * Simple stemmer (Porter-like for English)
121
+ */
122
+ stem(word) {
123
+ // Very basic stemming - just remove common suffixes
124
+ const suffixes = ['ing', 'ed', 'es', 's', 'tion', 'ness', 'ment', 'ly'];
125
+ for (const suffix of suffixes) {
126
+ if (word.endsWith(suffix) && word.length > suffix.length + 2) {
127
+ return word.slice(0, -suffix.length);
128
+ }
129
+ }
130
+ return word;
131
+ }
132
+ /**
133
+ * Calculate term frequencies
134
+ */
135
+ calculateTermFrequencies(tokens) {
136
+ const freqs = new Map();
137
+ for (const token of tokens) {
138
+ freqs.set(token, (freqs.get(token) ?? 0) + 1);
139
+ }
140
+ return freqs;
141
+ }
142
+ /**
143
+ * Levenshtein distance for fuzzy matching
144
+ */
145
+ levenshteinDistance(a, b) {
146
+ if (a.length === 0)
147
+ return b.length;
148
+ if (b.length === 0)
149
+ return a.length;
150
+ const matrix = [];
151
+ for (let i = 0; i <= b.length; i++) {
152
+ matrix[i] = [i];
153
+ }
154
+ for (let j = 0; j <= a.length; j++) {
155
+ matrix[0][j] = j;
156
+ }
157
+ for (let i = 1; i <= b.length; i++) {
158
+ for (let j = 1; j <= a.length; j++) {
159
+ const cost = a[j - 1] === b[i - 1] ? 0 : 1;
160
+ matrix[i][j] = Math.min(matrix[i - 1][j] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j - 1] + cost);
161
+ }
162
+ }
163
+ return matrix[b.length][a.length];
164
+ }
165
+ /**
166
+ * Clear the index
167
+ */
168
+ clear() {
169
+ this.invertedIndex.clear();
170
+ this.documentLengths.clear();
171
+ this.documentCount = 0;
172
+ this.totalLength = 0;
173
+ }
174
+ /**
175
+ * Get document count
176
+ */
177
+ get size() {
178
+ return this.documentCount;
179
+ }
180
+ /**
181
+ * Get term count
182
+ */
183
+ get termCount() {
184
+ return this.invertedIndex.size;
185
+ }
186
+ /**
187
+ * Get index statistics
188
+ */
189
+ getStats() {
190
+ return {
191
+ name: 'fulltext',
192
+ type: 'fulltext',
193
+ entryCount: this.documentCount,
194
+ sizeBytes: this.estimateSize(),
195
+ hitRate: 0,
196
+ lastUpdated: new Date(),
197
+ };
198
+ }
199
+ /**
200
+ * Estimate memory size
201
+ */
202
+ estimateSize() {
203
+ // Rough estimate
204
+ let size = 0;
205
+ for (const [term, postings] of this.invertedIndex) {
206
+ size += term.length * 2; // Term storage
207
+ size += postings.size * 20; // Posting list
208
+ }
209
+ size += this.documentCount * 50; // Document metadata
210
+ return size;
211
+ }
212
+ }
213
+ //# sourceMappingURL=FullTextIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FullTextIndex.js","sourceRoot":"","sources":["../../src/index/FullTextIndex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * @nahisaho/yata-scale - Graph Index
3
+ *
4
+ * Graph-specific indexes for efficient traversal
5
+ */
6
+ import type { IndexStats, RelationshipType, Relationship } from '../types.js';
7
+ /**
8
+ * Edge in the graph
9
+ */
10
+ export interface Edge {
11
+ readonly id: string;
12
+ readonly sourceId: string;
13
+ readonly targetId: string;
14
+ readonly type: RelationshipType;
15
+ readonly weight?: number;
16
+ }
17
+ /**
18
+ * Path in the graph
19
+ */
20
+ export interface GraphPath {
21
+ readonly nodes: string[];
22
+ readonly edges: string[];
23
+ readonly length: number;
24
+ readonly weight: number;
25
+ }
26
+ /**
27
+ * Graph index for efficient traversal operations
28
+ */
29
+ export declare class GraphIndex {
30
+ private outgoing;
31
+ private incoming;
32
+ private byType;
33
+ private edges;
34
+ constructor();
35
+ /**
36
+ * Add an edge to the index
37
+ */
38
+ addEdge(edge: Edge): void;
39
+ /**
40
+ * Add edge from relationship
41
+ */
42
+ addRelationship(rel: Relationship): void;
43
+ /**
44
+ * Remove an edge
45
+ */
46
+ removeEdge(edgeId: string): boolean;
47
+ /**
48
+ * Get outgoing edges from a node
49
+ */
50
+ getOutgoingEdges(nodeId: string): Edge[];
51
+ /**
52
+ * Get incoming edges to a node
53
+ */
54
+ getIncomingEdges(nodeId: string): Edge[];
55
+ /**
56
+ * Get all edges for a node (both directions)
57
+ */
58
+ getAllEdges(nodeId: string): Edge[];
59
+ /**
60
+ * Get outgoing neighbors
61
+ */
62
+ getOutgoingNeighbors(nodeId: string): string[];
63
+ /**
64
+ * Get incoming neighbors
65
+ */
66
+ getIncomingNeighbors(nodeId: string): string[];
67
+ /**
68
+ * Get neighbors within k hops
69
+ */
70
+ getNeighbors(nodeId: string, depth: number, direction?: 'outgoing' | 'incoming' | 'both'): Set<string>;
71
+ /**
72
+ * Find shortest path using BFS
73
+ */
74
+ findShortestPath(source: string, target: string, maxDepth?: number): GraphPath | null;
75
+ /**
76
+ * Find all paths (up to maxPaths)
77
+ */
78
+ findAllPaths(source: string, target: string, maxDepth?: number, maxPaths?: number): Generator<GraphPath>;
79
+ /**
80
+ * Get edges by type
81
+ */
82
+ getEdgesByType(type: RelationshipType): Edge[];
83
+ /**
84
+ * Check if edge exists between two nodes
85
+ */
86
+ hasEdge(sourceId: string, targetId: string): boolean;
87
+ /**
88
+ * Get edge between two nodes
89
+ */
90
+ getEdge(sourceId: string, targetId: string): Edge | undefined;
91
+ /**
92
+ * Get node degree
93
+ */
94
+ getDegree(nodeId: string, direction?: 'in' | 'out' | 'total'): number;
95
+ /**
96
+ * Clear the index
97
+ */
98
+ clear(): void;
99
+ /**
100
+ * Get edge count
101
+ */
102
+ get size(): number;
103
+ /**
104
+ * Get node count
105
+ */
106
+ get nodeCount(): number;
107
+ /**
108
+ * Get index statistics
109
+ */
110
+ getStats(): IndexStats;
111
+ /**
112
+ * Estimate memory size
113
+ */
114
+ private estimateSize;
115
+ }
116
+ //# sourceMappingURL=GraphIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphIndex.d.ts","sourceRoot":"","sources":["../../src/index/GraphIndex.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,UAAU;IAErB,OAAO,CAAC,QAAQ,CAA6C;IAC7D,OAAO,CAAC,QAAQ,CAA6C;IAG7D,OAAO,CAAC,MAAM,CAAiD;IAG/D,OAAO,CAAC,KAAK,CAAgC;;IAI7C;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAuBzB;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAUxC;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAmBnC;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE;IAKxC;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE;IAKxC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE;IAInC;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAK9C;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAK9C;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,UAAU,GAAG,UAAU,GAAG,MAAe,GAAG,GAAG,CAAC,MAAM,CAAC;IAmC9G;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAW,GAAG,SAAS,GAAG,IAAI;IAgDzF;;OAEG;IACF,YAAY,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAW,EACrB,QAAQ,GAAE,MAAY,GACrB,SAAS,CAAC,SAAS,CAAC;IA4CvB;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,EAAE;IAgB9C;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAI7D;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,GAAE,IAAI,GAAG,KAAK,GAAG,OAAiB,GAAG,MAAM;IAc9E;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAOtB;IAED;;OAEG;IACH,QAAQ,IAAI,UAAU;IAWtB;;OAEG;IACH,OAAO,CAAC,YAAY;CAQrB"}