{"version":3,"file":"ngxs-logger-plugin.mjs","sources":["../../../packages/logger-plugin/src/log-writer.ts","../../../packages/logger-plugin/src/internals.ts","../../../packages/logger-plugin/src/action-logger.ts","../../../packages/logger-plugin/src/symbols.ts","../../../packages/logger-plugin/src/logger.plugin.ts","../../../packages/logger-plugin/src/logger.module.ts","../../../packages/logger-plugin/index.ts","../../../packages/logger-plugin/ngxs-logger-plugin.ts"],"sourcesContent":["import { NgxsLoggerPluginOptions } from './symbols';\n\nexport class LogWriter {\n  private logger: any;\n\n  constructor(private options: NgxsLoggerPluginOptions) {\n    this.options = this.options || <any>{};\n    this.logger = options.logger || console;\n  }\n\n  startGroup(message: string) {\n    const startGroupFn = this.options.collapsed\n      ? this.logger.groupCollapsed\n      : this.logger.group;\n    try {\n      startGroupFn.call(this.logger, message);\n    } catch (e) {\n      console.log(message);\n    }\n  }\n\n  endGroup() {\n    try {\n      this.logger.groupEnd();\n    } catch (e) {\n      this.logger.log('—— log end ——');\n    }\n  }\n\n  logGrey(title: string, payload: any) {\n    const greyStyle = 'color: #9E9E9E; font-weight: bold';\n    this.log(title, greyStyle, payload);\n  }\n\n  logGreen(title: string, payload: any) {\n    const greenStyle = 'color: #4CAF50; font-weight: bold';\n    this.log(title, greenStyle, payload);\n  }\n\n  logRedish(title: string, payload: any) {\n    const redishStyle = 'color: #FD8182; font-weight: bold';\n    this.log(title, redishStyle, payload);\n  }\n\n  log(title: string, color: string, payload: any) {\n    this.logger.log('%c ' + title, color, payload);\n  }\n}\n","export const repeat = (str: string, times: number) => new Array(times + 1).join(str);\n\nexport const pad = (num: number, maxLength: number) =>\n  repeat('0', maxLength - num.toString().length) + num;\n\nexport function formatTime(time: Date) {\n  return (\n    pad(time.getHours(), 2) +\n    `:` +\n    pad(time.getMinutes(), 2) +\n    `:` +\n    pad(time.getSeconds(), 2) +\n    `.` +\n    pad(time.getMilliseconds(), 3)\n  );\n}\n","import { Store } from '@ngxs/store';\nimport { getActionTypeFromInstance } from '@ngxs/store/plugins';\n\nimport { formatTime } from './internals';\nimport { LogWriter } from './log-writer';\n\nexport class ActionLogger {\n  constructor(\n    private action: any,\n    private store: Store,\n    private logWriter: LogWriter\n  ) {}\n\n  dispatched(state: any) {\n    const actionName = getActionTypeFromInstance(this.action);\n    const formattedTime = formatTime(new Date());\n\n    const message = `action ${actionName} @ ${formattedTime}`;\n    this.logWriter.startGroup(message);\n\n    // print payload only if at least one property is supplied\n    if (this._hasPayload(this.action)) {\n      this.logWriter.logGrey('payload', { ...this.action });\n    }\n\n    this.logWriter.logGrey('prev state', state);\n  }\n\n  completed(nextState: any) {\n    this.logWriter.logGreen('next state', nextState);\n    this.logWriter.endGroup();\n  }\n\n  errored(error: any) {\n    this.logWriter.logRedish('next state after error', this.store.snapshot());\n    this.logWriter.logRedish('error', error);\n    this.logWriter.endGroup();\n  }\n\n  private _hasPayload(event: any) {\n    const nonEmptyProperties = this._getNonEmptyProperties(event);\n    return nonEmptyProperties.length > 0;\n  }\n\n  private _getNonEmptyProperties(event: any) {\n    const keys = Object.keys(event);\n    const values = keys.map(key => event[key]);\n    return values.filter(value => value !== undefined);\n  }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface NgxsLoggerPluginOptions {\n  /** Auto expand logged actions  */\n  collapsed?: boolean;\n\n  /** Provide alternate console.log implementation */\n  logger?: any;\n\n  /** Disable the logger. Useful for prod mode. */\n  disabled?: boolean;\n\n  /** Predicate for actions to be the logged. Takes action and state snapshot as parameters */\n  filter?: (action: any, state: any) => boolean;\n}\n\nexport const NGXS_LOGGER_PLUGIN_OPTIONS = new InjectionToken<NgxsLoggerPluginOptions>(\n  'NGXS_LOGGER_PLUGIN_OPTIONS'\n);\n","import { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\nimport { Store } from '@ngxs/store';\nimport { NgxsNextPluginFn, NgxsPlugin } from '@ngxs/store/plugins';\nimport { catchError, tap } from 'rxjs';\n\nimport { LogWriter } from './log-writer';\nimport { ActionLogger } from './action-logger';\nimport { NGXS_LOGGER_PLUGIN_OPTIONS } from './symbols';\n\n@Injectable()\nexport class NgxsLoggerPlugin implements NgxsPlugin {\n  private _store: Store;\n  private _logWriter: LogWriter;\n\n  private _options = inject(NGXS_LOGGER_PLUGIN_OPTIONS);\n  private _injector = inject(Injector);\n\n  handle(state: any, event: any, next: NgxsNextPluginFn) {\n    if (this._options.disabled || this._skipLogging(state, event)) {\n      return next(state, event);\n    }\n\n    this._logWriter ||= new LogWriter(this._options);\n    // Retrieve lazily to avoid cyclic dependency exception\n    this._store ||= this._injector.get(Store);\n\n    const actionLogger = new ActionLogger(event, this._store, this._logWriter);\n\n    actionLogger.dispatched(state);\n\n    return next(state, event).pipe(\n      tap(nextState => {\n        actionLogger.completed(nextState);\n      }),\n      catchError(error => {\n        actionLogger.errored(error);\n        throw error;\n      })\n    );\n  }\n\n  private _skipLogging(state: any, event: any) {\n    // Run the `filter: () => ...` function within the injection context so\n    // that the user can access the dependency injection and inject services\n    // to retrieve properties. This will help determine whether or not to log the action.\n    const allowLogging = runInInjectionContext(this._injector, () =>\n      this._options.filter!(event, state)\n    );\n\n    return !allowLogging;\n  }\n}\n","import {\n  EnvironmentProviders,\n  InjectionToken,\n  ModuleWithProviders,\n  NgModule,\n  makeEnvironmentProviders\n} from '@angular/core';\nimport { withNgxsPlugin } from '@ngxs/store';\n\nimport { NgxsLoggerPlugin } from './logger.plugin';\nimport { NgxsLoggerPluginOptions, NGXS_LOGGER_PLUGIN_OPTIONS } from './symbols';\n\nexport const USER_OPTIONS = new InjectionToken('LOGGER_USER_OPTIONS');\n\nexport function loggerOptionsFactory(options: NgxsLoggerPluginOptions) {\n  const defaultLoggerOptions: NgxsLoggerPluginOptions = {\n    logger: console,\n    collapsed: false,\n    disabled: false,\n    filter: () => true\n  };\n\n  return {\n    ...defaultLoggerOptions,\n    ...options\n  };\n}\n\n@NgModule()\nexport class NgxsLoggerPluginModule {\n  static forRoot(\n    options?: NgxsLoggerPluginOptions\n  ): ModuleWithProviders<NgxsLoggerPluginModule> {\n    return {\n      ngModule: NgxsLoggerPluginModule,\n      providers: [\n        withNgxsPlugin(NgxsLoggerPlugin),\n        {\n          provide: USER_OPTIONS,\n          useValue: options\n        },\n        {\n          provide: NGXS_LOGGER_PLUGIN_OPTIONS,\n          useFactory: loggerOptionsFactory,\n          deps: [USER_OPTIONS]\n        }\n      ]\n    };\n  }\n}\n\nexport function withNgxsLoggerPlugin(options?: NgxsLoggerPluginOptions): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    withNgxsPlugin(NgxsLoggerPlugin),\n    { provide: USER_OPTIONS, useValue: options },\n    {\n      provide: NGXS_LOGGER_PLUGIN_OPTIONS,\n      useFactory: loggerOptionsFactory,\n      deps: [USER_OPTIONS]\n    }\n  ]);\n}\n","/**\n * The public api for consumers of @ngxs/logger-plugin\n */\nexport * from './src/public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;MAEa,SAAS,CAAA;AAGpB,IAAA,WAAA,CAAoB,OAAgC,EAAA;QAAhC,IAAO,CAAA,OAAA,GAAP,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAS,EAAE;QACtC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO;;AAGzC,IAAA,UAAU,CAAC,OAAe,EAAA;AACxB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;AAChC,cAAE,IAAI,CAAC,MAAM,CAAC;AACd,cAAE,IAAI,CAAC,MAAM,CAAC,KAAK;AACrB,QAAA,IAAI;YACF,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;;QACvC,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;;;IAIxB,QAAQ,GAAA;AACN,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;;QACtB,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC;;;IAIpC,OAAO,CAAC,KAAa,EAAE,OAAY,EAAA;QACjC,MAAM,SAAS,GAAG,mCAAmC;QACrD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC;;IAGrC,QAAQ,CAAC,KAAa,EAAE,OAAY,EAAA;QAClC,MAAM,UAAU,GAAG,mCAAmC;QACtD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC;;IAGtC,SAAS,CAAC,KAAa,EAAE,OAAY,EAAA;QACnC,MAAM,WAAW,GAAG,mCAAmC;QACvD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC;;AAGvC,IAAA,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,OAAY,EAAA;AAC5C,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC;;AAEjD;;AC/CM,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,KAAa,KAAK,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAE7E,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,SAAiB,KAChD,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,GAAG,GAAG;AAEhD,SAAU,UAAU,CAAC,IAAU,EAAA;IACnC,QACE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACvB,CAAG,CAAA,CAAA;AACH,QAAA,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACzB,CAAG,CAAA,CAAA;AACH,QAAA,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACzB,CAAG,CAAA,CAAA;QACH,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AAElC;;MCTa,YAAY,CAAA;AACvB,IAAA,WAAA,CACU,MAAW,EACX,KAAY,EACZ,SAAoB,EAAA;QAFpB,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAS,CAAA,SAAA,GAAT,SAAS;;AAGnB,IAAA,UAAU,CAAC,KAAU,EAAA;QACnB,MAAM,UAAU,GAAG,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC;QACzD,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;AAE5C,QAAA,MAAM,OAAO,GAAG,CAAA,OAAA,EAAU,UAAU,CAAM,GAAA,EAAA,aAAa,EAAE;AACzD,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC;;QAGlC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;;QAGvD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC;;AAG7C,IAAA,SAAS,CAAC,SAAc,EAAA;QACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;AAChD,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;;AAG3B,IAAA,OAAO,CAAC,KAAU,EAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,wBAAwB,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACzE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;;AAGnB,IAAA,WAAW,CAAC,KAAU,EAAA;QAC5B,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AAC7D,QAAA,OAAO,kBAAkB,CAAC,MAAM,GAAG,CAAC;;AAG9B,IAAA,sBAAsB,CAAC,KAAU,EAAA;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1C,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS,CAAC;;AAErD;;MCjCY,0BAA0B,GAAG,IAAI,cAAc,CAC1D,4BAA4B;;MCPjB,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;AAKU,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC7C,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAoCrC;AAlCC,IAAA,MAAM,CAAC,KAAU,EAAE,KAAU,EAAE,IAAsB,EAAA;AACnD,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AAC7D,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;;QAG3B,IAAI,CAAC,UAAU,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;;QAEhD,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAEzC,QAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;AAE1E,QAAA,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;AAE9B,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAC5B,GAAG,CAAC,SAAS,IAAG;AACd,YAAA,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC;AACnC,SAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;AACjB,YAAA,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;AAC3B,YAAA,MAAM,KAAK;SACZ,CAAC,CACH;;IAGK,YAAY,CAAC,KAAU,EAAE,KAAU,EAAA;;;;QAIzC,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,MACzD,IAAI,CAAC,QAAQ,CAAC,MAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CACpC;QAED,OAAO,CAAC,YAAY;;iIAvCX,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qIAAhB,gBAAgB,EAAA,CAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;ACGM,MAAM,YAAY,GAAG,IAAI,cAAc,CAAC,qBAAqB,CAAC;AAE/D,SAAU,oBAAoB,CAAC,OAAgC,EAAA;AACnE,IAAA,MAAM,oBAAoB,GAA4B;AACpD,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,MAAM,EAAE,MAAM;KACf;IAED,OAAO;AACL,QAAA,GAAG,oBAAoB;AACvB,QAAA,GAAG;KACJ;AACH;MAGa,sBAAsB,CAAA;IACjC,OAAO,OAAO,CACZ,OAAiC,EAAA;QAEjC,OAAO;AACL,YAAA,QAAQ,EAAE,sBAAsB;AAChC,YAAA,SAAS,EAAE;gBACT,cAAc,CAAC,gBAAgB,CAAC;AAChC,gBAAA;AACE,oBAAA,OAAO,EAAE,YAAY;AACrB,oBAAA,QAAQ,EAAE;AACX,iBAAA;AACD,gBAAA;AACE,oBAAA,OAAO,EAAE,0BAA0B;AACnC,oBAAA,UAAU,EAAE,oBAAoB;oBAChC,IAAI,EAAE,CAAC,YAAY;AACpB;AACF;SACF;;iIAlBQ,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;kIAAtB,sBAAsB,EAAA,CAAA,CAAA;kIAAtB,sBAAsB,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;AAuBK,SAAU,oBAAoB,CAAC,OAAiC,EAAA;AACpE,IAAA,OAAO,wBAAwB,CAAC;QAC9B,cAAc,CAAC,gBAAgB,CAAC;AAChC,QAAA,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC5C,QAAA;AACE,YAAA,OAAO,EAAE,0BAA0B;AACnC,YAAA,UAAU,EAAE,oBAAoB;YAChC,IAAI,EAAE,CAAC,YAAY;AACpB;AACF,KAAA,CAAC;AACJ;;AC7DA;;AAEG;;ACFH;;AAEG;;;;"}