ngrx-reducer-effects
Version:
Return side-effects as data from your NgRx reducers
38 lines (37 loc) • 1.75 kB
TypeScript
import { unsubscribeBrand } from './functions';
import { Observable, Subscription } from 'rxjs';
import { Action } from '@ngrx/store';
import { InjectionToken, Type } from '@angular/core';
import { EffectConfig } from './effect-config';
export declare type Inject = <T>(token: Type<T> | InjectionToken<T>) => T;
export declare type Operand<T> = Observable<T> | Promise<T> | UnsubscribeOperation;
export declare type SubscriptionToken = number & {
__brand: 'SubscriptionToken';
};
export declare type Cancellable<T> = Subscription | AbortController;
export declare type CancellationToken = number & {
__brand: 'CancellationToken';
};
export declare type UnsubscribeOperation = {
__brand: typeof unsubscribeBrand;
subscriptionToken: SubscriptionToken;
};
export declare type ObservableEffect<T> = {
operation: (inject: Inject) => Observable<T>;
next?: (value: T) => Action;
error?: (err: any) => Action;
complete?: () => Action;
subscribe?: (token: SubscriptionToken) => Action;
};
export declare type PromiseEffect<T> = {
operation: (inject: Inject) => Promise<T>;
resolve?: (value: T) => Action;
reject?: (err: any) => Action;
};
export declare type UnsubscriptionEffect<T> = {
operation: (inject: Inject) => UnsubscribeOperation;
unsubscribe?: (token: CancellationToken) => Action;
};
export declare function isObservableEffect<E>(effect: EffectConfig<E>, operand: Operand<E>): effect is ObservableEffect<E>;
export declare function isPromiseEffect<E>(effect: EffectConfig<E>, operand: Operand<E>): effect is PromiseEffect<E>;
export declare function isUnsubscriptionEffect<E>(effect: EffectConfig<E>, operand: Operand<E>): effect is UnsubscriptionEffect<E>;