UNPKG

react-localstorage-ts

Version:

A small library to wrap browser's localstorage in a functional fashion.

31 lines (30 loc) 1.71 kB
import { Codec, decodeType, runtimeType } from "./Codec"; import { LocalStorageOptions, StorageDef, RuntimeValues, LocalValueModifiers } from "localvalue-ts"; import * as LV from "./LocalValue"; interface IO<A> { (): A; } declare type ValidCodec = Codec<any, string, any>; export declare type ValidLocalValue<A> = LV.Absent | LV.Valid<A>; interface UseLocalItemOptions<C extends ValidCodec> { useMemorySore?: boolean; defaultValue?: runtimeType<C>; } export declare type LocalValueHook<C extends ValidCodec> = () => [ item: decodeType<C>, setItem: (i: ValidLocalValue<runtimeType<C>>) => IO<void> ]; export declare const makeUseLocalItem: <C extends ValidCodec>(key: string, codec: C, options?: UseLocalItemOptions<C> | undefined) => LocalValueHook<C>; declare type StorageHooks<S> = S extends StorageDef<infer K> ? { [k in K as `use${Capitalize<k>}`]: LocalValueHook<S[k]>; } : never; export declare const makeStorageHooks: <S extends StorageDef<any>>(storage: S, o?: LocalStorageOptions<Partial<RuntimeValues<S>>> | undefined) => StorageHooks<S>; export declare const makeUseLocalItemFromStorage: <C extends ValidCodec>(key: string, v: LocalValueModifiers<C>) => LocalValueHook<C>; declare type LocalValueHookFromModifiers<M> = M extends LocalValueModifiers<infer C> ? C extends ValidCodec ? LocalValueHook<C> : never : never; export declare type StorageHooksFromInstance<S> = S extends Record<infer K, any> ? [K] extends [string] ? { [k in K as `use${Capitalize<k>}`]: LocalValueHookFromModifiers<S[k]>; } : never : never; export declare const makeHooksFromStorage: <S extends { [x: string]: LocalValueModifiers<any>; }>(storage: S) => StorageHooksFromInstance<S>; export {};