import {Action, Middleware} from "redux"; import {Effect, Pattern} from "./effects"; import {Task, Buffer, Channel, Predicate} from "./types"; export {Effect, Pattern, Task, Buffer, Channel, Predicate}; export type SagaIterator = IterableIterator; type Saga0 = () => SagaIterator; type Saga1 = (arg1: T1) => SagaIterator; type Saga2 = (arg1: T1, arg2: T2) => SagaIterator; type Saga3 = (arg1: T1, arg2: T2, arg3: T3) => SagaIterator; type Saga4 = (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => SagaIterator; type SagaRest = (...args: any[]) => SagaIterator; 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(action: A): void; } export interface SagaMiddleware extends Middleware { run(saga: Saga0): Task; run(saga: Saga1, arg1: T1): Task; run(saga: Saga2, arg1: T1, arg2: T2): Task; run(saga: Saga3, arg1: T1, arg2: T2, arg3: T3): Task; run(saga: Saga4, arg1: T1, arg2: T2, arg3: T3, arg4: T4): Task; run(saga: SagaRest, ...args: any[]): Task; } export default function sagaMiddlewareFactory(options?: { sagaMonitor?: Monitor; emitter: (emit: Emit) => Emit; }): SagaMiddleware; type Unsubscribe = () => void; type Subscribe = (cb: (input: T) => void) => Unsubscribe; export type Emit = (input: T) => void; export interface Emitter { emit(message: T): void; subscribe: Subscribe; } export function runSaga(iterator: SagaIterator, io: { subscribe: Subscribe; dispatch(input: DA): any; getState(): S; }, monitor?: Monitor): Task; export const CANCEL: string; export const END: {type: string}; export function channel(buffer?: Buffer): Channel; export function eventChannel(subscribe: Subscribe, buffer?: Buffer, matcher?: Predicate): Channel; export const buffers: { none(): Buffer; fixed(limit?: number): Buffer; dropping(limit?: number): Buffer; sliding(limit?: number): Buffer; expanding(limit?: number): Buffer; }; type HelperFunc0 = (action?: A) => any; type HelperFunc1 = (arg1: T1, action?: A) => any; type HelperFunc2 = (arg1: T1, arg2: T2, action?: A) => any; type HelperFunc3 = (arg1: T1, arg2: T2, arg3: T3, action?: A) => any; type HelperFunc4 = (arg1: T1, arg2: T2, arg3: T3, arg4: T4, action?: A) => any; type HelperFuncRest = (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, ...rest: any[]) => any; interface TakeHelper { (pattern: Pattern, worker: HelperFunc0): SagaIterator; (pattern: Pattern, worker: HelperFunc1, arg1: T1): SagaIterator; (pattern: Pattern, worker: HelperFunc2, arg1: T1, arg2: T2): SagaIterator; (pattern: Pattern, worker: HelperFunc3, arg1: T1, arg2: T2, arg3: T3): SagaIterator; (pattern: Pattern, worker: HelperFunc4, arg1: T1, arg2: T2, arg3: T3, arg4: T4): SagaIterator; (pattern: Pattern, worker: HelperFuncRest, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, ...rest: any[]): SagaIterator; } interface ThrottleHelper { (ms: number, pattern: Pattern, worker: HelperFunc0): SagaIterator; (ms: number, pattern: Pattern, worker: HelperFunc1, arg1: T1): SagaIterator; (ms: number, pattern: Pattern, worker: HelperFunc2, arg1: T1, arg2: T2): SagaIterator; (ms: number, pattern: Pattern, worker: HelperFunc3, arg1: T1, arg2: T2, arg3: T3): SagaIterator; (ms: number, pattern: Pattern, worker: HelperFunc4, arg1: T1, arg2: T2, arg3: T3, arg4: T4): SagaIterator; (ms: number, pattern: Pattern, worker: HelperFuncRest, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, ...rest: any[]): SagaIterator; } export const takeEvery: TakeHelper; export const takeLatest: TakeHelper; export const throttle: ThrottleHelper; export function delay(ms: number): Promise; export function delay(ms: number, val: T): Promise; import * as effects from './effects'; import * as utils from './utils'; export {effects, utils};