UNPKG

redux-saga

Version:

Saga middleware for Redux to handle Side Effects

297 lines (257 loc) 9.72 kB
import {Action, Middleware} from "redux"; import {Effect, ForkEffect, Pattern} from "./effects"; export {Effect, Pattern}; /** * Annotate return type of generators with `SagaIterator` to get strict * type-checking of yielded effects. */ export type SagaIterator = IterableIterator<Effect|Effect[]>; type Saga0 = () => Iterator<any>; type Saga1<T1> = (arg1: T1) => Iterator<any>; type Saga2<T1, T2> = (arg1: T1, arg2: T2) => Iterator<any>; type Saga3<T1, T2, T3> = (arg1: T1, arg2: T2, arg3: T3) => Iterator<any>; type Saga4<T1, T2, T3, T4> = (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Iterator<any>; type Saga5<T1, T2, T3, T4, T5> = (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Iterator<any>; type Saga6Rest<T1, T2, T3, T4, T5, T6> = (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, ...rest: any[]) => Iterator<any>; export interface Monitor { effectTriggered?(desc: { effectId: number; parentEffectId: number; label?: string; root?: boolean; effect: Effect; }): void; effectResolved?(effectId: number, res: any): void; effectRejected?(effectId: number, err: any): void; effectCancelled?(effectId: number): void; actionDispatched?<A extends Action>(action: A): void; } export interface SagaMiddleware<C> extends Middleware { run(saga: Saga0): Task; run<T1>(saga: Saga1<T1>, arg1: T1): Task; run<T1, T2>(saga: Saga2<T1, T2>, arg1: T1, arg2: T2): Task; run<T1, T2, T3>(saga: Saga3<T1, T2, T3>, arg1: T1, arg2: T2, arg3: T3): Task; run<T1, T2, T3, T4>(saga: Saga4<T1, T2, T3, T4>, arg1: T1, arg2: T2, arg3: T3, arg4: T4): Task; run<T1, T2, T3, T4, T5>(saga: Saga5<T1, T2, T3, T4, T5>, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5): Task; run<T1, T2, T3, T4, T5, T6>(saga: Saga6Rest<T1, T2, T3, T4, T5, T6>, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, ...rest: any[]): Task; setContext(props: Partial<C>): void; } export type Logger = (level: string, ...args: any[]) => void; export type Emit<T> = (input: T) => void; export interface SagaMiddlewareOptions<C extends object> { context?: C; sagaMonitor?: Monitor; logger?: Logger; onError?(error: Error): void; emitter?(emit: Emit<Action>): Emit<any>; } export default function sagaMiddlewareFactory<C extends object>( options?: SagaMiddlewareOptions<C>, ): SagaMiddleware<C>; type Unsubscribe = () => void; type Subscribe<T> = (cb: (input: T | END) => void) => Unsubscribe; export interface RunSagaOptions<A, S> { context?: object; subscribe?: Subscribe<A>; dispatch?(input: A): any; getState?(): S; sagaMonitor?: Monitor; logger?: Logger; onError?(error: Error): void; } export function runSaga<A, S>( storeInterface: RunSagaOptions<A, S>, saga: Saga0): Task; export function runSaga<A, S, T1>( storeInterface: RunSagaOptions<A, S>, saga: Saga1<T1>, arg1: T1): Task; export function runSaga<A, S, T1, T2>( storeInterface: RunSagaOptions<A, S>, saga: Saga2<T1, T2>, arg1: T1, arg2: T2): Task; export function runSaga<A, S, T1, T2, T3>( storeInterface: RunSagaOptions<A, S>, saga: Saga3<T1, T2, T3>, arg1: T1, arg2: T2, arg3: T3): Task; export function runSaga<A, S, T1, T2, T3, T4>( storeInterface: RunSagaOptions<A, S>, saga: Saga4<T1, T2, T3, T4>, arg1: T1, arg2: T2, arg3: T3, arg4: T4): Task; export function runSaga<A, S, T1, T2, T3, T4, T5>( storeInterface: RunSagaOptions<A, S>, saga: Saga5<T1, T2, T3, T4, T5>, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5): Task; export function runSaga<A, S, T1, T2, T3, T4, T5, T6>( storeInterface: RunSagaOptions<A, S>, saga: Saga6Rest<T1, T2, T3, T4, T5, T6>, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, ...rest: any[]): Task; /** * @deprecated */ export function runSaga<A, S>(iterator: Iterator<any>, options: RunSagaOptions<A, S>): Task; export const CANCEL: string; export type END = {type: '@@redux-saga/CHANNEL_END'}; export const END: END; export type Predicate<T> = (arg: T) => boolean; export interface Task { isRunning(): boolean; isCancelled(): boolean; result(): any | undefined; result<T>(): T | undefined; error(): any | undefined; done: Promise<any>; cancel(): void; setContext<C extends object>(props: Partial<C>): void; } export interface Buffer<T> { isEmpty(): boolean; put(message: T): void; take(): T | undefined; flush(): void; } export interface Channel<T> { take(cb: (message: T | END) => void): void; put(message: T | END): void; flush(): void; close(): void; } export function channel<T>(buffer?: Buffer<T>): Channel<T>; export function eventChannel<T>(subscribe: Subscribe<T>, buffer?: Buffer<T>, matcher?: Predicate<T>): Channel<T>; export const buffers: { none<T>(): Buffer<T>; fixed<T>(limit?: number): Buffer<T>; dropping<T>(limit?: number): Buffer<T>; sliding<T>(limit?: number): Buffer<T>; expanding<T>(limit?: number): Buffer<T>; }; export function delay(ms: number): Promise<true>; export function delay<T>(ms: number, val: T): Promise<T>; export function detach(forkEffect: ForkEffect): ForkEffect; import * as effects from './effects'; import * as utils from './utils'; export {effects, utils}; type HelperFunc0<A> = (action: A) => any; type HelperFunc1<A, T1> = (arg1: T1, action: A) => any; type HelperFunc2<A, T1, T2> = (arg1: T1, arg2: T2, action: A) => any; type HelperFunc3<A, T1, T2, T3> = (arg1: T1, arg2: T2, arg3: T3, action: A) => any; type HelperFunc4<A, T1, T2, T3, T4> = (arg1: T1, arg2: T2, arg3: T3, arg4: T4, action: A) => any; type HelperFunc5<A, T1, T2, T3, T4, T5> = (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, action: A) => any; type HelperFunc6Rest<A, T1, T2, T3, T4, T5, T6> = ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: any, ...rest: any[]) => any; /** * @deprecated */ export function takeEvery<A extends Action>( pattern: Pattern, worker: HelperFunc0<A>): SagaIterator; export function takeEvery<A, T1>( pattern: Pattern, worker: HelperFunc1<A, T1>, arg1: T1): SagaIterator; export function takeEvery<A, T1, T2>( pattern: Pattern, worker: HelperFunc2<A, T1, T2>, arg1: T1, arg2: T2): SagaIterator; export function takeEvery<A, T1, T2, T3>( pattern: Pattern, worker: HelperFunc3<A, T1, T2, T3>, arg1: T1, arg2: T2, arg3: T3): SagaIterator; export function takeEvery<A, T1, T2, T3, T4>( pattern: Pattern, worker: HelperFunc4<A, T1, T2, T3, T4>, arg1: T1, arg2: T2, arg3: T3, arg4: T4): SagaIterator; export function takeEvery<A, T1, T2, T3, T4, T5>( pattern: Pattern, worker: HelperFunc5<A, T1, T2, T3, T4, T5>, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5): SagaIterator; export function takeEvery<A, T1, T2, T3, T4, T5, T6>( pattern: Pattern, worker: HelperFunc6Rest<A, T1, T2, T3, T4, T5, T6>, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, ...rest: any[]): SagaIterator; export function takeEvery<T>( channel: Channel<T>, worker: HelperFunc0<T>): SagaIterator; export function takeEvery<T, T1>( channel: Channel<T>, worker: HelperFunc1<T, T1>, arg1: T1): SagaIterator; export function takeEvery<T, T1, T2>( channel: Channel<T>, worker: HelperFunc2<T, T1, T2>, arg1: T1, arg2: T2): SagaIterator; export function takeEvery<T, T1, T2, T3>( channel: Channel<T>, worker: HelperFunc3<T, T1, T2, T3>, arg1: T1, arg2: T2, arg3: T3): SagaIterator; export function takeEvery<T, T1, T2, T3, T4>( channel: Channel<T>, worker: HelperFunc4<T, T1, T2, T3, T4>, arg1: T1, arg2: T2, arg3: T3, arg4: T4): SagaIterator; export function takeEvery<T, T1, T2, T3, T4, T5>( channel: Channel<T>, worker: HelperFunc5<T, T1, T2, T3, T4, T5>, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5): SagaIterator; export function takeEvery<T, T1, T2, T3, T4, T5, T6>( channel: Channel<T>, worker: HelperFunc6Rest<T, T1, T2, T3, T4, T5, T6>, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, ...rest: any[]): SagaIterator; /** * @deprecated */ export const takeLatest: typeof takeEvery; /** * @deprecated */ export function throttle<A extends Action>( ms: number, pattern: Pattern, worker: HelperFunc0<A>): SagaIterator; export function throttle<A extends Action, T1>( ms: number, pattern: Pattern, worker: HelperFunc1<A, T1>, arg1: T1): SagaIterator; export function throttle<A extends Action, T1, T2>( ms: number, pattern: Pattern, worker: HelperFunc2<A, T1, T2>, arg1: T1, arg2: T2): SagaIterator; export function throttle<A extends Action, T1, T2, T3>( ms: number, pattern: Pattern, worker: HelperFunc3<A, T1, T2, T3>, arg1: T1, arg2: T2, arg3: T3): SagaIterator; export function throttle<A extends Action, T1, T2, T3, T4>( ms: number, pattern: Pattern, worker: HelperFunc4<A, T1, T2, T3, T4>, arg1: T1, arg2: T2, arg3: T3, arg4: T4): SagaIterator; export function throttle<A extends Action, T1, T2, T3, T4, T5>( ms: number, pattern: Pattern, worker: HelperFunc5<A, T1, T2, T3, T4, T5>, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5): SagaIterator; export function throttle<A extends Action, T1, T2, T3, T4, T5, T6>( ms: number, pattern: Pattern, worker: HelperFunc6Rest<A, T1, T2, T3, T4, T5, T6>, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, ...rest: any[]): SagaIterator;