UNPKG

redux-toolkit-saga

Version:
56 lines 2.82 kB
import { Action, AnyAction } from 'redux'; import { PayloadAction, PayloadActionCreator, ActionCreatorWithoutPayload, ActionCreatorWithPreparedPayload } from '@reduxjs/toolkit'; import { CallEffect, AllEffect } from 'redux-saga/effects'; import { SagaIterator } from 'redux-saga'; export declare enum SagaType { Watch = 0, Normal = 1, TakeLatest = 2, TakeEvery = 3 } export declare type CaseSagas<A extends Action = AnyAction> = (action: A) => Generator<unknown, unknown, SagaIterator>; declare type CustomCaseSaga = { fn: CaseSagas<PayloadAction<any>>; sagaType?: SagaType; }; export declare type SliceCaseSagas = { [K: string]: CaseSagas<PayloadAction<any>> | CustomCaseSaga; }; declare type ActionCreatorForCaseSagaWithPrepare<CR extends { prepare: any; }> = ActionCreatorWithPreparedPayload<CR['prepare'], string>; declare type ActionCreatorForCaseSagas<CR> = CR extends CustomCaseSaga ? CR['fn'] extends (action: infer Action) => any ? Action extends { payload: infer P; } ? PayloadActionCreator<P> : ActionCreatorWithoutPayload : ActionCreatorWithoutPayload : CR extends (action: infer Action) => any ? Action extends { payload: infer P; } ? PayloadActionCreator<P> : ActionCreatorWithoutPayload : ActionCreatorWithoutPayload; export declare type CaseSagaActions<CaseSagas extends SliceCaseSagas> = { [Type in keyof CaseSagas]: CaseSagas[Type] extends { prepare: any; } ? ActionCreatorForCaseSagaWithPrepare<CaseSagas[Type]> : ActionCreatorForCaseSagas<CaseSagas[Type]>; }; export declare type ValidateSliceCaseSagas<ACR extends SliceCaseSagas> = ACR & { [T in keyof ACR]: ACR[T] extends { saga(action?: infer A): any; } ? { prepare(...a: never[]): Omit<A, 'type'>; } : {}; }; export interface CreateOptionsSliceSaga<CR extends SliceCaseSagas = SliceCaseSagas, Name extends string = string> { name: Name; caseSagas: ValidateSliceCaseSagas<CR>; sagaType?: SagaType; } declare type SagaFunReturnType = Generator<AllEffect<CallEffect<any>>, void, unknown>; export interface Slice<CaseSagas extends SliceCaseSagas = SliceCaseSagas, Name extends string = string> { name: Name; saga: () => SagaFunReturnType; actions: CaseSagaActions<CaseSagas>; sagaType: SagaType; } export declare function createSaga(sagaType: string | number, type: string, sagaFunction: CaseSagas<PayloadAction<any>>): any; export declare function createSagas(sagas: (() => Generator<unknown, void, SagaIterator>)[]): any; export declare function getType(slice: string, actionKey: string): string; export declare function createSliceSaga<CaseSagas extends SliceCaseSagas, Name extends string = string>(options: CreateOptionsSliceSaga<CaseSagas, Name>): Slice<CaseSagas, Name>; export {}; //# sourceMappingURL=createSliceSaga.d.ts.map