react-query-external-sync
Version:
A tool for syncing React Query state to an external Dev Tools
81 lines • 2.97 kB
JavaScript
import { useDynamicAsyncStorageQueries } from './useDynamicAsyncStorageQueries';
import { useDynamicMmkvQueries } from './useDynamicMmkvQueries';
import { useDynamicSecureStorageQueries } from './useDynamicSecureStorageQueries';
/**
* Unified hook for monitoring all device storage types with React Query
*
* This hook consolidates MMKV, AsyncStorage, and SecureStorage monitoring into one simple interface.
* Each storage type can be enabled/disabled independently based on your needs.
*
* @example
* // Monitor all storage types (legacy string array format)
* const storageQueries = useStorageQueries({
* queryClient,
* mmkv: storage,
* asyncStorage: true,
* secureStorage: ['sessionToken', 'auth.session', 'auth.email']
* });
*
* @example
* // Monitor with custom SecureStore instance
* import * as SecureStore from 'expo-secure-store';
*
* const storageQueries = useStorageQueries({
* queryClient,
* mmkv: storage,
* asyncStorage: true,
* secureStorage: {
* storage: SecureStore,
* keys: ['sessionToken', 'auth.session', 'auth.email']
* }
* });
*
* @example
* // Monitor only MMKV storage
* const storageQueries = useStorageQueries({
* queryClient,
* mmkv: storage
* });
*
* @example
* // Monitor only specific secure storage keys
* const storageQueries = useStorageQueries({
* queryClient,
* secureStorage: ['sessionToken', 'refreshToken'],
* secureStoragePollInterval: 2000 // Check every 2 seconds
* });
*/
export function useStorageQueries({ queryClient, mmkv, asyncStorage, secureStorage, secureStoragePollInterval, }) {
// Always call hooks but with conditional parameters
// MMKV queries - pass a dummy storage if not enabled
const mmkvQueries = useDynamicMmkvQueries({
queryClient,
storage: mmkv || {
getAllKeys: () => [],
getString: () => undefined,
getNumber: () => undefined,
getBoolean: () => undefined,
addOnValueChangedListener: () => ({ remove: () => { } }),
},
});
// AsyncStorage queries - always call but filter results
const asyncStorageQueries = useDynamicAsyncStorageQueries({
queryClient,
});
// SecureStorage queries - handle both legacy array format and new object format
const secureStorageConfig = Array.isArray(secureStorage)
? { storage: undefined, keys: secureStorage }
: secureStorage || { storage: undefined, keys: [] };
const secureStorageQueries = useDynamicSecureStorageQueries({
queryClient,
secureStorage: secureStorageConfig.storage,
knownKeys: secureStorageConfig.keys,
pollInterval: secureStoragePollInterval,
});
return {
mmkv: mmkv ? mmkvQueries : [],
asyncStorage: asyncStorage ? asyncStorageQueries : [],
secureStorage: secureStorageConfig.keys.length ? secureStorageQueries : [],
};
}
//# sourceMappingURL=useStorageQueries.js.map