ducks
Version:
🦆🦆🦆 Ducks is a Reducer Bundles Manager that Implementing the Redux Ducks Modular Proposal with Great Convenience.
100 lines • 3.16 kB
TypeScript
/**
* Ducks - https://github.com/huan/ducks
*
* @copyright 2020 Huan LI (李卓桓) <https://github.com/huan>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
import type { ActionCreator, Dispatch, Middleware, Reducer } from 'redux';
import type { Epic } from 'redux-observable';
import type { Saga } from 'redux-saga';
import type { Ducks } from './ducks/mod.js';
/**
* Huan(202005): typesafe style Async Action Creator
*/
interface AsyncActionCreator<A> {
request: (...args: any[]) => A;
success: (...args: any[]) => A;
failure: (...args: any[]) => A;
cancel?: (...args: any[]) => A;
}
interface AsyncActionCreatorsMapObject<A = any> {
[key: string]: ActionCreator<A> | AsyncActionCreator<A>;
}
interface TypesMapObject {
[type: string]: string;
}
interface OperationsMapObject {
[operation: string]: (dispatch: Dispatch) => (...args: any[]) => any;
}
interface SelectorsMapObject<S extends {} = any> {
[selector: string]: (state: S) => (...args: any[]) => any;
}
interface MiddlewaresMapObject {
[middleware: string]: Middleware;
}
interface EpicsMapObject {
[epic: string]: Epic;
}
interface SagasMapObject {
[saga: string]: Saga;
}
/**
*
* Ducksify API Interface for Ducks Modular Proposal
* (a.k.a. Redux Reducer Bundles)
*
*/
interface Duck {
/**
*
* Ducks Proposal:
* Ducks: Redux Reducer Bundles
* - A proposal for bundling reducers, action types and actions when using Redux
*
* https://github.com/erikras/ducks-modular-redux
*
*/
actions: AsyncActionCreatorsMapObject;
operations?: OperationsMapObject;
selectors?: SelectorsMapObject;
types?: TypesMapObject;
default: Reducer;
/**
*
* Ducksify Extension: Currying & API Interface
* https://github.com/huan/ducks#3-ducksify-extension-currying--ducksify-interface
*
*/
middlewares?: MiddlewaresMapObject;
epics?: EpicsMapObject;
sagas?: SagasMapObject;
setDucks?: (ducks: Ducks<any>) => void;
}
interface DucksMapObject {
[namespace: string]: Duck;
}
/**
* Allow a module to implement an interface #420
* https://github.com/microsoft/TypeScript/issues/420
*/
/**
* CQRS - Command Query Responsibility Segregation
* https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs
*
* 1. `operations` for Command
* 2. `selectors` for Query
*/
export type { AsyncActionCreator, AsyncActionCreatorsMapObject, TypesMapObject, OperationsMapObject, SelectorsMapObject, MiddlewaresMapObject, EpicsMapObject, SagasMapObject, Duck, DucksMapObject, };
//# sourceMappingURL=duck.d.ts.map