diff --git a/redux-saga/redux-saga-tests.ts b/redux-saga/redux-saga-tests.ts index 933a397b1..34f91310b 100644 --- a/redux-saga/redux-saga-tests.ts +++ b/redux-saga/redux-saga-tests.ts @@ -2,17 +2,25 @@ import sagaMiddleware, { + storeIO, + runSaga, + Saga, + SagaCancellationException, + takeEvery, + takeLatest, + isCancelError +} from 'redux-saga' + +import { take, put, race, call, fork, + select, cancel, - storeIO, - runSaga, - Saga, - SagaCancellationException -} from 'redux-saga' +} from 'redux-saga/effects' + import {applyMiddleware, createStore} from 'redux'; declare const delay: (ms: number) => Promise; @@ -137,7 +145,7 @@ namespace TaskCancellation { yield call(delay, 5000) } } catch(error) { - if(error instanceof SagaCancellationException) + if(error instanceof SagaCancellationException && isCancelError(error)) yield put({type: 'REQUEST_FAILURE', message: 'Sync cancelled!'}) } } @@ -170,3 +178,36 @@ namespace DynamicallyStartingSagasWithRunSaga { storeIO(store) ) } + +namespace DynamicallyStartingSagasWithMiddleware { + function* startupSaga() { + } + + function* dynamicSaga() { + } + + sagaMiddleware(startupSaga).run(dynamicSaga) +} + +namespace TestHelpers { + function* watchAndLog(getState) { + yield* takeEvery('*', function* logger(action) { + console.log('action', action) + }) + } + + function* fetchUser(action) { + } + + function* watchLastFetchUser() { + yield* takeLatest('USER_REQUESTED', fetchUser) + } +} + +namespace AccessCurrentState { + export const getCart = state => state.cart; + + function* checkout() { + const cart = yield select(getCart) + } +} diff --git a/redux-saga/redux-saga.d.ts b/redux-saga/redux-saga.d.ts index 6573f1245..3df94243e 100644 --- a/redux-saga/redux-saga.d.ts +++ b/redux-saga/redux-saga.d.ts @@ -1,6 +1,6 @@ -// Type definitions for redux-saga 0.6.0 +// Type definitions for redux-saga 0.9.1 // Project: https://github.com/yelouafi/redux-saga -// Definitions by: Daniel Lytkin +// Definitions by: Daniel Lytkin , Dimitri Rosenberg // Definitions: https://github.com/borisyankov/DefinitelyTyped /// @@ -9,41 +9,17 @@ declare module 'redux-saga' { export class SagaCancellationException { } - export type Effect = {}; - export type Saga = (getState?: () => T) => Iterable; - - type Predicate = (action: any) => boolean; - - export function take(pattern?: string|string[]|Predicate): Effect; - - export function put(action: any): Effect; - - export function race(effects: {[key:string]: any}): Effect; - - export function call(fn: (arg1?: T1, arg2?: T2, arg3?: T3, ...rest: any[]) => any, - arg1?: T1, arg2?: T2, arg3?: T3, ...rest: any[]): Effect; - - - export interface Task { - name:string; - isRunning():boolean; - result():T; - error():any; - } - - export function fork(effect: Effect): Effect; - export function fork(fn: (arg1?: T1, arg2?: T2, arg3?: T3, ...rest: any[]) => - Promise|Iterable, - arg1?: T1, arg2?: T2, arg3?: T3, ...rest: any[]): Effect; - - export function join(task: Task): Effect; - - export function cancel(task: Task): Effect; - + export type Predicate = (action: any) => boolean; + export type Pattern = string | string[] | Predicate; import {Middleware} from 'redux'; - export default function (...sagas: Saga[]): Middleware; + + interface SagaMiddleware extends Middleware { + run(saga: Saga, ...args: any[]): void; + } + + export default function (...sagas: Saga[]): SagaMiddleware; export { CANCEL, @@ -57,8 +33,50 @@ declare module 'redux-saga' { export {runSaga, storeIO} from 'redux-saga/lib/runSaga' + export interface Task { + name:string; + isRunning():boolean; + result():T; + error():any; + cancel(): void; + } + + export function takeEvery(pattern: Pattern, saga: Saga, ...args: any[]): { [Symbol.iterator](): IterableIterator }; + + export function takeLatest(pattern: Pattern, saga: Saga, ...args: any[]): { [Symbol.iterator](): IterableIterator }; + + export function isCancelError(e: any): boolean; } +declare module 'redux-saga/effects' { + import {Task} from 'redux-saga'; + import {Predicate} from 'redux-saga'; + import {Pattern} from 'redux-saga'; + + export type Effect = {}; + + + export function take(pattern?: Pattern): Effect; + + export function put(action: any): Effect; + + export function race(effects: {[key:string]: any}): Effect; + + export function call(fn: (arg1?: T1, arg2?: T2, arg3?: T3, ...rest: any[]) => any, + arg1?: T1, arg2?: T2, arg3?: T3, ...rest: any[]): Effect; + + + export function fork(effect: Effect): Effect; + export function fork(fn: (arg1?: T1, arg2?: T2, arg3?: T3, ...rest: any[]) => + Promise|Iterable, + arg1?: T1, arg2?: T2, arg3?: T3, ...rest: any[]): Effect; + + export function join(task: Task): Effect; + + export function select(selector?: (state: any, ...args: any[]) => any, ...args: any[]): Effect; + + export function cancel(task: Task): Effect; +} declare module 'redux-saga/lib/proc' { import {Task} from 'redux-saga';