@aminnairi/react-signal
Version:
Signal Library for React
49 lines (48 loc) • 2.91 kB
TypeScript
export type Subscriber = () => void;
export type Parser<Value> = (value: unknown) => Value;
export type SignalConstructor<Value> = () => Signal<Value>;
export type Update<Value> = (oldValue: Value) => Value;
export type StorageSignalConstructor<Value> = {
storage: Storage;
key: string;
fallback: Value;
parse: Parser<Value>;
};
export type LocalStorageSignalConstructor<Value> = Omit<StorageSignalConstructor<Value>, "storage">;
export type SessionStorageSignalConstructor<Value> = Omit<StorageSignalConstructor<Value>, "storage">;
export declare class Signal<Value> {
private subscribers;
private value;
constructor(initialValue: Value);
emit(newValue: Value): void;
getValue(): Value;
subscribe(newSubscriber: Subscriber): () => void;
next(update: Update<Value>): void;
}
export declare class StorageSignal<Value> extends Signal<Value> {
private key;
private storage;
constructor({ storage, key, fallback, parse }: StorageSignalConstructor<Value>);
emit(newValue: Value): void;
remove(): void;
}
export declare class LocalStorageSignal<Value> extends StorageSignal<Value> {
constructor({ key, fallback, parse }: LocalStorageSignalConstructor<Value>);
}
export declare class SessionStorageSignal<Value> extends StorageSignal<Value> {
constructor({ key, fallback, parse }: SessionStorageSignalConstructor<Value>);
}
export declare const useSignal: <Value>(signal: Signal<Value>) => Value;
export declare const useSignalConstructor: <Value>(signalConstructor: SignalConstructor<Value>) => Value;
export declare function isSetSignalConstructor<Value>(input: unknown): input is ((oldValue: Value) => Value);
export type SetStateFunction<Value> = (valueOrConstructor: Value | ((oldValue: Value) => Value)) => void;
export type UseStateFunction<Value> = () => [Value, SetStateFunction<Value>];
export declare function createState<Value>(initialValue: Value): UseStateFunction<Value>;
export type SetLocalStorageStateFunction<Value> = (value: Value | ((oldValue: Value) => Value)) => void;
export type RemoveLocalStorageStateFunction = () => void;
export declare function isSetLocalStorageSignalConstructor<Value>(input: unknown): input is ((oldValue: Value) => Value);
export declare function createLocalStorageState<Value>(options: LocalStorageSignalConstructor<Value>): () => [Value, SetLocalStorageStateFunction<Value>, RemoveLocalStorageStateFunction];
export type SetSessionStorageStateFunction<Value> = (value: Value | ((oldValue: Value) => Value)) => void;
export type RemoveSessionStorageStateFunction = () => void;
export declare function isSetSessionStorageSignalConstructor<Value>(input: unknown): input is ((oldValue: Value) => Value);
export declare function createSessionStorageState<Value>(options: SessionStorageSignalConstructor<Value>): () => [Value, SetSessionStorageStateFunction<Value>, RemoveSessionStorageStateFunction];