You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
3.8 KiB
135 lines
3.8 KiB
"use strict"; |
|
/* eslint-disable prefer-rest-params */ |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.getArrow = exports.getInstance = void 0; |
|
const util = require("util"); |
|
let loggerInstance; |
|
const defaultProvider = { |
|
// tslint:disable: no-console |
|
log: console.log, |
|
debug: console.log, |
|
info: console.info, |
|
warn: console.warn, |
|
error: console.error, |
|
}; |
|
// log level 'weight' |
|
var LEVELS; |
|
(function (LEVELS) { |
|
LEVELS[LEVELS["debug"] = 10] = "debug"; |
|
LEVELS[LEVELS["info"] = 20] = "info"; |
|
LEVELS[LEVELS["warn"] = 30] = "warn"; |
|
LEVELS[LEVELS["error"] = 50] = "error"; |
|
LEVELS[LEVELS["silent"] = 80] = "silent"; |
|
})(LEVELS || (LEVELS = {})); |
|
function getInstance() { |
|
if (!loggerInstance) { |
|
loggerInstance = new Logger(); |
|
} |
|
return loggerInstance; |
|
} |
|
exports.getInstance = getInstance; |
|
class Logger { |
|
constructor() { |
|
this.setLevel('info'); |
|
this.setProvider(() => defaultProvider); |
|
} |
|
// log will log messages, regardless of logLevels |
|
log() { |
|
this.provider.log(this._interpolate.apply(null, arguments)); |
|
} |
|
debug() { |
|
if (this._showLevel('debug')) { |
|
this.provider.debug(this._interpolate.apply(null, arguments)); |
|
} |
|
} |
|
info() { |
|
if (this._showLevel('info')) { |
|
this.provider.info(this._interpolate.apply(null, arguments)); |
|
} |
|
} |
|
warn() { |
|
if (this._showLevel('warn')) { |
|
this.provider.warn(this._interpolate.apply(null, arguments)); |
|
} |
|
} |
|
error() { |
|
if (this._showLevel('error')) { |
|
this.provider.error(this._interpolate.apply(null, arguments)); |
|
} |
|
} |
|
setLevel(v) { |
|
if (this.isValidLevel(v)) { |
|
this.logLevel = v; |
|
} |
|
} |
|
setProvider(fn) { |
|
if (fn && this.isValidProvider(fn)) { |
|
this.provider = fn(defaultProvider); |
|
} |
|
} |
|
isValidProvider(fnProvider) { |
|
const result = true; |
|
if (fnProvider && typeof fnProvider !== 'function') { |
|
throw new Error('[HPM] Log provider config error. Expecting a function.'); |
|
} |
|
return result; |
|
} |
|
isValidLevel(levelName) { |
|
const validLevels = Object.keys(LEVELS); |
|
const isValid = validLevels.includes(levelName); |
|
if (!isValid) { |
|
throw new Error('[HPM] Log level error. Invalid logLevel.'); |
|
} |
|
return isValid; |
|
} |
|
/** |
|
* Decide to log or not to log, based on the log levels 'weight' |
|
* @param {String} showLevel [debug, info, warn, error, silent] |
|
* @return {Boolean} |
|
*/ |
|
_showLevel(showLevel) { |
|
let result = false; |
|
const currentLogLevel = LEVELS[this.logLevel]; |
|
if (currentLogLevel && currentLogLevel <= LEVELS[showLevel]) { |
|
result = true; |
|
} |
|
return result; |
|
} |
|
// make sure logged messages and its data are return interpolated |
|
// make it possible for additional log data, such date/time or custom prefix. |
|
_interpolate(format, ...args) { |
|
const result = util.format(format, ...args); |
|
return result; |
|
} |
|
} |
|
/** |
|
* -> normal proxy |
|
* => router |
|
* ~> pathRewrite |
|
* ≈> router + pathRewrite |
|
* |
|
* @param {String} originalPath |
|
* @param {String} newPath |
|
* @param {String} originalTarget |
|
* @param {String} newTarget |
|
* @return {String} |
|
*/ |
|
function getArrow(originalPath, newPath, originalTarget, newTarget) { |
|
const arrow = ['>']; |
|
const isNewTarget = originalTarget !== newTarget; // router |
|
const isNewPath = originalPath !== newPath; // pathRewrite |
|
if (isNewPath && !isNewTarget) { |
|
arrow.unshift('~'); |
|
} |
|
else if (!isNewPath && isNewTarget) { |
|
arrow.unshift('='); |
|
} |
|
else if (isNewPath && isNewTarget) { |
|
arrow.unshift('≈'); |
|
} |
|
else { |
|
arrow.unshift('-'); |
|
} |
|
return arrow.join(''); |
|
} |
|
exports.getArrow = getArrow;
|
|
|