import {Action} from "redux"; import {END, Channel, Task, Buffer, Predicate} from "./index"; type ActionType = string | number | symbol; type StringableActionCreator = { (...args: any[]): A; toString(): string; }; type SubPattern = ActionType | Predicate | StringableActionCreator; export type Pattern = SubPattern | SubPattern[]; export interface TakeEffectDescriptor { pattern: Pattern; maybe?: boolean; } export interface ChannelTakeEffectDescriptor { channel: Channel; maybe?: boolean; } export interface TakeEffect { TAKE: TakeEffectDescriptor; } export interface ChannelTakeEffect { TAKE: ChannelTakeEffectDescriptor; } export const take: { (pattern?: Pattern): TakeEffect; (channel: Channel): ChannelTakeEffect; maybe(pattern?: Pattern): TakeEffect; maybe(channel: Channel): ChannelTakeEffect; }; /** * @deprecated */ export const takem: typeof take.maybe; export interface PutEffectDescriptor { action: A; channel: null; resolve?: boolean; } export interface ChannelPutEffectDescriptor { action: T; channel: Channel; resolve?: boolean; } export interface PutEffect { PUT: PutEffectDescriptor; } export interface ChannelPutEffect { PUT: ChannelPutEffectDescriptor; } export const put: { (action: A): PutEffect; (channel: Channel, action: T | END): ChannelPutEffect; resolve(action: A): PutEffect; resolve(channel: Channel, action: T | END): ChannelPutEffect; /** * @deprecated */ sync: typeof put.resolve; }; export type GenericAllEffectDescriptor = T[] | {[key: string]: T}; export interface GenericAllEffect { ALL: GenericAllEffectDescriptor; } export type AllEffectDescriptor = GenericAllEffectDescriptor; export interface AllEffect { ALL: AllEffectDescriptor; } export function all(effects: Effect[]): AllEffect; export function all(effects: {[key: string]: Effect}): AllEffect; export function all(effects: T[]): GenericAllEffect; export function all(effects: {[key: string]: T}): GenericAllEffect; export type GenericRaceEffectDescriptor = {[key: string]: T}; export interface GenericRaceEffect { RACE: GenericRaceEffectDescriptor; } export type RaceEffectDescriptor = GenericRaceEffectDescriptor; export interface RaceEffect { RACE: RaceEffectDescriptor; } export function race(effects: {[key: string]: Effect}): RaceEffect; export function race(effects: {[key: string]: T}): GenericRaceEffect; export interface CallEffectDescriptor { context: any; fn: Function; args: any[]; } export interface CallEffect { CALL: CallEffectDescriptor; } type Func0 = () => any; type Func1 = (arg1: T1) => any; type Func2 = (arg1: T1, arg2: T2) => any; type Func3 = (arg1: T1, arg2: T2, arg3: T3) => any; type Func4 = (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => any; type Func5 = (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => any; type Func6Rest = (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, ...rest: any[]) => any; export type CallEffectFn = F | [any, F] | {context: any, fn: F}; export type CallEffectNamedFn = [C, Name] | {context: C, fn: Name}; interface CallEffectFactory { (fn: CallEffectFn): R; (fn: CallEffectFn>, arg1: T1): R; (fn: CallEffectFn>, arg1: T1, arg2: T2): R; (fn: CallEffectFn>, arg1: T1, arg2: T2, arg3: T3): R; (fn: CallEffectFn>, arg1: T1, arg2: T2, arg3: T3, arg4: T4): R; (fn: CallEffectFn>, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5): R; (fn: CallEffectFn>, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, ...rest: any[]): R; ( fn: CallEffectNamedFn): R; }, N extends string, T1>( fn: CallEffectNamedFn, arg1: T1): R; }, N extends string, T1, T2>( fn: CallEffectNamedFn, arg1: T1, arg2: T2): R; }, N extends string, T1, T2, T3>( fn: CallEffectNamedFn, arg1: T1, arg2: T2, arg3: T3): R; }, N extends string, T1, T2, T3, T4>( fn: CallEffectNamedFn, arg1: T1, arg2: T2, arg3: T3, arg4: T4): R; }, N extends string, T1, T2, T3, T4, T5>( fn: CallEffectNamedFn, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5): R; }, N extends string, T1, T2, T3, T4, T5, T6>( fn: CallEffectNamedFn, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, ...rest: any[]): R; } export const call: CallEffectFactory; export function apply(context: any, fn: Func0): CallEffect; export function apply(context: any, fn: Func1, args: [T1]): CallEffect; export function apply(context: any, fn: Func2, args: [T1, T2]): CallEffect; export function apply(context: any, fn: Func3, args: [T1, T2, T3]): CallEffect; export function apply(context: any, fn: Func4, args: [T1, T2, T3, T4]): CallEffect; export function apply( context: any, fn: Func5, args: [T1, T2, T3, T4, T5], ): CallEffect; export function apply( context: any, fn: Func6Rest, args: AA, ): CallEffect; export function apply( context: C, fn: N): CallEffect; export function apply}, N extends string, T1>( context: C, fn: N, args: [T1]): CallEffect; export function apply}, N extends string, T1, T2>( context: C, fn: N, args: [T1, T2]): CallEffect; export function apply}, N extends string, T1, T2, T3>( context: C, fn: N, args: [T1, T2, T3]): CallEffect; export function apply}, N extends string, T1, T2, T3, T4>( context: C, fn: N, args: [T1, T2, T3, T4]): CallEffect; export function apply}, N extends string, T1, T2, T3, T4, T5>( context: C, fn: N, args: [T1, T2, T3, T4, T5]): CallEffect; export function apply}, N extends string, T1, T2, T3, T4, T5, T6, AA extends any[] & { 0: T1; 1: T2; 2: T3; 3: T4; 4: T5; 5: T6; }>( context: C, fn: N, args: AA): CallEffect; export interface CpsEffect { CPS: CallEffectDescriptor; } type CpsCallback = { (error: any, result: any): void; cancel?(): void; }; export function cps(fn: CallEffectFn>): CpsEffect; export function cps(fn: CallEffectFn>, arg1: T1): CpsEffect; export function cps(fn: CallEffectFn>, arg1: T1, arg2: T2): CpsEffect; export function cps( fn: CallEffectFn>, arg1: T1, arg2: T2, arg3: T3): CpsEffect; export function cps( fn: CallEffectFn>, arg1: T1, arg2: T2, arg3: T3, arg4: T4): CpsEffect; export function cps( fn: CallEffectFn>, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, ...rest: any[]): CpsEffect; export function cps}, N extends string>( fn: CallEffectNamedFn): CpsEffect; export function cps}, N extends string, T1>( fn: CallEffectNamedFn, arg1: T1): CpsEffect; export function cps}, N extends string, T1, T2>( fn: CallEffectNamedFn, arg1: T1, arg2: T2): CpsEffect; export function cps}, N extends string, T1, T2, T3>( fn: CallEffectNamedFn, arg1: T1, arg2: T2, arg3: T3): CpsEffect; export function cps}, N extends string, T1, T2, T3, T4>( fn: CallEffectNamedFn, arg1: T1, arg2: T2, arg3: T3, arg4: T4): CpsEffect; export function cps}, N extends string, T1, T2, T3, T4, T5>( fn: CallEffectNamedFn, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, ...rest: any[]): CpsEffect; export interface ForkEffectDescriptor extends CallEffectDescriptor { detached?: boolean; } export interface ForkEffect { FORK: ForkEffectDescriptor; } export const fork: CallEffectFactory; export const spawn: CallEffectFactory; export type JoinEffectDescriptor = Task; export interface JoinEffect { JOIN: JoinEffectDescriptor; } export function join(task: Task): JoinEffect; export function join(task1: Task, task2: Task, ...tasks: Task[]): JoinEffect[]; type SELF_CANCELLATION = '@@redux-saga/SELF_CANCELLATION'; export type CancelEffectDescriptor = Task | SELF_CANCELLATION; export interface CancelEffect { CANCEL: CancelEffectDescriptor; } export function cancel(): CancelEffect; export function cancel(task: Task): CancelEffect; export function cancel(...tasks: Task[]): CancelEffect[]; export interface SelectEffectDescriptor { selector(state: any, ...args: any[]): any; args: any[]; } export interface SelectEffect { SELECT: SelectEffectDescriptor; } export function select(): SelectEffect; export function select(selector: Func1): SelectEffect; export function select(selector: Func2, arg1: T1): SelectEffect; export function select(selector: Func3, arg1: T1, arg2: T2): SelectEffect; export function select( selector: Func4, arg1: T1, arg2: T2, arg3: T3): SelectEffect; export function select( selector: Func5, arg1: T1, arg2: T2, arg3: T3, arg4: T4): SelectEffect; export function select( selector: Func6Rest, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, ...rest: any[]): SelectEffect; export interface ActionChannelEffectDescriptor { pattern: Pattern; buffer?: Buffer; } export interface ActionChannelEffect { ACTION_CHANNEL: ActionChannelEffectDescriptor; } export function actionChannel( pattern: Pattern, buffer?: Buffer, ): ActionChannelEffect; export type CancelledEffectDescriptor = {}; export interface CancelledEffect { CANCELLED: CancelledEffectDescriptor; } export function cancelled(): CancelledEffect; export type FlushEffectDescriptor = Channel; export interface FlushEffect { FLUSH: FlushEffectDescriptor; } export function flush(channel: Channel): FlushEffect; export type GetContextEffectDescriptor = string; export interface GetContextEffect { GET_CONTEXT: GetContextEffectDescriptor; } export function getContext(prop: string): GetContextEffect; export type SetContextEffectDescriptor = C; export interface SetContextEffect { SET_CONTEXT: SetContextEffectDescriptor; } export function setContext(props: C): SetContextEffect; export interface RootEffect { root: true; saga(...args: any[]): Iterator; args: any[]; } export type Effect = RootEffect | TakeEffect | ChannelTakeEffect | PutEffect | ChannelPutEffect | AllEffect | RaceEffect | CallEffect | CpsEffect | ForkEffect | JoinEffect | CancelEffect | SelectEffect | ActionChannelEffect | CancelledEffect | FlushEffect | GetContextEffect | SetContextEffect; 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 HelperFunc5 = (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, action: A) => any; type HelperFunc6Rest = ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: any, ...rest: any[]) => any; export function takeEvery( pattern: Pattern, worker: HelperFunc0): ForkEffect; export function takeEvery( pattern: Pattern, worker: HelperFunc1, arg1: T1): ForkEffect; export function takeEvery( pattern: Pattern, worker: HelperFunc2, arg1: T1, arg2: T2): ForkEffect; export function takeEvery( pattern: Pattern, worker: HelperFunc3, arg1: T1, arg2: T2, arg3: T3): ForkEffect; export function takeEvery( pattern: Pattern, worker: HelperFunc4, arg1: T1, arg2: T2, arg3: T3, arg4: T4): ForkEffect; export function takeEvery( pattern: Pattern, worker: HelperFunc5, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5): ForkEffect; export function takeEvery( pattern: Pattern, worker: HelperFunc6Rest, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, ...rest: any[]): ForkEffect; export function takeEvery( channel: Channel, worker: HelperFunc0): ForkEffect; export function takeEvery( channel: Channel, worker: HelperFunc1, arg1: T1): ForkEffect; export function takeEvery( channel: Channel, worker: HelperFunc2, arg1: T1, arg2: T2): ForkEffect; export function takeEvery( channel: Channel, worker: HelperFunc3, arg1: T1, arg2: T2, arg3: T3): ForkEffect; export function takeEvery( channel: Channel, worker: HelperFunc4, arg1: T1, arg2: T2, arg3: T3, arg4: T4): ForkEffect; export function takeEvery( channel: Channel, worker: HelperFunc5, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5): ForkEffect; export function takeEvery( channel: Channel, worker: HelperFunc6Rest, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, ...rest: any[]): ForkEffect; export const takeLatest: typeof takeEvery; export function throttle( ms: number, pattern: Pattern, worker: HelperFunc0): ForkEffect; export function throttle( ms: number, pattern: Pattern, worker: HelperFunc1, arg1: T1): ForkEffect; export function throttle( ms: number, pattern: Pattern, worker: HelperFunc2, arg1: T1, arg2: T2): ForkEffect; export function throttle( ms: number, pattern: Pattern, worker: HelperFunc3, arg1: T1, arg2: T2, arg3: T3): ForkEffect; export function throttle( ms: number, pattern: Pattern, worker: HelperFunc4, arg1: T1, arg2: T2, arg3: T3, arg4: T4): ForkEffect; export function throttle( ms: number, pattern: Pattern, worker: HelperFunc5, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5): ForkEffect; export function throttle( ms: number, pattern: Pattern, worker: HelperFunc6Rest, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, ...rest: any[]): ForkEffect;