From 98f53ca08ec228cba941370b2ebdbb39445261c8 Mon Sep 17 00:00:00 2001 From: Sean Kelley Date: Thu, 25 Feb 2016 14:36:21 -0800 Subject: [PATCH 1/5] redux-logger no longer exports under default. --- redux-logger/redux-logger.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/redux-logger/redux-logger.d.ts b/redux-logger/redux-logger.d.ts index b0459e536..bb1346b1f 100644 --- a/redux-logger/redux-logger.d.ts +++ b/redux-logger/redux-logger.d.ts @@ -18,5 +18,5 @@ declare module 'redux-logger' { stateTransformer?: (state: any) => any; } - export default function createLogger(options?: ReduxLoggerOptions): Redux.Middleware; + export function createLogger(options?: ReduxLoggerOptions): Redux.Middleware; } From 81e4e35ea7a366ff6b82e021e0be853659515e58 Mon Sep 17 00:00:00 2001 From: Sean Kelley Date: Thu, 25 Feb 2016 14:44:52 -0800 Subject: [PATCH 2/5] Update typings for redux-logger to 2.6.0. --- redux-logger/redux-logger.d.ts | 39 ++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/redux-logger/redux-logger.d.ts b/redux-logger/redux-logger.d.ts index bb1346b1f..e04064778 100644 --- a/redux-logger/redux-logger.d.ts +++ b/redux-logger/redux-logger.d.ts @@ -1,4 +1,4 @@ -// Type definitions for redux-logger v2.0.0 +// Type definitions for redux-logger v2.6.0 // Project: https://github.com/fcomb/redux-logger // Definitions by: Alexander Rusakov // Definitions: https://github.com/borisyankov/DefinitelyTyped @@ -7,16 +7,33 @@ declare module 'redux-logger' { - interface ReduxLoggerOptions { - actionTransformer?: (action: any) => any; - collapsed?: boolean; - duration?: boolean; - level?: string; - logger?: any; - predicate?: (getState: Function, action: any) => boolean; - timestamp?: boolean; - stateTransformer?: (state: any) => any; + type LoggerPredicate = (getState: () => any, action: any) => boolean; + + interface ColorsObject { + title?: (action: any) => string; + prevState?: (prevState: any) => string; + action?: (action: any) => string; + nextState?: (nextState: any) => string; + error?: (error: any, prevState: any) => string; } - export function createLogger(options?: ReduxLoggerOptions): Redux.Middleware; + interface ReduxLoggerOptions { + level?: string; + duration?: boolean; + timestamp?: boolean; + colors?: ColorsObject; + logger?: any; + logErrors?: boolean; + collapsed?: boolean | LoggerPredicate; + predicate?: LoggerPredicate; + stateTransformer?: (state: any) => any; + actionTransformer?: (action: any) => any; + errorTransformer?: (error: any) => any; + } + + // Trickery to get TypeScript to accept that our anonymous, non-default export is a function. + // see https://github.com/Microsoft/TypeScript/issues/3612 for more + namespace createLogger {} + function createLogger(options?: ReduxLoggerOptions): Redux.Middleware; + export = createLogger; } From d6094b87df963609ce46a6dd0cee2999654072d6 Mon Sep 17 00:00:00 2001 From: Sean Kelley Date: Thu, 25 Feb 2016 15:00:44 -0800 Subject: [PATCH 3/5] Update tests for redux-logger 2.6.0. --- redux-logger/redux-logger-tests.ts | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/redux-logger/redux-logger-tests.ts b/redux-logger/redux-logger-tests.ts index 02b1b47a7..530ddb01a 100644 --- a/redux-logger/redux-logger-tests.ts +++ b/redux-logger/redux-logger-tests.ts @@ -1,19 +1,29 @@ /// -import createLogger from 'redux-logger'; +import * as createLogger from 'redux-logger'; import { applyMiddleware, createStore } from 'redux' let logger = createLogger(); let loggerWithOpts = createLogger({ - actionTransformer: actn => actn, - collapsed: true, - duration: true, level: 'error', - logger: console, - predicate: (getState, action) => true, + duration: true, timestamp: true, - stateTransformer: state => state + colors: { + title: (action) => '#000000', + prevState: (prevState) => '#000000', + action: (action) => '#000000', + nextState: (nextState) => '#000000', + error: (error, prevState) => '#000000' + }, + logger: console, + logErrors: true, + collapsed: true, + predicate: (getState, action) => true, + stateTransformer: state => state, + actionTransformer: actn => actn, + errorTransformer: err => err + }); let createStoreWithMiddleware = applyMiddleware( From a0aac300ebf740324732d5ddae7d815aac0b7ab7 Mon Sep 17 00:00:00 2001 From: Sean Kelley Date: Fri, 26 Feb 2016 10:51:56 -0800 Subject: [PATCH 4/5] Add complex level options. --- redux-logger/redux-logger.d.ts | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/redux-logger/redux-logger.d.ts b/redux-logger/redux-logger.d.ts index e04064778..8d02c535e 100644 --- a/redux-logger/redux-logger.d.ts +++ b/redux-logger/redux-logger.d.ts @@ -9,16 +9,27 @@ declare module 'redux-logger' { type LoggerPredicate = (getState: () => any, action: any) => boolean; + type StateToString = (state: any) => string; + type ActionToString = (action: any) => string; + type ErrorToString = (error: any, prevState: any) => string; + interface ColorsObject { - title?: (action: any) => string; - prevState?: (prevState: any) => string; - action?: (action: any) => string; - nextState?: (nextState: any) => string; - error?: (error: any, prevState: any) => string; + title?: boolean | ActionToString; + prevState?: boolean | StateToString; + action?: boolean | ActionToString; + nextState?: boolean | StateToString; + error?: boolean | ErrorToString; + } + + interface LevelObject { + prevState?: string | boolean | StateToString; + action?: string | boolean | ActionToString; + nextState?: string | boolean | StateToString; + error?: string | boolean | ErrorToString; } interface ReduxLoggerOptions { - level?: string; + level?: string | ActionToString | LevelObject; duration?: boolean; timestamp?: boolean; colors?: ColorsObject; From 64807c079564afd6c95bae6b6372e5db838b7f64 Mon Sep 17 00:00:00 2001 From: Sean Kelley Date: Fri, 26 Feb 2016 11:02:39 -0800 Subject: [PATCH 5/5] Finer-grained tests for for redux-logger options. --- redux-logger/redux-logger-tests.ts | 91 +++++++++++++++++++++++++----- 1 file changed, 77 insertions(+), 14 deletions(-) diff --git a/redux-logger/redux-logger-tests.ts b/redux-logger/redux-logger-tests.ts index 530ddb01a..d93aa7e7d 100644 --- a/redux-logger/redux-logger-tests.ts +++ b/redux-logger/redux-logger-tests.ts @@ -5,27 +5,90 @@ import { applyMiddleware, createStore } from 'redux' let logger = createLogger(); -let loggerWithOpts = createLogger({ - level: 'error', +let loggerSimpleOpts = createLogger({ duration: true, timestamp: true, - colors: { - title: (action) => '#000000', - prevState: (prevState) => '#000000', - action: (action) => '#000000', - nextState: (nextState) => '#000000', - error: (error, prevState) => '#000000' - }, logger: console, logErrors: true, - collapsed: true, predicate: (getState, action) => true, - stateTransformer: state => state, - actionTransformer: actn => actn, - errorTransformer: err => err + stateTransformer: (state) => state, + actionTransformer: (action) => action, + errorTransformer: (error) => error +}); +let loggerCollapsedBool = createLogger({ + collapsed: true +}); + +let loggerCollapsedPredicate = createLogger({ + collapsed: (getAction, action) => true +}); + +let loggerColorsBoolean = createLogger({ + colors: { + title: false, + prevState: false, + action: false, + nextState: false, + error: false + } +}); + +let loggerColorsFunction = createLogger({ + colors: { + title: (action) => '#000', + prevState: (state) => '#000', + action: (action) => '#000', + nextState: (state) => '#000', + error: (error, prevState) => '#000' + } +}); + +let loggerLevelString = createLogger({ + level: 'log' +}); + +let loggerLevelFunction = createLogger({ + level: (action) => 'log' +}); + +let loggerLevelObjectFunction = createLogger({ + level: { + prevState: (state) => 'log', + action: (action) => 'log', + nextState: (state) => 'log', + error: (error, prevState) => 'log' + } +}); + +let loggerLevelObjectBoolean = createLogger({ + level: { + prevState: false, + action: false, + nextState: false, + error: false + } +}); + +let loggerLevelObjectString = createLogger({ + level: { + prevState: 'log', + action: 'log', + nextState: 'log', + error: 'log' + } }); let createStoreWithMiddleware = applyMiddleware( - logger, loggerWithOpts + logger, + loggerSimpleOpts, + loggerCollapsedBool, + loggerCollapsedPredicate, + loggerColorsBoolean, + loggerColorsFunction, + loggerLevelString, + loggerLevelFunction, + loggerLevelObjectFunction, + loggerLevelObjectBoolean, + loggerLevelObjectString )(createStore);