disposeAll static method

void disposeAll()

Implementation

static void disposeAll() {
  if (ZenConfig.enableDebugLogs) {
    ZenLogger.logInfo('🧹 Disposing all scopes');
  }

  // Dispose all persistent scopes
  final persistentToDispose = List<String>.from(_persistentScopes.keys);
  for (final scopeName in persistentToDispose) {
    final scope = _persistentScopes[scopeName];
    if (scope != null && !scope.isDisposed) {
      try {
        scope.dispose();
      } catch (e, stackTrace) {
        ZenLogger.logError(
            'Error disposing persistent scope $scopeName', e, stackTrace);
      }
    }
  }

  // Dispose all auto-dispose scopes
  final autoDisposeToDispose = List<String>.from(_autoDisposeScopes.keys);
  for (final scopeName in autoDisposeToDispose) {
    final scope = _autoDisposeScopes[scopeName];
    if (scope != null && !scope.isDisposed) {
      try {
        scope.dispose();
      } catch (e, stackTrace) {
        ZenLogger.logError(
            'Error disposing auto-dispose scope $scopeName', e, stackTrace);
      }
    }
  }

  // Clear all tracking
  _persistentScopes.clear();
  _autoDisposeScopes.clear();
  _childScopes.clear();
  _parentScopes.clear();
  _activeAutoDisposeChildren.clear();
  _explicitlyPersistentScopes.clear();

  // Dispose root scope
  if (_rootScope != null && !_rootScope!.isDisposed) {
    try {
      _rootScope!.dispose();
    } catch (e, stackTrace) {
      ZenLogger.logError('Error disposing root scope', e, stackTrace);
    }
  }
  _rootScope = null;

  if (ZenConfig.enableDebugLogs) {
    ZenLogger.logInfo('✅ All scopes disposed and tracking cleared');
  }
}