valync
Version:
**A lightweight, framework-agnostic async data handling library for React & Vue, inspired by Riverpod’s AsyncValue pattern and powered by ts-results-es.**
62 lines • 1.67 kB
TypeScript
import { Option } from "ts-results-es";
export type ValyncOptions<T> = {
init?: Omit<RequestInit, "signal">;
cache?: boolean;
fetchOnMount?: boolean;
retryCount?: number;
onData?: (data: T) => T;
watch?: any[];
initialData?: ApiResponse<T>;
};
export type CacheKey = string | Record<string, any>;
export declare function normalizeKey(key: CacheKey): string;
export type ApiErrorResponse = {
status: "failed";
error: {
name: string;
message: string;
code?: number | string;
};
};
export type ApiSuccessResponse<T> = {
status: "success";
data: T;
};
export type ApiResponse<T> = ApiSuccessResponse<T> | ApiErrorResponse;
export type Handler<T, R> = {
loading?: () => R;
error?: (err: {
name: string;
message: string;
code?: number | string;
}) => R;
data?: (value: Option<T>) => R;
};
export declare abstract class AsyncValue<T> {
abstract when<R>(handlers: Handler<T, R>): R;
isLoading(): boolean;
isData(): boolean;
isError(): boolean;
}
export declare class AsyncLoading<T> extends AsyncValue<T> {
when<R>(h: Handler<T, R>): R;
}
export declare class AsyncError<T = unknown> extends AsyncValue<T> {
error: {
name: string;
message: string;
code?: string | number;
};
constructor(error: {
name: string;
message: string;
code?: string | number;
});
when<R>(h: Handler<T, R>): R;
}
export declare class AsyncData<T> extends AsyncValue<T> {
value: Option<T>;
constructor(value: Option<T>);
when<R>(h: Handler<T, R>): R;
}
//# sourceMappingURL=index.d.ts.map