Skip to content

Commit

Permalink
Merge pull request #11 from sony/id/update_4.2.3
Browse files Browse the repository at this point in the history
Update MiddlewareBuilder
  • Loading branch information
ahirun0426 committed Nov 14, 2019
2 parents 0917659 + 35ae1da commit d5e429b
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 23 deletions.
12 changes: 6 additions & 6 deletions dist/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { Dispatch, MiddlewareAPI } from "redux";
import { Action, ActionCreator } from "typescript-fsa";
export interface MiddlewareBuilder<S, D extends Dispatch = Dispatch> {
case<P>(actionCreator: ActionCreator<P>, handler: Handler<S, P>): MiddlewareBuilder<S>;
cases<P1>(actionCreators: [ActionCreator<P1>], handler: Handler<S, P1>): MiddlewareBuilder<S>;
cases<P1, P2>(actionCreators: [ActionCreator<P1>, ActionCreator<P2>], handler: Handler<S, P1 | P2>): MiddlewareBuilder<S>;
cases<P1, P2, P3>(actionCreators: [ActionCreator<P1>, ActionCreator<P2>, ActionCreator<P3>], handler: Handler<S, P1 | P2 | P3>): MiddlewareBuilder<S>;
cases<P1, P2, P3, P4>(actionCreators: [ActionCreator<P1>, ActionCreator<P2>, ActionCreator<P3>, ActionCreator<P4>], handler: Handler<S, P1 | P2 | P3 | P4>): MiddlewareBuilder<S>;
cases<P>(actionCreators: Array<ActionCreator<P>>, handler: Handler<S, P>): MiddlewareBuilder<S>;
case<P>(actionCreator: ActionCreator<P>, handler: Handler<S, P, D>): MiddlewareBuilder<S, D>;
cases<P1>(actionCreators: [ActionCreator<P1>], handler: Handler<S, P1>): MiddlewareBuilder<S, D>;
cases<P1, P2>(actionCreators: [ActionCreator<P1>, ActionCreator<P2>], handler: Handler<S, P1 | P2>): MiddlewareBuilder<S, D>;
cases<P1, P2, P3>(actionCreators: [ActionCreator<P1>, ActionCreator<P2>, ActionCreator<P3>], handler: Handler<S, P1 | P2 | P3>): MiddlewareBuilder<S, D>;
cases<P1, P2, P3, P4>(actionCreators: [ActionCreator<P1>, ActionCreator<P2>, ActionCreator<P3>, ActionCreator<P4>], handler: Handler<S, P1 | P2 | P3 | P4>): MiddlewareBuilder<S, D>;
cases<P>(actionCreators: Array<ActionCreator<P>>, handler: Handler<S, P, D>): MiddlewareBuilder<S, D>;
<S>(api: MiddlewareAPI<D, S>): (next: Dispatch) => Dispatch;
}
export declare type Handler<S, P, D extends Dispatch = Dispatch> = (api: MiddlewareAPI<D, S>, next: D, action: Action<P>) => void;
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "typescript-fsa-redux-middleware",
"version": "4.2.2",
"version": "4.2.3",
"description": "typescript-fsa support for redux vanilla middleware",
"main": "dist/index.js",
"types": "dist/index.d.ts",
Expand Down
32 changes: 16 additions & 16 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,26 @@ import { Action, ActionCreator } from "typescript-fsa";
export interface MiddlewareBuilder<S, D extends Dispatch = Dispatch> {
case<P>(
actionCreator: ActionCreator<P>,
handler: Handler<S, P>,
): MiddlewareBuilder<S>;
handler: Handler<S, P, D>,
): MiddlewareBuilder<S, D>;

// cases variadic overloads
cases<P1>(
actionCreators: [ActionCreator<P1>],
handler: Handler<S, P1>,
): MiddlewareBuilder<S>;
): MiddlewareBuilder<S, D>;
cases<P1, P2>(
actionCreators: [ActionCreator<P1>, ActionCreator<P2>],
handler: Handler<S, P1 | P2>,
): MiddlewareBuilder<S>;
): MiddlewareBuilder<S, D>;
cases<P1, P2, P3>(
actionCreators: [
ActionCreator<P1>,
ActionCreator<P2>,
ActionCreator<P3>
],
handler: Handler<S, P1 | P2 | P3>,
): MiddlewareBuilder<S>;
): MiddlewareBuilder<S, D>;
cases<P1, P2, P3, P4>(
actionCreators: [
ActionCreator<P1>,
Expand All @@ -32,11 +32,11 @@ export interface MiddlewareBuilder<S, D extends Dispatch = Dispatch> {
ActionCreator<P4>
],
handler: Handler<S, P1 | P2 | P3 | P4>,
): MiddlewareBuilder<S>;
): MiddlewareBuilder<S, D>;
cases<P>(
actionCreators: Array<ActionCreator<P>>,
handler: Handler<S, P>,
): MiddlewareBuilder<S>;
handler: Handler<S, P, D>,
): MiddlewareBuilder<S, D>;

<S>(api: MiddlewareAPI<D, S>): (next: Dispatch) => Dispatch;
}
Expand All @@ -47,21 +47,21 @@ export type Handler<S, P, D extends Dispatch = Dispatch> = (
action: Action<P>,
) => void;

interface Case<S, P> {
interface Case<S, P, D extends Dispatch = Dispatch> {
actionCreator: ActionCreator<P>;
handler: Handler<S, P>;
handler: Handler<S, P, D>;
}

type CaseMap<S> = Map<string, Array<Case<S, any>>>;
type CaseMap<S, D extends Dispatch = Dispatch> = Map<string, Array<Case<S, any, D>>>;

export function middleware<S, D extends Dispatch = Dispatch>(): MiddlewareBuilder<S, D> {

const cases: CaseMap<S> = new Map<string, Array<Case<S, any>>>();
const middleware = getMiddlewareFunction<S>(cases) as MiddlewareBuilder<S>;
const cases: CaseMap<S, D> = new Map<string, Array<Case<S, any, D>>>();
const middleware = getMiddlewareFunction<S, D>(cases) as MiddlewareBuilder<S, D>;

middleware.case = <P>(
actionCreator: ActionCreator<P>,
handler: Handler<S, P>,
handler: Handler<S, P, D>,
) => {
const type = actionCreator.type;

Expand All @@ -79,7 +79,7 @@ export function middleware<S, D extends Dispatch = Dispatch>(): MiddlewareBuilde

middleware.cases = <P>(
actionCreators: Array<ActionCreator<P>>,
handler: Handler<S, P>,
handler: Handler<S, P, D>,
) => {
for (const actionCreator of actionCreators) {
middleware.case(actionCreator, handler);
Expand All @@ -91,7 +91,7 @@ export function middleware<S, D extends Dispatch = Dispatch>(): MiddlewareBuilde
}

function getMiddlewareFunction<S, D extends Dispatch = Dispatch, A extends Action<any> = Action<any>>(
cases: CaseMap<S>,
cases: CaseMap<S, D>,
) {
return (api: MiddlewareAPI<D, S>) => (next: D) => (action: A) => {
const caseItems = cases.get(action.type);
Expand Down

0 comments on commit d5e429b

Please sign in to comment.