verso-db 0.1.5 → 0.2.0
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/CHANGELOG.md +13 -0
- package/README.md +13 -7
- package/dist/BinaryHeap.d.ts +11 -1
- package/dist/BinaryHeap.d.ts.map +1 -1
- package/dist/BinaryHeap.js +138 -0
- package/dist/BinaryHeap.js.map +1 -0
- package/dist/Collection.d.ts +30 -4
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Collection.js +1186 -0
- package/dist/Collection.js.map +1 -0
- package/dist/HNSWIndex.d.ts +59 -0
- package/dist/HNSWIndex.d.ts.map +1 -1
- package/dist/HNSWIndex.js +2818 -0
- package/dist/HNSWIndex.js.map +1 -0
- package/dist/MaxBinaryHeap.d.ts +2 -64
- package/dist/MaxBinaryHeap.d.ts.map +1 -1
- package/dist/MaxBinaryHeap.js +5 -0
- package/dist/MaxBinaryHeap.js.map +1 -0
- package/dist/SearchWorker.d.ts +57 -4
- package/dist/SearchWorker.d.ts.map +1 -1
- package/dist/SearchWorker.js +573 -0
- package/dist/SearchWorker.js.map +1 -0
- package/dist/VectorDB.d.ts.map +1 -1
- package/dist/VectorDB.js +246 -0
- package/dist/VectorDB.js.map +1 -0
- package/dist/WorkerPool.d.ts +32 -2
- package/dist/WorkerPool.d.ts.map +1 -1
- package/dist/WorkerPool.js +266 -0
- package/dist/WorkerPool.js.map +1 -0
- package/dist/backends/JsDistanceBackend.d.ts.map +1 -1
- package/dist/backends/JsDistanceBackend.js +163 -0
- package/dist/backends/JsDistanceBackend.js.map +1 -0
- package/dist/encoding/DeltaEncoder.d.ts +2 -2
- package/dist/encoding/DeltaEncoder.d.ts.map +1 -1
- package/dist/encoding/DeltaEncoder.js +199 -0
- package/dist/encoding/DeltaEncoder.js.map +1 -0
- package/dist/errors.js +97 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -42
- package/dist/index.js.map +1 -9
- package/dist/presets.js +205 -0
- package/dist/presets.js.map +1 -0
- package/dist/quantization/ScalarQuantizer.d.ts +0 -34
- package/dist/quantization/ScalarQuantizer.d.ts.map +1 -1
- package/dist/quantization/ScalarQuantizer.js +346 -0
- package/dist/quantization/ScalarQuantizer.js.map +1 -0
- package/dist/storage/BatchWriter.js +351 -0
- package/dist/storage/BatchWriter.js.map +1 -0
- package/dist/storage/BunStorageBackend.d.ts +7 -3
- package/dist/storage/BunStorageBackend.d.ts.map +1 -1
- package/dist/storage/BunStorageBackend.js +182 -0
- package/dist/storage/BunStorageBackend.js.map +1 -0
- package/dist/storage/MemoryBackend.js +109 -0
- package/dist/storage/MemoryBackend.js.map +1 -0
- package/dist/storage/OPFSBackend.d.ts.map +1 -1
- package/dist/storage/OPFSBackend.js +325 -0
- package/dist/storage/OPFSBackend.js.map +1 -0
- package/dist/storage/StorageBackend.js +12 -0
- package/dist/storage/StorageBackend.js.map +1 -0
- package/dist/storage/WriteAheadLog.js +321 -0
- package/dist/storage/WriteAheadLog.js.map +1 -0
- package/dist/storage/createStorageBackend.d.ts +4 -0
- package/dist/storage/createStorageBackend.d.ts.map +1 -1
- package/dist/storage/createStorageBackend.js +119 -0
- package/dist/storage/createStorageBackend.js.map +1 -0
- package/{src/storage/index.ts → dist/storage/index.js} +7 -27
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/nodeFsRuntime.d.ts +14 -0
- package/dist/storage/nodeFsRuntime.d.ts.map +1 -0
- package/dist/storage/nodeFsRuntime.js +105 -0
- package/dist/storage/nodeFsRuntime.js.map +1 -0
- package/package.json +9 -7
- package/src/BinaryHeap.ts +0 -136
- package/src/Collection.ts +0 -1262
- package/src/HNSWIndex.ts +0 -2894
- package/src/MaxBinaryHeap.ts +0 -181
- package/src/SearchWorker.ts +0 -264
- package/src/VectorDB.ts +0 -319
- package/src/WorkerPool.ts +0 -222
- package/src/backends/JsDistanceBackend.ts +0 -171
- package/src/encoding/DeltaEncoder.ts +0 -236
- package/src/errors.ts +0 -110
- package/src/index.ts +0 -106
- package/src/presets.ts +0 -229
- package/src/quantization/ScalarQuantizer.ts +0 -487
- package/src/storage/BatchWriter.ts +0 -420
- package/src/storage/BunStorageBackend.ts +0 -199
- package/src/storage/MemoryBackend.ts +0 -122
- package/src/storage/OPFSBackend.ts +0 -348
- package/src/storage/StorageBackend.ts +0 -74
- package/src/storage/WriteAheadLog.ts +0 -379
- package/src/storage/createStorageBackend.ts +0 -137
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
# [0.2.0](https://github.com/briansunter/verso/compare/v0.1.5...v0.2.0) (2026-03-15)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* comprehensive codebase audit - fix bugs, improve error handling, remove dead code ([3a95681](https://github.com/briansunter/verso/commit/3a95681365477b0a000a78beeebf95a6269bd90c))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* gracefully skip browser smoke test when Playwright unavailable in CI ([55bf0fd](https://github.com/briansunter/verso/commit/55bf0fd238b15263860fdd2c914910efd565323d))
|
|
12
|
+
* worker parallelism with SharedArrayBuffer, quantized search, and parallel build ([ccdf9b3](https://github.com/briansunter/verso/commit/ccdf9b32d6bd0f0840a1799b6866e006a62fcbd3))
|
|
13
|
+
|
|
1
14
|
## [0.1.5](https://github.com/briansunter/verso/compare/v0.1.4...v0.1.5) (2026-02-28)
|
|
2
15
|
|
|
3
16
|
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Verso
|
|
2
2
|
|
|
3
|
-
High-performance vector search with HNSW indexing for Bun and Browser.
|
|
3
|
+
High-performance vector search with HNSW indexing for Bun, Node.js, and Browser.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/verso-db)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
@@ -18,7 +18,7 @@ High-performance vector search with HNSW indexing for Bun and Browser.
|
|
|
18
18
|
- **HNSW Algorithm** - Hierarchical Navigable Small World for fast approximate nearest neighbor search
|
|
19
19
|
- **Multiple Distance Metrics** - Cosine similarity, Euclidean, dot product
|
|
20
20
|
- **Int8 Quantization** - 4x memory reduction with minimal recall loss
|
|
21
|
-
- **Multi-Platform** - Bun (file system) and Browser (OPFS)
|
|
21
|
+
- **Multi-Platform** - Bun/Node.js (file system) and Browser (OPFS)
|
|
22
22
|
- **Parameter Presets** - Pre-tuned configurations for different use cases
|
|
23
23
|
- **Batch Queries** - Efficient batch processing for throughput
|
|
24
24
|
- **Metadata Filtering** - MongoDB-style query operators
|
|
@@ -29,7 +29,7 @@ High-performance vector search with HNSW indexing for Bun and Browser.
|
|
|
29
29
|
# Bun
|
|
30
30
|
bun add verso-db
|
|
31
31
|
|
|
32
|
-
# npm
|
|
32
|
+
# npm / Node.js
|
|
33
33
|
npm install verso-db
|
|
34
34
|
```
|
|
35
35
|
|
|
@@ -77,6 +77,9 @@ const results = await collection.query({
|
|
|
77
77
|
console.log(results.ids); // ['doc1', 'doc2', 'doc3']
|
|
78
78
|
console.log(results.distances); // [0.01, 0.05, 0.12]
|
|
79
79
|
console.log(results.metadata); // [{ title: 'Document 1', ... }, ...]
|
|
80
|
+
|
|
81
|
+
// Optional: release resources explicitly
|
|
82
|
+
await db.close();
|
|
80
83
|
```
|
|
81
84
|
|
|
82
85
|
## API Reference
|
|
@@ -140,16 +143,19 @@ const batchResults = await collection.queryBatch([
|
|
|
140
143
|
{ queryVector: vec2, k: 5, filter: { type: 'article' } }
|
|
141
144
|
]);
|
|
142
145
|
|
|
143
|
-
// Delete a single vector
|
|
144
|
-
collection.delete('id1');
|
|
146
|
+
// Delete a single vector
|
|
147
|
+
await collection.delete('id1');
|
|
145
148
|
|
|
146
149
|
// Delete multiple vectors
|
|
147
|
-
collection.deleteBatch(['id1', 'id2']);
|
|
150
|
+
await collection.deleteBatch(['id1', 'id2']);
|
|
148
151
|
|
|
149
152
|
// Check existence
|
|
150
153
|
collection.has('id1'); // true if active (not deleted)
|
|
151
154
|
collection.count(); // number of active vectors
|
|
152
155
|
|
|
156
|
+
// Flush pending writes when using Collection directly
|
|
157
|
+
await collection.flush();
|
|
158
|
+
|
|
153
159
|
// Compact — permanently remove deleted vectors and reclaim space
|
|
154
160
|
await collection.compact();
|
|
155
161
|
```
|
|
@@ -220,7 +226,7 @@ Verso automatically selects the appropriate storage backend:
|
|
|
220
226
|
|
|
221
227
|
| Environment | Backend | Storage |
|
|
222
228
|
|-------------|---------|---------|
|
|
223
|
-
| Bun | `BunStorageBackend` | File system |
|
|
229
|
+
| Bun / Node.js | `BunStorageBackend` | File system |
|
|
224
230
|
| Browser | `OPFSBackend` | Origin Private File System |
|
|
225
231
|
| Fallback | `MemoryBackend` | In-memory (no persistence) |
|
|
226
232
|
|
package/dist/BinaryHeap.d.ts
CHANGED
|
@@ -3,7 +3,8 @@ export declare class BinaryHeap {
|
|
|
3
3
|
private dists;
|
|
4
4
|
private _size;
|
|
5
5
|
private capacity;
|
|
6
|
-
|
|
6
|
+
private readonly isMaxHeap;
|
|
7
|
+
constructor(capacity: number, isMaxHeap?: boolean);
|
|
7
8
|
/**
|
|
8
9
|
* Push an element onto the heap.
|
|
9
10
|
* Auto-grows when at capacity to avoid silently dropping elements.
|
|
@@ -23,4 +24,13 @@ export declare class BinaryHeap {
|
|
|
23
24
|
private heapifyUp;
|
|
24
25
|
private heapifyDown;
|
|
25
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* MaxBinaryHeap - A max-heap for HNSW result tracking.
|
|
29
|
+
*
|
|
30
|
+
* Keeps the FURTHEST element at the top, allowing O(log n) eviction
|
|
31
|
+
* of the worst result when a better one is found.
|
|
32
|
+
*/
|
|
33
|
+
export declare class MaxBinaryHeap extends BinaryHeap {
|
|
34
|
+
constructor(capacity: number);
|
|
35
|
+
}
|
|
26
36
|
//# sourceMappingURL=BinaryHeap.d.ts.map
|
package/dist/BinaryHeap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BinaryHeap.d.ts","sourceRoot":"","sources":["../src/BinaryHeap.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAS;
|
|
1
|
+
{"version":3,"file":"BinaryHeap.d.ts","sourceRoot":"","sources":["../src/BinaryHeap.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;gBAExB,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,OAAe;IAQxD;;;OAGG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAWpC;;OAEG;IACH,OAAO,CAAC,IAAI;IAWZ,GAAG,IAAI,MAAM;IAab,IAAI,IAAI,MAAM;IAId,SAAS,IAAI,MAAM;IAKnB,IAAI,IAAI,MAAM;IAId,KAAK,IAAI,IAAI;IAIb,OAAO,IAAI,OAAO;IAIlB,WAAW,IAAI,MAAM;IAIrB,OAAO,CAAC,SAAS;IAwBjB,OAAO,CAAC,WAAW;CAkCpB;AAED;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,UAAU;gBAC/B,QAAQ,EAAE,MAAM;CAG7B"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
export class BinaryHeap {
|
|
2
|
+
ids;
|
|
3
|
+
dists;
|
|
4
|
+
_size;
|
|
5
|
+
capacity;
|
|
6
|
+
isMaxHeap;
|
|
7
|
+
constructor(capacity, isMaxHeap = false) {
|
|
8
|
+
this.capacity = capacity;
|
|
9
|
+
this.isMaxHeap = isMaxHeap;
|
|
10
|
+
this.ids = new Uint32Array(capacity);
|
|
11
|
+
this.dists = new Float32Array(capacity);
|
|
12
|
+
this._size = 0;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Push an element onto the heap.
|
|
16
|
+
* Auto-grows when at capacity to avoid silently dropping elements.
|
|
17
|
+
*/
|
|
18
|
+
push(id, dist) {
|
|
19
|
+
if (this._size >= this.capacity) {
|
|
20
|
+
this.grow();
|
|
21
|
+
}
|
|
22
|
+
this.ids[this._size] = id;
|
|
23
|
+
this.dists[this._size] = dist;
|
|
24
|
+
this._size++;
|
|
25
|
+
this.heapifyUp(this._size - 1);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Double the heap capacity when full.
|
|
29
|
+
*/
|
|
30
|
+
grow() {
|
|
31
|
+
const newCapacity = Math.max(this.capacity * 2, 16);
|
|
32
|
+
const newIds = new Uint32Array(newCapacity);
|
|
33
|
+
const newDists = new Float32Array(newCapacity);
|
|
34
|
+
newIds.set(this.ids);
|
|
35
|
+
newDists.set(this.dists);
|
|
36
|
+
this.ids = newIds;
|
|
37
|
+
this.dists = newDists;
|
|
38
|
+
this.capacity = newCapacity;
|
|
39
|
+
}
|
|
40
|
+
pop() {
|
|
41
|
+
if (this._size === 0)
|
|
42
|
+
return -1;
|
|
43
|
+
const result = this.ids[0];
|
|
44
|
+
this._size--;
|
|
45
|
+
if (this._size > 0) {
|
|
46
|
+
this.ids[0] = this.ids[this._size];
|
|
47
|
+
this.dists[0] = this.dists[this._size];
|
|
48
|
+
this.heapifyDown(0);
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
peek() {
|
|
53
|
+
return this._size > 0 ? this.ids[0] : -1;
|
|
54
|
+
}
|
|
55
|
+
peekValue() {
|
|
56
|
+
if (this._size > 0)
|
|
57
|
+
return this.dists[0];
|
|
58
|
+
return this.isMaxHeap ? -Infinity : Infinity;
|
|
59
|
+
}
|
|
60
|
+
size() {
|
|
61
|
+
return this._size;
|
|
62
|
+
}
|
|
63
|
+
clear() {
|
|
64
|
+
this._size = 0;
|
|
65
|
+
}
|
|
66
|
+
isEmpty() {
|
|
67
|
+
return this._size === 0;
|
|
68
|
+
}
|
|
69
|
+
getCapacity() {
|
|
70
|
+
return this.capacity;
|
|
71
|
+
}
|
|
72
|
+
heapifyUp(index) {
|
|
73
|
+
// Cache array references to avoid repeated property lookups
|
|
74
|
+
const ids = this.ids;
|
|
75
|
+
const dists = this.dists;
|
|
76
|
+
const isMax = this.isMaxHeap;
|
|
77
|
+
while (index > 0) {
|
|
78
|
+
// Use bitwise shift for faster integer division
|
|
79
|
+
const parentIndex = (index - 1) >> 1;
|
|
80
|
+
if (isMax ? dists[parentIndex] >= dists[index] : dists[parentIndex] <= dists[index])
|
|
81
|
+
break;
|
|
82
|
+
// Inline swap for performance
|
|
83
|
+
const tmpId = ids[index];
|
|
84
|
+
ids[index] = ids[parentIndex];
|
|
85
|
+
ids[parentIndex] = tmpId;
|
|
86
|
+
const tmpDist = dists[index];
|
|
87
|
+
dists[index] = dists[parentIndex];
|
|
88
|
+
dists[parentIndex] = tmpDist;
|
|
89
|
+
index = parentIndex;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
heapifyDown(index) {
|
|
93
|
+
// Cache array references to avoid repeated property lookups
|
|
94
|
+
const ids = this.ids;
|
|
95
|
+
const dists = this.dists;
|
|
96
|
+
const size = this._size;
|
|
97
|
+
const isMax = this.isMaxHeap;
|
|
98
|
+
while (true) {
|
|
99
|
+
const leftChild = (index << 1) + 1; // 2 * index + 1
|
|
100
|
+
const rightChild = leftChild + 1; // 2 * index + 2
|
|
101
|
+
let best = index;
|
|
102
|
+
if (isMax) {
|
|
103
|
+
if (leftChild < size && dists[leftChild] > dists[best])
|
|
104
|
+
best = leftChild;
|
|
105
|
+
if (rightChild < size && dists[rightChild] > dists[best])
|
|
106
|
+
best = rightChild;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
if (leftChild < size && dists[leftChild] < dists[best])
|
|
110
|
+
best = leftChild;
|
|
111
|
+
if (rightChild < size && dists[rightChild] < dists[best])
|
|
112
|
+
best = rightChild;
|
|
113
|
+
}
|
|
114
|
+
if (best === index)
|
|
115
|
+
break;
|
|
116
|
+
// Inline swap for performance
|
|
117
|
+
const tmpId = ids[index];
|
|
118
|
+
ids[index] = ids[best];
|
|
119
|
+
ids[best] = tmpId;
|
|
120
|
+
const tmpDist = dists[index];
|
|
121
|
+
dists[index] = dists[best];
|
|
122
|
+
dists[best] = tmpDist;
|
|
123
|
+
index = best;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* MaxBinaryHeap - A max-heap for HNSW result tracking.
|
|
129
|
+
*
|
|
130
|
+
* Keeps the FURTHEST element at the top, allowing O(log n) eviction
|
|
131
|
+
* of the worst result when a better one is found.
|
|
132
|
+
*/
|
|
133
|
+
export class MaxBinaryHeap extends BinaryHeap {
|
|
134
|
+
constructor(capacity) {
|
|
135
|
+
super(capacity, true);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=BinaryHeap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BinaryHeap.js","sourceRoot":"","sources":["../src/BinaryHeap.ts"],"names":[],"mappings":"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"}
|
package/dist/Collection.d.ts
CHANGED
|
@@ -63,6 +63,13 @@ export interface QueryResult {
|
|
|
63
63
|
distances: number[];
|
|
64
64
|
metadata: Array<Record<string, any>>;
|
|
65
65
|
}
|
|
66
|
+
export interface CollectionOptions {
|
|
67
|
+
/**
|
|
68
|
+
* Persist mutating operations automatically after they complete.
|
|
69
|
+
* VectorDB-managed collections enable this by default.
|
|
70
|
+
*/
|
|
71
|
+
autoPersist?: boolean;
|
|
72
|
+
}
|
|
66
73
|
export declare class Collection {
|
|
67
74
|
private static readonly MAX_INTERNAL_ID;
|
|
68
75
|
private name;
|
|
@@ -85,13 +92,27 @@ export declare class Collection {
|
|
|
85
92
|
private deletedIds;
|
|
86
93
|
private nextNumericId;
|
|
87
94
|
private activeCount;
|
|
95
|
+
private readonly autoPersist;
|
|
96
|
+
private dirty;
|
|
97
|
+
private mutationLock;
|
|
88
98
|
constructor(name: string, config: {
|
|
89
99
|
dimension: number;
|
|
90
100
|
metric?: DistanceMetric;
|
|
91
101
|
M?: number;
|
|
92
102
|
efConstruction?: number;
|
|
93
|
-
}, storage: StorageBackend);
|
|
103
|
+
}, storage: StorageBackend, options?: CollectionOptions);
|
|
94
104
|
init(): Promise<void>;
|
|
105
|
+
private withMutationLock;
|
|
106
|
+
flush(): Promise<void>;
|
|
107
|
+
private captureMutationSnapshot;
|
|
108
|
+
private restoreMutationSnapshot;
|
|
109
|
+
/**
|
|
110
|
+
* Wrap a mutation in snapshot-capture + auto-persist.
|
|
111
|
+
* The mutation fn should set `this.dirty = true` when it mutates state.
|
|
112
|
+
* If autoPersist is on and dirty was set, saves after fn completes.
|
|
113
|
+
* On error, restores from snapshot.
|
|
114
|
+
*/
|
|
115
|
+
private withAutoSave;
|
|
95
116
|
private reserveNumericIds;
|
|
96
117
|
private setActiveStorageKeys;
|
|
97
118
|
private isValidStorageState;
|
|
@@ -126,6 +147,7 @@ export declare class Collection {
|
|
|
126
147
|
* For new IDs, behaves identically to add().
|
|
127
148
|
*/
|
|
128
149
|
upsert(config: AddConfig): Promise<void>;
|
|
150
|
+
private addInternal;
|
|
129
151
|
/** Returns the vector dimension for this collection. */
|
|
130
152
|
getDimension(): number;
|
|
131
153
|
/** Returns the distance metric for this collection. */
|
|
@@ -156,14 +178,15 @@ export declare class Collection {
|
|
|
156
178
|
* @param id The string ID of the vector to delete
|
|
157
179
|
* @returns true if the vector was deleted, false if it didn't exist or was already deleted
|
|
158
180
|
*/
|
|
159
|
-
|
|
181
|
+
private deleteInternal;
|
|
182
|
+
delete(id: string): Promise<boolean>;
|
|
160
183
|
/**
|
|
161
184
|
* Mark multiple vectors as deleted (tombstone deletion).
|
|
162
185
|
*
|
|
163
186
|
* @param ids Array of string IDs to delete
|
|
164
187
|
* @returns Number of vectors that were successfully deleted
|
|
165
188
|
*/
|
|
166
|
-
deleteBatch(ids: string[]): number
|
|
189
|
+
deleteBatch(ids: string[]): Promise<number>;
|
|
167
190
|
/**
|
|
168
191
|
* Check if a vector exists and is not deleted.
|
|
169
192
|
*/
|
|
@@ -177,8 +200,9 @@ export declare class Collection {
|
|
|
177
200
|
* Remaps all internal IDs so that graph neighbors are stored
|
|
178
201
|
* contiguously in memory, improving search cache hit rates.
|
|
179
202
|
*/
|
|
180
|
-
reorderIndex(): void
|
|
203
|
+
reorderIndex(): Promise<void>;
|
|
181
204
|
saveToDisk(): Promise<void>;
|
|
205
|
+
private saveToDiskUnlocked;
|
|
182
206
|
private executeQuery;
|
|
183
207
|
private searchCandidates;
|
|
184
208
|
private filterAndDeduplicateResults;
|
|
@@ -189,8 +213,10 @@ export declare class Collection {
|
|
|
189
213
|
private matchesFilter;
|
|
190
214
|
private validateFilterOperators;
|
|
191
215
|
private validateAddInput;
|
|
216
|
+
private validateMetadataValue;
|
|
192
217
|
private parseMetadataLine;
|
|
193
218
|
private isPlainObject;
|
|
219
|
+
private isFilterObject;
|
|
194
220
|
private isOperatorObject;
|
|
195
221
|
private deepEqual;
|
|
196
222
|
private matchesInOperator;
|
package/dist/Collection.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Collection.d.ts","sourceRoot":"","sources":["../src/Collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,cAAc,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"Collection.d.ts","sourceRoot":"","sources":["../src/Collection.ts"],"names":[],"mappings":"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"}
|