import { useSyncExternalStore } from 'react'; import type { LiveData } from './livedata'; function noopSubscribe() { return () => {}; } function nullGetSnapshot() { return null; } function undefinedGetSnapshot() { return undefined; } /** * subscribe LiveData and return the value. */ export function useLiveData | null | undefined>( liveData: Input ): NonNullable extends LiveData ? Input extends undefined ? T | undefined : Input extends null ? T | null : T : never { return useSyncExternalStore( liveData ? liveData.reactSubscribe : noopSubscribe, liveData ? liveData.reactGetSnapshot : liveData === undefined ? undefinedGetSnapshot : nullGetSnapshot ); }