mutoid
Version:
Reactive library for data fetching, caching, state management
83 lines (82 loc) • 7.96 kB
TypeScript
import type { Applicative3 } from 'fp-ts/Applicative';
import type { Apply3 } from 'fp-ts/Apply';
import type { Bifunctor3 } from 'fp-ts/Bifunctor';
import type { Chain3 } from 'fp-ts/Chain';
import type { Functor3 } from 'fp-ts/Functor';
import type { Monad3 } from 'fp-ts/Monad';
import type { MonadIO3 } from 'fp-ts/MonadIO';
import type { MonadTask3 } from 'fp-ts/MonadTask';
import * as R from 'fp-ts/Reader';
import type * as RTE from 'fp-ts/ReaderTaskEither';
import type { Predicate, Refinement } from 'fp-ts/function';
import type { MonadObservable3 } from 'fp-ts-reactive/lib/MonadObservable';
import type { ReaderObservableEither } from 'fp-ts-reactive/lib/ReaderObservableEither';
import type { Observable } from 'rxjs';
import * as OR from './ObservableResource';
import type * as RES from './Resource';
export interface ReaderObservableResource<R, E, A> {
(r: R): OR.ObservableResource<E, A>;
}
export type ObservableResourceTypeOf<R, DS extends RES.ResourceDecoders, AE = never> = ReaderObservableResource<R, RES.DecodersToResourceError<DS, AE>, RES.DecodersToResourceData<DS>>;
export declare const fromObservableResource: <R, E, A>(ma: OR.ObservableResource<E, A>) => ReaderObservableResource<R, E, A>;
export declare const init: ReaderObservableResource<never, never, never>;
export declare const submitted: ReaderObservableResource<never, never, never>;
export declare const done: <R, E = never, A = never>(d: A) => ReaderObservableResource<R, E, A>;
export declare const doneObservable: <R, E = never, A = never>(oa: Observable<A>) => ReaderObservableResource<R, E, A>;
export declare const fail: <R, E = never, A = never>(e: E) => ReaderObservableResource<R, E, A>;
export declare const failObservable: <R, E = never, A = never>(oe: Observable<E>) => ReaderObservableResource<R, E, A>;
export declare const ask: <R, E>() => ReaderObservableResource<R, E, R>;
export declare const askTypeOf: <R, DS extends RES.ResourceDecoders, AE = never>() => ReaderObservableResource<R, RES.DecodersToResourceError<DS, AE>, R>;
export declare const asks: <R, E, A>(f: (r: R) => A) => ReaderObservableResource<R, E, A>;
export declare const fromReader: <R, A, E = never>(ma: R.Reader<R, A>) => ReaderObservableResource<R, E, A>;
export declare const fromTask: MonadTask3<URI>['fromTask'];
export declare const fromReaderTaskEither: <R, E, A>(rte: RTE.ReaderTaskEither<R, E, A>) => ReaderObservableResource<R, E, A>;
export declare const fromObservable: MonadObservable3<URI>['fromObservable'];
export declare const fromReaderObservableEither: <R, E, A>(e: ReaderObservableEither<R, E, A>) => ReaderObservableResource<R, E, A>;
export declare const fromIO: MonadIO3<URI>['fromIO'];
export declare const fromAjax: <DS extends RES.ResourceDecoders, AE = never>(ajax$: OR.ObservableAjax<AE, any>, decoders: DS) => ReaderObservableResource<unknown, RES.DecodersToResourceError<DS, AE>, RES.DecodersToResourceData<DS>>;
export declare const of: Applicative3<URI>['of'];
export declare const toMutation: <R, E, A, S, SS extends S>(mapTo: (r: RES.Resource<E, A>) => (s: SS) => S) => (ros: ReaderObservableResource<R, E, A>) => (r: R) => Observable<(s: SS) => S>;
export declare const fetchToMutationEffectR: <RORK extends (...i: P) => ReaderObservableResource<R, E, A>, SS extends S, S, R = RORK extends (...i: any) => ReaderObservableResource<infer I, any, any> ? I : never, E = RORK extends (...i: any) => ReaderObservableResource<any, infer I_1, any> ? I_1 : never, A = RORK extends (...i: any) => ReaderObservableResource<any, any, infer I_2> ? I_2 : never, P extends any[] = Parameters<RORK>>(mapTo: (s: SS) => (i: RES.Resource<E, A>) => S) => (rork: RORK) => (r: R) => (...i: P) => (s: SS) => Observable<S>;
export declare const URI = "ReaderObservableResource";
export type URI = typeof URI;
declare module 'fp-ts/HKT' {
interface URItoKind3<R, E, A> {
readonly [URI]: ReaderObservableResource<R, E, A>;
}
}
export declare const Functor: Functor3<URI>;
export declare const Apply: Apply3<URI>;
export declare const Applicative: Applicative3<URI>;
export declare const Chain: Chain3<URI>;
export declare const Monad: Monad3<URI>;
export declare const Bifunctor: Bifunctor3<URI>;
export declare const MonadTask: MonadTask3<URI>;
export declare const MonadObservable: MonadObservable3<URI>;
export declare const map: <A, B>(f: (a: A) => B) => <R, E>(fa: ReaderObservableResource<R, E, A>) => ReaderObservableResource<R, E, B>;
export declare const bimap: <E, G, A, B>(f: (e: E) => G, g: (a: A) => B) => <R>(fa: ReaderObservableResource<R, E, A>) => ReaderObservableResource<R, G, B>;
export declare const mapLeft: <E, G>(f: (e: E) => G) => <R, A>(fa: ReaderObservableResource<R, E, A>) => ReaderObservableResource<R, G, A>;
export declare const ap: <R, E, A>(fa: ReaderObservableResource<R, E, A>) => <B>(fab: ReaderObservableResource<R, E, (a: A) => B>) => ReaderObservableResource<R, E, B>;
export declare const chainW: <A, R2, E2, B>(f: (a: A) => ReaderObservableResource<R2, E2, B>) => <R1, E1>(ma: ReaderObservableResource<R1, E1, A>) => ReaderObservableResource<R1 & R2, E2 | E1, B>;
export declare const chain: <R, E, A, B>(f: (a: A) => ReaderObservableResource<R, E, B>) => (ma: ReaderObservableResource<R, E, A>) => ReaderObservableResource<R, E, B>;
export declare const flatten: <R, E, A>(mma: ReaderObservableResource<R, E, ReaderObservableResource<R, E, A>>) => ReaderObservableResource<R, E, A>;
export declare const local: <R2, R1>(f: (d: R2) => R1) => <E, A>(ma: ReaderObservableResource<R1, E, A>) => ReaderObservableResource<R2, E, A>;
export declare function swap<R, E, A>(ma: ReaderObservableResource<R, E, A>): ReaderObservableResource<R, A, E>;
export declare const chainFirst: <R, E, A, B>(f: (a: A) => ReaderObservableResource<R, E, B>) => (ma: ReaderObservableResource<R, E, A>) => ReaderObservableResource<R, E, A>;
export declare const chainFirstW: <R2, E2, A, B>(f: (a: A) => ReaderObservableResource<R2, E2, B>) => <R1, E1>(ma: ReaderObservableResource<R1, E1, A>) => ReaderObservableResource<R1 & R2, E1 | E2, A>;
export declare function orElseW<R, R1, E, M, A, B>(onLeft: (e: E) => ReaderObservableResource<R1, M, B>): (ma: ReaderObservableResource<R, E, A>) => ReaderObservableResource<R & R1, M, A | B>;
export declare const orElse: <R, E, A, M>(onLeft: (e: E) => ReaderObservableResource<R, M, A>) => (ma: ReaderObservableResource<R, E, A>) => ReaderObservableResource<R, M, A>;
export declare const filterOrElseW: {
<A, B extends A, E2>(refinement: Refinement<A, B>, onFalse: (a: A) => E2): <R, E1>(ma: ReaderObservableResource<R, E1, A>) => ReaderObservableResource<R, E1 | E2, B>;
<A, E2>(predicate: Predicate<A>, onFalse: (a: A) => E2): <R, E1>(ma: ReaderObservableResource<R, E1, A>) => ReaderObservableResource<R, E1 | E2, A>;
};
export declare const filterOrElse: {
<E, A, B extends A>(refinement: Refinement<A, B>, onFalse: (a: A) => E): <R>(ma: ReaderObservableResource<R, E, A>) => ReaderObservableResource<R, E, B>;
<E, A>(predicate: Predicate<A>, onFalse: (a: A) => E): <R>(ma: ReaderObservableResource<R, E, A>) => ReaderObservableResource<R, E, A>;
};
export declare const Do: ReaderObservableResource<unknown, never, Record<string, unknown>>;
export declare const bindTo: <K extends string, R, E, A>(name: K) => (fa: ReaderObservableResource<R, E, A>) => ReaderObservableResource<R, E, { [P in K]: A; }>;
export declare const bind: <K extends string, R, E, A, B>(name: Exclude<K, keyof A>, f: (a: A) => ReaderObservableResource<R, E, B>) => (fa: ReaderObservableResource<R, E, A>) => ReaderObservableResource<R, E, { [P in K | keyof A]: P extends keyof A ? A[P] : B; }>;
export declare const bindW: <K extends string, R2, E2, A, B>(name: Exclude<K, keyof A>, f: (a: A) => ReaderObservableResource<R2, E2, B>) => <R1, E1>(fa: ReaderObservableResource<R1, E1, A>) => ReaderObservableResource<R1 & R2, E1 | E2, {
[P in keyof A | K]: P extends keyof A ? A[P] : B;
}>;