Files
Manmics/mangashelf-server/node_modules/console-wrapper/index.js
T
2025-10-10 18:00:07 -04:00

109 lines
2.3 KiB
JavaScript

// native console
const _console = console;
// ダミー用
const dummy = function(){}
// 参考: https://developer.mozilla.org/en-US/docs/Web/API/Console
const methodNameArr = [
'_exception',
'assert',
'count',
'debug',
'dir',
'dirxml',
'error',
'group',
'groupCollapsed',
'groupEnd',
'info',
'log',
'profile',
'profileEnd',
'table',
'time',
'timeEnd',
'timeStamp',
'trace',
'warn'
];
// コンストラクタ
function Console(){
this.disable();
this.status = undefined;
}
// 状態
Console.prototype.status = undefined;
// 参照用
Console.prototype._console = _console;
// extで使う引数キャッシュ
Console.prototype.cache = [];
// 通常モード
Console.prototype.enable = function(){
this.status = 'enable';
methodNameArr.forEach( (name)=>{
if( _console[name] ){
this[name] = _console[name].bind(_console);
}
});
}
// ダミーモード、標準設定
Console.prototype.disable = function(){
this.status = 'disable';
methodNameArr.forEach( (name)=>{
this[name] = dummy;
});
}
/*
拡張モード
行数はわからなくなるが任意の処理を挟めるやつ
@param {
cache: boolean,
calback: function,
disable: boolean,
result: boolean
}
.callback が関数ならmethod実行時にcallback({...})
.cache:true なら引数を保存する
.disable:true ならconsole.method()を実行しない。
.result:true なら引数を配列にして返す
@return undefined or [...arg]
*/
Console.prototype.ext = function({cache, callback, disable, result}){
this.status = 'ext';
methodNameArr.forEach( (name)=>{
this[name] = (...arg)=>{
disable===true || _console[name](...arg);
typeof callback==='function' && callback({
target: this,
timestamp: Date.now(),
type: name,
arguments: [...arg]
});
cache && this.cache.push([...arg]);
return this.result && [...arg];
}
});
}
/*
同調モード
console.sync.method();
既に設定されていればそのまま何もしない。
設定されていなければモード切替え。
*/
Console.prototype.__defineGetter__('sync', function(){
return this.status ?
{ext:dummy, enable:dummy, disable:dummy}:
this;
});
module.exports = new Console();