CRITICAL CHECKPOINT - DO NOT PUSH TO GITHUB Recovery Status: - Successfully recovered brainy.ts from compiled JavaScript - All core v3.0 API methods functional (add, get, update, delete, relate, find, etc.) - Neural subsystem intact (562KB embedded patterns, NLP working) - Augmentation pipeline operational (20+ augmentations) - HNSW clustering system complete - Triple Intelligence compiled (needs constructor fix) - Test suite validates functionality Changes preserved: - 898 files with changes from last 3 days - 144,475 insertions - All augmentation improvements - All test coverage enhancements - Complete v3.0 feature set This is a LOCAL checkpoint only - contains recovered work after corruption incident. Created backup in .backups/brainy-full-20250910-151314.tar.gz Branch: recovery-checkpoint-20250910-151433 Date: Wed Sep 10 03:18:04 PM PDT 2025
98 lines
No EOL
2.4 KiB
JavaScript
98 lines
No EOL
2.4 KiB
JavaScript
/**
|
|
* Dedicated index for tracking soft-deleted items
|
|
* This is MUCH more efficient than checking every item in the database
|
|
*
|
|
* Performance characteristics:
|
|
* - Add deleted item: O(1)
|
|
* - Remove deleted item: O(1)
|
|
* - Check if deleted: O(1)
|
|
* - Get all deleted: O(d) where d = number of deleted items << total items
|
|
*/
|
|
export class DeletedItemsIndex {
|
|
constructor() {
|
|
this.deletedIds = new Set();
|
|
this.deletedCount = 0;
|
|
}
|
|
/**
|
|
* Mark an item as deleted
|
|
*/
|
|
markDeleted(id) {
|
|
if (!this.deletedIds.has(id)) {
|
|
this.deletedIds.add(id);
|
|
this.deletedCount++;
|
|
}
|
|
}
|
|
/**
|
|
* Mark an item as not deleted (restored)
|
|
*/
|
|
markRestored(id) {
|
|
if (this.deletedIds.delete(id)) {
|
|
this.deletedCount--;
|
|
}
|
|
}
|
|
/**
|
|
* Check if an item is deleted - O(1)
|
|
*/
|
|
isDeleted(id) {
|
|
return this.deletedIds.has(id);
|
|
}
|
|
/**
|
|
* Get all deleted item IDs - O(d)
|
|
*/
|
|
getAllDeleted() {
|
|
return Array.from(this.deletedIds);
|
|
}
|
|
/**
|
|
* Filter out deleted items from results - O(k) where k = result count
|
|
*/
|
|
filterDeleted(items) {
|
|
if (this.deletedCount === 0) {
|
|
// Fast path - no deleted items
|
|
return items;
|
|
}
|
|
return items.filter(item => {
|
|
const id = item.id;
|
|
return id ? !this.deletedIds.has(id) : true;
|
|
});
|
|
}
|
|
/**
|
|
* Get statistics
|
|
*/
|
|
getStats() {
|
|
return {
|
|
deletedCount: this.deletedCount,
|
|
memoryUsage: this.deletedCount * 100 // Rough estimate: 100 bytes per ID
|
|
};
|
|
}
|
|
/**
|
|
* Clear all deleted items (for testing)
|
|
*/
|
|
clear() {
|
|
this.deletedIds.clear();
|
|
this.deletedCount = 0;
|
|
}
|
|
/**
|
|
* Serialize for persistence
|
|
*/
|
|
serialize() {
|
|
return JSON.stringify(Array.from(this.deletedIds));
|
|
}
|
|
/**
|
|
* Deserialize from persistence
|
|
*/
|
|
deserialize(data) {
|
|
try {
|
|
const ids = JSON.parse(data);
|
|
this.deletedIds = new Set(ids);
|
|
this.deletedCount = this.deletedIds.size;
|
|
}
|
|
catch (e) {
|
|
console.warn('Failed to deserialize deleted items index');
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* Global singleton for deleted items tracking
|
|
*/
|
|
export const deletedItemsIndex = new DeletedItemsIndex();
|
|
//# sourceMappingURL=deletedItemsIndex.js.map
|