/**
* @file useMemoryPressure Hook
* @description React hook for monitoring JavaScript heap memory usage and pressure.
*
* Provides components with awareness of memory conditions, enabling
* adaptive behavior to prevent memory-related performance degradation.
*
* Note: The Memory API (performance.memory) is only available in Chrome/Chromium browsers.
* This hook gracefully degrades on unsupported browsers.
*
* @example
* ```tsx
* function MyComponent() {
* const {
* pressure,
* usagePercent,
* isUnderPressure,
* shouldReduceMemory
* } = useMemoryPressure({
* onPressureChange: (pressure) => {
* if (pressure === 'critical') {
* clearCaches();
* }
* }
* });
*
* // Reduce memory usage when under pressure
* if (shouldReduceMemory) {
* return ;
* }
*
* return ;
* }
* ```
*/
/**
* Memory pressure level
*/
export type MemoryPressureLevel = 'normal' | 'warning' | 'critical';
/**
* Memory snapshot
*/
export interface MemorySnapshot {
/** Used JS heap size in bytes */
readonly usedJSHeapSize: number;
/** Total JS heap size in bytes */
readonly totalJSHeapSize: number;
/** JS heap size limit in bytes */
readonly jsHeapSizeLimit: number;
/** Usage as percentage (0-100) */
readonly usagePercent: number;
/** Current pressure level */
readonly pressure: MemoryPressureLevel;
/** Timestamp of snapshot */
readonly timestamp: number;
}
/**
* Memory trend data
*/
export interface MemoryTrend {
/** Direction of memory usage */
readonly direction: 'increasing' | 'stable' | 'decreasing';
/** Rate of change (bytes per second) */
readonly rateOfChange: number;
/** Estimated time until critical (ms) or null if not increasing */
readonly timeUntilCritical: number | null;
}
/**
* Hook options
*/
export interface UseMemoryPressureOptions {
/** Warning threshold (0-1) */
readonly warningThreshold?: number;
/** Critical threshold (0-1) */
readonly criticalThreshold?: number;
/** Polling interval (ms) */
readonly pollingInterval?: number;
/** Callback on pressure change */
readonly onPressureChange?: (pressure: MemoryPressureLevel, snapshot: MemorySnapshot) => void;
/** Callback on critical pressure */
readonly onCritical?: (snapshot: MemorySnapshot) => void;
/** Enable automatic cleanup on critical */
readonly autoCleanup?: boolean;
/** Custom cleanup function */
readonly cleanupFn?: () => void;
/** Enable debug logging */
readonly debug?: boolean;
}
/**
* Hook return value
*/
export interface UseMemoryPressureReturn {
/** Current memory snapshot */
readonly snapshot: MemorySnapshot | null;
/** Current pressure level */
readonly pressure: MemoryPressureLevel;
/** Usage percentage (0-100) */
readonly usagePercent: number;
/** Whether under any pressure (warning or critical) */
readonly isUnderPressure: boolean;
/** Whether should reduce memory usage */
readonly shouldReduceMemory: boolean;
/** Memory trend */
readonly trend: MemoryTrend | null;
/** Whether Memory API is supported */
readonly isSupported: boolean;
/** Force a memory snapshot */
readonly refresh: () => void;
/** Request garbage collection (if available) */
readonly requestGC: () => void;
/** Get memory history */
readonly getHistory: () => MemorySnapshot[];
/** Format bytes for display */
readonly formatBytes: (bytes: number) => string;
}
/**
* Hook for memory pressure monitoring
*/
export declare function useMemoryPressure(options?: UseMemoryPressureOptions): UseMemoryPressureReturn;
/**
* Hook that triggers cleanup when memory pressure is detected
*/
export declare function useMemoryCleanup(cleanupFn: () => void, options?: {
threshold?: MemoryPressureLevel;
}): void;
/**
* Hook that provides memory-aware caching
*/
export declare function useMemoryAwareCache(maxSize?: number): {
get: (key: string) => T | undefined;
set: (key: string, value: T) => void;
clear: () => void;
size: number;
};
/**
* Hook that monitors component memory impact
*/
export declare function useComponentMemoryImpact(): {
mountSize: number | null;
currentSize: number | null;
impact: number | null;
};