brainy/.recovery-workspace/dist-backup-20250910-141917/utils/deletedItemsIndex.js
David Snelling 8ff382ca3b chore: recovery checkpoint - v3.0 API successfully recovered
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
2025-09-10 15:18:04 -07:00

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