diff --git a/redux-logger/redux-logger-tests.ts b/redux-logger/redux-logger-tests.ts index 02b1b47a7..d93aa7e7d 100644 --- a/redux-logger/redux-logger-tests.ts +++ b/redux-logger/redux-logger-tests.ts @@ -1,21 +1,94 @@ /// -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, +let loggerSimpleOpts = createLogger({ duration: true, - level: 'error', - logger: console, - predicate: (getState, action) => true, timestamp: true, - stateTransformer: state => state + logger: console, + logErrors: true, + predicate: (getState, action) => true, + 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); diff --git a/redux-logger/redux-logger.d.ts b/redux-logger/redux-logger.d.ts index b0459e536..8d02c535e 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,44 @@ 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; + + type StateToString = (state: any) => string; + type ActionToString = (action: any) => string; + type ErrorToString = (error: any, prevState: any) => string; + + interface ColorsObject { + title?: boolean | ActionToString; + prevState?: boolean | StateToString; + action?: boolean | ActionToString; + nextState?: boolean | StateToString; + error?: boolean | ErrorToString; } - export default function createLogger(options?: ReduxLoggerOptions): Redux.Middleware; + interface LevelObject { + prevState?: string | boolean | StateToString; + action?: string | boolean | ActionToString; + nextState?: string | boolean | StateToString; + error?: string | boolean | ErrorToString; + } + + interface ReduxLoggerOptions { + level?: string | ActionToString | LevelObject; + 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; }