UNPKG

foxact

Version:

React Hooks/Utils done right. For browser, SSR, and React Server Components.

31 lines (29 loc) 1.27 kB
type StorageType = 'localStorage' | 'sessionStorage'; type NotUndefined<T> = T extends undefined ? never : T; type StateHookTuple<T> = readonly [T, React.Dispatch<React.SetStateAction<T | null>>]; type CustomStorageEvent = CustomEvent<string>; declare global { interface WindowEventMap { 'foxact-use-local-storage': CustomStorageEvent; 'foxact-use-session-storage': CustomStorageEvent; } } type Serializer<T> = (value: T) => string; type Deserializer<T> = (value: string) => T; interface UseStorageRawOption { raw: true; } interface UseStorageParserOption<T> { raw?: false; serializer: Serializer<T>; deserializer: Deserializer<T>; } declare function createStorage(type: StorageType): { useStorage: { <T>(key: string, serverValue: NotUndefined<T>, options?: UseStorageRawOption | UseStorageParserOption<T>): StateHookTuple<T>; <T>(key: string, serverValue?: undefined, options?: UseStorageRawOption | UseStorageParserOption<T>): StateHookTuple<T | null>; }; useSetStorage: <T>(key: string, serializer: Serializer<T>) => (v: T | null) => void; }; export { createStorage }; export type { Deserializer, NotUndefined, Serializer, StateHookTuple, StorageType, UseStorageParserOption, UseStorageRawOption };