@veams/plugin-logger
Version:
The VeamsLogger plugin disables `console` logs by default. You can provide parameters (`?devmode`) in the URL to show the logs in your console.
104 lines (85 loc) • 2.31 kB
text/typescript
;
/**
* Imports
*/
import extend from "@veams/helpers/lib/object/extend";
/**
* Interfaces
*/
export interface LoggerOptions {
devmodeParam?: string,
loggerParam?: string
}
export interface Logger {
options: LoggerOptions,
pluginName: string,
initialize: any
}
/**
* Plugin
*/
const VeamsLogger: Logger = {
options: {
devmodeParam: 'devmode',
loggerParam: 'logger'
},
pluginName: 'Logger',
initialize: function (Veams, opts: LoggerOptions) {
if (opts) {
this.options = extend(this.options, opts || {});
}
/**
* Devmode and logger
*/
Veams.devmode = false;
Veams.logger = false;
if (document.location.search.indexOf(this.options.devmodeParam) > -1 ||
window.sessionStorage && sessionStorage.getItem('devmodeEnabled')) {
Veams.devmode = true;
if (window.sessionStorage && !sessionStorage.getItem('devmodeEnabled')) {
sessionStorage.setItem('devmodeEnabled', 'true');
}
document.documentElement.classList.add(this.options.devmodeParam);
}
if (document.location.search.indexOf(this.options.loggerParam) > -1) {
Veams.logger = true;
}
// hide all warnings and logs if not in devmode
if (!Veams.devmode) {
console.log = console.warn = function () {
};
}
// add console output element (triggered by parameter 'devmode' and 'logger' in url)
if (Veams.devmode && Veams.logger) {
let logger = document.createElement('pre');
logger.setAttribute('id', 'logger');
document.body.appendChild(logger);
const write = function () {
for (let i = 0; i < arguments.length; i++) {
if (typeof arguments[i] === 'object') {
logger.innerHTML +=
(JSON && JSON.stringify ? JSON.stringify(arguments[i], undefined, 2) : arguments[i]) +
'<br />';
} else {
logger.innerHTML += arguments[i] + '<br />';
}
}
logger.innerHTML += '<br />';
logger.scrollTop = logger.scrollHeight;
};
console.error = function () {
logger.innerHTML += '[Error]<br />';
write.apply(this, arguments);
};
console.warn = function () {
logger.innerHTML += '[Warn]<br />';
write.apply(this, arguments);
};
console.log = function () {
logger.innerHTML += '[Log]<br />';
write.apply(this, arguments);
};
}
}
};
export default VeamsLogger;