208 lines
7.8 KiB
Markdown
208 lines
7.8 KiB
Markdown
# State Utilities Audit
|
|
|
|
**Date**: 2026-01-11
|
|
**Action**: 4.6.1.1 - List all state utility files
|
|
**Status**: ✅ Complete
|
|
|
|
## Summary
|
|
|
|
This document lists all state utility files found in `apps/web/src/utils/` and documents their purposes, usage, and status.
|
|
|
|
## State Utility Files Found
|
|
|
|
### 1. `stateMiddleware.ts`
|
|
- **Purpose**: Zustand middleware for analytics tracking and error handling
|
|
- **Exports**:
|
|
- `setAnalyticsHandler()` - Set analytics handler
|
|
- `setErrorHandler()` - Set error handler
|
|
- `stateMiddleware()` - Middleware function
|
|
- **Key Features**:
|
|
- Tracks state changes for analytics
|
|
- Handles errors in state updates
|
|
- Provides context for debugging
|
|
- **Used By**: Library Store (`stores/library.ts`)
|
|
- **Status**: ⚠️ **Used by Library Store** (may be unnecessary complexity)
|
|
- **Test File**: `stateMiddleware.test.ts` ✅
|
|
|
|
### 2. `stateNormalization.ts`
|
|
- **Purpose**: Utilities for normalized state management (entities by ID)
|
|
- **Exports**:
|
|
- `normalize()` - Convert array to normalized state
|
|
- `denormalize()` - Convert normalized state to array
|
|
- `addToNormalized()` - Add item to normalized state
|
|
- `updateInNormalized()` - Update item in normalized state
|
|
- `removeFromNormalized()` - Remove item from normalized state
|
|
- `replaceNormalized()` - Replace normalized state
|
|
- `mergeNormalized()` - Merge normalized states
|
|
- `getById()` - Get item by ID
|
|
- `getByIds()` - Get items by IDs
|
|
- **Key Features**:
|
|
- Normalized state structure: `{ byId: Record<string, T>, allIds: string[] }`
|
|
- Efficient lookups and updates
|
|
- **Used By**: Library Store (`stores/library.ts`)
|
|
- **Status**: ⚠️ **Used by Library Store** (will become obsolete when Library Store migrates to React Query)
|
|
- **Test File**: None ❌
|
|
|
|
### 3. `stateInvalidation.ts`
|
|
- **Purpose**: Unified state invalidation for Zustand stores and React Query
|
|
- **Exports**:
|
|
- `invalidateState()` - Invalidate state by resource type
|
|
- `invalidateStateAfterMutation()` - Invalidate after mutation
|
|
- **Key Features**:
|
|
- Invalidates both Zustand stores and React Query cache
|
|
- Supports resource-based invalidation
|
|
- Integrates with response cache
|
|
- **Used By**: Various mutation handlers
|
|
- **Status**: ✅ **Active** (useful for migration period)
|
|
- **Test File**: None ❌
|
|
|
|
### 4. `stateHydration.ts`
|
|
- **Purpose**: Hydrate Zustand stores from API on app load
|
|
- **Exports**:
|
|
- `hydrateState()` - Hydrate stores from API
|
|
- `useStateHydration()` - React hook for hydration
|
|
- **Key Features**:
|
|
- Loads initial state from API
|
|
- Hydrates Auth, Library, and Chat stores
|
|
- Handles errors and loading states
|
|
- **Used By**: App initialization, store hydration
|
|
- **Status**: ⚠️ **Used for Zustand stores** (will become obsolete when stores migrate to React Query)
|
|
- **Test File**: None ❌
|
|
|
|
### 5. `stateCleanup.ts`
|
|
- **Purpose**: Cleanup utilities for Zustand stores (size/age-based)
|
|
- **Exports**:
|
|
- `applyCleanup()` - Apply cleanup strategy to store
|
|
- **Key Features**:
|
|
- Size-based cleanup (keep N items)
|
|
- Age-based cleanup (remove old items)
|
|
- Normalized state cleanup support
|
|
- **Used By**: Potentially Library Store
|
|
- **Status**: ⚠️ **May be unused** (needs verification)
|
|
- **Test File**: `stateCleanup.test.ts` ✅
|
|
|
|
### 6. `stateVersioning.ts`
|
|
- **Purpose**: State versioning and migration utilities for Zustand stores
|
|
- **Exports**:
|
|
- `applyMigrations()` - Apply migrations to state
|
|
- `versionState()` - Add version to state
|
|
- `unversionState()` - Remove version from state
|
|
- `createVersionedStorage()` - Create versioned storage adapter
|
|
- **Key Features**:
|
|
- Supports state schema migrations
|
|
- Version tracking for persisted state
|
|
- Migration functions for breaking changes
|
|
- **Used By**: Potentially for store migrations
|
|
- **Status**: ⚠️ **May be unused** (needs verification)
|
|
- **Test Files**: `stateVersioning.test.ts` ✅, `stateVersioning.example.ts` ✅
|
|
|
|
### 7. `statePersistence.ts`
|
|
- **Purpose**: Persistence utilities for Zustand stores
|
|
- **Exports**: (needs inspection)
|
|
- **Key Features**: (needs inspection)
|
|
- **Used By**: (needs inspection)
|
|
- **Status**: ⚠️ **Needs inspection**
|
|
- **Test File**: None ❌
|
|
|
|
### 8. `broadcastSync.ts`
|
|
- **Purpose**: Synchronize Zustand stores across browser tabs/windows
|
|
- **Exports**:
|
|
- `broadcastSync()` - Middleware for tab synchronization
|
|
- `createSynchronizedStore()` - Create synchronized store
|
|
- **Key Features**:
|
|
- Uses BroadcastChannel API
|
|
- Syncs state changes across tabs
|
|
- Handles conflicts and race conditions
|
|
- **Used By**: UI Store (`stores/ui.ts`), Auth Store (`features/auth/store/authStore.ts`)
|
|
- **Status**: ✅ **Active** (useful for multi-tab sync)
|
|
- **Test File**: None ❌
|
|
|
|
### 9. `undoRedo.ts`
|
|
- **Purpose**: Undo/redo functionality for Zustand stores
|
|
- **Exports**:
|
|
- `undoRedo()` - Middleware for undo/redo
|
|
- `useUndoRedo()` - React hook for undo/redo
|
|
- `UndoRedoManager` - Class for managing history
|
|
- `undoRedoManager` - Singleton instance
|
|
- **Key Features**:
|
|
- History tracking for state changes
|
|
- Undo/redo operations
|
|
- Configurable history size
|
|
- **Used By**: Library Store (`stores/library.ts`)
|
|
- **Status**: ⚠️ **Used by Library Store** (will become obsolete when Library Store migrates to React Query)
|
|
- **Test File**: None ❌
|
|
|
|
### 10. `storeSelectors.ts`
|
|
- **Purpose**: Optimized selectors for Zustand stores to prevent unnecessary re-renders
|
|
- **Exports**:
|
|
- `useAuthUser()` - Get user from auth store
|
|
- `useAuthStatus()` - Get auth status
|
|
- `useStoreSelector()` - Generic store selector
|
|
- **Key Features**:
|
|
- Uses `useShallow` for shallow comparison
|
|
- Prevents unnecessary re-renders
|
|
- Type-safe selectors
|
|
- **Used By**: Various components
|
|
- **Status**: ✅ **Active** (useful optimization)
|
|
- **Test File**: None ❌
|
|
|
|
## File Statistics
|
|
|
|
- **Total State Utility Files**: 10
|
|
- **With Tests**: 3 (30%)
|
|
- **Without Tests**: 7 (70%)
|
|
- **Actively Used**: 6
|
|
- **Potentially Unused**: 2 (stateCleanup, stateVersioning - needs verification)
|
|
- **Will Become Obsolete**: 4 (stateMiddleware, stateNormalization, stateHydration, undoRedo - when stores migrate)
|
|
|
|
## Usage Analysis
|
|
|
|
### Utilities Used by Stores
|
|
- **Library Store**: `stateMiddleware`, `stateNormalization`, `undoRedo`
|
|
- **UI Store**: `broadcastSync`
|
|
- **Auth Store**: `broadcastSync`
|
|
- **Chat Store**: None (uses Immer middleware)
|
|
|
|
### Utilities Used by Components
|
|
- **storeSelectors**: Used by various components for optimized selectors
|
|
- **stateInvalidation**: Used by mutation handlers
|
|
- **stateHydration**: Used for app initialization
|
|
|
|
## Migration Impact
|
|
|
|
### Will Become Obsolete (After Store Migration)
|
|
1. **stateMiddleware** - Only used by Library Store
|
|
2. **stateNormalization** - Only used by Library Store
|
|
3. **stateHydration** - Only hydrates Zustand stores
|
|
4. **undoRedo** - Only used by Library Store
|
|
|
|
### Will Remain Useful
|
|
1. **broadcastSync** - Useful for UI state sync across tabs
|
|
2. **storeSelectors** - Useful for optimized Zustand selectors
|
|
3. **stateInvalidation** - Useful during migration period
|
|
|
|
### Needs Investigation
|
|
1. **stateCleanup** - Verify if actually used
|
|
2. **stateVersioning** - Verify if actually used
|
|
3. **statePersistence** - Inspect purpose and usage
|
|
|
|
## Recommendations
|
|
|
|
### High Priority
|
|
1. ✅ **Action 4.6.1.1**: Audit complete - 10 utilities documented
|
|
2. **Action 4.6.1.2**: Verify usage of `stateCleanup`, `stateVersioning`, `statePersistence`
|
|
3. **Action 4.6.1.3**: Add tests for utilities without tests (7 files)
|
|
|
|
### Medium Priority
|
|
1. Plan removal of obsolete utilities after store migration
|
|
2. Document migration path for utilities that will become obsolete
|
|
|
|
### Low Priority
|
|
1. Consider consolidating similar utilities
|
|
2. Review if `stateMiddleware` complexity is justified
|
|
|
|
## Next Steps
|
|
|
|
1. ✅ **Action 4.6.1.1**: List complete - 10 state utilities documented
|
|
2. **Action 4.6.1.2**: Verify usage of potentially unused utilities
|
|
3. **Action 4.6.1.3**: Add missing tests
|