From 3311bc9288d3ad47a3fdbbfa687ac811afc002ba Mon Sep 17 00:00:00 2001 From: Dimitri Benin Date: Wed, 12 Jul 2017 16:38:03 +0200 Subject: [PATCH 1/3] [redux-doghouse] introduce typings --- types/redux-doghouse/index.d.ts | 4 + types/redux-doghouse/lib.d.ts | 41 ++++++++++ types/redux-doghouse/package.json | 5 ++ types/redux-doghouse/redux-doghouse-tests.ts | 79 ++++++++++++++++++++ types/redux-doghouse/tsconfig.json | 22 ++++++ types/redux-doghouse/tslint.json | 1 + 6 files changed, 152 insertions(+) create mode 100644 types/redux-doghouse/index.d.ts create mode 100644 types/redux-doghouse/lib.d.ts create mode 100644 types/redux-doghouse/package.json create mode 100644 types/redux-doghouse/redux-doghouse-tests.ts create mode 100644 types/redux-doghouse/tsconfig.json create mode 100644 types/redux-doghouse/tslint.json diff --git a/types/redux-doghouse/index.d.ts b/types/redux-doghouse/index.d.ts new file mode 100644 index 0000000000..59463b0d88 --- /dev/null +++ b/types/redux-doghouse/index.d.ts @@ -0,0 +1,4 @@ +// Type definitions for redux-doghouse 1.0 +// Project: https://github.com/DataDog/redux-doghouse#readme +// Definitions by: BendingBender +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped diff --git a/types/redux-doghouse/lib.d.ts b/types/redux-doghouse/lib.d.ts new file mode 100644 index 0000000000..85a43603a5 --- /dev/null +++ b/types/redux-doghouse/lib.d.ts @@ -0,0 +1,41 @@ +export as namespace ReduxDoghouse; + +import { ActionCreator, ActionCreatorsMapObject, bindActionCreators, Dispatch, Reducer } from 'redux'; + +export interface ActionCreatorsTree | ActionCreatorsMapObject, + F extends ActionCreator | ScopedActionFactory> { + [key: string]: F | ActionCreatorsTree; +} + +export class ScopedActionFactory | ActionCreatorsMapObject> { + constructor(actionCreator: A); + + scope(id: string | number): A; +} + +export interface ActionFactoriesMap { + [key: string]: ScopedActionFactory | ActionCreator | ActionFactoriesMap; +} + +export function bindActionCreatorsDeep(actionFactories: M, + dispatch: Dispatch): M; +export function bindActionCreatorsDeep, S>(actionFactories: A, + dispatch: Dispatch): A; +export function bindActionCreatorsDeep | ActionCreatorsMapObject, + F extends ScopedActionFactory, S>(actionFactories: F, + dispatch: Dispatch): F; + +export function bindScopedActionFactories(actionFactories: M, + dispatch: Dispatch, + bindFn?: typeof bindActionCreators): M; +export function bindScopedActionFactories, S>(actionFactories: A, + dispatch: Dispatch, + bindFn?: typeof bindActionCreators): A; +export function bindScopedActionFactories | ActionCreatorsMapObject, + F extends ScopedActionFactory, S>(actionFactories: F, + dispatch: Dispatch, + bindFn?: typeof bindActionCreators): F; + +export function scopeActionCreators | ActionCreatorsMapObject>(actionCreator: A, scopeID: string | number): A; + +export function scopeReducers(reducers?: { [key: string]: Reducer }): Reducer; diff --git a/types/redux-doghouse/package.json b/types/redux-doghouse/package.json new file mode 100644 index 0000000000..0954d220bd --- /dev/null +++ b/types/redux-doghouse/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "redux": "^3.7.1" + } +} diff --git a/types/redux-doghouse/redux-doghouse-tests.ts b/types/redux-doghouse/redux-doghouse-tests.ts new file mode 100644 index 0000000000..4963dad108 --- /dev/null +++ b/types/redux-doghouse/redux-doghouse-tests.ts @@ -0,0 +1,79 @@ +import { Action, ActionCreator, createStore, Dispatch } from 'redux'; +import { + bindActionCreatorsDeep, + bindScopedActionFactories, + scopeActionCreators, + ScopedActionFactory, + scopeReducers +} from 'redux-doghouse/lib'; + +// ==== scopeActionCreators +function fooActionCreator(bar: string): { [key: string]: any } { + return {}; +} + +const actionCreators = { + foo: fooActionCreator +}; + +scopeActionCreators(actionCreators, 'a').foo('bar'); +scopeActionCreators(fooActionCreator, 'a')('bar'); +scopeActionCreators(fooActionCreator, 1)('bar'); + +// ==== ScopedActionFactory +const scopeableActionsFromCreators = new ScopedActionFactory(actionCreators); +const actionCreatorsScopedToA = scopeableActionsFromCreators.scope('a'); + +actionCreatorsScopedToA.foo('bar'); + +const scopeableActionsFromFooCreator = new ScopedActionFactory(fooActionCreator); +const actionCreatorScopedToB = scopeableActionsFromFooCreator.scope('b'); + +actionCreatorScopedToB('bar'); + +// ==== bindScopedActionFactories +const store = createStore((state: any, action: Action) => state); +const scopeableActionsFactories = { + myComponentActions: new ScopedActionFactory(actionCreators), + otherActions: { + fooAction: new ScopedActionFactory(fooActionCreator), + plainFooAction: fooActionCreator, + }, +}; +const boundScopeableActions = bindScopedActionFactories(scopeableActionsFactories, store.dispatch); +boundScopeableActions['myComponentActions'].scope('bar'); +boundScopeableActions['otherActions']['plainFooAction']('bar'); + +const boundActions = bindScopedActionFactories(actionCreators, store.dispatch); +boundActions.foo('bar'); + +bindScopedActionFactories(fooActionCreator, store.dispatch, (a: ActionCreator, d: Dispatch) => a)('bar'); + +// ==== bindActionCreatorsDeep +const boundScopeableActionFactories = bindActionCreatorsDeep(scopeableActionsFactories, store.dispatch); +boundScopeableActionFactories['myComponentActions'].scope('bar'); +boundScopeableActionFactories['otherActions']['plainFooAction']('bar'); + +const boundActionFactories = bindActionCreatorsDeep(actionCreators, store.dispatch); +boundActionFactories.foo('bar'); + +bindActionCreatorsDeep(fooActionCreator, store.dispatch)('bar'); + +// ==== scopeReducers +const reducers = { + foo: (state = 0, action: Action) => { + return state; + }, +}; +const actionCreatorsA = scopeActionCreators({ + incrementFoo: () => ({type: 'INCREMENT_FOO'}) +}, 'a'); + +const scopedReducers = scopeReducers(reducers); +const state = { + a: {foo: 0}, + b: {foo: 2} +}; +const newState = scopedReducers(state, actionCreatorsA.incrementFoo()); +const aScopedFoo: number = newState.a.foo; +const bScopedFoo: number = newState.b.foo; diff --git a/types/redux-doghouse/tsconfig.json b/types/redux-doghouse/tsconfig.json new file mode 100644 index 0000000000..808d0ca10b --- /dev/null +++ b/types/redux-doghouse/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "lib.d.ts", + "redux-doghouse-tests.ts" + ] +} diff --git a/types/redux-doghouse/tslint.json b/types/redux-doghouse/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/redux-doghouse/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" } From 570cf5fbe87648aab602882b7a138f3073296c5e Mon Sep 17 00:00:00 2001 From: Dimitri Benin Date: Wed, 12 Jul 2017 17:02:35 +0200 Subject: [PATCH 2/3] [redux-doghouse] remove unused interface definition --- types/redux-doghouse/lib.d.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/types/redux-doghouse/lib.d.ts b/types/redux-doghouse/lib.d.ts index 85a43603a5..205534cd46 100644 --- a/types/redux-doghouse/lib.d.ts +++ b/types/redux-doghouse/lib.d.ts @@ -2,11 +2,6 @@ export as namespace ReduxDoghouse; import { ActionCreator, ActionCreatorsMapObject, bindActionCreators, Dispatch, Reducer } from 'redux'; -export interface ActionCreatorsTree | ActionCreatorsMapObject, - F extends ActionCreator | ScopedActionFactory> { - [key: string]: F | ActionCreatorsTree; -} - export class ScopedActionFactory | ActionCreatorsMapObject> { constructor(actionCreator: A); From fe58b9a561f726acb76b56f7f6ba2c42b199b2d6 Mon Sep 17 00:00:00 2001 From: Dimitri Benin Date: Thu, 13 Jul 2017 09:34:45 +0200 Subject: [PATCH 3/3] [redux-doghouse] move all definitions into index.d.ts --- types/redux-doghouse/index.d.ts | 37 ++++++++++++++++++++ types/redux-doghouse/lib.d.ts | 36 ------------------- types/redux-doghouse/redux-doghouse-tests.ts | 2 +- types/redux-doghouse/tsconfig.json | 2 +- 4 files changed, 39 insertions(+), 38 deletions(-) delete mode 100644 types/redux-doghouse/lib.d.ts diff --git a/types/redux-doghouse/index.d.ts b/types/redux-doghouse/index.d.ts index 59463b0d88..deef70d81a 100644 --- a/types/redux-doghouse/index.d.ts +++ b/types/redux-doghouse/index.d.ts @@ -2,3 +2,40 @@ // Project: https://github.com/DataDog/redux-doghouse#readme // Definitions by: BendingBender // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +export as namespace ReduxDoghouse; + +import { ActionCreator, ActionCreatorsMapObject, bindActionCreators, Dispatch, Reducer } from 'redux'; + +export class ScopedActionFactory | ActionCreatorsMapObject> { + constructor(actionCreator: A); + + scope(id: string | number): A; +} + +export interface ActionFactoriesMap { + [key: string]: ScopedActionFactory | ActionCreator | ActionFactoriesMap; +} + +export function bindActionCreatorsDeep(actionFactories: M, + dispatch: Dispatch): M; +export function bindActionCreatorsDeep, S>(actionFactories: A, + dispatch: Dispatch): A; +export function bindActionCreatorsDeep | ActionCreatorsMapObject, + F extends ScopedActionFactory, S>(actionFactories: F, + dispatch: Dispatch): F; + +export function bindScopedActionFactories(actionFactories: M, + dispatch: Dispatch, + bindFn?: typeof bindActionCreators): M; +export function bindScopedActionFactories, S>(actionFactories: A, + dispatch: Dispatch, + bindFn?: typeof bindActionCreators): A; +export function bindScopedActionFactories | ActionCreatorsMapObject, + F extends ScopedActionFactory, S>(actionFactories: F, + dispatch: Dispatch, + bindFn?: typeof bindActionCreators): F; + +export function scopeActionCreators | ActionCreatorsMapObject>(actionCreator: A, scopeID: string | number): A; + +export function scopeReducers(reducers?: { [key: string]: Reducer }): Reducer; diff --git a/types/redux-doghouse/lib.d.ts b/types/redux-doghouse/lib.d.ts deleted file mode 100644 index 205534cd46..0000000000 --- a/types/redux-doghouse/lib.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -export as namespace ReduxDoghouse; - -import { ActionCreator, ActionCreatorsMapObject, bindActionCreators, Dispatch, Reducer } from 'redux'; - -export class ScopedActionFactory | ActionCreatorsMapObject> { - constructor(actionCreator: A); - - scope(id: string | number): A; -} - -export interface ActionFactoriesMap { - [key: string]: ScopedActionFactory | ActionCreator | ActionFactoriesMap; -} - -export function bindActionCreatorsDeep(actionFactories: M, - dispatch: Dispatch): M; -export function bindActionCreatorsDeep, S>(actionFactories: A, - dispatch: Dispatch): A; -export function bindActionCreatorsDeep | ActionCreatorsMapObject, - F extends ScopedActionFactory, S>(actionFactories: F, - dispatch: Dispatch): F; - -export function bindScopedActionFactories(actionFactories: M, - dispatch: Dispatch, - bindFn?: typeof bindActionCreators): M; -export function bindScopedActionFactories, S>(actionFactories: A, - dispatch: Dispatch, - bindFn?: typeof bindActionCreators): A; -export function bindScopedActionFactories | ActionCreatorsMapObject, - F extends ScopedActionFactory, S>(actionFactories: F, - dispatch: Dispatch, - bindFn?: typeof bindActionCreators): F; - -export function scopeActionCreators | ActionCreatorsMapObject>(actionCreator: A, scopeID: string | number): A; - -export function scopeReducers(reducers?: { [key: string]: Reducer }): Reducer; diff --git a/types/redux-doghouse/redux-doghouse-tests.ts b/types/redux-doghouse/redux-doghouse-tests.ts index 4963dad108..fb18d83405 100644 --- a/types/redux-doghouse/redux-doghouse-tests.ts +++ b/types/redux-doghouse/redux-doghouse-tests.ts @@ -5,7 +5,7 @@ import { scopeActionCreators, ScopedActionFactory, scopeReducers -} from 'redux-doghouse/lib'; +} from 'redux-doghouse'; // ==== scopeActionCreators function fooActionCreator(bar: string): { [key: string]: any } { diff --git a/types/redux-doghouse/tsconfig.json b/types/redux-doghouse/tsconfig.json index 808d0ca10b..122bb36672 100644 --- a/types/redux-doghouse/tsconfig.json +++ b/types/redux-doghouse/tsconfig.json @@ -16,7 +16,7 @@ "forceConsistentCasingInFileNames": true }, "files": [ - "lib.d.ts", + "index.d.ts", "redux-doghouse-tests.ts" ] }