Jelajahi Sumber

feat(types): adding logger type for logger plugin (#1853)

`createLogger` takes in logger option which by default is console but
can be overridden with own logger. Here we addd `Logger` interface
for `logger` options params which expects log method to
be implemented.

Co-authored-by: Thomas Truong <ttruong@factset.com>
Thomas Truong 4 tahun lalu
induk
melakukan
cb3198d599
2 mengubah file dengan 14 tambahan dan 1 penghapusan
  1. 6 0
      types/logger.d.ts
  2. 8 1
      types/test/index.ts

+ 6 - 0
types/logger.d.ts

@@ -1,5 +1,10 @@
 import { Payload, Plugin } from "./index";
 import { Payload, Plugin } from "./index";
 
 
+interface Logger extends Partial<Pick<Console, 'groupCollapsed' | 'group' | 'groupEnd'>> {
+  log(message: string, colour: string, action: any): void;
+  log(message: string): void;
+}
+
 export interface LoggerOption<S> {
 export interface LoggerOption<S> {
   collapsed?: boolean;
   collapsed?: boolean;
   filter?: <P extends Payload>(mutation: P, stateBefore: S, stateAfter: S) => boolean;
   filter?: <P extends Payload>(mutation: P, stateBefore: S, stateAfter: S) => boolean;
@@ -9,6 +14,7 @@ export interface LoggerOption<S> {
   actionTransformer?: <P extends Payload>(action: P) => any;
   actionTransformer?: <P extends Payload>(action: P) => any;
   logMutations?: boolean;
   logMutations?: boolean;
   logActions?: boolean;
   logActions?: boolean;
+  logger?: Logger;
 }
 }
 
 
 export default function createLogger<S>(option?: LoggerOption<S>): Plugin<S>;
 export default function createLogger<S>(option?: LoggerOption<S>): Plugin<S>;

+ 8 - 1
types/test/index.ts

@@ -437,10 +437,17 @@ namespace Plugins {
     });
     });
   }
   }
 
 
+  class MyLogger {
+    log(message: string) {
+       console.log(message);
+    }
+  }
+
   const logger = Vuex.createLogger<{ value: number }>({
   const logger = Vuex.createLogger<{ value: number }>({
     collapsed: true,
     collapsed: true,
     transformer: state => state.value,
     transformer: state => state.value,
-    mutationTransformer: (mutation: { type: string }) => mutation.type
+    mutationTransformer: (mutation: { type: string }) => mutation.type,
+    logger: new MyLogger()
   });
   });
 
 
   const store = new Vuex.Store<{ value: number }>({
   const store = new Vuex.Store<{ value: number }>({