react-localstorage-ts
Version:
A small library to wrap browser's localstorage in a functional fashion.
31 lines (30 loc) • 1.71 kB
TypeScript
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 {};