| 'use strict';
 
/**
 * @name Level
 * @namespace Log4js
 */
class Level {
  constructor(level, levelStr) {
    this.level = level;
    this.levelStr = levelStr;
  }
 
  toString() {
    return this.levelStr;
  }
 
  isLessThanOrEqualTo(otherLevel) {
    Iif (typeof otherLevel === 'string') {
      otherLevel = toLevel(otherLevel);
    }
    return this.level <= otherLevel.level;
  }
 
  isGreaterThanOrEqualTo(otherLevel) {
    if (typeof otherLevel === 'string') {
      otherLevel = toLevel(otherLevel);
    }
    return this.level >= otherLevel.level;
  }
 
  isEqualTo(otherLevel) {
    if (typeof otherLevel === 'string') {
      otherLevel = toLevel(otherLevel);
    }
    return this.level === otherLevel.level;
  }
 
}
 
/**
 * converts given String to corresponding Level
 * @param {Level|String} sArg -- String value of Level OR Log4js.Level
 * @param {Level} [defaultLevel] -- default Level, if no String representation
 * @return {Level}
 */
function toLevel(sArg, defaultLevel) {
  Iif (!sArg) {
    return defaultLevel;
  }
 
  Iif (sArg instanceof Level) {
    module.exports[sArg.toString()] = sArg;
    return sArg;
  }
 
  Eif (typeof sArg === 'string') {
    return module.exports[sArg.toUpperCase()] || defaultLevel;
  }
 
  return toLevel(sArg.toString());
}
 
function getLevel(levelStr) {
  let level;
  if (typeof levelStr === 'string') {
    const levelUpper = levelStr.toUpperCase();
    level = toLevel(levelUpper);
  }
  return level;
}
 
module.exports = {
  ALL: new Level(Number.MIN_VALUE, 'ALL'),
  TRACE: new Level(5000, 'TRACE'),
  DEBUG: new Level(10000, 'DEBUG'),
  INFO: new Level(20000, 'INFO'),
  WARN: new Level(30000, 'WARN'),
  ERROR: new Level(40000, 'ERROR'),
  FATAL: new Level(50000, 'FATAL'),
  MARK: new Level(9007199254740992, 'MARK'), // 2^53
  OFF: new Level(Number.MAX_VALUE, 'OFF'),
  toLevel: toLevel,
  Level: Level,
  getLevel: getLevel
};
  |