| 'use strict'; | 
|   | 
| /* global window: true */ | 
| /* eslint-disable | 
|   multiline-ternary, | 
|   no-param-reassign | 
| */ | 
| const PrefixFactory = require('./PrefixFactory'); | 
| const MethodFactory = require('./MethodFactory'); | 
|   | 
| const defaults = { | 
|   name: +new Date(), | 
|   level: 'warn', | 
|   prefix: null, | 
|   factory: null | 
| }; | 
|   | 
| class LogLevel { | 
|   constructor(options) { | 
|     // implement for some _very_ loose type checking. avoids getting into a | 
|     // circular require between MethodFactory and LogLevel | 
|     this.type = 'LogLevel'; | 
|     this.options = Object.assign({}, defaults, options); | 
|     this.methodFactory = options.factory; | 
|   | 
|     if (!this.methodFactory) { | 
|       const factory = options.prefix | 
|         ? new PrefixFactory(this, options.prefix) | 
|         : new MethodFactory(this); | 
|   | 
|       this.methodFactory = factory; | 
|     } | 
|   | 
|     if (!this.methodFactory.logger) { | 
|       this.methodFactory.logger = this; | 
|     } | 
|   | 
|     this.name = options.name || '<unknown>'; | 
|     // this.level is a setter, do this after setting up the factory | 
|     this.level = this.options.level; | 
|   } | 
|   | 
|   get factory() { | 
|     return this.methodFactory; | 
|   } | 
|   | 
|   set factory(factory) { | 
|     factory.logger = this; | 
|   | 
|     this.methodFactory = factory; | 
|     this.methodFactory.replaceMethods(this.level); | 
|   } | 
|   | 
|   enable() { | 
|     this.level = this.levels.TRACE; | 
|   } | 
|   | 
|   disable() { | 
|     this.level = this.levels.SILENT; | 
|   } | 
|   | 
|   get level() { | 
|     return this.currentLevel; | 
|   } | 
|   | 
|   set level(logLevel) { | 
|     const level = this.methodFactory.distillLevel(logLevel); | 
|   | 
|     if (level == null) { | 
|       throw new Error( | 
|         `loglevel: setLevel() called with invalid level: ${logLevel}` | 
|       ); | 
|     } | 
|   | 
|     this.currentLevel = level; | 
|     this.methodFactory.replaceMethods(level); | 
|   | 
|     if (typeof console === 'undefined' && level < this.levels.SILENT) { | 
|       // eslint-disable-next-line no-console | 
|       console.warn( | 
|         'loglevel: console is undefined. The log will produce no output' | 
|       ); | 
|     } | 
|   } | 
|   | 
|   get levels() { // eslint-disable-line class-methods-use-this | 
|     return this.methodFactory.levels; | 
|   } | 
| } | 
|   | 
| module.exports = LogLevel; |