{"version":3,"file":"ng-log-log4a.mjs","sources":["../../../../projects/ng-log/log4a/src/lib/log4a.model.ts","../../../../projects/ng-log/log4a/src/lib/core-appender.service.ts","../../../../projects/ng-log/log4a/src/lib/appender-impl.service.ts","../../../../projects/ng-log/log4a/src/lib/log4a.service.ts","../../../../projects/ng-log/log4a/src/lib/log-config/log-config.component.ts","../../../../projects/ng-log/log4a/src/lib/log-config/log-config.component.html","../../../../projects/ng-log/log4a/src/lib/log4a.module.ts","../../../../projects/ng-log/log4a/src/public_api.ts","../../../../projects/ng-log/log4a/src/ng-log-log4a.ts"],"sourcesContent":["import { Observable } from \"rxjs\";\nimport { LogEntry } from \"./log4a.service\";\n\nexport type LogAppenderConfig = {\n  appenderName: string;\n  location: string;\n  enable: boolean;\n};\n\nexport abstract class AbstractLogger {\n  location!: string;\n  abstract log(record: LogEntry): Observable<boolean>;\n  abstract clear(): Observable<boolean>;\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { of } from 'rxjs/internal/observable/of';\nimport { LogEntry } from './log4a.service';\nimport { AbstractLogger } from './log4a.model';\n\nexport class ConsoleAppender extends AbstractLogger {\n  log(entry: LogEntry): Observable<boolean> {\n    entry.buildLogString();\n    return of(true);\n  }\n  clear(): Observable<boolean> {\n    console.clear();\n    return of(true);\n  }\n}\n\nexport class LocalStorageAppender extends AbstractLogger {\n  constructor() {\n    super();\n    this.location = 'logging';\n  }\n\n  log(entry: LogEntry): Observable<boolean> {\n    let ret = false;\n    let values: LogEntry[];\n\n    try {\n      const location = localStorage.getItem(this.location) ?? '';\n      values = JSON.parse(location) || [];\n      values.push(entry);\n      localStorage.setItem(this.location, JSON.stringify(values));\n      ret = true;\n    } catch (e) {\n      console.error(e);\n    }\n    return of(ret);\n  }\n\n  clear(): Observable<boolean> {\n    localStorage.removeItem(this.location);\n    return of(true);\n  }\n}\n\nexport class WebApiAppender extends AbstractLogger {\n  constructor(private http: HttpClient) {\n    super();\n    this.location = 'api/logging';\n  }\n\n  log(entry: LogEntry): Observable<boolean> {\n    // let headers = new Headers({ 'Content-Type': 'Content-Type' });\n    const options = new HttpHeaders().set('Content-Type', 'application/json');\n    this.http\n      .post<boolean>(this.location, entry, { headers: options }).pipe(catchError((error: any, caught: Observable<any>): Observable<any> => {\n        console.error('There was an error!', error);\n        // after handling error, return a new observable \n        // that doesn't emit any values and completes\n        return of();\n    }));\n    return of(true);\n  }\n\n  clear(): Observable<boolean> {\n    // TODO: Call Web API to clear all values\n    return of(true);\n  }\n\n  private handleErrors(error: any): Observable<any> {\n    const errors: string[] = [];\n    let msg = '';\n\n    msg = 'Status: ' + error.status;\n    msg += ' - Status Text: ' + error.statusText;\n    if (error.json()) {\n      msg += ' - Exception Message: ' + error.json().exceptionMessage;\n    }\n    errors.push(msg);\n\n    console.error('An error occurred', errors);\n\n    return throwError(errors);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { LocalStorageAppender, ConsoleAppender, WebApiAppender } from './core-appender.service';\nimport { HttpClient } from '@angular/common/http';\nimport { AbstractLogger, LogAppenderConfig } from './log4a.model';\n\n@Injectable()\nexport class AppenderService {\n\n  appenders: AbstractLogger[] = [];\n\n  constructor(private http: HttpClient) {\n    console.log('AppenderService Initiated');\n  }\n\n  loadConfig(logConfig: LogAppenderConfig[]) {\n    let appender = {} as AbstractLogger;\n    for (const pub of logConfig.filter(p => p.enable)) {\n      switch (pub.appenderName.toLowerCase()) {\n        case 'console':\n          appender = new ConsoleAppender();\n          break;\n        case 'localstorage':\n          appender = new LocalStorageAppender();\n          break;\n        case 'serverapi':\n          appender = new WebApiAppender(this.http);\n          break;\n\n      }\n      // Set location of logging\n      appender.location = pub.location;\n      // Add publisher to array\n      this.appenders.push(appender);\n\n    }\n  }\n\n  loadRuntimeConfig(): void {\n    let appender = {} as AbstractLogger;\n      console.log(this.getQueryParams('logger-option'));\n      switch (this.getQueryParams('logger-option')) {\n        case 'console':\n          appender = new ConsoleAppender();\n          break;\n        case 'localstorage':\n          appender = new LocalStorageAppender();\n          break;\n        case 'serverapi':\n          appender = new WebApiAppender(this.http);\n          break;\n      }\n      this.appenders.push(appender);\n  }\n\n  public getQueryParams(param: string): string {\n    const href = location.href;\n    const reg = new RegExp('[?&]' + param + '=([^&#]*)', 'i');\n    const string = reg.exec(href);\n    return string ? string[1] : '';\n  }\n\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport { AppenderService } from './appender-impl.service';\nimport { AbstractLogger, LogAppenderConfig } from './log4a.model';\nconst PUBLISHERS_FILE = 'assets/logging-config.json';\n\n@Injectable()\nexport class Log4a {\n  abstractAppenders: AbstractLogger[];\n  // tslint:disable-next-line: no-use-before-declare\n  level: LogLevel = LogLevel.All;\n  logWithDate = true;\n  constructor(\n    public appenderService: AppenderService,\n    public http: HttpClient\n  ) {\n    this.abstractAppenders = appenderService.appenders;\n  }\n\n  async loadConfigs() {\n    const loggerOption = this.appenderService.getQueryParams(\n      'logger-option'\n    );\n    if (loggerOption !== '') {\n      this.appenderService.loadRuntimeConfig();\n    } else {\n      this.http\n        .get<LogAppenderConfig[]>(PUBLISHERS_FILE).subscribe((res)=> {\n          this.appenderService.loadConfig(res);\n        })\n    }\n  }\n\n  debug(msg: string, ...optionalParams: any[]) {\n    // tslint:disable-next-line: no-use-before-declare\n    this.writeToLog(msg, LogLevel.Debug, optionalParams);\n  }\n\n  info(msg: string, ...optionalParams: any[]) {\n    // tslint:disable-next-line: no-use-before-declare\n    this.writeToLog(msg, LogLevel.Info, optionalParams);\n  }\n\n  warn(msg: string, ...optionalParams: any[]) {\n    // tslint:disable-next-line: no-use-before-declare\n    this.writeToLog(msg, LogLevel.Warn, optionalParams);\n  }\n\n  error(msg: string, ...optionalParams: any[]) {\n    // tslint:disable-next-line: no-use-before-declare\n    this.writeToLog(msg, LogLevel.Error, optionalParams);\n  }\n\n  fatal(msg: string, ...optionalParams: any[]) {\n    // tslint:disable-next-line: no-use-before-declare\n    this.writeToLog(msg, LogLevel.Fatal, optionalParams);\n  }\n\n  log(msg: string, ...optionalParams: any[]) {\n    // tslint:disable-next-line: no-use-before-declare\n    this.writeToLog(msg, LogLevel.All, optionalParams);\n  }\n\n  clear(): void {\n    for (const logger of this.abstractAppenders) {\n      logger.clear().subscribe((response: any) => console.log(response));\n    }\n  }\n\n  private shouldLog(level: LogLevel): boolean {\n    let ret = false;\n\n    if (\n      // tslint:disable-next-line: no-use-before-declare\n      (level >= this.level && level !== LogLevel.Off) ||\n      // tslint:disable-next-line: no-use-before-declare\n      this.level === LogLevel.All\n    ) {\n      ret = true;\n    }\n\n    return ret;\n  }\n\n  private writeToLog(msg: string, level: LogLevel, params: any[]) {\n    if (this.shouldLog(level)) {\n      // Declare variables\n      // tslint:disable-next-line: no-use-before-declare\n      const entry: LogEntry = new LogEntry();\n\n      // Build Log Entry\n      entry.message = msg;\n      entry.level = level;\n      entry.extraInfo = params;\n      entry.logWithDate = this.logWithDate;\n\n      for (const logger of this.abstractAppenders) {\n        logger.log(entry);\n        // .subscribe(response => console.log(response));\n      }\n    }\n  }\n}\n\nexport enum LogLevel {\n  All = 0,\n  Debug = 1,\n  Info = 2,\n  Warn = 3,\n  Error = 4,\n  Fatal = 5,\n  Off = 6\n}\n\nexport class LogEntry {\n  // Public Properties\n  entryDate: Date = new Date();\n  message = '';\n  level: LogLevel = LogLevel.Debug;\n  extraInfo: any[] = [];\n  logWithDate = true;\n\n  // **************\n  // Public Methods\n  // **************\n  buildLogString(): void {\n    let value = '';\n\n    if (this.logWithDate) {\n      value = new Date() + '';\n    }\n    // value += \"Type: \" + LogLevel[this.level];\n    value += ' - Message: ' + this.message;\n    if (this.extraInfo.length) {\n      value += ' - Extra Info: ' + this.formatParams(this.extraInfo);\n    }\n\n    switch (LogLevel[this.level]) {\n      case 'Debug':\n        // tslint:disable-next-line: no-console\n        console.debug(\n          '%c Type: [' + LogLevel[this.level] + ']%c' + value,\n          '  border-bottom-color: blue; background: blue; color: white; display: block; font-weight: bold;',\n          'background: white;border-bottom: 1px solid blue; font-weight: 900;color:blue'\n        );\n        break;\n      case 'Info':\n        // tslint:disable-next-line: no-console\n        console.info(\n          '%c Type: [' + LogLevel[this.level] + ']%c' + value,\n          '  border-bottom-color: blue; background: blue; color: white; display: block; font-weight: bold;',\n          'background: white;border-bottom:1px solid blue; font-weight: 900;color:blue'\n        );\n        break;\n      case 'Warn':\n        console.warn(\n          '%c Type: [' + LogLevel[this.level] + ']%c' + value,\n          '  border-bottom-color: black; background: orange; color: white; display: block; font-weight: bold;',\n          'background: white;border-bottom: 1px solid orange; font-weight: 900; '\n        );\n        break;\n      case 'Error':\n        console.error(\n          '%c Type: [' + LogLevel[this.level] + ']%c' + value,\n          '  border-bottom-color: white; background: red; color: white; display: block; font-weight: bold;',\n          'background:  ;border-bottom: 1px solid red; font-weight: 900; color:red'\n        );\n        break;\n      case 'Fatal':\n        console.error(\n          '%c Type: [' + LogLevel[this.level] + ']%c' + value,\n          '  border-bottom-color: white; background: red; color: white; display: block; font-weight: bold;',\n          'background:  ;border-bottom: 1px solid red; font-weight: 900; color:red'\n        );\n        break;\n      case 'All':\n        // tslint:disable-next-line: no-console\n        console.info(\n          '%c Type: [' + LogLevel[this.level] + ']%c' + value,\n          '  border-bottom-color: blue; background: blue; color: white; display: block; font-weight: bold;',\n          'background: white;border-bottom: 1px solid blue; font-weight: 900;color:blue'\n        );\n        break;\n    }\n\n    // return value;\n  }\n\n  // ***************\n  // Private Methods\n  // ***************\n  private formatParams(params: any[]): string {\n    let ret: string = params.join(',');\n\n    // Is there at least one object in the array?\n    if (params.some(p => typeof p === 'object')) {\n      ret = '';\n      // Build comma-delimited string\n      for (const item of params) {\n        ret += JSON.stringify(item) + ',';\n      }\n    }\n\n    return ret;\n  }\n}\n","import {Component, OnInit} from '@angular/core';\nimport { Log4a, LogLevel } from '../log4a.service';\n\n@Component({\n  selector: 'log-config',\n  templateUrl: './log-config.component.html',\n  styleUrls: ['./log-config.component.css']\n})\nexport class LogConfigComponent implements OnInit {\n  isChecked = true;\n\n  constructor(public logger: Log4a) {}\n\n  ngOnInit() {}\n\n  enableLog(): void {\n    this.isChecked = !this.isChecked;\n    this.logger.level = this.isChecked ?  LogLevel.All : LogLevel.Off\n  }\n\n  enableDate(): void {\n    this.logger.logWithDate = !this.logger.logWithDate;\n  }\n\n  setLogLevel(level: string): void {\n    switch (level) {\n      case 'Debug':\n        this.logger.level = (this.logger.level === LogLevel.Off) ? LogLevel.Off : LogLevel.Debug;\n        break;\n      case 'Info':\n        this.logger.level = (this.logger.level === LogLevel.Off) ? LogLevel.Off : LogLevel.Info;\n        break;\n      case 'Warn':\n        this.logger.level = (this.logger.level === LogLevel.Off) ? LogLevel.Off : LogLevel.Warn;\n        break;\n      case 'Error':\n        this.logger.level = (this.logger.level === LogLevel.Off) ? LogLevel.Off : LogLevel.Error;\n        break;\n      default:\n        this.logger.level = (this.logger.level === LogLevel.Off) ? LogLevel.Off : LogLevel.All;\n        break;\n    }\n  }\n\n  logmsg(){\n    this.logger.debug('test')\n  }\n}\n","<form (ngSubmit) = \"false\">\n  <h1>Enable/Disable Log :</h1>\n  <label class=\"switch\">\n\n    <input type=\"checkbox\" [checked]='isChecked' (click) = \"enableLog()\">\n    <span class=\"slider round\" ></span>\n  </label>\n\n  <!-- Rounded switch -->\n  <h1>Enable Date :</h1>\n  <label class=\"switch\">\n\n    <input type=\"checkbox\" checked (click) = \"enableDate()\">\n    <span class=\"slider round\"></span>\n  </label>\n\n\n<br>\n<br>\n<br>\n<fieldset >\n  <legend>Log Level :</legend>\n\n  <div>\n    <input type=\"radio\" id=\"debug\" name=\"log\" value=\"Debug\" checked (change) = \"setLogLevel('Debug')\"/>\n    <label for=\"debug\">Debug</label>\n  </div>\n\n  <div>\n    <input type=\"radio\" id=\"info\" name=\"log\" value=\"Info\"  (change) = \"setLogLevel('Info')\"/>\n    <label for=\"info\">Info</label>\n  </div>\n\n  <div>\n    <input type=\"radio\" id=\"warn\" name=\"log\" value=\"warn\"  (change) = \"setLogLevel('Warn')\"/>\n    <label for=\"warn\">Warn</label>\n  </div>\n\n  <div>\n    <input type=\"radio\" id=\"error\" name=\"log\" value=\"Error\"  (change) = \"setLogLevel('Error')\"/>\n    <label for=\"error\">Error</label>\n  </div>\n\n  <div>\n    <input type=\"radio\" id=\"all\" name=\"log\" value=\"All\"  (change) = \"setLogLevel('All')\"/>\n    <label for=\"all\">All</label>\n  </div>\n</fieldset>\n\n\n<br>\n\n<input type=\"button\" (click) = \"logger.debug('test')\" value=\"Debug Test\"/><br><br>\n<input type=\"button\" (click) = \"logger.info('test')\" value=\"Info Test\"/><br><br>\n<input type=\"button\" (click) = \"logger.warn('test')\" value=\"Warn Test\"/><br><br>\n<input type=\"button\" (click) = \"logger.error('test')\" value=\"Error Test\"/><br><br>\n<input type=\"button\" (click) = \"logger.log('test')\" value=\"All Test\"/><br><br>\n\n\n\n","import { NgModule } from '@angular/core';\nimport { LogConfigComponent } from './log-config/log-config.component';\n\n\n@NgModule({\n  declarations: [LogConfigComponent],\n  imports: [\n  ],\n  exports: [LogConfigComponent]\n})\nexport class Log4aModule { }\n","/*\n * Public API Surface of log4a\n */\nexport * from './lib/log4a.service';\nexport * from './lib/log4a.module';\nexport * from './lib/appender-impl.service';\nexport * from './lib/core-appender.service';\nexport * from './lib/log-config/log-config.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.AppenderService","i2","i1.Log4a"],"mappings":"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"}