| 'use strict'; | 
|   | 
| /* global window: true */ | 
| /* eslint-disable | 
|   no-shadow, | 
|   no-param-reassign, | 
|   space-before-function-paren | 
| */ | 
| const LogLevel = require('./LogLevel'); | 
| const MethodFactory = require('./MethodFactory'); | 
| const PrefixFactory = require('./PrefixFactory'); | 
|   | 
| const defaultLogger = new LogLevel({ name: 'default' }); | 
| const cache = { default: defaultLogger }; | 
|   | 
| // Grab the current global log variable in case of overwrite | 
| const existing = (typeof window !== 'undefined') ? window.log : null; | 
|   | 
| const loglevel = Object.assign(defaultLogger, { | 
|   get factories() { | 
|     return { | 
|       MethodFactory, | 
|       PrefixFactory | 
|     }; | 
|   }, | 
|   get loggers() { | 
|     return cache; | 
|   }, | 
|   getLogger(options) { | 
|     if (typeof options === 'string') { | 
|       options = { name: options }; | 
|     } | 
|   | 
|     if (!options.id) { | 
|       options.id = options.name; | 
|     } | 
|   | 
|     const { name, id } = options; | 
|     const defaults = { level: defaultLogger.level }; | 
|   | 
|     if (typeof name !== 'string' || !name || !name.length) { | 
|       throw new TypeError('You must supply a name when creating a logger'); | 
|     } | 
|   | 
|     let logger = cache[id]; | 
|   | 
|     if (!logger) { | 
|       logger = new LogLevel(Object.assign({}, defaults, options)); | 
|   | 
|       cache[id] = logger; | 
|     } | 
|   | 
|     return logger; | 
|   }, | 
|   noConflict() { | 
|     if (typeof window !== 'undefined' && window.log === defaultLogger) { | 
|       window.log = existing; | 
|     } | 
|   | 
|     return defaultLogger; | 
|   } | 
| }); | 
|   | 
| module.exports = loglevel; |