analogger 2.9.1 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/ana-logger.d.cts +4 -0
- package/browser/ana-logger.mjs +13 -0
- package/dist/analogger-browser.min.mjs +1 -1
- package/dist/html-to-image-plugin.min.mjs +1 -1
- package/esm/ana-logger.mjs +13 -0
- package/package.json +1 -1
- package/src/ana-logger.cjs +13 -0
package/README.md
CHANGED
|
@@ -418,6 +418,7 @@ Display the browser native message box if run from it; otherwise, it displays th
|
|
|
418
418
|
| addArchiveTimestamp | true | boolean | _Appends a consistent timestamp to rotated files_ |
|
|
419
419
|
| forceLidOn | false | boolean | _Automatically generates a short hash LID if one isn't provided_ |
|
|
420
420
|
| only | undefined | string/Regex/Array | Filter logs to show only those matching specific IDs or patterns |
|
|
421
|
+
| resetOrder | undefined | boolean | Resets the internal tracking for the order sequence |
|
|
421
422
|
| order | undefined | number | _Enforce call order — emits a console warning if a log with a lower order value appears after one with a higher value_ |
|
|
422
423
|
| maxSeen | undefined | number | _Emits a console warning when the same lid is logged more times than this limit_ |
|
|
423
424
|
| test | undefined | boolean / () => boolean | _Records a pass/fail result for the log call; emits a warning immediately on failure. Use_ `report()` _to see the full summary_ |
|
package/ana-logger.d.cts
CHANGED
|
@@ -319,6 +319,10 @@ declare class ____AnaLogger {
|
|
|
319
319
|
checkOnLogging(context: any, data: any, extras: any, callbackName: any): any;
|
|
320
320
|
isContextMessagePattern(str: any): boolean;
|
|
321
321
|
transformContextMessage(template: any, data: any): any;
|
|
322
|
+
/**
|
|
323
|
+
* Resets the order tracking.
|
|
324
|
+
*/
|
|
325
|
+
resetOrder(): void;
|
|
322
326
|
/**
|
|
323
327
|
* Print a summary of all test results collected via the "test" context option.
|
|
324
328
|
* If any test failed the banner and counts are printed in bold red (Node) or
|
package/browser/ana-logger.mjs
CHANGED
|
@@ -2605,6 +2605,14 @@ class ____AnaLogger
|
|
|
2605
2605
|
return result;
|
|
2606
2606
|
}
|
|
2607
2607
|
|
|
2608
|
+
/**
|
|
2609
|
+
* Resets the order tracking.
|
|
2610
|
+
*/
|
|
2611
|
+
resetOrder()
|
|
2612
|
+
{
|
|
2613
|
+
this._lastOrderEntry = null;
|
|
2614
|
+
}
|
|
2615
|
+
|
|
2608
2616
|
/**
|
|
2609
2617
|
* Check that log calls with an "order" property arrive in non-decreasing order.
|
|
2610
2618
|
* When a call with a lower order value appears after one with a higher order value,
|
|
@@ -2615,6 +2623,11 @@ class ____AnaLogger
|
|
|
2615
2623
|
*/
|
|
2616
2624
|
#checkOrder(context)
|
|
2617
2625
|
{
|
|
2626
|
+
if (context.resetOrder)
|
|
2627
|
+
{
|
|
2628
|
+
this.resetOrder();
|
|
2629
|
+
}
|
|
2630
|
+
|
|
2618
2631
|
if (context.order === undefined || context.order === null)
|
|
2619
2632
|
{
|
|
2620
2633
|
return;
|
|
@@ -5,7 +5,7 @@ var St=Object.defineProperty;var xt=(i,e,t)=>e in i?St(i,e,{enumerable:!0,config
|
|
|
5
5
|
`);let v=parseInt(p.pop()),w=parseInt(p.pop()),S=p.pop(),N=p.pop().split(" "),F=null;for(let _=0;_<N.length;_++){let I=N[_];if(!!I&&I.indexOf("at")!==0){F=I;break}}o={file:S,line:w,col:v,method:F,isMinified:n,stack:r};break}return o}}}catch{}return null}function Xe(i=8){try{let e=Ne();if(!e)return`LID${Date.now()}`;let n=e.method.split(".")[0].toUpperCase().substring(0,3);if(n.length>=i)return n.substring(0,i);let o=`${n}:${e.line}`;if(o.length>=i)return o=o.replaceAll(":",""),o.substring(0,i);let r=`${n}:${e.line}:${e.col}`;return r.length>i?r.substring(0,i).endsWith(":")?`${n}${e.line}:${e.col}`.substring(0,i):r.substring(0,i):`${n}${e.line}:${e.col}`.substring(0,i)}catch{return`ERR_LID${Date.now()}`}}function Qe(){return typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node<"u"?J.NODE:J.BROWSER}var zt=Qe();function qt(){return zt===J.NODE}var Vt=["alert","assert","keepLogHistory","getLogHistory","truncateMessage","truncateMessage","rawLog","removeOverride","removeOverrideError","overrideConsole","overrideError","table","rawInfo","rawWarn","rawError","hasSeenLid","addToLogHistory","releaseLogHistory","resetLogHistory","setLogFormat","resetLogFormatter","getRawLogHistory","restoreLogs"],X,$,k,B,M,ae,Ze,le,et,ce,tt,ue,nt,fe,ot,Fe,Wt,Q,Me,de,rt,z,se,he,it,ge,st,pe,at,me,lt,f=class{constructor({name:e="default"}={}){T(this,ae);T(this,le);T(this,ce);T(this,ue);T(this,fe);T(this,Fe);T(this,Q);T(this,de);T(this,z);T(this,he);T(this,ge);T(this,pe);T(this,me);y(this,"system","");y(this,"instanceId","");y(this,"instanceName","");y(this,"logIndex",0);y(this,"logCounter",0);T(this,$,[]);T(this,k,{...C});T(this,B,{});y(this,"activeTargets",[Object.values(C)]);y(this,"indexColor",0);y(this,"format","");y(this,"keepLog",!1);y(this,"logHistory",[]);y(this,"$containers",null);y(this,"options",{hideHookMessage:!1});y(this,"remoteBuffer",[]);y(this,"remoteTimer",null);T(this,M,{log:!1,info:!1,warn:!1,error:!1});y(this,"originalFormatFunction");y(this,"forceLidOn",!1);y(this,"resolveLineCall",!1);y(this,"resolveErrorLineCall",!1);y(this,"removeDomOldEntries",e=>{if(e.childElementCount>xe){let n=Math.ceil(xe/10);for(let o=0;o<n;++o)e.removeChild(e.firstChild);return n}return 0});y(this,"scrollDivToBottom",e=>{let t=e.scrollHeight-(e.clientHeight+e.scrollTop),n=e.clientHeight||e.offsetHeight;t>n/2||(e.scrollTop=e.scrollHeight)});this.system=Qe(),this.format=this.onBuildLog.bind(this),this.originalFormatFunction=this.format,this.instanceName=e,this.instanceId=f.instanceCount+"-"+Date.now(),L(f,X)[f.instanceCount]=this,++f.instanceCount,this.errorTargetHandler=this.onError.bind(this),this.errorUserTargetHandler=this.onErrorForUserTarget.bind(this),this.remoteBuffer=[],this.remoteTimer=null,this.setOptions(this.options),f.Console||(f.Console={log:console.log,info:console.info,warn:console.warn,error:console.error,debug:console.debug,table:console.table}),this.rawLog=f.Console.log,this.rawInfo=f.Console.info,this.rawWarn=f.Console.warn,this.rawError=f.Console.error,this.ALIGN=f.ALIGN,this.ENVIRONMENT_TYPE=f.ENVIRONMENT_TYPE,O(this,me,lt).call(this),this.resetLogHistory(),this._localOnlyFilter=void 0,this._localOnlyLabel=void 0,this._lastOrderEntry=null,this._seenCount={},this._testResults=[]}getName(){return this.instanceName}getId(){return this.instanceId}forceLid(e=!0){this.forceLidOn=!!e}forceResolveLineCall(e=!0){this.resolveLineCall=!!e}forceResolveErrorLineCall(e=!0){this.resolveErrorLineCall=!!e}importLids(e){for(let t in e){let n=e[t]||{};n.lid=n.lid||t,n.callCount=0,n.callTimes=[],f.lidTable[t]=n}f.lidTableOn=!0}loadLids(e){e=e||{},this.importLids(e)}convertTimestampToDate(e){let t=new Date(e),n=t.getFullYear(),o=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0"),s=String(t.getHours()).padStart(2,"0"),a=String(t.getMinutes()).padStart(2,"0"),u=String(t.getSeconds()).padStart(2,"0"),l=String(t.getMilliseconds()).padStart(3,"0");return`${n}-${o}-${r} ${s}:${a}:${u}.${l}`}getLids(){let e={...ct.lidTable};for(let t in e){let n=e[t]||{};if(n.callTimes.length){n.dates=[];for(let o=0;o<n.callTimes.length;++o){let r=n.callTimes[o],s=this.convertTimestampToDate(r);n.dates.push(s)}}}return e}keepLogHistory(){this.keepLog=!0}releaseLogHistory(){this.keepLog=!1}resetLogHistory(){this.logHistory=[]}addToLogHistory(e){e=e||{},this.logHistory.push(Object.assign({},e))}getLogHistory(e=!0,t=_t){let n=this.logHistory||[],o=[];return n.forEach(r=>{let{text:s}=r;o.push(s)}),e?o.join(t):o}getRawLogHistory(){return this.logHistory||[]}hasSeenLid(e){this.logHistory=this.logHistory||[];for(let t=0;t<this.logHistory.length;++t){let o=(this.logHistory[t]||{}).context||{};if(e===o.lid)return!0}return!1}forceEnvironment(e){this.forcedSystem=e}isNode(){return this&&this.forcedSystem?this.forcedSystem===J.NODE:qt()}isBrowser(){return!this.isNode()}getUid(){if(!this.isBrowser()||typeof window>"u"||!window.localStorage)return null;let e="analogger-uid",t=window.localStorage.getItem(e);return t||(t="uid-"+Date.now()+"-"+Math.floor(Math.random()*1e6),window.localStorage.setItem(e,t)),t}resetLogger(){this.options={},this.options.timeLenMax=12,this.options.contextLenMax=10,this.options.idLenMax=5,this.options.lidLenMax=6,this.options.only=void 0,this.options.messageLenMax=void 0,this.options.symbolLenMax=60,this.options.hideHookMessage=void 0,this.options.hidePassingTests=void 0,this.options.hideLog=void 0,this.options.hideError=void 0,this.options.oneConsolePerContext=!0,this.options.logToDom=void 0,this.options.logToFile=void 0,this.options.logMaxSize=0,this.options.logMaxArchives=3,this.options.logIndexArchive=0,this.options.logToRemote=void 0,this.options.addArchiveTimestamp=!0,this.options.addArchiveIndex=!0,this.options.logToRemoteUrl=void 0,this.options.logToRemoteBinaryUrl=void 0,this.options.compressArchives=!1,this.options.compressionLevel=1,this.options.protocol=void 0,this.options.host=void 0,this.options.port=void 0,this.options.pathname=void 0,this.options.binarypathname=void 0,this.options.enableDate=void 0,this.options.enableMillisec=void 0,this.options.logToLocalStorage=void 0,this.options.logToLocalStorageMax=50,this.options.logToLocalStorageSize=1e4,this.options.logToRemoteMaxEntries=void 0,this.options.logToRemoteDebounce=void 0,this.options.logToRemoteMaxSize=void 0,this.options.logToRemoteMinSize=void 0,this.options.logUidToRemote=void 0,this.remoteBuffer=[],this.remoteTimer=null,this.remoteWaitCount=0}resetOptions(){this.resetLogger()}setOptions({timeLenMax:e=void 0,contextLenMax:t=10,idLenMax:n=5,lidLenMax:o=6,only:r=void 0,symbolLenMax:s=2,enableTrace:a=!0,messageLenMax:u=void 0,hideLog:l=void 0,hideError:d=void 0,hideHookMessage:h=void 0,hidePassingTests:g=void 0,logToDom:p=void 0,logToFile:v=void 0,logMaxSize:w=0,logMaxArchives:S=3,logIndexArchive:m=0,addArchiveTimestamp:N=!0,addArchiveIndex:F=!0,compressArchives:_=!1,compressionLevel:I=1,logToRemote:b=void 0,logToRemoteUrl:P=void 0,logToRemoteBinaryUrl:q=void 0,loopback:ye=A.loopback,requiredLogLevel:be=E.LOG,oneConsolePerContext:ve=void 0,silent:$e=void 0,enableDate:ut=void 0,enableMillisec:Ie=void 0,logToLocalStorage:ft=void 0,logToLocalStorageMax:dt=50,logToLocalStorageSize:ht=1e4,logToRemoteMaxEntries:gt=void 0,logToRemoteDebounce:pt=void 0,logToRemoteMaxSize:mt=void 0,logToRemoteMinSize:yt=void 0,logUidToRemote:De=void 0,protocol:bt=void 0,host:vt=void 0,port:Lt=void 0,pathname:Tt=void 0,binarypathname:Et=void 0,loadHtmlToImage:wt=!1}=null){if(this.options.contextLenMax=t,this.options.idLenMax=n,this.options.lidLenMax=o,this.options.only=r,this.options.messageLenMax=u,this.options.symbolLenMax=s,this.options.enableMillisec=Ie,this.options.timeLenMax=e,this.options.logMaxSize=w,this.options.logMaxArchives=S,this.options.logIndexArchive=m,this.options.addArchiveTimestamp=N,this.options.addArchiveIndex=F,this.options.compressArchives=_,this.options.compressionLevel=I,this.options.requiredLogLevel=be,this.options.enableTrace=a,this.options.enableMillisec=Ie,this.options.enableMillisec&&(this.options.timeLenMax+=4),this.options.logToLocalStorageMax=dt,this.options.logToLocalStorageSize=ht,this.options.logToRemote=b,this.options.logToRemoteUrl=P,this.options.logToRemoteBinaryUrl=q,this.options.logToRemoteMaxEntries=gt,this.options.logToRemoteDebounce=pt,this.options.logToRemoteMaxSize=mt,this.options.logToRemoteMinSize=yt,this.options.logUidToRemote=De,wt){let H=jt();Ut(H)}let Le;$e!==void 0?Le=!!$e:l!==void 0&&(Le=!!l),[{hideLog:Le},{oneConsolePerContext:ve},{hideError:d},{enableDate:ut},{hideHookMessage:h},{hidePassingTests:g},{logToRemote:b},{logToLocalStorage:ft},{logUidToRemote:De}].forEach(H=>{let V=Object.keys(H)[0],W=H[V];W!==void 0&&(this.options[V]=!!W)}),[{logToRemoteBinaryUrl:q},{logToRemoteUrl:P},{loopback:ye},{protocol:bt},{host:vt},{port:Lt},{pathname:Tt},{binarypathname:Et}].forEach(H=>{let V=Object.keys(H)[0],W=H[V];W!==void 0&&(this.options[V]=W)}),this.options.enableDate&&this.options.timeLenMax===void 0&&(this.options.timeLenMax=17),this.options.timeLenMax===void 0&&(this.options.enableDate?this.options.timeLenMax=17:this.options.timeLenMax=8),this.options.logToRemote&&!this.options.logToRemoteUrl&&(this.options.logToRemoteUrl=this.convertToUrl({protocol:this.options.protocol,host:this.options.host,port:this.options.port,pathname:this.options.pathname})),this.options.logToRemote&&!this.options.logToRemoteBinaryUrl&&(this.options.logToRemoteBinaryUrl=this.convertToUrl({protocol:this.options.protocol,host:this.options.host,port:this.options.port,pathname:this.options.binarypathname||A.binarypathname})),p===!1?this.options.logToDom=!1:p!==void 0&&(this.options.logToDom=p===!0?A.consoleDomId:p),v===!1?this.options.logToFile=!1:v!==void 0&&(this.isBrowser()||(this.options.logToFile=v||A.logFilename),f.Console.log("LogToFile is not supported in this environment. "))}updateOptions(e){this.setOptions({...this.options,...e})}getOptions(){return this.options}truncateMessage(e="",{fit:t=0,align:n=f.ALIGN.LEFT,ellipsis:o="..."}={}){return e=""+e,t&&e.length>t&&(e=e.substring(0,t-o.length)+o),e=n===f.ALIGN.LEFT?e.padEnd(t," "):e.padStart(t," "),e}onBuildLog(e={}){try{let{contextName:t,message:n="",lid:o="",symbol:r=""}=e,s="",a=n.split(/\n/g);for(let u=0;u<a.length;++u){let l=a[u],d=new Date,h=("0"+d.getHours()).slice(-2)+":"+("0"+d.getMinutes()).slice(-2)+":"+("0"+d.getSeconds()).slice(-2);(e.hasOwnProperty("enableMillisec")?e.enableMillisec:this.options.enableMillisec)&&(h+=","+("00"+d.getMilliseconds()).slice(-3)),(e.hasOwnProperty("enableDate")?e.enableDate:this.options.enableDate)&&(h=d.getFullYear().toString().slice(-2)+"-"+(d.getMonth()+1).toString().padStart(2,"0")+"-"+d.getDate().toString().padStart(2,"0")+" "+h);let v=e.hasOwnProperty("timeLenMax")?e.timeLenMax:this.options.timeLenMax;h=this.truncateMessage(h,{fit:v}),u>0&&(t="",o=""),t=this.truncateMessage(t,{fit:this.options.contextLenMax,align:f.ALIGN.RIGHT}),o=this.truncateMessage(o,{fit:this.options.lidLenMax}),(e.hasOwnProperty("messageLenMax")?e.messageLenMax:this.options.messageLenMax)!==void 0&&(l=this.truncateMessage(l,{fit:this.options.messageLenMax})),r=this.truncateMessage(r,{fit:this.options.symbolLenMax}),u<=0?s+=`[${h}] ${t}: (${o}) ${r} ${l}`:u<a.length-1?(s+=`
|
|
6
6
|
`,s+=`[${h}] ${t} ${o} ${l}`):l&&(s+=`
|
|
7
7
|
`,s+=`[${h}] ${t} ${o} ${l}`)}return s}catch(t){f.Console.error(`ANALOGGER_FAILURE_1001: ${t.message}`)}return""}onErrorForUserTarget(e,...t){this.errorUserTargetHandler(e,...t)}onError(e,...t){e.target===L(this,k).USER&&this.onErrorForUserTarget(e,...t)}onDisplayLog(...e){this.log(...e)}assistStask(e){try{let t=e.stack.split(`
|
|
8
|
-
`),n=[];for(let o=0;o<t.length;++o){let r=t[o];n.push(r)}return n}catch(t){f.Console.error(`ANALOGGER_FAILURE_1002: ${t.message}`)}return e.message}onDisplayError(...e){try{let t=-1,n=null;for(let o=0;o<e.length;++o){let r=e[o];if(r instanceof Error&&r.stack){t=o,n=this.assistStask(r)||[];break}}if(!n){this.error(...e);return}for(let o=0;o<n.length;++o)e[t]=n[o],this.error(...e)}catch(t){f.Console.error(`ANALOGGER_FAILURE_1003: ${t.message}`)}}setLogFormat(e){if(typeof e!="function")return console.error("Invalid parameter for setFormat. It is expecting a function or method."),!1;this.format=e.bind(this)}resetLogFormatter(){this.format=this.originalFormatFunction}setErrorHandler(e){this.errorTargetHandler=e.bind(this)}setErrorHandlerForUserTarget(e){this.errorUserTargetHandler=e.bind(this)}isContextValid(e){return typeof e=="object"&&!Array.isArray(e)&&e!==null?e.hasOwnProperty("contextName")&&e.hasOwnProperty("target"):!1}setDefaultContext(e){this.setContext(K.DEFAULT.contextName,e)}generateDefaultContext(){let e=L(this,$)[K.DEFAULT.contextName]||{};return e=Object.assign({},{lid:"",contextName:K.DEFAULT.contextName,target:C.ALL,symbol:"\u26A1",color:G[1],logLevel:E.LOG},e),e.name=e.contextName,e.id=this.logIndex++,e}generateNewContext(){let e=this.generateDefaultContext();return e.color=G[this.indexColor++%(G.length-3)+2],e.symbol="",e}generateErrorContext(){let e=this.generateDefaultContext();return e.contextName=K.ERROR.contextName,e.name=e.contextName,e.color=G[0],e.symbol="\u274C",e.error=!0,e.logLevel=E.ERROR,e}setContext(e,t={}){t.contextName=e,t.name=e,t=O(this,ae,Ze).call(this,t),L(this,$)[e]=t}getContext(e){return L(this,$)[e]}setContexts(e){Object.keys(e).forEach(n=>{let o=e[n]||{};this.setContext(n,o),e[n]=L(this,$)[n]})}getContexts(){return Object.freeze(L(this,$))}setTargets(e={}){let t={};if(Array.isArray(e))try{for(let n=0;n<e.length;++n){let o=e[n];if(typeof o=="string"||o instanceof String)t[o]=o;else if(typeof o=="object"){let r=null;for(let s in o){let a=o[s];if(s=s.trim(),!s){console.error("Invalid target");break}if(typeof a=="string"||a instanceof String){a=a.trim(),r=[s,a];break}if(typeof a=="number")break}r&&(t[r[0]]=r[1])}}}catch(n){console.error({lid:4321},n.message)}else t=e;Ee(this,k,Object.assign({},t,{...C}))}addTargets(e){let t=L(this,k),n=Object.assign({},t,e);this.setTargets(n)}getTargets(){return Object.freeze(L(this,k))}setActiveTargets(e=null){if(e==null){this.activeTargets=[C.ALL];return}if(typeof e=="function"&&(e=e.call(this)),e===null){this.activeTargets=[C.ALL];return}else if(typeof e=="string"||e instanceof String)e=e.split(",");else if(typeof e=="function")e=e.call(this);else if(typeof e=="object")e=Object.values(e);else if(!Array.isArray(e))return;let t=[];for(let n=0;n<e.length;++n){let o=e[n].trim();Object.values(L(this,k)).includes(o)&&t.push(o)}this.activeTargets=t}getActiveTargets(){return this.activeTargets}getActiveTarget(){return(this.getActiveTargets()||[])[0]||C.NONE}setActiveTarget(e){this.activeTargets=[],this.setActiveTargets(e);let t=this.activeTargets[0]||C.NONE;this.activeTargets=[t]}setLogLevel(e,t){L(this,B)[e]=t}getLogLevel(e){return L(this,B)[e]}setLogLevels(e){Ee(this,B,e)}getLogLevels(){return Object.freeze(L(this,B))}isTargetAllowed(e){return e===C.NONE?!1:e===C.ALL||this.getActiveTarget()===C.ALL?!0:this.activeTargets.includes(e)}getCurrentTime(){let e=new Date,t=String(e.getHours()).padStart(2,"0"),n=String(e.getMinutes()).padStart(2,"0"),o=String(e.getSeconds()).padStart(2,"0");return`${t}:${n}:${o}`}getCurrentDate(){let e=new Date,t=String(e.getDate()).padStart(2,"0"),n=String(e.getMonth()+1).padStart(2,"0"),o=String(e.getFullYear()).slice(-2);return`${t}-${n}-${o}`}setColumns(e,t,n){let o=1,r=!1;for(let a in t){if(!["contextName","symbol","lid","text","enableDate","enableTime"].includes(a))continue;let u=t[a];a==="enableDate"&&(u=this.getCurrentDate()+" "+this.getCurrentTime()),a==="enableTime"&&(u=this.getCurrentTime());let l=document.createElement("span");l.classList.add("analogger-col",`analogger-col-${a}`,`analogger-col-${o}`),++o,a!=="enableDate"&&a!=="enableTime"?(l.textContent=u,e.append(l)):(l.textContent=`[${u}]`,r=l)}r&&(r.classList.add("analogger-col","analogger-col-time","analogger-col-0"),e.prepend(r));let s=document.createElement("span");s.classList.add("analogger-col","analogger-col-text",`analogger-col-${o}`),s.textContent=n,e.append(s);for(let a=1;a<=3;++a)s=document.createElement("span"),s.classList.add("analogger-col","analogger-col-extra",`analogger-extra-${a}`),e.append(s)}checkOnLoggingToDom(e,t){try{let n=e.onLoggingToDom;return typeof n!="function"?void 0:n.call(this,e,t)}catch{}}addLineToDom(e,t,{context:n,addType:o,message:r,text:s,args:a}){if(this.checkOnLoggingToDom(n,{message:r,text:s,args:a,logCounter:this.logCounter,$view:e,$line:t,addType:o})===!1)return;if(o===oe.BOTTOM?e.append(t):e.insertBefore(t,e.firstChild),this.removeDomOldEntries(e)){if(e.getElementsByClassName(Oe).length)return;this.showRemovedNotification(n);return}this.scrollDivToBottom(e)}showRemovedNotification(e){e.contextName=Ve,e.symbol="\u{1F5D1}",e.color="orange",e.className=Oe,clearTimeout(this.timerAddLineToDomID),this.timerAddLineToDomID=setTimeout(()=>{this.timerAddLineToDomID=null,this.writeLogToDom(e,"",{addType:oe.TOP,message:"Oldest entries removed"})},500)}writeLogToDom(e,t,{addType:n=oe.BOTTOM,message:o="",args:r=null}={}){(!this.$containers||!this.$containers.length)&&(this.$containers=document.querySelectorAll(this.options.logToDom)),t=o||t;for(let s=0;s<this.$containers.length;++s){let a=this.$containers[s],u=a.querySelector("."+Re);u||(u=document.createElement("div"),u.classList.add(Re),u.append(document.createElement("span")),u.append(document.createElement("span")),u.append(document.createElement("span")),a.append(u));let l=a.querySelector("."+Ae);l||(l=document.createElement("div"),l.classList.add(Ae),a.append(l));let d=a.querySelector("."+Ce);d||(d=document.createElement("div"),d.classList.add(Ce),d.append(document.createElement("span")),d.append(document.createElement("span")),d.append(document.createElement("span")),a.append(d));let h=document.createElement("div");h.classList.add(qe),e.className&&h.classList.add(e.className),h.style.color=e.color,this.setColumns(h,e,t,r),setTimeout(function(g,p,{addType:v,context:w,message:S,text:m,args:N}){this.addLineToDom(g,p,{addType:v,context:w,message:S,text:m,args:N})}.bind(this,l,h,{addType:n,context:e,message:o,text:t,args:r}),0)}}writeLogToFile(e){try{if(!fs.existsSync(this.options.logToFilePath)){let t=path.dirname(this.options.logToFilePath);fs.existsSync(t)||fs.mkdirSync(t,{recursive:!0}),fs.writeFileSync(this.options.logToFilePath,"")}if(this.options.logMaxSize&&fs.statSync(this.options.logToFilePath).size>this.options.logMaxSize){this.options.logIndexArchive<this.options.logMaxArchives?++this.options.logIndexArchive:this.options.logIndexArchive=1;let o=this.options.logMaxArchives.toString().length+1,{filePath:r,extension:s,basename:a,dirname:u}=Pt(this.options.logToFilePath),l,d;l=this.options.addArchiveIndex?"."+this.options.logIndexArchive.toString().padStart(o,"0"):"",d=this.options.addArchiveTimestamp?"."+Ht():"";let h=`${r}${d}${l}${s}`,g=this.options.compressArchives?`${r}.tar.gz`:"";Bt(u,a,l,s,g,this.options.compressionLevel,p=>{p&&console.error("DELETION_FAILURE: Failed to delete some files")}),fs.renameSync(this.options.logToFilePath,h),fs.writeFileSync(this.options.logToFilePath,"")}fs.appendFileSync(this.options.logToFilePath,e+this.EOL)}catch(t){f.Console.error("LOG_TO_FILE_FAILURE: ",t.message)}}writeLogToRemote(...e){try{if(this.options.logToRemoteMaxEntries===void 0&&this.options.logToRemoteDebounce===void 0&&this.options.logToRemoteMaxSize===void 0){this.performRemotePost([...e]);return}if(Array.isArray(this.remoteBuffer)){if(this.remoteBuffer.push([...e]),this.options.logToRemoteMaxEntries!==void 0&&this.remoteBuffer.length>=this.options.logToRemoteMaxEntries){this.flushRemoteLogs(!0);return}if(this.options.logToRemoteMaxSize!==void 0&&JSON.stringify(this.remoteBuffer).length>=this.options.logToRemoteMaxSize){this.flushRemoteLogs(!0);return}}this.options.logToRemoteDebounce!==void 0&&!this.remoteTimer&&(this.remoteTimer=setTimeout(()=>{this.flushRemoteLogs()},this.options.logToRemoteDebounce))}catch(t){f.Console.error("LOG_TO_REMOTE_FAILURE: ",t.message)}}flushRemoteLogs(e=!1){if(this.remoteBuffer.length===0)return;if(!e&&this.options.logToRemoteMinSize!==void 0&&JSON.stringify(this.remoteBuffer).length<this.options.logToRemoteMinSize&&(this.remoteWaitCount=(this.remoteWaitCount||0)+1,this.remoteWaitCount<2)){this.options.logToRemoteDebounce!==void 0&&(this.remoteTimer&&clearTimeout(this.remoteTimer),this.remoteTimer=setTimeout(()=>{this.flushRemoteLogs()},this.options.logToRemoteDebounce));return}this.remoteTimer&&(clearTimeout(this.remoteTimer),this.remoteTimer=null),this.remoteWaitCount=0;let t=[...this.remoteBuffer];this.remoteBuffer=[],this.performRemotePost(t)}performRemotePost(e){try{let t=this.generateLogToRemoteUrl(this.options.logToRemoteUrl);if(!t)return null;let n=JSON.stringify(e);fetch(t,{method:"post",body:n,headers:{"Content-Type":"application/json"}}).then(o=>o.json()).catch(()=>null)}catch(t){f.Console.error("REMOTE_POST_FAILURE: ",t.message)}}writeLogToLocalStorage(e,...t){try{if(!this.isBrowser()||!window.localStorage)return;let n=`analogger_history_${this.instanceName}`,o=[];try{let u=localStorage.getItem(n);u&&(o=JSON.parse(u))}catch{o=[]}o.push({context:e,args:t});let r=this.options.logToLocalStorageMax||50;o.length>r&&(o=o.slice(o.length-r));let s=this.options.logToLocalStorageSize||1e4,a=JSON.stringify(o);for(;a.length>s&&o.length>1;)o.shift(),a=JSON.stringify(o);localStorage.setItem(n,a)}catch(n){f.Console.error("LOG_TO_LOCAL_STORAGE_FAILURE: ",n.message)}}restoreLogs(){try{if(!this.isBrowser()||!window.localStorage)return;let e=`analogger_history_${this.instanceName}`,t=localStorage.getItem(e);if(!t)return;let n=JSON.parse(t);if(!Array.isArray(n))return;let o=this.options.logToLocalStorage;this.options.logToLocalStorage=!1,n.forEach(r=>{let{context:s,args:a}=r;s&&(s.symbol="floppy_disk",delete s.order,delete s.maxSeen,delete s.test),this.processOutput(s,...a)}),this.options.logToLocalStorage=o}catch(e){f.Console.error("RESTORE_LOGS_FAILURE: ",e.message)}}uploadDataToRemote(e,t=null,n=null){try{if(!this.options.logToRemote)return;let o=this.generateLogToRemoteUrl(this.options.logToRemoteBinaryUrl,{pathname:A.binarypathname});if(!o)return null;let r=e;t&&(r=JSON.stringify({raw:e,context:t})),fetch(o,{method:"post",body:r}).then(s=>s.json()).then(s=>n&&n(s)).catch(s=>s)}catch(o){f.Console.error("BINARY_TO_REMOTE_FAILURE: ",o.message)}}stringifyEntry(e){let t;try{t=JSON.stringify(e)}catch{}if(!t)try{t=Je(e)}catch{}return t}convertEntry(e){try{if(e==null||e==="")return e;if(typeof e=="boolean")return e;if(typeof e=="symbol"||typeof e=="number")return e;if(typeof e=="string"||myVar instanceof e)return e;if(e instanceof Date)return e}catch{}return this.stringifyEntry(e)}convertArgumentsToText(e){let t=[],n,o=e.length;for(let r=0;r<o;++r){let s,a=e[r];s=this.convertEntry(a),t.push(s)}return n=t.join("\u2022"),n}writeToConsole(e,t){let n=[e];this.isBrowser()&&n.push(`color: ${t.color}`);let o=t.contextLevel||E.LOG;o>=E.ERROR?f.Console.error(...n):o>=E.WARN?f.Console.warn(...n):o>=E.INFO?f.Console.info(...n):o>=E.LOG?f.Console.log(...n):o>=E.DEBUG&&f.Console.debug(...n)}checkPlugins(e,{message:t,text:n,args:o,logCounter:r}){try{if(!Object.keys(f.pluginTable).length)return;let s=!0;for(let a in e){let u=e[a];if(!u)continue;let l=f.pluginTable[a];if(!l||typeof l!="object")continue;let{callback:d,methodName:h,type:g}=l;if(typeof d!="function")continue;d.call(this,e,{message:t,text:n,args:o,logCounter:r,methodName:h,type:g,pluginOptions:u})===!1&&(s=!1)}return s}catch{}}checkOnLogging(e,t,n,o){if(!!o)try{let r=e[o];return typeof r!="function"?void 0:r.call(this,t,n)}catch{}}isContextMessagePattern(e){return/\{\{[^}]+}}/.test(e)}transformContextMessage(e,t){let n=e;for(let o in t){let r=`{{${o}}}`,s=t[o];n=n.replaceAll(r,s)}return n}report(){let e=this._testResults.length,t=this._testResults.filter(u=>u.passed).length,n=e-t,o=n>0,r="================== ANALOGGER TEST RESULT ================",s="==========================================================",a=[r,` Total : ${e}`,` Passed : ${t}`,` Failed : ${n}`,s];if(this.isBrowser()){let u=o?"color: red; font-weight: bold;":"color: green; font-weight: bold;";a.forEach(l=>f.Console.log(`%c${l}`,u))}else a.forEach(u=>{let l=Y.getTextFromColor(u,{fg:o?"#FF0000":"#00CC44",isBold:!0});f.Console.log(l)});return{total:e,passed:t,failed:n}}processOutput(e={},...t){try{let n="";if(f.lidTableOn&&e.lid){let l=f.lidTable[e.lid];l?(e.message=e.message||l.message,l.callCount=l.callCount||0,++l.callCount,l.callTimes.push(Date.now())):f.lidTable[e.lid]={...e,message:t[0],lid:e.lid,callCount:1,callTimes:[Date.now()]}}if(e.message&&(this.isContextMessagePattern(e.message)&&t.length>=1&&typeof t[0]=="object"&&(e.message=this.transformContextMessage(e.message,t[0]),t.shift()),t.unshift(e.message)),this.applySymbolByName(e),this.checkOnLogging(e,e,t,"onContext"),!this.isTargetAllowed(e.target)||e.logLevel===E.OFF||this.options.requiredLogLevel>e.logLevel||this.options.only!==void 0&&this.options.only!==null&&!(Array.isArray(this.options.only)?this.options.only:[this.options.only]).some(h=>{let g=e.lid||"",p=e.only||"";return h instanceof RegExp?h.test(g)||h.test(p):typeof h=="string"?g.includes(h)||p.includes(h):h===g||h===p})||!O(this,fe,ot).call(this,e))return;O(this,le,et).call(this,e),O(this,ce,tt).call(this,e);let o=this.checkOnLogging(e,t[0],arguments,"onMessage");o!==void 0&&(arguments[1]=o);let r=t;n=this.convertArgumentsToText(r),O(this,ue,nt).call(this,e,n),this.options.logUidToRemote&&(e.uid=this.getUid());let s="",a=this.format({...e,message:n});this.keepLog&&this.addToLogHistory({context:e,message:n,text:a}),++this.logCounter;let u=this.checkOnLogging(e,a,{message:n,args:r,logCounter:this.logCounter},"onOutput");if(u===!1||((typeof u=="string"||u instanceof String)&&(a=u),u=this.checkPlugins(e,{message:n,text:a,args:r,logCounter:this.logCounter}),u===!1)||(this.options.logToRemote&&this.writeLogToRemote(e,...r),this.options.logToLocalStorage&&this.writeLogToLocalStorage(e,...r),this.isBrowser()?(e.environnment=f.ENVIRONMENT_TYPE.BROWSER,this.options.logToDom&&this.writeLogToDom(e,a,{message:n,args:r}),s=`%c${a}`):(e.environnment=f.ENVIRONMENT_TYPE.NODE,s=Y.getTextFromColor(a,{fg:e.color,bg:e.bgColor,isBold:e.bold,isUnderline:e.underline,isReversed:e.reversed}),this.options.logToFile&&this.writeLogToFile(a)),!(e.silent===!1||e.hideLog===!1)&&(this.options.hideLog||e.hideLog||e.silent)))return;this.writeToConsole(s,e),this.errorTargetHandler(e,r)}catch{}}isExtendedOptionsPassed(e){return typeof e!="object"?!1:e.hasOwnProperty("context")||e.hasOwnProperty("target")||e.hasOwnProperty("color")||e.hasOwnProperty("contextName")||e.hasOwnProperty("raw")||e.hasOwnProperty("only")||e.hasOwnProperty("lid")}stringToObject(e){try{if(e=e.trim(),e.startsWith("{")&&e.endsWith("}")&&(e=e.slice(1,-1).trim()),!e)return{};let t={},n=e.split(",");for(let o of n){let r=o.trim().split(":");if(r.length<2){if(r.length===2){let d=r[0].trim().replace(/^['"]|['"]$/g,"");t[d]=r[1].trim().replace(/^['"]|['"]$/g,"")}else if(r.length===1&&Object.keys(t).length>0){let d=Object.keys(t).pop();t[d]instanceof Array?t[d].push(r[0].trim().replace(/^['"]|['"]$/g,"")):t[d]=[t[d],r[0].trim().replace(/^['"]|['"]$/g,"")]}continue}let s=r[0],a=r.slice(1).join(":"),u=s.trim().replace(/^['"]|['"]$/g,""),l=a.trim().replace(/^['"]|['"]$/g,"");!isNaN(l)&&!isNaN(parseFloat(l))?t[u]=parseFloat(l):t[u]=l}return t}catch{return null}}extractContextFromInput(e){if(typeof e=="string"||e instanceof String){if(e.toLowerCase().indexOf("lid:")!==0)return e;let t=this.stringToObject(e);t&&(e=t)}if(typeof e=="object"&&!Array.isArray(e)&&e!==null&&this.isExtendedOptionsPassed(e)){if(e.contextName){let t=L(this,$)[e.contextName];t&&(e=Object.assign({},t,e))}e.target||(e.target=this.getActiveTarget())}return e}listSymbols(){for(let e in ie)console.rawLog(ie[e]+` ${e} `)}applySymbolByName(e){try{e.symbol&&ie[e.symbol]&&(e.symbol=ie[e.symbol])}catch{}}convertToContext(e,t){e=e||t;let n=e;if(e.context&&typeof e.context=="object"){let o=Object.assign({},e);delete o.context,n=Object.assign({},e.context,o)}return n=Object.assign({},t,n),delete n.context,n}log(e,...t){if(e=this.extractContextFromInput(e),!this.isExtendedOptionsPassed(e)){if(!this.forceLidOn){let s=this.generateDefaultContext();this.processOutput.apply(this,[s,e,...t]);return}(!t||!t.length)&&(t=[e]),e={lid:Xe(this.options.lidLenMax)}}let n=this.generateDefaultContext(),o=this.convertToContext(e,n);if(o.raw){f.Console.log(...t);return}this.resolveLineCall&&(this.resolveErrorLineCall||(o.stack=Ne())),this.processOutput.apply(this,[o,...t])}error(e,...t){if(this.options.hideError)return;if(e=this.extractContextFromInput(e),!this.isExtendedOptionsPassed(e)){if(!this.forceLidOn){let s=this.generateErrorContext();this.processOutput.apply(this,[s,e,...t]);return}e={lid:Xe(this.options.lidLenMax)}}let n=this.generateErrorContext(),o=this.convertToContext(e,n);this.resolveErrorLineCall&&(o.stack=Ne()),this.log(o,...t),this.options.enableTrace&&console.trace(...t)}overrideError(){this.options.hideHookMessage||f.Console.log("AnaLogger: Hook placed on console.error"),L(this,M).error=!0,console.error=this.onDisplayError.bind(this)}attachConsole(){try{return console.rawLog=f.Console.log,console.raw=f.Console.log,console.rawInfo=f.Console.info,console.rawWarn=f.Console.warn,console.rawError=f.Console.error,console.logHistory=this.logHistory,console.logHistory=this.logHistory,Vt.forEach(e=>{console[e]=function(...t){this[e](...t)}.bind(this)}),!0}catch(e){console.error({lid:4321},e.message)}return!1}overrideConsole({log:e=!0,info:t=!0,warn:n=!0,error:o=!1}={}){this.options.hideHookMessage||f.Console.log("AnaLogger: Hook placed on console.log"),[{log:e},{info:t},{warn:n}].forEach(function(r){let s=Object.keys(r)[0];r[s]&&(L(this,M)[s]=!0,console[s]=this.onDisplayLog.bind(this))}.bind(this)),o&&this.overrideError(),this.attachConsole()}removeOverrideError(){console.error=f.Console.error,L(this,M).error=!1}removeOverride({log:e=!0,info:t=!0,warn:n=!0,error:o=!1}={}){e&&(console.log=f.Console.log,L(this,M).log=!1),t&&(console.info=f.Console.info,L(this,M).info=!1),n&&(console.warn=f.Console.warn,L(this,M).warn=!1),o&&this.removeOverrideError()}info(...e){return this.log(...e)}warn(...e){return this.log(...e)}table(...e){if(!L(this,M).log){f.Console.table(...e);return}let t=console.log;console.log=f.Console.log,f.Console.table(...e),console.log=t}takeScreenshot(e={selector:"body",quality:.95,canvasHeight:480,canvasWidth:640}){return new Promise((t,n)=>{if(!this.isBrowser())return;let o="";if(!htmlToImage){o="MISSING_HTML_IMAGE_LIBRARY: htmlToImage is not defined. Please install it first.",f.Console.error(o),n(new Error);return}let{selector:r,quality:s,canvasHeight:a,canvasWidth:u}=e,l=document.querySelector(r),d={quality:s,canvasHeight:a,canvasWidth:u};htmlToImage.toPng(l,d).then(function(h,g){this.uploadDataToRemote(g,h,p=>{t({imageData:g,serverResponse:p})})}.bind(this,e)).catch(function(h){o=`IMAGE_PROCESSING_FAILURE: ${h.message}`,f.Console.error(o),n(new Error(o))})})}alert(...e){if(!this.isBrowser())return this.log(...e);let t;if(e&&(e[0]&&e[0].hasOwnProperty("lid")||this.isContextValid(e[0]))){let n=this.generateDefaultContext();t=this.convertToContext(e[0],n).lid+": "+e.slice(1).join(" | ")}else t=e.join(" | ");alert(t)}assert(e,t=!0,...n){let o;try{return typeof e=="function"?(o=e(...n),o!==t?(this.error("Asset failed"),!1):(this.options.hidePassingTests||this.log("SUCCESS: Assert passed"),!0)):e!==t?(this.error("Assert failed"),!1):(this.options.hidePassingTests||this.log("SUCCESS: Assert passed"),!0)}catch{this.error("Unexpected error in assert")}return!1}startSnapshotProcess(){let e=this.getRawLogHistory?this.getRawLogHistory():this.logHistory||[];this._snapshotWindowStart=e.length,console.log(`[AnaLogger] Snapshot window started at history index ${this._snapshotWindowStart}.`)}takeSnapshot(e,t={}){try{if(!e||typeof e!="string")return console.warn("[AnaLogger] takeSnapshot: snapshotID must be a non-empty string."),[];let{messages:n=!0,context:o=!0}=t,r=O(this,he,it).call(this,{messages:n,context:o}),s={snapshotID:e,timestamp:Date.now(),options:{messages:n,context:o},entries:r};return O(this,de,rt).call(this,O(this,z,se).call(this,e),JSON.stringify(s)),console.log(`[AnaLogger] Snapshot "${e}" saved - ${r.length} lid(s) captured.`),r}catch(n){return console.error("[AnaLogger] takeSnapshot error:",n.message),[]}}compareSnapshots(e,t,n=[]){try{let o=O(this,Q,Me).call(this,O(this,z,se).call(this,e)),r=O(this,Q,Me).call(this,O(this,z,se).call(this,t));if(o||console.warn(`[AnaLogger] compareSnapshots: snapshot "${e}" not found.`),r||console.warn(`[AnaLogger] compareSnapshots: snapshot "${t}" not found.`),!o||!r)return null;let s=JSON.parse(o),a=JSON.parse(r),u=!!(n[0]&&n[0].messages),l=!!(n[1]&&n[1].messages),d=new Map(s.entries.map(m=>[m.lid,m])),h=new Map(a.entries.map(m=>[m.lid,m])),g=new Set([...d.keys(),...h.keys()]),p=[],v=[],w=[];for(let m of g){let N=d.has(m),F=h.has(m);N&&F?p.push(m):N?v.push(m):w.push(m)}let S=[];for(let m of p)S.push({left:m,right:m,status:"both",msgLeft:d.get(m)?.message??"",msgRight:h.get(m)?.message??""});for(let m of v)S.push({left:m,right:"",status:"left",msgLeft:d.get(m)?.message??"",msgRight:""});for(let m of w)S.push({left:"",right:m,status:"right",msgLeft:"",msgRight:h.get(m)?.message??""});return O(this,ge,st).call(this,e,t,S,s,a,{showMsg1:u,showMsg2:l}),{onlyInSnap1:v,onlyInSnap2:w,inBoth:p}}catch(o){return console.error("[AnaLogger] compareSnapshots error:",o.message),null}}applyAnalogFormatting({activeTarget:e="",override:t=!1}={}){try{let o={STANDARD:null,TEST:{color:"#B18904",symbol:"diamonds"}};return this.setDefaultContext(o.DEFAULT),e&&this.setActiveTarget(e),this.setOptions({silent:!1,hideError:!1,hideHookMessage:!0,lidLenMax:6}),t&&(this.overrideConsole(),this.overrideError()),!0}catch(n){console.error({lid:3249},n.message)}return!1}applyPredefinedFormat(e=re.DEFAULT_FORMAT,{activeTarget:t="",override:n=!1}={}){if(e===re.DEFAULT_FORMAT)return this.applyAnalogFormatting({activeTarget:t,override:n})}static generateInstance(){return new f}static getInstance(e=0){return f.instanceCount?L(f,X)[e]:null}static generateMainInstance(){let e=f.getInstance();return e||new f}static startLogger(){f.generateMainInstance().applyPredefinedFormat(re.DEFAULT_FORMAT,{override:!0})}static stopLogger(){let e=f.generateMainInstance();e.removeOverride(),e.removeOverrideError()}convertToUrl({protocol:e=A.protocol,host:t=A.host,port:n=A.port,pathname:o=A.pathname}={}){let r=new URL("http://localhost");return r.protocol=e,r.host=t,r.port=n,o&&(r.pathname=o),r.toString()}generateLogToRemoteUrl(e=null,{pathname:t=A.pathname}={}){if(typeof e=="string"||e instanceof String)return e;if(!this.isBrowser())return null;let n=this.options.protocol||window.location.protocol+"//",o=this.options.host||window.location.host||A.host,r=this.options.port||A.port;return t=this.options.pathname||t,this.convertToUrl({protocol:n,host:o,port:r,pathname:t})}addPlugin(e,t,n=""){n=n||e,this[e]=t,f.pluginTable[n]={type:Ke.LOCAL,methodName:e,callback:t}}addGlobalPlugin(e,t,n){f[e]=t,f.pluginTable[n]={type:Ke.GLOBAL,methodName:e,callback:t}}getPluginList(){return Object.keys(f.pluginTable)}validatePlugin(e){return f.pluginTable[e]?!0:(console.warn(`The plugin ${e} is not registered`),!1)}},R=f;X=new WeakMap,$=new WeakMap,k=new WeakMap,B=new WeakMap,M=new WeakMap,ae=new WeakSet,Ze=function(e){let t=this.generateNewContext(),n=Object.assign({},t,e);return n.color.toLowerCase().indexOf("rgb")>-1?n.color=Y.rgbStringToHex(n.color):n.color.indexOf("#")===-1&&(n.color=Y.colorNameToHex(n.color)),n},le=new WeakSet,et=function(e){if(e.order===void 0||e.order===null)return;let t=e.order,n=e.lid||"";if(this._lastOrderEntry!==null){let{lid:o,order:r}=this._lastOrderEntry;if(t<r){let s=`! Order mismatch: [${n}| order: ${t}] appeared after [${o}| order: ${r}]`;f.Console.warn(s)}}this._lastOrderEntry={lid:n,order:t}},ce=new WeakSet,tt=function(e){if(e.maxSeen===void 0||e.maxSeen===null)return;let t=e.lid||"",n=e.maxSeen;this._seenCount[t]=(this._seenCount[t]||0)+1;let o=this._seenCount[t];if(o>n){let r=`! MaxSeen exceeded: [${t}| maxSeen: ${n}] has been seen ${o} time(s)`;f.Console.warn(r)}},ue=new WeakSet,nt=function(e,t){if(!e.hasOwnProperty("test"))return;let n=e.lid||"",o=e.test,r=typeof o=="function"?!!o():!!o;this._testResults.push({lid:n,passed:r,message:t}),r||f.Console.warn(`! Test failed: [${n}] ${t}`)},fe=new WeakSet,ot=function(e){let t=e.only,n=(u,l)=>u instanceof RegExp?u.test(l):typeof u=="string"||u instanceof String?l.includes(u):u===l,o=(u,l)=>Array.isArray(u)?u.some(d=>n(d,l)):n(u,l),r=u=>Array.isArray(u)?u.map(l=>l instanceof RegExp?l.toString():String(l)).join(", "):u instanceof RegExp?u.toString():String(u),s=e.lid||"";if(t==null)return this._localOnlyFilter!==void 0?o(this._localOnlyFilter,s):!0;if(!o(t,s))return!1;let a=r(t);if(this._localOnlyFilter===void 0)this.isBrowser()?f.Console.clear?f.Console.clear():typeof console<"u"&&console.clear&&console.clear():process.stdout.write("\x1Bc");else if(this._localOnlyLabel!==a){let u=`\u2500\u2500\u2500 only switched to ${a} \u2500\u2500\u2500`;this.isBrowser()?f.Console.log(`%c${u}`,"color: #888; font-style: italic"):f.Console.log(u)}return this._localOnlyFilter=t,this._localOnlyLabel=a,!0},Fe=new WeakSet,Wt=function(e){},Q=new WeakSet,Me=function(e){try{if(this.isBrowser()&&typeof localStorage<"u")return localStorage.getItem(e)}catch{}return null},de=new WeakSet,rt=function(e,t){try{if(this.isBrowser()&&typeof localStorage<"u"){localStorage.setItem(e,t);return}}catch{}},z=new WeakSet,se=function(e){return`analogger_snapshot_${this.instanceName||"default"}_${e}`},he=new WeakSet,it=function(e={}){let{messages:t=!0,context:n=!0}=e,o=this.getRawLogHistory?this.getRawLogHistory():this.logHistory||[],r=this._snapshotWindowStart!==void 0?o.slice(this._snapshotWindowStart):o,s=new Map;for(let a of r){let u=a.context||{},l=u.lid;if(!l)continue;let d={lid:l};t&&(d.message=a.message??""),n&&(d.context={...u}),s.set(l,d)}return Array.from(s.values())},ge=new WeakSet,st=function(e,t,n,o,r,{showMsg1:s=!1,showMsg2:a=!1}={}){let u=g=>g.timestamp?new Date(g.timestamp).toLocaleTimeString():"-";console.log(`
|
|
8
|
+
`),n=[];for(let o=0;o<t.length;++o){let r=t[o];n.push(r)}return n}catch(t){f.Console.error(`ANALOGGER_FAILURE_1002: ${t.message}`)}return e.message}onDisplayError(...e){try{let t=-1,n=null;for(let o=0;o<e.length;++o){let r=e[o];if(r instanceof Error&&r.stack){t=o,n=this.assistStask(r)||[];break}}if(!n){this.error(...e);return}for(let o=0;o<n.length;++o)e[t]=n[o],this.error(...e)}catch(t){f.Console.error(`ANALOGGER_FAILURE_1003: ${t.message}`)}}setLogFormat(e){if(typeof e!="function")return console.error("Invalid parameter for setFormat. It is expecting a function or method."),!1;this.format=e.bind(this)}resetLogFormatter(){this.format=this.originalFormatFunction}setErrorHandler(e){this.errorTargetHandler=e.bind(this)}setErrorHandlerForUserTarget(e){this.errorUserTargetHandler=e.bind(this)}isContextValid(e){return typeof e=="object"&&!Array.isArray(e)&&e!==null?e.hasOwnProperty("contextName")&&e.hasOwnProperty("target"):!1}setDefaultContext(e){this.setContext(K.DEFAULT.contextName,e)}generateDefaultContext(){let e=L(this,$)[K.DEFAULT.contextName]||{};return e=Object.assign({},{lid:"",contextName:K.DEFAULT.contextName,target:C.ALL,symbol:"\u26A1",color:G[1],logLevel:E.LOG},e),e.name=e.contextName,e.id=this.logIndex++,e}generateNewContext(){let e=this.generateDefaultContext();return e.color=G[this.indexColor++%(G.length-3)+2],e.symbol="",e}generateErrorContext(){let e=this.generateDefaultContext();return e.contextName=K.ERROR.contextName,e.name=e.contextName,e.color=G[0],e.symbol="\u274C",e.error=!0,e.logLevel=E.ERROR,e}setContext(e,t={}){t.contextName=e,t.name=e,t=O(this,ae,Ze).call(this,t),L(this,$)[e]=t}getContext(e){return L(this,$)[e]}setContexts(e){Object.keys(e).forEach(n=>{let o=e[n]||{};this.setContext(n,o),e[n]=L(this,$)[n]})}getContexts(){return Object.freeze(L(this,$))}setTargets(e={}){let t={};if(Array.isArray(e))try{for(let n=0;n<e.length;++n){let o=e[n];if(typeof o=="string"||o instanceof String)t[o]=o;else if(typeof o=="object"){let r=null;for(let s in o){let a=o[s];if(s=s.trim(),!s){console.error("Invalid target");break}if(typeof a=="string"||a instanceof String){a=a.trim(),r=[s,a];break}if(typeof a=="number")break}r&&(t[r[0]]=r[1])}}}catch(n){console.error({lid:4321},n.message)}else t=e;Ee(this,k,Object.assign({},t,{...C}))}addTargets(e){let t=L(this,k),n=Object.assign({},t,e);this.setTargets(n)}getTargets(){return Object.freeze(L(this,k))}setActiveTargets(e=null){if(e==null){this.activeTargets=[C.ALL];return}if(typeof e=="function"&&(e=e.call(this)),e===null){this.activeTargets=[C.ALL];return}else if(typeof e=="string"||e instanceof String)e=e.split(",");else if(typeof e=="function")e=e.call(this);else if(typeof e=="object")e=Object.values(e);else if(!Array.isArray(e))return;let t=[];for(let n=0;n<e.length;++n){let o=e[n].trim();Object.values(L(this,k)).includes(o)&&t.push(o)}this.activeTargets=t}getActiveTargets(){return this.activeTargets}getActiveTarget(){return(this.getActiveTargets()||[])[0]||C.NONE}setActiveTarget(e){this.activeTargets=[],this.setActiveTargets(e);let t=this.activeTargets[0]||C.NONE;this.activeTargets=[t]}setLogLevel(e,t){L(this,B)[e]=t}getLogLevel(e){return L(this,B)[e]}setLogLevels(e){Ee(this,B,e)}getLogLevels(){return Object.freeze(L(this,B))}isTargetAllowed(e){return e===C.NONE?!1:e===C.ALL||this.getActiveTarget()===C.ALL?!0:this.activeTargets.includes(e)}getCurrentTime(){let e=new Date,t=String(e.getHours()).padStart(2,"0"),n=String(e.getMinutes()).padStart(2,"0"),o=String(e.getSeconds()).padStart(2,"0");return`${t}:${n}:${o}`}getCurrentDate(){let e=new Date,t=String(e.getDate()).padStart(2,"0"),n=String(e.getMonth()+1).padStart(2,"0"),o=String(e.getFullYear()).slice(-2);return`${t}-${n}-${o}`}setColumns(e,t,n){let o=1,r=!1;for(let a in t){if(!["contextName","symbol","lid","text","enableDate","enableTime"].includes(a))continue;let u=t[a];a==="enableDate"&&(u=this.getCurrentDate()+" "+this.getCurrentTime()),a==="enableTime"&&(u=this.getCurrentTime());let l=document.createElement("span");l.classList.add("analogger-col",`analogger-col-${a}`,`analogger-col-${o}`),++o,a!=="enableDate"&&a!=="enableTime"?(l.textContent=u,e.append(l)):(l.textContent=`[${u}]`,r=l)}r&&(r.classList.add("analogger-col","analogger-col-time","analogger-col-0"),e.prepend(r));let s=document.createElement("span");s.classList.add("analogger-col","analogger-col-text",`analogger-col-${o}`),s.textContent=n,e.append(s);for(let a=1;a<=3;++a)s=document.createElement("span"),s.classList.add("analogger-col","analogger-col-extra",`analogger-extra-${a}`),e.append(s)}checkOnLoggingToDom(e,t){try{let n=e.onLoggingToDom;return typeof n!="function"?void 0:n.call(this,e,t)}catch{}}addLineToDom(e,t,{context:n,addType:o,message:r,text:s,args:a}){if(this.checkOnLoggingToDom(n,{message:r,text:s,args:a,logCounter:this.logCounter,$view:e,$line:t,addType:o})===!1)return;if(o===oe.BOTTOM?e.append(t):e.insertBefore(t,e.firstChild),this.removeDomOldEntries(e)){if(e.getElementsByClassName(Oe).length)return;this.showRemovedNotification(n);return}this.scrollDivToBottom(e)}showRemovedNotification(e){e.contextName=Ve,e.symbol="\u{1F5D1}",e.color="orange",e.className=Oe,clearTimeout(this.timerAddLineToDomID),this.timerAddLineToDomID=setTimeout(()=>{this.timerAddLineToDomID=null,this.writeLogToDom(e,"",{addType:oe.TOP,message:"Oldest entries removed"})},500)}writeLogToDom(e,t,{addType:n=oe.BOTTOM,message:o="",args:r=null}={}){(!this.$containers||!this.$containers.length)&&(this.$containers=document.querySelectorAll(this.options.logToDom)),t=o||t;for(let s=0;s<this.$containers.length;++s){let a=this.$containers[s],u=a.querySelector("."+Re);u||(u=document.createElement("div"),u.classList.add(Re),u.append(document.createElement("span")),u.append(document.createElement("span")),u.append(document.createElement("span")),a.append(u));let l=a.querySelector("."+Ae);l||(l=document.createElement("div"),l.classList.add(Ae),a.append(l));let d=a.querySelector("."+Ce);d||(d=document.createElement("div"),d.classList.add(Ce),d.append(document.createElement("span")),d.append(document.createElement("span")),d.append(document.createElement("span")),a.append(d));let h=document.createElement("div");h.classList.add(qe),e.className&&h.classList.add(e.className),h.style.color=e.color,this.setColumns(h,e,t,r),setTimeout(function(g,p,{addType:v,context:w,message:S,text:m,args:N}){this.addLineToDom(g,p,{addType:v,context:w,message:S,text:m,args:N})}.bind(this,l,h,{addType:n,context:e,message:o,text:t,args:r}),0)}}writeLogToFile(e){try{if(!fs.existsSync(this.options.logToFilePath)){let t=path.dirname(this.options.logToFilePath);fs.existsSync(t)||fs.mkdirSync(t,{recursive:!0}),fs.writeFileSync(this.options.logToFilePath,"")}if(this.options.logMaxSize&&fs.statSync(this.options.logToFilePath).size>this.options.logMaxSize){this.options.logIndexArchive<this.options.logMaxArchives?++this.options.logIndexArchive:this.options.logIndexArchive=1;let o=this.options.logMaxArchives.toString().length+1,{filePath:r,extension:s,basename:a,dirname:u}=Pt(this.options.logToFilePath),l,d;l=this.options.addArchiveIndex?"."+this.options.logIndexArchive.toString().padStart(o,"0"):"",d=this.options.addArchiveTimestamp?"."+Ht():"";let h=`${r}${d}${l}${s}`,g=this.options.compressArchives?`${r}.tar.gz`:"";Bt(u,a,l,s,g,this.options.compressionLevel,p=>{p&&console.error("DELETION_FAILURE: Failed to delete some files")}),fs.renameSync(this.options.logToFilePath,h),fs.writeFileSync(this.options.logToFilePath,"")}fs.appendFileSync(this.options.logToFilePath,e+this.EOL)}catch(t){f.Console.error("LOG_TO_FILE_FAILURE: ",t.message)}}writeLogToRemote(...e){try{if(this.options.logToRemoteMaxEntries===void 0&&this.options.logToRemoteDebounce===void 0&&this.options.logToRemoteMaxSize===void 0){this.performRemotePost([...e]);return}if(Array.isArray(this.remoteBuffer)){if(this.remoteBuffer.push([...e]),this.options.logToRemoteMaxEntries!==void 0&&this.remoteBuffer.length>=this.options.logToRemoteMaxEntries){this.flushRemoteLogs(!0);return}if(this.options.logToRemoteMaxSize!==void 0&&JSON.stringify(this.remoteBuffer).length>=this.options.logToRemoteMaxSize){this.flushRemoteLogs(!0);return}}this.options.logToRemoteDebounce!==void 0&&!this.remoteTimer&&(this.remoteTimer=setTimeout(()=>{this.flushRemoteLogs()},this.options.logToRemoteDebounce))}catch(t){f.Console.error("LOG_TO_REMOTE_FAILURE: ",t.message)}}flushRemoteLogs(e=!1){if(this.remoteBuffer.length===0)return;if(!e&&this.options.logToRemoteMinSize!==void 0&&JSON.stringify(this.remoteBuffer).length<this.options.logToRemoteMinSize&&(this.remoteWaitCount=(this.remoteWaitCount||0)+1,this.remoteWaitCount<2)){this.options.logToRemoteDebounce!==void 0&&(this.remoteTimer&&clearTimeout(this.remoteTimer),this.remoteTimer=setTimeout(()=>{this.flushRemoteLogs()},this.options.logToRemoteDebounce));return}this.remoteTimer&&(clearTimeout(this.remoteTimer),this.remoteTimer=null),this.remoteWaitCount=0;let t=[...this.remoteBuffer];this.remoteBuffer=[],this.performRemotePost(t)}performRemotePost(e){try{let t=this.generateLogToRemoteUrl(this.options.logToRemoteUrl);if(!t)return null;let n=JSON.stringify(e);fetch(t,{method:"post",body:n,headers:{"Content-Type":"application/json"}}).then(o=>o.json()).catch(()=>null)}catch(t){f.Console.error("REMOTE_POST_FAILURE: ",t.message)}}writeLogToLocalStorage(e,...t){try{if(!this.isBrowser()||!window.localStorage)return;let n=`analogger_history_${this.instanceName}`,o=[];try{let u=localStorage.getItem(n);u&&(o=JSON.parse(u))}catch{o=[]}o.push({context:e,args:t});let r=this.options.logToLocalStorageMax||50;o.length>r&&(o=o.slice(o.length-r));let s=this.options.logToLocalStorageSize||1e4,a=JSON.stringify(o);for(;a.length>s&&o.length>1;)o.shift(),a=JSON.stringify(o);localStorage.setItem(n,a)}catch(n){f.Console.error("LOG_TO_LOCAL_STORAGE_FAILURE: ",n.message)}}restoreLogs(){try{if(!this.isBrowser()||!window.localStorage)return;let e=`analogger_history_${this.instanceName}`,t=localStorage.getItem(e);if(!t)return;let n=JSON.parse(t);if(!Array.isArray(n))return;let o=this.options.logToLocalStorage;this.options.logToLocalStorage=!1,n.forEach(r=>{let{context:s,args:a}=r;s&&(s.symbol="floppy_disk",delete s.order,delete s.maxSeen,delete s.test),this.processOutput(s,...a)}),this.options.logToLocalStorage=o}catch(e){f.Console.error("RESTORE_LOGS_FAILURE: ",e.message)}}uploadDataToRemote(e,t=null,n=null){try{if(!this.options.logToRemote)return;let o=this.generateLogToRemoteUrl(this.options.logToRemoteBinaryUrl,{pathname:A.binarypathname});if(!o)return null;let r=e;t&&(r=JSON.stringify({raw:e,context:t})),fetch(o,{method:"post",body:r}).then(s=>s.json()).then(s=>n&&n(s)).catch(s=>s)}catch(o){f.Console.error("BINARY_TO_REMOTE_FAILURE: ",o.message)}}stringifyEntry(e){let t;try{t=JSON.stringify(e)}catch{}if(!t)try{t=Je(e)}catch{}return t}convertEntry(e){try{if(e==null||e==="")return e;if(typeof e=="boolean")return e;if(typeof e=="symbol"||typeof e=="number")return e;if(typeof e=="string"||myVar instanceof e)return e;if(e instanceof Date)return e}catch{}return this.stringifyEntry(e)}convertArgumentsToText(e){let t=[],n,o=e.length;for(let r=0;r<o;++r){let s,a=e[r];s=this.convertEntry(a),t.push(s)}return n=t.join("\u2022"),n}writeToConsole(e,t){let n=[e];this.isBrowser()&&n.push(`color: ${t.color}`);let o=t.contextLevel||E.LOG;o>=E.ERROR?f.Console.error(...n):o>=E.WARN?f.Console.warn(...n):o>=E.INFO?f.Console.info(...n):o>=E.LOG?f.Console.log(...n):o>=E.DEBUG&&f.Console.debug(...n)}checkPlugins(e,{message:t,text:n,args:o,logCounter:r}){try{if(!Object.keys(f.pluginTable).length)return;let s=!0;for(let a in e){let u=e[a];if(!u)continue;let l=f.pluginTable[a];if(!l||typeof l!="object")continue;let{callback:d,methodName:h,type:g}=l;if(typeof d!="function")continue;d.call(this,e,{message:t,text:n,args:o,logCounter:r,methodName:h,type:g,pluginOptions:u})===!1&&(s=!1)}return s}catch{}}checkOnLogging(e,t,n,o){if(!!o)try{let r=e[o];return typeof r!="function"?void 0:r.call(this,t,n)}catch{}}isContextMessagePattern(e){return/\{\{[^}]+}}/.test(e)}transformContextMessage(e,t){let n=e;for(let o in t){let r=`{{${o}}}`,s=t[o];n=n.replaceAll(r,s)}return n}resetOrder(){this._lastOrderEntry=null}report(){let e=this._testResults.length,t=this._testResults.filter(u=>u.passed).length,n=e-t,o=n>0,r="================== ANALOGGER TEST RESULT ================",s="==========================================================",a=[r,` Total : ${e}`,` Passed : ${t}`,` Failed : ${n}`,s];if(this.isBrowser()){let u=o?"color: red; font-weight: bold;":"color: green; font-weight: bold;";a.forEach(l=>f.Console.log(`%c${l}`,u))}else a.forEach(u=>{let l=Y.getTextFromColor(u,{fg:o?"#FF0000":"#00CC44",isBold:!0});f.Console.log(l)});return{total:e,passed:t,failed:n}}processOutput(e={},...t){try{let n="";if(f.lidTableOn&&e.lid){let l=f.lidTable[e.lid];l?(e.message=e.message||l.message,l.callCount=l.callCount||0,++l.callCount,l.callTimes.push(Date.now())):f.lidTable[e.lid]={...e,message:t[0],lid:e.lid,callCount:1,callTimes:[Date.now()]}}if(e.message&&(this.isContextMessagePattern(e.message)&&t.length>=1&&typeof t[0]=="object"&&(e.message=this.transformContextMessage(e.message,t[0]),t.shift()),t.unshift(e.message)),this.applySymbolByName(e),this.checkOnLogging(e,e,t,"onContext"),!this.isTargetAllowed(e.target)||e.logLevel===E.OFF||this.options.requiredLogLevel>e.logLevel||this.options.only!==void 0&&this.options.only!==null&&!(Array.isArray(this.options.only)?this.options.only:[this.options.only]).some(h=>{let g=e.lid||"",p=e.only||"";return h instanceof RegExp?h.test(g)||h.test(p):typeof h=="string"?g.includes(h)||p.includes(h):h===g||h===p})||!O(this,fe,ot).call(this,e))return;O(this,le,et).call(this,e),O(this,ce,tt).call(this,e);let o=this.checkOnLogging(e,t[0],arguments,"onMessage");o!==void 0&&(arguments[1]=o);let r=t;n=this.convertArgumentsToText(r),O(this,ue,nt).call(this,e,n),this.options.logUidToRemote&&(e.uid=this.getUid());let s="",a=this.format({...e,message:n});this.keepLog&&this.addToLogHistory({context:e,message:n,text:a}),++this.logCounter;let u=this.checkOnLogging(e,a,{message:n,args:r,logCounter:this.logCounter},"onOutput");if(u===!1||((typeof u=="string"||u instanceof String)&&(a=u),u=this.checkPlugins(e,{message:n,text:a,args:r,logCounter:this.logCounter}),u===!1)||(this.options.logToRemote&&this.writeLogToRemote(e,...r),this.options.logToLocalStorage&&this.writeLogToLocalStorage(e,...r),this.isBrowser()?(e.environnment=f.ENVIRONMENT_TYPE.BROWSER,this.options.logToDom&&this.writeLogToDom(e,a,{message:n,args:r}),s=`%c${a}`):(e.environnment=f.ENVIRONMENT_TYPE.NODE,s=Y.getTextFromColor(a,{fg:e.color,bg:e.bgColor,isBold:e.bold,isUnderline:e.underline,isReversed:e.reversed}),this.options.logToFile&&this.writeLogToFile(a)),!(e.silent===!1||e.hideLog===!1)&&(this.options.hideLog||e.hideLog||e.silent)))return;this.writeToConsole(s,e),this.errorTargetHandler(e,r)}catch{}}isExtendedOptionsPassed(e){return typeof e!="object"?!1:e.hasOwnProperty("context")||e.hasOwnProperty("target")||e.hasOwnProperty("color")||e.hasOwnProperty("contextName")||e.hasOwnProperty("raw")||e.hasOwnProperty("only")||e.hasOwnProperty("lid")}stringToObject(e){try{if(e=e.trim(),e.startsWith("{")&&e.endsWith("}")&&(e=e.slice(1,-1).trim()),!e)return{};let t={},n=e.split(",");for(let o of n){let r=o.trim().split(":");if(r.length<2){if(r.length===2){let d=r[0].trim().replace(/^['"]|['"]$/g,"");t[d]=r[1].trim().replace(/^['"]|['"]$/g,"")}else if(r.length===1&&Object.keys(t).length>0){let d=Object.keys(t).pop();t[d]instanceof Array?t[d].push(r[0].trim().replace(/^['"]|['"]$/g,"")):t[d]=[t[d],r[0].trim().replace(/^['"]|['"]$/g,"")]}continue}let s=r[0],a=r.slice(1).join(":"),u=s.trim().replace(/^['"]|['"]$/g,""),l=a.trim().replace(/^['"]|['"]$/g,"");!isNaN(l)&&!isNaN(parseFloat(l))?t[u]=parseFloat(l):t[u]=l}return t}catch{return null}}extractContextFromInput(e){if(typeof e=="string"||e instanceof String){if(e.toLowerCase().indexOf("lid:")!==0)return e;let t=this.stringToObject(e);t&&(e=t)}if(typeof e=="object"&&!Array.isArray(e)&&e!==null&&this.isExtendedOptionsPassed(e)){if(e.contextName){let t=L(this,$)[e.contextName];t&&(e=Object.assign({},t,e))}e.target||(e.target=this.getActiveTarget())}return e}listSymbols(){for(let e in ie)console.rawLog(ie[e]+` ${e} `)}applySymbolByName(e){try{e.symbol&&ie[e.symbol]&&(e.symbol=ie[e.symbol])}catch{}}convertToContext(e,t){e=e||t;let n=e;if(e.context&&typeof e.context=="object"){let o=Object.assign({},e);delete o.context,n=Object.assign({},e.context,o)}return n=Object.assign({},t,n),delete n.context,n}log(e,...t){if(e=this.extractContextFromInput(e),!this.isExtendedOptionsPassed(e)){if(!this.forceLidOn){let s=this.generateDefaultContext();this.processOutput.apply(this,[s,e,...t]);return}(!t||!t.length)&&(t=[e]),e={lid:Xe(this.options.lidLenMax)}}let n=this.generateDefaultContext(),o=this.convertToContext(e,n);if(o.raw){f.Console.log(...t);return}this.resolveLineCall&&(this.resolveErrorLineCall||(o.stack=Ne())),this.processOutput.apply(this,[o,...t])}error(e,...t){if(this.options.hideError)return;if(e=this.extractContextFromInput(e),!this.isExtendedOptionsPassed(e)){if(!this.forceLidOn){let s=this.generateErrorContext();this.processOutput.apply(this,[s,e,...t]);return}e={lid:Xe(this.options.lidLenMax)}}let n=this.generateErrorContext(),o=this.convertToContext(e,n);this.resolveErrorLineCall&&(o.stack=Ne()),this.log(o,...t),this.options.enableTrace&&console.trace(...t)}overrideError(){this.options.hideHookMessage||f.Console.log("AnaLogger: Hook placed on console.error"),L(this,M).error=!0,console.error=this.onDisplayError.bind(this)}attachConsole(){try{return console.rawLog=f.Console.log,console.raw=f.Console.log,console.rawInfo=f.Console.info,console.rawWarn=f.Console.warn,console.rawError=f.Console.error,console.logHistory=this.logHistory,console.logHistory=this.logHistory,Vt.forEach(e=>{console[e]=function(...t){this[e](...t)}.bind(this)}),!0}catch(e){console.error({lid:4321},e.message)}return!1}overrideConsole({log:e=!0,info:t=!0,warn:n=!0,error:o=!1}={}){this.options.hideHookMessage||f.Console.log("AnaLogger: Hook placed on console.log"),[{log:e},{info:t},{warn:n}].forEach(function(r){let s=Object.keys(r)[0];r[s]&&(L(this,M)[s]=!0,console[s]=this.onDisplayLog.bind(this))}.bind(this)),o&&this.overrideError(),this.attachConsole()}removeOverrideError(){console.error=f.Console.error,L(this,M).error=!1}removeOverride({log:e=!0,info:t=!0,warn:n=!0,error:o=!1}={}){e&&(console.log=f.Console.log,L(this,M).log=!1),t&&(console.info=f.Console.info,L(this,M).info=!1),n&&(console.warn=f.Console.warn,L(this,M).warn=!1),o&&this.removeOverrideError()}info(...e){return this.log(...e)}warn(...e){return this.log(...e)}table(...e){if(!L(this,M).log){f.Console.table(...e);return}let t=console.log;console.log=f.Console.log,f.Console.table(...e),console.log=t}takeScreenshot(e={selector:"body",quality:.95,canvasHeight:480,canvasWidth:640}){return new Promise((t,n)=>{if(!this.isBrowser())return;let o="";if(!htmlToImage){o="MISSING_HTML_IMAGE_LIBRARY: htmlToImage is not defined. Please install it first.",f.Console.error(o),n(new Error);return}let{selector:r,quality:s,canvasHeight:a,canvasWidth:u}=e,l=document.querySelector(r),d={quality:s,canvasHeight:a,canvasWidth:u};htmlToImage.toPng(l,d).then(function(h,g){this.uploadDataToRemote(g,h,p=>{t({imageData:g,serverResponse:p})})}.bind(this,e)).catch(function(h){o=`IMAGE_PROCESSING_FAILURE: ${h.message}`,f.Console.error(o),n(new Error(o))})})}alert(...e){if(!this.isBrowser())return this.log(...e);let t;if(e&&(e[0]&&e[0].hasOwnProperty("lid")||this.isContextValid(e[0]))){let n=this.generateDefaultContext();t=this.convertToContext(e[0],n).lid+": "+e.slice(1).join(" | ")}else t=e.join(" | ");alert(t)}assert(e,t=!0,...n){let o;try{return typeof e=="function"?(o=e(...n),o!==t?(this.error("Asset failed"),!1):(this.options.hidePassingTests||this.log("SUCCESS: Assert passed"),!0)):e!==t?(this.error("Assert failed"),!1):(this.options.hidePassingTests||this.log("SUCCESS: Assert passed"),!0)}catch{this.error("Unexpected error in assert")}return!1}startSnapshotProcess(){let e=this.getRawLogHistory?this.getRawLogHistory():this.logHistory||[];this._snapshotWindowStart=e.length,console.log(`[AnaLogger] Snapshot window started at history index ${this._snapshotWindowStart}.`)}takeSnapshot(e,t={}){try{if(!e||typeof e!="string")return console.warn("[AnaLogger] takeSnapshot: snapshotID must be a non-empty string."),[];let{messages:n=!0,context:o=!0}=t,r=O(this,he,it).call(this,{messages:n,context:o}),s={snapshotID:e,timestamp:Date.now(),options:{messages:n,context:o},entries:r};return O(this,de,rt).call(this,O(this,z,se).call(this,e),JSON.stringify(s)),console.log(`[AnaLogger] Snapshot "${e}" saved - ${r.length} lid(s) captured.`),r}catch(n){return console.error("[AnaLogger] takeSnapshot error:",n.message),[]}}compareSnapshots(e,t,n=[]){try{let o=O(this,Q,Me).call(this,O(this,z,se).call(this,e)),r=O(this,Q,Me).call(this,O(this,z,se).call(this,t));if(o||console.warn(`[AnaLogger] compareSnapshots: snapshot "${e}" not found.`),r||console.warn(`[AnaLogger] compareSnapshots: snapshot "${t}" not found.`),!o||!r)return null;let s=JSON.parse(o),a=JSON.parse(r),u=!!(n[0]&&n[0].messages),l=!!(n[1]&&n[1].messages),d=new Map(s.entries.map(m=>[m.lid,m])),h=new Map(a.entries.map(m=>[m.lid,m])),g=new Set([...d.keys(),...h.keys()]),p=[],v=[],w=[];for(let m of g){let N=d.has(m),F=h.has(m);N&&F?p.push(m):N?v.push(m):w.push(m)}let S=[];for(let m of p)S.push({left:m,right:m,status:"both",msgLeft:d.get(m)?.message??"",msgRight:h.get(m)?.message??""});for(let m of v)S.push({left:m,right:"",status:"left",msgLeft:d.get(m)?.message??"",msgRight:""});for(let m of w)S.push({left:"",right:m,status:"right",msgLeft:"",msgRight:h.get(m)?.message??""});return O(this,ge,st).call(this,e,t,S,s,a,{showMsg1:u,showMsg2:l}),{onlyInSnap1:v,onlyInSnap2:w,inBoth:p}}catch(o){return console.error("[AnaLogger] compareSnapshots error:",o.message),null}}applyAnalogFormatting({activeTarget:e="",override:t=!1}={}){try{let o={STANDARD:null,TEST:{color:"#B18904",symbol:"diamonds"}};return this.setDefaultContext(o.DEFAULT),e&&this.setActiveTarget(e),this.setOptions({silent:!1,hideError:!1,hideHookMessage:!0,lidLenMax:6}),t&&(this.overrideConsole(),this.overrideError()),!0}catch(n){console.error({lid:3249},n.message)}return!1}applyPredefinedFormat(e=re.DEFAULT_FORMAT,{activeTarget:t="",override:n=!1}={}){if(e===re.DEFAULT_FORMAT)return this.applyAnalogFormatting({activeTarget:t,override:n})}static generateInstance(){return new f}static getInstance(e=0){return f.instanceCount?L(f,X)[e]:null}static generateMainInstance(){let e=f.getInstance();return e||new f}static startLogger(){f.generateMainInstance().applyPredefinedFormat(re.DEFAULT_FORMAT,{override:!0})}static stopLogger(){let e=f.generateMainInstance();e.removeOverride(),e.removeOverrideError()}convertToUrl({protocol:e=A.protocol,host:t=A.host,port:n=A.port,pathname:o=A.pathname}={}){let r=new URL("http://localhost");return r.protocol=e,r.host=t,r.port=n,o&&(r.pathname=o),r.toString()}generateLogToRemoteUrl(e=null,{pathname:t=A.pathname}={}){if(typeof e=="string"||e instanceof String)return e;if(!this.isBrowser())return null;let n=this.options.protocol||window.location.protocol+"//",o=this.options.host||window.location.host||A.host,r=this.options.port||A.port;return t=this.options.pathname||t,this.convertToUrl({protocol:n,host:o,port:r,pathname:t})}addPlugin(e,t,n=""){n=n||e,this[e]=t,f.pluginTable[n]={type:Ke.LOCAL,methodName:e,callback:t}}addGlobalPlugin(e,t,n){f[e]=t,f.pluginTable[n]={type:Ke.GLOBAL,methodName:e,callback:t}}getPluginList(){return Object.keys(f.pluginTable)}validatePlugin(e){return f.pluginTable[e]?!0:(console.warn(`The plugin ${e} is not registered`),!1)}},R=f;X=new WeakMap,$=new WeakMap,k=new WeakMap,B=new WeakMap,M=new WeakMap,ae=new WeakSet,Ze=function(e){let t=this.generateNewContext(),n=Object.assign({},t,e);return n.color.toLowerCase().indexOf("rgb")>-1?n.color=Y.rgbStringToHex(n.color):n.color.indexOf("#")===-1&&(n.color=Y.colorNameToHex(n.color)),n},le=new WeakSet,et=function(e){if(e.resetOrder&&this.resetOrder(),e.order===void 0||e.order===null)return;let t=e.order,n=e.lid||"";if(this._lastOrderEntry!==null){let{lid:o,order:r}=this._lastOrderEntry;if(t<r){let s=`! Order mismatch: [${n}| order: ${t}] appeared after [${o}| order: ${r}]`;f.Console.warn(s)}}this._lastOrderEntry={lid:n,order:t}},ce=new WeakSet,tt=function(e){if(e.maxSeen===void 0||e.maxSeen===null)return;let t=e.lid||"",n=e.maxSeen;this._seenCount[t]=(this._seenCount[t]||0)+1;let o=this._seenCount[t];if(o>n){let r=`! MaxSeen exceeded: [${t}| maxSeen: ${n}] has been seen ${o} time(s)`;f.Console.warn(r)}},ue=new WeakSet,nt=function(e,t){if(!e.hasOwnProperty("test"))return;let n=e.lid||"",o=e.test,r=typeof o=="function"?!!o():!!o;this._testResults.push({lid:n,passed:r,message:t}),r||f.Console.warn(`! Test failed: [${n}] ${t}`)},fe=new WeakSet,ot=function(e){let t=e.only,n=(u,l)=>u instanceof RegExp?u.test(l):typeof u=="string"||u instanceof String?l.includes(u):u===l,o=(u,l)=>Array.isArray(u)?u.some(d=>n(d,l)):n(u,l),r=u=>Array.isArray(u)?u.map(l=>l instanceof RegExp?l.toString():String(l)).join(", "):u instanceof RegExp?u.toString():String(u),s=e.lid||"";if(t==null)return this._localOnlyFilter!==void 0?o(this._localOnlyFilter,s):!0;if(!o(t,s))return!1;let a=r(t);if(this._localOnlyFilter===void 0)this.isBrowser()?f.Console.clear?f.Console.clear():typeof console<"u"&&console.clear&&console.clear():process.stdout.write("\x1Bc");else if(this._localOnlyLabel!==a){let u=`\u2500\u2500\u2500 only switched to ${a} \u2500\u2500\u2500`;this.isBrowser()?f.Console.log(`%c${u}`,"color: #888; font-style: italic"):f.Console.log(u)}return this._localOnlyFilter=t,this._localOnlyLabel=a,!0},Fe=new WeakSet,Wt=function(e){},Q=new WeakSet,Me=function(e){try{if(this.isBrowser()&&typeof localStorage<"u")return localStorage.getItem(e)}catch{}return null},de=new WeakSet,rt=function(e,t){try{if(this.isBrowser()&&typeof localStorage<"u"){localStorage.setItem(e,t);return}}catch{}},z=new WeakSet,se=function(e){return`analogger_snapshot_${this.instanceName||"default"}_${e}`},he=new WeakSet,it=function(e={}){let{messages:t=!0,context:n=!0}=e,o=this.getRawLogHistory?this.getRawLogHistory():this.logHistory||[],r=this._snapshotWindowStart!==void 0?o.slice(this._snapshotWindowStart):o,s=new Map;for(let a of r){let u=a.context||{},l=u.lid;if(!l)continue;let d={lid:l};t&&(d.message=a.message??""),n&&(d.context={...u}),s.set(l,d)}return Array.from(s.values())},ge=new WeakSet,st=function(e,t,n,o,r,{showMsg1:s=!1,showMsg2:a=!1}={}){let u=g=>g.timestamp?new Date(g.timestamp).toLocaleTimeString():"-";console.log(`
|
|
9
9
|
Snapshot comparison: "${e}" vs "${t}"`),console.log(` ${e} captured at ${u(o)} - ${o.entries.length} lid(s)`),console.log(` ${t} captured at ${u(r)} - ${r.entries.length} lid(s)
|
|
10
10
|
`);let l=`${e} message`,d=`${t} message`,h=n.length?n.map(g=>{let p={[e]:g.left,[t]:g.right};return s&&(p[l]=g.msgLeft),a&&(p[d]=g.msgRight),p}):[(()=>{let g={[e]:"(empty)",[t]:"(empty)"};return s&&(g[l]=""),a&&(g[d]=""),g})()];console.table(h),typeof document<"u"&&O(this,pe,at).call(this,e,t,n,o,r,u,{showMsg1:s,showMsg2:a})},pe=new WeakSet,at=function(e,t,n,o,r,s,{showMsg1:a=!1,showMsg2:u=!1}={}){try{let l={both:"#1e293b",bothBg:"#f8fafc",left:"#7f1d1d",leftBg:"#fef2f2",right:"#14532d",rightBg:"#f0fdf4",msg:"#475569",msgBg:"#f8fafc",header:"#1e40af",border:"#e2e8f0"},d=o.entries.filter(b=>r.entries.some(P=>P.lid===b.lid)).length,h=o.entries.length-d,g=r.entries.length-d,p=3+(a?1:0)+(u?1:0),v=(b="")=>`padding:4px 10px;font-family:monospace;font-size:12px;border-bottom:1px solid ${l.border};${b}`,w=(b="")=>`padding:4px 10px;font-size:11px;color:${l.msg};border-bottom:1px solid ${l.border};max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;${b}`,S=`padding:5px 10px;text-align:left;background:#f1f5f9;font-size:11px;color:#475569;border-bottom:2px solid ${l.border}`,m=b=>{let P=b.status==="left"?l.leftBg:l.bothBg,q=b.status==="right"?l.rightBg:l.bothBg,ye=b.status==="left"?l.left:b.status==="right"?"#94a3b8":l.both,be=b.status==="right"?l.right:b.status==="left"?"#94a3b8":l.both,ve=b.status==="both"?"=":b.status==="left"?"\u25C0":b.status==="right"?"\u25B6":"\u2260";return`<tr>
|
|
11
11
|
<td style="${v(`background:${P};color:${ye}`)}">${b.left||""}</td>
|
|
@@ -5,7 +5,7 @@ var St=Object.defineProperty;var xt=(i,e,t)=>e in i?St(i,e,{enumerable:!0,config
|
|
|
5
5
|
`);let v=parseInt(p.pop()),w=parseInt(p.pop()),S=p.pop(),N=p.pop().split(" "),F=null;for(let _=0;_<N.length;_++){let I=N[_];if(!!I&&I.indexOf("at")!==0){F=I;break}}o={file:S,line:w,col:v,method:F,isMinified:n,stack:r};break}return o}}}catch{}return null}function Xe(i=8){try{let e=Ne();if(!e)return`LID${Date.now()}`;let n=e.method.split(".")[0].toUpperCase().substring(0,3);if(n.length>=i)return n.substring(0,i);let o=`${n}:${e.line}`;if(o.length>=i)return o=o.replaceAll(":",""),o.substring(0,i);let r=`${n}:${e.line}:${e.col}`;return r.length>i?r.substring(0,i).endsWith(":")?`${n}${e.line}:${e.col}`.substring(0,i):r.substring(0,i):`${n}${e.line}:${e.col}`.substring(0,i)}catch{return`ERR_LID${Date.now()}`}}function Qe(){return typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node<"u"?J.NODE:J.BROWSER}var zt=Qe();function qt(){return zt===J.NODE}var Vt=["alert","assert","keepLogHistory","getLogHistory","truncateMessage","truncateMessage","rawLog","removeOverride","removeOverrideError","overrideConsole","overrideError","table","rawInfo","rawWarn","rawError","hasSeenLid","addToLogHistory","releaseLogHistory","resetLogHistory","setLogFormat","resetLogFormatter","getRawLogHistory","restoreLogs"],X,$,k,B,M,ae,Ze,le,et,ce,tt,ue,nt,fe,ot,Fe,Wt,Q,Me,de,rt,z,se,he,it,ge,st,pe,at,me,lt,f=class{constructor({name:e="default"}={}){T(this,ae);T(this,le);T(this,ce);T(this,ue);T(this,fe);T(this,Fe);T(this,Q);T(this,de);T(this,z);T(this,he);T(this,ge);T(this,pe);T(this,me);y(this,"system","");y(this,"instanceId","");y(this,"instanceName","");y(this,"logIndex",0);y(this,"logCounter",0);T(this,$,[]);T(this,k,{...C});T(this,B,{});y(this,"activeTargets",[Object.values(C)]);y(this,"indexColor",0);y(this,"format","");y(this,"keepLog",!1);y(this,"logHistory",[]);y(this,"$containers",null);y(this,"options",{hideHookMessage:!1});y(this,"remoteBuffer",[]);y(this,"remoteTimer",null);T(this,M,{log:!1,info:!1,warn:!1,error:!1});y(this,"originalFormatFunction");y(this,"forceLidOn",!1);y(this,"resolveLineCall",!1);y(this,"resolveErrorLineCall",!1);y(this,"removeDomOldEntries",e=>{if(e.childElementCount>xe){let n=Math.ceil(xe/10);for(let o=0;o<n;++o)e.removeChild(e.firstChild);return n}return 0});y(this,"scrollDivToBottom",e=>{let t=e.scrollHeight-(e.clientHeight+e.scrollTop),n=e.clientHeight||e.offsetHeight;t>n/2||(e.scrollTop=e.scrollHeight)});this.system=Qe(),this.format=this.onBuildLog.bind(this),this.originalFormatFunction=this.format,this.instanceName=e,this.instanceId=f.instanceCount+"-"+Date.now(),L(f,X)[f.instanceCount]=this,++f.instanceCount,this.errorTargetHandler=this.onError.bind(this),this.errorUserTargetHandler=this.onErrorForUserTarget.bind(this),this.remoteBuffer=[],this.remoteTimer=null,this.setOptions(this.options),f.Console||(f.Console={log:console.log,info:console.info,warn:console.warn,error:console.error,debug:console.debug,table:console.table}),this.rawLog=f.Console.log,this.rawInfo=f.Console.info,this.rawWarn=f.Console.warn,this.rawError=f.Console.error,this.ALIGN=f.ALIGN,this.ENVIRONMENT_TYPE=f.ENVIRONMENT_TYPE,O(this,me,lt).call(this),this.resetLogHistory(),this._localOnlyFilter=void 0,this._localOnlyLabel=void 0,this._lastOrderEntry=null,this._seenCount={},this._testResults=[]}getName(){return this.instanceName}getId(){return this.instanceId}forceLid(e=!0){this.forceLidOn=!!e}forceResolveLineCall(e=!0){this.resolveLineCall=!!e}forceResolveErrorLineCall(e=!0){this.resolveErrorLineCall=!!e}importLids(e){for(let t in e){let n=e[t]||{};n.lid=n.lid||t,n.callCount=0,n.callTimes=[],f.lidTable[t]=n}f.lidTableOn=!0}loadLids(e){e=e||{},this.importLids(e)}convertTimestampToDate(e){let t=new Date(e),n=t.getFullYear(),o=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0"),s=String(t.getHours()).padStart(2,"0"),a=String(t.getMinutes()).padStart(2,"0"),u=String(t.getSeconds()).padStart(2,"0"),l=String(t.getMilliseconds()).padStart(3,"0");return`${n}-${o}-${r} ${s}:${a}:${u}.${l}`}getLids(){let e={...ct.lidTable};for(let t in e){let n=e[t]||{};if(n.callTimes.length){n.dates=[];for(let o=0;o<n.callTimes.length;++o){let r=n.callTimes[o],s=this.convertTimestampToDate(r);n.dates.push(s)}}}return e}keepLogHistory(){this.keepLog=!0}releaseLogHistory(){this.keepLog=!1}resetLogHistory(){this.logHistory=[]}addToLogHistory(e){e=e||{},this.logHistory.push(Object.assign({},e))}getLogHistory(e=!0,t=_t){let n=this.logHistory||[],o=[];return n.forEach(r=>{let{text:s}=r;o.push(s)}),e?o.join(t):o}getRawLogHistory(){return this.logHistory||[]}hasSeenLid(e){this.logHistory=this.logHistory||[];for(let t=0;t<this.logHistory.length;++t){let o=(this.logHistory[t]||{}).context||{};if(e===o.lid)return!0}return!1}forceEnvironment(e){this.forcedSystem=e}isNode(){return this&&this.forcedSystem?this.forcedSystem===J.NODE:qt()}isBrowser(){return!this.isNode()}getUid(){if(!this.isBrowser()||typeof window>"u"||!window.localStorage)return null;let e="analogger-uid",t=window.localStorage.getItem(e);return t||(t="uid-"+Date.now()+"-"+Math.floor(Math.random()*1e6),window.localStorage.setItem(e,t)),t}resetLogger(){this.options={},this.options.timeLenMax=12,this.options.contextLenMax=10,this.options.idLenMax=5,this.options.lidLenMax=6,this.options.only=void 0,this.options.messageLenMax=void 0,this.options.symbolLenMax=60,this.options.hideHookMessage=void 0,this.options.hidePassingTests=void 0,this.options.hideLog=void 0,this.options.hideError=void 0,this.options.oneConsolePerContext=!0,this.options.logToDom=void 0,this.options.logToFile=void 0,this.options.logMaxSize=0,this.options.logMaxArchives=3,this.options.logIndexArchive=0,this.options.logToRemote=void 0,this.options.addArchiveTimestamp=!0,this.options.addArchiveIndex=!0,this.options.logToRemoteUrl=void 0,this.options.logToRemoteBinaryUrl=void 0,this.options.compressArchives=!1,this.options.compressionLevel=1,this.options.protocol=void 0,this.options.host=void 0,this.options.port=void 0,this.options.pathname=void 0,this.options.binarypathname=void 0,this.options.enableDate=void 0,this.options.enableMillisec=void 0,this.options.logToLocalStorage=void 0,this.options.logToLocalStorageMax=50,this.options.logToLocalStorageSize=1e4,this.options.logToRemoteMaxEntries=void 0,this.options.logToRemoteDebounce=void 0,this.options.logToRemoteMaxSize=void 0,this.options.logToRemoteMinSize=void 0,this.options.logUidToRemote=void 0,this.remoteBuffer=[],this.remoteTimer=null,this.remoteWaitCount=0}resetOptions(){this.resetLogger()}setOptions({timeLenMax:e=void 0,contextLenMax:t=10,idLenMax:n=5,lidLenMax:o=6,only:r=void 0,symbolLenMax:s=2,enableTrace:a=!0,messageLenMax:u=void 0,hideLog:l=void 0,hideError:d=void 0,hideHookMessage:h=void 0,hidePassingTests:g=void 0,logToDom:p=void 0,logToFile:v=void 0,logMaxSize:w=0,logMaxArchives:S=3,logIndexArchive:m=0,addArchiveTimestamp:N=!0,addArchiveIndex:F=!0,compressArchives:_=!1,compressionLevel:I=1,logToRemote:b=void 0,logToRemoteUrl:P=void 0,logToRemoteBinaryUrl:q=void 0,loopback:ye=A.loopback,requiredLogLevel:be=E.LOG,oneConsolePerContext:ve=void 0,silent:$e=void 0,enableDate:ut=void 0,enableMillisec:Ie=void 0,logToLocalStorage:ft=void 0,logToLocalStorageMax:dt=50,logToLocalStorageSize:ht=1e4,logToRemoteMaxEntries:gt=void 0,logToRemoteDebounce:pt=void 0,logToRemoteMaxSize:mt=void 0,logToRemoteMinSize:yt=void 0,logUidToRemote:De=void 0,protocol:bt=void 0,host:vt=void 0,port:Lt=void 0,pathname:Tt=void 0,binarypathname:Et=void 0,loadHtmlToImage:wt=!1}=null){if(this.options.contextLenMax=t,this.options.idLenMax=n,this.options.lidLenMax=o,this.options.only=r,this.options.messageLenMax=u,this.options.symbolLenMax=s,this.options.enableMillisec=Ie,this.options.timeLenMax=e,this.options.logMaxSize=w,this.options.logMaxArchives=S,this.options.logIndexArchive=m,this.options.addArchiveTimestamp=N,this.options.addArchiveIndex=F,this.options.compressArchives=_,this.options.compressionLevel=I,this.options.requiredLogLevel=be,this.options.enableTrace=a,this.options.enableMillisec=Ie,this.options.enableMillisec&&(this.options.timeLenMax+=4),this.options.logToLocalStorageMax=dt,this.options.logToLocalStorageSize=ht,this.options.logToRemote=b,this.options.logToRemoteUrl=P,this.options.logToRemoteBinaryUrl=q,this.options.logToRemoteMaxEntries=gt,this.options.logToRemoteDebounce=pt,this.options.logToRemoteMaxSize=mt,this.options.logToRemoteMinSize=yt,this.options.logUidToRemote=De,wt){let H=jt();Ut(H)}let Le;$e!==void 0?Le=!!$e:l!==void 0&&(Le=!!l),[{hideLog:Le},{oneConsolePerContext:ve},{hideError:d},{enableDate:ut},{hideHookMessage:h},{hidePassingTests:g},{logToRemote:b},{logToLocalStorage:ft},{logUidToRemote:De}].forEach(H=>{let V=Object.keys(H)[0],W=H[V];W!==void 0&&(this.options[V]=!!W)}),[{logToRemoteBinaryUrl:q},{logToRemoteUrl:P},{loopback:ye},{protocol:bt},{host:vt},{port:Lt},{pathname:Tt},{binarypathname:Et}].forEach(H=>{let V=Object.keys(H)[0],W=H[V];W!==void 0&&(this.options[V]=W)}),this.options.enableDate&&this.options.timeLenMax===void 0&&(this.options.timeLenMax=17),this.options.timeLenMax===void 0&&(this.options.enableDate?this.options.timeLenMax=17:this.options.timeLenMax=8),this.options.logToRemote&&!this.options.logToRemoteUrl&&(this.options.logToRemoteUrl=this.convertToUrl({protocol:this.options.protocol,host:this.options.host,port:this.options.port,pathname:this.options.pathname})),this.options.logToRemote&&!this.options.logToRemoteBinaryUrl&&(this.options.logToRemoteBinaryUrl=this.convertToUrl({protocol:this.options.protocol,host:this.options.host,port:this.options.port,pathname:this.options.binarypathname||A.binarypathname})),p===!1?this.options.logToDom=!1:p!==void 0&&(this.options.logToDom=p===!0?A.consoleDomId:p),v===!1?this.options.logToFile=!1:v!==void 0&&(this.isBrowser()||(this.options.logToFile=v||A.logFilename),f.Console.log("LogToFile is not supported in this environment. "))}updateOptions(e){this.setOptions({...this.options,...e})}getOptions(){return this.options}truncateMessage(e="",{fit:t=0,align:n=f.ALIGN.LEFT,ellipsis:o="..."}={}){return e=""+e,t&&e.length>t&&(e=e.substring(0,t-o.length)+o),e=n===f.ALIGN.LEFT?e.padEnd(t," "):e.padStart(t," "),e}onBuildLog(e={}){try{let{contextName:t,message:n="",lid:o="",symbol:r=""}=e,s="",a=n.split(/\n/g);for(let u=0;u<a.length;++u){let l=a[u],d=new Date,h=("0"+d.getHours()).slice(-2)+":"+("0"+d.getMinutes()).slice(-2)+":"+("0"+d.getSeconds()).slice(-2);(e.hasOwnProperty("enableMillisec")?e.enableMillisec:this.options.enableMillisec)&&(h+=","+("00"+d.getMilliseconds()).slice(-3)),(e.hasOwnProperty("enableDate")?e.enableDate:this.options.enableDate)&&(h=d.getFullYear().toString().slice(-2)+"-"+(d.getMonth()+1).toString().padStart(2,"0")+"-"+d.getDate().toString().padStart(2,"0")+" "+h);let v=e.hasOwnProperty("timeLenMax")?e.timeLenMax:this.options.timeLenMax;h=this.truncateMessage(h,{fit:v}),u>0&&(t="",o=""),t=this.truncateMessage(t,{fit:this.options.contextLenMax,align:f.ALIGN.RIGHT}),o=this.truncateMessage(o,{fit:this.options.lidLenMax}),(e.hasOwnProperty("messageLenMax")?e.messageLenMax:this.options.messageLenMax)!==void 0&&(l=this.truncateMessage(l,{fit:this.options.messageLenMax})),r=this.truncateMessage(r,{fit:this.options.symbolLenMax}),u<=0?s+=`[${h}] ${t}: (${o}) ${r} ${l}`:u<a.length-1?(s+=`
|
|
6
6
|
`,s+=`[${h}] ${t} ${o} ${l}`):l&&(s+=`
|
|
7
7
|
`,s+=`[${h}] ${t} ${o} ${l}`)}return s}catch(t){f.Console.error(`ANALOGGER_FAILURE_1001: ${t.message}`)}return""}onErrorForUserTarget(e,...t){this.errorUserTargetHandler(e,...t)}onError(e,...t){e.target===L(this,k).USER&&this.onErrorForUserTarget(e,...t)}onDisplayLog(...e){this.log(...e)}assistStask(e){try{let t=e.stack.split(`
|
|
8
|
-
`),n=[];for(let o=0;o<t.length;++o){let r=t[o];n.push(r)}return n}catch(t){f.Console.error(`ANALOGGER_FAILURE_1002: ${t.message}`)}return e.message}onDisplayError(...e){try{let t=-1,n=null;for(let o=0;o<e.length;++o){let r=e[o];if(r instanceof Error&&r.stack){t=o,n=this.assistStask(r)||[];break}}if(!n){this.error(...e);return}for(let o=0;o<n.length;++o)e[t]=n[o],this.error(...e)}catch(t){f.Console.error(`ANALOGGER_FAILURE_1003: ${t.message}`)}}setLogFormat(e){if(typeof e!="function")return console.error("Invalid parameter for setFormat. It is expecting a function or method."),!1;this.format=e.bind(this)}resetLogFormatter(){this.format=this.originalFormatFunction}setErrorHandler(e){this.errorTargetHandler=e.bind(this)}setErrorHandlerForUserTarget(e){this.errorUserTargetHandler=e.bind(this)}isContextValid(e){return typeof e=="object"&&!Array.isArray(e)&&e!==null?e.hasOwnProperty("contextName")&&e.hasOwnProperty("target"):!1}setDefaultContext(e){this.setContext(K.DEFAULT.contextName,e)}generateDefaultContext(){let e=L(this,$)[K.DEFAULT.contextName]||{};return e=Object.assign({},{lid:"",contextName:K.DEFAULT.contextName,target:C.ALL,symbol:"\u26A1",color:G[1],logLevel:E.LOG},e),e.name=e.contextName,e.id=this.logIndex++,e}generateNewContext(){let e=this.generateDefaultContext();return e.color=G[this.indexColor++%(G.length-3)+2],e.symbol="",e}generateErrorContext(){let e=this.generateDefaultContext();return e.contextName=K.ERROR.contextName,e.name=e.contextName,e.color=G[0],e.symbol="\u274C",e.error=!0,e.logLevel=E.ERROR,e}setContext(e,t={}){t.contextName=e,t.name=e,t=O(this,ae,Ze).call(this,t),L(this,$)[e]=t}getContext(e){return L(this,$)[e]}setContexts(e){Object.keys(e).forEach(n=>{let o=e[n]||{};this.setContext(n,o),e[n]=L(this,$)[n]})}getContexts(){return Object.freeze(L(this,$))}setTargets(e={}){let t={};if(Array.isArray(e))try{for(let n=0;n<e.length;++n){let o=e[n];if(typeof o=="string"||o instanceof String)t[o]=o;else if(typeof o=="object"){let r=null;for(let s in o){let a=o[s];if(s=s.trim(),!s){console.error("Invalid target");break}if(typeof a=="string"||a instanceof String){a=a.trim(),r=[s,a];break}if(typeof a=="number")break}r&&(t[r[0]]=r[1])}}}catch(n){console.error({lid:4321},n.message)}else t=e;Ee(this,k,Object.assign({},t,{...C}))}addTargets(e){let t=L(this,k),n=Object.assign({},t,e);this.setTargets(n)}getTargets(){return Object.freeze(L(this,k))}setActiveTargets(e=null){if(e==null){this.activeTargets=[C.ALL];return}if(typeof e=="function"&&(e=e.call(this)),e===null){this.activeTargets=[C.ALL];return}else if(typeof e=="string"||e instanceof String)e=e.split(",");else if(typeof e=="function")e=e.call(this);else if(typeof e=="object")e=Object.values(e);else if(!Array.isArray(e))return;let t=[];for(let n=0;n<e.length;++n){let o=e[n].trim();Object.values(L(this,k)).includes(o)&&t.push(o)}this.activeTargets=t}getActiveTargets(){return this.activeTargets}getActiveTarget(){return(this.getActiveTargets()||[])[0]||C.NONE}setActiveTarget(e){this.activeTargets=[],this.setActiveTargets(e);let t=this.activeTargets[0]||C.NONE;this.activeTargets=[t]}setLogLevel(e,t){L(this,B)[e]=t}getLogLevel(e){return L(this,B)[e]}setLogLevels(e){Ee(this,B,e)}getLogLevels(){return Object.freeze(L(this,B))}isTargetAllowed(e){return e===C.NONE?!1:e===C.ALL||this.getActiveTarget()===C.ALL?!0:this.activeTargets.includes(e)}getCurrentTime(){let e=new Date,t=String(e.getHours()).padStart(2,"0"),n=String(e.getMinutes()).padStart(2,"0"),o=String(e.getSeconds()).padStart(2,"0");return`${t}:${n}:${o}`}getCurrentDate(){let e=new Date,t=String(e.getDate()).padStart(2,"0"),n=String(e.getMonth()+1).padStart(2,"0"),o=String(e.getFullYear()).slice(-2);return`${t}-${n}-${o}`}setColumns(e,t,n){let o=1,r=!1;for(let a in t){if(!["contextName","symbol","lid","text","enableDate","enableTime"].includes(a))continue;let u=t[a];a==="enableDate"&&(u=this.getCurrentDate()+" "+this.getCurrentTime()),a==="enableTime"&&(u=this.getCurrentTime());let l=document.createElement("span");l.classList.add("analogger-col",`analogger-col-${a}`,`analogger-col-${o}`),++o,a!=="enableDate"&&a!=="enableTime"?(l.textContent=u,e.append(l)):(l.textContent=`[${u}]`,r=l)}r&&(r.classList.add("analogger-col","analogger-col-time","analogger-col-0"),e.prepend(r));let s=document.createElement("span");s.classList.add("analogger-col","analogger-col-text",`analogger-col-${o}`),s.textContent=n,e.append(s);for(let a=1;a<=3;++a)s=document.createElement("span"),s.classList.add("analogger-col","analogger-col-extra",`analogger-extra-${a}`),e.append(s)}checkOnLoggingToDom(e,t){try{let n=e.onLoggingToDom;return typeof n!="function"?void 0:n.call(this,e,t)}catch{}}addLineToDom(e,t,{context:n,addType:o,message:r,text:s,args:a}){if(this.checkOnLoggingToDom(n,{message:r,text:s,args:a,logCounter:this.logCounter,$view:e,$line:t,addType:o})===!1)return;if(o===oe.BOTTOM?e.append(t):e.insertBefore(t,e.firstChild),this.removeDomOldEntries(e)){if(e.getElementsByClassName(Oe).length)return;this.showRemovedNotification(n);return}this.scrollDivToBottom(e)}showRemovedNotification(e){e.contextName=Ve,e.symbol="\u{1F5D1}",e.color="orange",e.className=Oe,clearTimeout(this.timerAddLineToDomID),this.timerAddLineToDomID=setTimeout(()=>{this.timerAddLineToDomID=null,this.writeLogToDom(e,"",{addType:oe.TOP,message:"Oldest entries removed"})},500)}writeLogToDom(e,t,{addType:n=oe.BOTTOM,message:o="",args:r=null}={}){(!this.$containers||!this.$containers.length)&&(this.$containers=document.querySelectorAll(this.options.logToDom)),t=o||t;for(let s=0;s<this.$containers.length;++s){let a=this.$containers[s],u=a.querySelector("."+Re);u||(u=document.createElement("div"),u.classList.add(Re),u.append(document.createElement("span")),u.append(document.createElement("span")),u.append(document.createElement("span")),a.append(u));let l=a.querySelector("."+Ae);l||(l=document.createElement("div"),l.classList.add(Ae),a.append(l));let d=a.querySelector("."+Ce);d||(d=document.createElement("div"),d.classList.add(Ce),d.append(document.createElement("span")),d.append(document.createElement("span")),d.append(document.createElement("span")),a.append(d));let h=document.createElement("div");h.classList.add(qe),e.className&&h.classList.add(e.className),h.style.color=e.color,this.setColumns(h,e,t,r),setTimeout(function(g,p,{addType:v,context:w,message:S,text:m,args:N}){this.addLineToDom(g,p,{addType:v,context:w,message:S,text:m,args:N})}.bind(this,l,h,{addType:n,context:e,message:o,text:t,args:r}),0)}}writeLogToFile(e){try{if(!fs.existsSync(this.options.logToFilePath)){let t=path.dirname(this.options.logToFilePath);fs.existsSync(t)||fs.mkdirSync(t,{recursive:!0}),fs.writeFileSync(this.options.logToFilePath,"")}if(this.options.logMaxSize&&fs.statSync(this.options.logToFilePath).size>this.options.logMaxSize){this.options.logIndexArchive<this.options.logMaxArchives?++this.options.logIndexArchive:this.options.logIndexArchive=1;let o=this.options.logMaxArchives.toString().length+1,{filePath:r,extension:s,basename:a,dirname:u}=Pt(this.options.logToFilePath),l,d;l=this.options.addArchiveIndex?"."+this.options.logIndexArchive.toString().padStart(o,"0"):"",d=this.options.addArchiveTimestamp?"."+Ht():"";let h=`${r}${d}${l}${s}`,g=this.options.compressArchives?`${r}.tar.gz`:"";Bt(u,a,l,s,g,this.options.compressionLevel,p=>{p&&console.error("DELETION_FAILURE: Failed to delete some files")}),fs.renameSync(this.options.logToFilePath,h),fs.writeFileSync(this.options.logToFilePath,"")}fs.appendFileSync(this.options.logToFilePath,e+this.EOL)}catch(t){f.Console.error("LOG_TO_FILE_FAILURE: ",t.message)}}writeLogToRemote(...e){try{if(this.options.logToRemoteMaxEntries===void 0&&this.options.logToRemoteDebounce===void 0&&this.options.logToRemoteMaxSize===void 0){this.performRemotePost([...e]);return}if(Array.isArray(this.remoteBuffer)){if(this.remoteBuffer.push([...e]),this.options.logToRemoteMaxEntries!==void 0&&this.remoteBuffer.length>=this.options.logToRemoteMaxEntries){this.flushRemoteLogs(!0);return}if(this.options.logToRemoteMaxSize!==void 0&&JSON.stringify(this.remoteBuffer).length>=this.options.logToRemoteMaxSize){this.flushRemoteLogs(!0);return}}this.options.logToRemoteDebounce!==void 0&&!this.remoteTimer&&(this.remoteTimer=setTimeout(()=>{this.flushRemoteLogs()},this.options.logToRemoteDebounce))}catch(t){f.Console.error("LOG_TO_REMOTE_FAILURE: ",t.message)}}flushRemoteLogs(e=!1){if(this.remoteBuffer.length===0)return;if(!e&&this.options.logToRemoteMinSize!==void 0&&JSON.stringify(this.remoteBuffer).length<this.options.logToRemoteMinSize&&(this.remoteWaitCount=(this.remoteWaitCount||0)+1,this.remoteWaitCount<2)){this.options.logToRemoteDebounce!==void 0&&(this.remoteTimer&&clearTimeout(this.remoteTimer),this.remoteTimer=setTimeout(()=>{this.flushRemoteLogs()},this.options.logToRemoteDebounce));return}this.remoteTimer&&(clearTimeout(this.remoteTimer),this.remoteTimer=null),this.remoteWaitCount=0;let t=[...this.remoteBuffer];this.remoteBuffer=[],this.performRemotePost(t)}performRemotePost(e){try{let t=this.generateLogToRemoteUrl(this.options.logToRemoteUrl);if(!t)return null;let n=JSON.stringify(e);fetch(t,{method:"post",body:n,headers:{"Content-Type":"application/json"}}).then(o=>o.json()).catch(()=>null)}catch(t){f.Console.error("REMOTE_POST_FAILURE: ",t.message)}}writeLogToLocalStorage(e,...t){try{if(!this.isBrowser()||!window.localStorage)return;let n=`analogger_history_${this.instanceName}`,o=[];try{let u=localStorage.getItem(n);u&&(o=JSON.parse(u))}catch{o=[]}o.push({context:e,args:t});let r=this.options.logToLocalStorageMax||50;o.length>r&&(o=o.slice(o.length-r));let s=this.options.logToLocalStorageSize||1e4,a=JSON.stringify(o);for(;a.length>s&&o.length>1;)o.shift(),a=JSON.stringify(o);localStorage.setItem(n,a)}catch(n){f.Console.error("LOG_TO_LOCAL_STORAGE_FAILURE: ",n.message)}}restoreLogs(){try{if(!this.isBrowser()||!window.localStorage)return;let e=`analogger_history_${this.instanceName}`,t=localStorage.getItem(e);if(!t)return;let n=JSON.parse(t);if(!Array.isArray(n))return;let o=this.options.logToLocalStorage;this.options.logToLocalStorage=!1,n.forEach(r=>{let{context:s,args:a}=r;s&&(s.symbol="floppy_disk",delete s.order,delete s.maxSeen,delete s.test),this.processOutput(s,...a)}),this.options.logToLocalStorage=o}catch(e){f.Console.error("RESTORE_LOGS_FAILURE: ",e.message)}}uploadDataToRemote(e,t=null,n=null){try{if(!this.options.logToRemote)return;let o=this.generateLogToRemoteUrl(this.options.logToRemoteBinaryUrl,{pathname:A.binarypathname});if(!o)return null;let r=e;t&&(r=JSON.stringify({raw:e,context:t})),fetch(o,{method:"post",body:r}).then(s=>s.json()).then(s=>n&&n(s)).catch(s=>s)}catch(o){f.Console.error("BINARY_TO_REMOTE_FAILURE: ",o.message)}}stringifyEntry(e){let t;try{t=JSON.stringify(e)}catch{}if(!t)try{t=Je(e)}catch{}return t}convertEntry(e){try{if(e==null||e==="")return e;if(typeof e=="boolean")return e;if(typeof e=="symbol"||typeof e=="number")return e;if(typeof e=="string"||myVar instanceof e)return e;if(e instanceof Date)return e}catch{}return this.stringifyEntry(e)}convertArgumentsToText(e){let t=[],n,o=e.length;for(let r=0;r<o;++r){let s,a=e[r];s=this.convertEntry(a),t.push(s)}return n=t.join("\u2022"),n}writeToConsole(e,t){let n=[e];this.isBrowser()&&n.push(`color: ${t.color}`);let o=t.contextLevel||E.LOG;o>=E.ERROR?f.Console.error(...n):o>=E.WARN?f.Console.warn(...n):o>=E.INFO?f.Console.info(...n):o>=E.LOG?f.Console.log(...n):o>=E.DEBUG&&f.Console.debug(...n)}checkPlugins(e,{message:t,text:n,args:o,logCounter:r}){try{if(!Object.keys(f.pluginTable).length)return;let s=!0;for(let a in e){let u=e[a];if(!u)continue;let l=f.pluginTable[a];if(!l||typeof l!="object")continue;let{callback:d,methodName:h,type:g}=l;if(typeof d!="function")continue;d.call(this,e,{message:t,text:n,args:o,logCounter:r,methodName:h,type:g,pluginOptions:u})===!1&&(s=!1)}return s}catch{}}checkOnLogging(e,t,n,o){if(!!o)try{let r=e[o];return typeof r!="function"?void 0:r.call(this,t,n)}catch{}}isContextMessagePattern(e){return/\{\{[^}]+}}/.test(e)}transformContextMessage(e,t){let n=e;for(let o in t){let r=`{{${o}}}`,s=t[o];n=n.replaceAll(r,s)}return n}report(){let e=this._testResults.length,t=this._testResults.filter(u=>u.passed).length,n=e-t,o=n>0,r="================== ANALOGGER TEST RESULT ================",s="==========================================================",a=[r,` Total : ${e}`,` Passed : ${t}`,` Failed : ${n}`,s];if(this.isBrowser()){let u=o?"color: red; font-weight: bold;":"color: green; font-weight: bold;";a.forEach(l=>f.Console.log(`%c${l}`,u))}else a.forEach(u=>{let l=Y.getTextFromColor(u,{fg:o?"#FF0000":"#00CC44",isBold:!0});f.Console.log(l)});return{total:e,passed:t,failed:n}}processOutput(e={},...t){try{let n="";if(f.lidTableOn&&e.lid){let l=f.lidTable[e.lid];l?(e.message=e.message||l.message,l.callCount=l.callCount||0,++l.callCount,l.callTimes.push(Date.now())):f.lidTable[e.lid]={...e,message:t[0],lid:e.lid,callCount:1,callTimes:[Date.now()]}}if(e.message&&(this.isContextMessagePattern(e.message)&&t.length>=1&&typeof t[0]=="object"&&(e.message=this.transformContextMessage(e.message,t[0]),t.shift()),t.unshift(e.message)),this.applySymbolByName(e),this.checkOnLogging(e,e,t,"onContext"),!this.isTargetAllowed(e.target)||e.logLevel===E.OFF||this.options.requiredLogLevel>e.logLevel||this.options.only!==void 0&&this.options.only!==null&&!(Array.isArray(this.options.only)?this.options.only:[this.options.only]).some(h=>{let g=e.lid||"",p=e.only||"";return h instanceof RegExp?h.test(g)||h.test(p):typeof h=="string"?g.includes(h)||p.includes(h):h===g||h===p})||!O(this,fe,ot).call(this,e))return;O(this,le,et).call(this,e),O(this,ce,tt).call(this,e);let o=this.checkOnLogging(e,t[0],arguments,"onMessage");o!==void 0&&(arguments[1]=o);let r=t;n=this.convertArgumentsToText(r),O(this,ue,nt).call(this,e,n),this.options.logUidToRemote&&(e.uid=this.getUid());let s="",a=this.format({...e,message:n});this.keepLog&&this.addToLogHistory({context:e,message:n,text:a}),++this.logCounter;let u=this.checkOnLogging(e,a,{message:n,args:r,logCounter:this.logCounter},"onOutput");if(u===!1||((typeof u=="string"||u instanceof String)&&(a=u),u=this.checkPlugins(e,{message:n,text:a,args:r,logCounter:this.logCounter}),u===!1)||(this.options.logToRemote&&this.writeLogToRemote(e,...r),this.options.logToLocalStorage&&this.writeLogToLocalStorage(e,...r),this.isBrowser()?(e.environnment=f.ENVIRONMENT_TYPE.BROWSER,this.options.logToDom&&this.writeLogToDom(e,a,{message:n,args:r}),s=`%c${a}`):(e.environnment=f.ENVIRONMENT_TYPE.NODE,s=Y.getTextFromColor(a,{fg:e.color,bg:e.bgColor,isBold:e.bold,isUnderline:e.underline,isReversed:e.reversed}),this.options.logToFile&&this.writeLogToFile(a)),!(e.silent===!1||e.hideLog===!1)&&(this.options.hideLog||e.hideLog||e.silent)))return;this.writeToConsole(s,e),this.errorTargetHandler(e,r)}catch{}}isExtendedOptionsPassed(e){return typeof e!="object"?!1:e.hasOwnProperty("context")||e.hasOwnProperty("target")||e.hasOwnProperty("color")||e.hasOwnProperty("contextName")||e.hasOwnProperty("raw")||e.hasOwnProperty("only")||e.hasOwnProperty("lid")}stringToObject(e){try{if(e=e.trim(),e.startsWith("{")&&e.endsWith("}")&&(e=e.slice(1,-1).trim()),!e)return{};let t={},n=e.split(",");for(let o of n){let r=o.trim().split(":");if(r.length<2){if(r.length===2){let d=r[0].trim().replace(/^['"]|['"]$/g,"");t[d]=r[1].trim().replace(/^['"]|['"]$/g,"")}else if(r.length===1&&Object.keys(t).length>0){let d=Object.keys(t).pop();t[d]instanceof Array?t[d].push(r[0].trim().replace(/^['"]|['"]$/g,"")):t[d]=[t[d],r[0].trim().replace(/^['"]|['"]$/g,"")]}continue}let s=r[0],a=r.slice(1).join(":"),u=s.trim().replace(/^['"]|['"]$/g,""),l=a.trim().replace(/^['"]|['"]$/g,"");!isNaN(l)&&!isNaN(parseFloat(l))?t[u]=parseFloat(l):t[u]=l}return t}catch{return null}}extractContextFromInput(e){if(typeof e=="string"||e instanceof String){if(e.toLowerCase().indexOf("lid:")!==0)return e;let t=this.stringToObject(e);t&&(e=t)}if(typeof e=="object"&&!Array.isArray(e)&&e!==null&&this.isExtendedOptionsPassed(e)){if(e.contextName){let t=L(this,$)[e.contextName];t&&(e=Object.assign({},t,e))}e.target||(e.target=this.getActiveTarget())}return e}listSymbols(){for(let e in ie)console.rawLog(ie[e]+` ${e} `)}applySymbolByName(e){try{e.symbol&&ie[e.symbol]&&(e.symbol=ie[e.symbol])}catch{}}convertToContext(e,t){e=e||t;let n=e;if(e.context&&typeof e.context=="object"){let o=Object.assign({},e);delete o.context,n=Object.assign({},e.context,o)}return n=Object.assign({},t,n),delete n.context,n}log(e,...t){if(e=this.extractContextFromInput(e),!this.isExtendedOptionsPassed(e)){if(!this.forceLidOn){let s=this.generateDefaultContext();this.processOutput.apply(this,[s,e,...t]);return}(!t||!t.length)&&(t=[e]),e={lid:Xe(this.options.lidLenMax)}}let n=this.generateDefaultContext(),o=this.convertToContext(e,n);if(o.raw){f.Console.log(...t);return}this.resolveLineCall&&(this.resolveErrorLineCall||(o.stack=Ne())),this.processOutput.apply(this,[o,...t])}error(e,...t){if(this.options.hideError)return;if(e=this.extractContextFromInput(e),!this.isExtendedOptionsPassed(e)){if(!this.forceLidOn){let s=this.generateErrorContext();this.processOutput.apply(this,[s,e,...t]);return}e={lid:Xe(this.options.lidLenMax)}}let n=this.generateErrorContext(),o=this.convertToContext(e,n);this.resolveErrorLineCall&&(o.stack=Ne()),this.log(o,...t),this.options.enableTrace&&console.trace(...t)}overrideError(){this.options.hideHookMessage||f.Console.log("AnaLogger: Hook placed on console.error"),L(this,M).error=!0,console.error=this.onDisplayError.bind(this)}attachConsole(){try{return console.rawLog=f.Console.log,console.raw=f.Console.log,console.rawInfo=f.Console.info,console.rawWarn=f.Console.warn,console.rawError=f.Console.error,console.logHistory=this.logHistory,console.logHistory=this.logHistory,Vt.forEach(e=>{console[e]=function(...t){this[e](...t)}.bind(this)}),!0}catch(e){console.error({lid:4321},e.message)}return!1}overrideConsole({log:e=!0,info:t=!0,warn:n=!0,error:o=!1}={}){this.options.hideHookMessage||f.Console.log("AnaLogger: Hook placed on console.log"),[{log:e},{info:t},{warn:n}].forEach(function(r){let s=Object.keys(r)[0];r[s]&&(L(this,M)[s]=!0,console[s]=this.onDisplayLog.bind(this))}.bind(this)),o&&this.overrideError(),this.attachConsole()}removeOverrideError(){console.error=f.Console.error,L(this,M).error=!1}removeOverride({log:e=!0,info:t=!0,warn:n=!0,error:o=!1}={}){e&&(console.log=f.Console.log,L(this,M).log=!1),t&&(console.info=f.Console.info,L(this,M).info=!1),n&&(console.warn=f.Console.warn,L(this,M).warn=!1),o&&this.removeOverrideError()}info(...e){return this.log(...e)}warn(...e){return this.log(...e)}table(...e){if(!L(this,M).log){f.Console.table(...e);return}let t=console.log;console.log=f.Console.log,f.Console.table(...e),console.log=t}takeScreenshot(e={selector:"body",quality:.95,canvasHeight:480,canvasWidth:640}){return new Promise((t,n)=>{if(!this.isBrowser())return;let o="";if(!htmlToImage){o="MISSING_HTML_IMAGE_LIBRARY: htmlToImage is not defined. Please install it first.",f.Console.error(o),n(new Error);return}let{selector:r,quality:s,canvasHeight:a,canvasWidth:u}=e,l=document.querySelector(r),d={quality:s,canvasHeight:a,canvasWidth:u};htmlToImage.toPng(l,d).then(function(h,g){this.uploadDataToRemote(g,h,p=>{t({imageData:g,serverResponse:p})})}.bind(this,e)).catch(function(h){o=`IMAGE_PROCESSING_FAILURE: ${h.message}`,f.Console.error(o),n(new Error(o))})})}alert(...e){if(!this.isBrowser())return this.log(...e);let t;if(e&&(e[0]&&e[0].hasOwnProperty("lid")||this.isContextValid(e[0]))){let n=this.generateDefaultContext();t=this.convertToContext(e[0],n).lid+": "+e.slice(1).join(" | ")}else t=e.join(" | ");alert(t)}assert(e,t=!0,...n){let o;try{return typeof e=="function"?(o=e(...n),o!==t?(this.error("Asset failed"),!1):(this.options.hidePassingTests||this.log("SUCCESS: Assert passed"),!0)):e!==t?(this.error("Assert failed"),!1):(this.options.hidePassingTests||this.log("SUCCESS: Assert passed"),!0)}catch{this.error("Unexpected error in assert")}return!1}startSnapshotProcess(){let e=this.getRawLogHistory?this.getRawLogHistory():this.logHistory||[];this._snapshotWindowStart=e.length,console.log(`[AnaLogger] Snapshot window started at history index ${this._snapshotWindowStart}.`)}takeSnapshot(e,t={}){try{if(!e||typeof e!="string")return console.warn("[AnaLogger] takeSnapshot: snapshotID must be a non-empty string."),[];let{messages:n=!0,context:o=!0}=t,r=O(this,he,it).call(this,{messages:n,context:o}),s={snapshotID:e,timestamp:Date.now(),options:{messages:n,context:o},entries:r};return O(this,de,rt).call(this,O(this,z,se).call(this,e),JSON.stringify(s)),console.log(`[AnaLogger] Snapshot "${e}" saved - ${r.length} lid(s) captured.`),r}catch(n){return console.error("[AnaLogger] takeSnapshot error:",n.message),[]}}compareSnapshots(e,t,n=[]){try{let o=O(this,Q,Me).call(this,O(this,z,se).call(this,e)),r=O(this,Q,Me).call(this,O(this,z,se).call(this,t));if(o||console.warn(`[AnaLogger] compareSnapshots: snapshot "${e}" not found.`),r||console.warn(`[AnaLogger] compareSnapshots: snapshot "${t}" not found.`),!o||!r)return null;let s=JSON.parse(o),a=JSON.parse(r),u=!!(n[0]&&n[0].messages),l=!!(n[1]&&n[1].messages),d=new Map(s.entries.map(m=>[m.lid,m])),h=new Map(a.entries.map(m=>[m.lid,m])),g=new Set([...d.keys(),...h.keys()]),p=[],v=[],w=[];for(let m of g){let N=d.has(m),F=h.has(m);N&&F?p.push(m):N?v.push(m):w.push(m)}let S=[];for(let m of p)S.push({left:m,right:m,status:"both",msgLeft:d.get(m)?.message??"",msgRight:h.get(m)?.message??""});for(let m of v)S.push({left:m,right:"",status:"left",msgLeft:d.get(m)?.message??"",msgRight:""});for(let m of w)S.push({left:"",right:m,status:"right",msgLeft:"",msgRight:h.get(m)?.message??""});return O(this,ge,st).call(this,e,t,S,s,a,{showMsg1:u,showMsg2:l}),{onlyInSnap1:v,onlyInSnap2:w,inBoth:p}}catch(o){return console.error("[AnaLogger] compareSnapshots error:",o.message),null}}applyAnalogFormatting({activeTarget:e="",override:t=!1}={}){try{let o={STANDARD:null,TEST:{color:"#B18904",symbol:"diamonds"}};return this.setDefaultContext(o.DEFAULT),e&&this.setActiveTarget(e),this.setOptions({silent:!1,hideError:!1,hideHookMessage:!0,lidLenMax:6}),t&&(this.overrideConsole(),this.overrideError()),!0}catch(n){console.error({lid:3249},n.message)}return!1}applyPredefinedFormat(e=re.DEFAULT_FORMAT,{activeTarget:t="",override:n=!1}={}){if(e===re.DEFAULT_FORMAT)return this.applyAnalogFormatting({activeTarget:t,override:n})}static generateInstance(){return new f}static getInstance(e=0){return f.instanceCount?L(f,X)[e]:null}static generateMainInstance(){let e=f.getInstance();return e||new f}static startLogger(){f.generateMainInstance().applyPredefinedFormat(re.DEFAULT_FORMAT,{override:!0})}static stopLogger(){let e=f.generateMainInstance();e.removeOverride(),e.removeOverrideError()}convertToUrl({protocol:e=A.protocol,host:t=A.host,port:n=A.port,pathname:o=A.pathname}={}){let r=new URL("http://localhost");return r.protocol=e,r.host=t,r.port=n,o&&(r.pathname=o),r.toString()}generateLogToRemoteUrl(e=null,{pathname:t=A.pathname}={}){if(typeof e=="string"||e instanceof String)return e;if(!this.isBrowser())return null;let n=this.options.protocol||window.location.protocol+"//",o=this.options.host||window.location.host||A.host,r=this.options.port||A.port;return t=this.options.pathname||t,this.convertToUrl({protocol:n,host:o,port:r,pathname:t})}addPlugin(e,t,n=""){n=n||e,this[e]=t,f.pluginTable[n]={type:Ke.LOCAL,methodName:e,callback:t}}addGlobalPlugin(e,t,n){f[e]=t,f.pluginTable[n]={type:Ke.GLOBAL,methodName:e,callback:t}}getPluginList(){return Object.keys(f.pluginTable)}validatePlugin(e){return f.pluginTable[e]?!0:(console.warn(`The plugin ${e} is not registered`),!1)}},R=f;X=new WeakMap,$=new WeakMap,k=new WeakMap,B=new WeakMap,M=new WeakMap,ae=new WeakSet,Ze=function(e){let t=this.generateNewContext(),n=Object.assign({},t,e);return n.color.toLowerCase().indexOf("rgb")>-1?n.color=Y.rgbStringToHex(n.color):n.color.indexOf("#")===-1&&(n.color=Y.colorNameToHex(n.color)),n},le=new WeakSet,et=function(e){if(e.order===void 0||e.order===null)return;let t=e.order,n=e.lid||"";if(this._lastOrderEntry!==null){let{lid:o,order:r}=this._lastOrderEntry;if(t<r){let s=`! Order mismatch: [${n}| order: ${t}] appeared after [${o}| order: ${r}]`;f.Console.warn(s)}}this._lastOrderEntry={lid:n,order:t}},ce=new WeakSet,tt=function(e){if(e.maxSeen===void 0||e.maxSeen===null)return;let t=e.lid||"",n=e.maxSeen;this._seenCount[t]=(this._seenCount[t]||0)+1;let o=this._seenCount[t];if(o>n){let r=`! MaxSeen exceeded: [${t}| maxSeen: ${n}] has been seen ${o} time(s)`;f.Console.warn(r)}},ue=new WeakSet,nt=function(e,t){if(!e.hasOwnProperty("test"))return;let n=e.lid||"",o=e.test,r=typeof o=="function"?!!o():!!o;this._testResults.push({lid:n,passed:r,message:t}),r||f.Console.warn(`! Test failed: [${n}] ${t}`)},fe=new WeakSet,ot=function(e){let t=e.only,n=(u,l)=>u instanceof RegExp?u.test(l):typeof u=="string"||u instanceof String?l.includes(u):u===l,o=(u,l)=>Array.isArray(u)?u.some(d=>n(d,l)):n(u,l),r=u=>Array.isArray(u)?u.map(l=>l instanceof RegExp?l.toString():String(l)).join(", "):u instanceof RegExp?u.toString():String(u),s=e.lid||"";if(t==null)return this._localOnlyFilter!==void 0?o(this._localOnlyFilter,s):!0;if(!o(t,s))return!1;let a=r(t);if(this._localOnlyFilter===void 0)this.isBrowser()?f.Console.clear?f.Console.clear():typeof console<"u"&&console.clear&&console.clear():process.stdout.write("\x1Bc");else if(this._localOnlyLabel!==a){let u=`\u2500\u2500\u2500 only switched to ${a} \u2500\u2500\u2500`;this.isBrowser()?f.Console.log(`%c${u}`,"color: #888; font-style: italic"):f.Console.log(u)}return this._localOnlyFilter=t,this._localOnlyLabel=a,!0},Fe=new WeakSet,Wt=function(e){},Q=new WeakSet,Me=function(e){try{if(this.isBrowser()&&typeof localStorage<"u")return localStorage.getItem(e)}catch{}return null},de=new WeakSet,rt=function(e,t){try{if(this.isBrowser()&&typeof localStorage<"u"){localStorage.setItem(e,t);return}}catch{}},z=new WeakSet,se=function(e){return`analogger_snapshot_${this.instanceName||"default"}_${e}`},he=new WeakSet,it=function(e={}){let{messages:t=!0,context:n=!0}=e,o=this.getRawLogHistory?this.getRawLogHistory():this.logHistory||[],r=this._snapshotWindowStart!==void 0?o.slice(this._snapshotWindowStart):o,s=new Map;for(let a of r){let u=a.context||{},l=u.lid;if(!l)continue;let d={lid:l};t&&(d.message=a.message??""),n&&(d.context={...u}),s.set(l,d)}return Array.from(s.values())},ge=new WeakSet,st=function(e,t,n,o,r,{showMsg1:s=!1,showMsg2:a=!1}={}){let u=g=>g.timestamp?new Date(g.timestamp).toLocaleTimeString():"-";console.log(`
|
|
8
|
+
`),n=[];for(let o=0;o<t.length;++o){let r=t[o];n.push(r)}return n}catch(t){f.Console.error(`ANALOGGER_FAILURE_1002: ${t.message}`)}return e.message}onDisplayError(...e){try{let t=-1,n=null;for(let o=0;o<e.length;++o){let r=e[o];if(r instanceof Error&&r.stack){t=o,n=this.assistStask(r)||[];break}}if(!n){this.error(...e);return}for(let o=0;o<n.length;++o)e[t]=n[o],this.error(...e)}catch(t){f.Console.error(`ANALOGGER_FAILURE_1003: ${t.message}`)}}setLogFormat(e){if(typeof e!="function")return console.error("Invalid parameter for setFormat. It is expecting a function or method."),!1;this.format=e.bind(this)}resetLogFormatter(){this.format=this.originalFormatFunction}setErrorHandler(e){this.errorTargetHandler=e.bind(this)}setErrorHandlerForUserTarget(e){this.errorUserTargetHandler=e.bind(this)}isContextValid(e){return typeof e=="object"&&!Array.isArray(e)&&e!==null?e.hasOwnProperty("contextName")&&e.hasOwnProperty("target"):!1}setDefaultContext(e){this.setContext(K.DEFAULT.contextName,e)}generateDefaultContext(){let e=L(this,$)[K.DEFAULT.contextName]||{};return e=Object.assign({},{lid:"",contextName:K.DEFAULT.contextName,target:C.ALL,symbol:"\u26A1",color:G[1],logLevel:E.LOG},e),e.name=e.contextName,e.id=this.logIndex++,e}generateNewContext(){let e=this.generateDefaultContext();return e.color=G[this.indexColor++%(G.length-3)+2],e.symbol="",e}generateErrorContext(){let e=this.generateDefaultContext();return e.contextName=K.ERROR.contextName,e.name=e.contextName,e.color=G[0],e.symbol="\u274C",e.error=!0,e.logLevel=E.ERROR,e}setContext(e,t={}){t.contextName=e,t.name=e,t=O(this,ae,Ze).call(this,t),L(this,$)[e]=t}getContext(e){return L(this,$)[e]}setContexts(e){Object.keys(e).forEach(n=>{let o=e[n]||{};this.setContext(n,o),e[n]=L(this,$)[n]})}getContexts(){return Object.freeze(L(this,$))}setTargets(e={}){let t={};if(Array.isArray(e))try{for(let n=0;n<e.length;++n){let o=e[n];if(typeof o=="string"||o instanceof String)t[o]=o;else if(typeof o=="object"){let r=null;for(let s in o){let a=o[s];if(s=s.trim(),!s){console.error("Invalid target");break}if(typeof a=="string"||a instanceof String){a=a.trim(),r=[s,a];break}if(typeof a=="number")break}r&&(t[r[0]]=r[1])}}}catch(n){console.error({lid:4321},n.message)}else t=e;Ee(this,k,Object.assign({},t,{...C}))}addTargets(e){let t=L(this,k),n=Object.assign({},t,e);this.setTargets(n)}getTargets(){return Object.freeze(L(this,k))}setActiveTargets(e=null){if(e==null){this.activeTargets=[C.ALL];return}if(typeof e=="function"&&(e=e.call(this)),e===null){this.activeTargets=[C.ALL];return}else if(typeof e=="string"||e instanceof String)e=e.split(",");else if(typeof e=="function")e=e.call(this);else if(typeof e=="object")e=Object.values(e);else if(!Array.isArray(e))return;let t=[];for(let n=0;n<e.length;++n){let o=e[n].trim();Object.values(L(this,k)).includes(o)&&t.push(o)}this.activeTargets=t}getActiveTargets(){return this.activeTargets}getActiveTarget(){return(this.getActiveTargets()||[])[0]||C.NONE}setActiveTarget(e){this.activeTargets=[],this.setActiveTargets(e);let t=this.activeTargets[0]||C.NONE;this.activeTargets=[t]}setLogLevel(e,t){L(this,B)[e]=t}getLogLevel(e){return L(this,B)[e]}setLogLevels(e){Ee(this,B,e)}getLogLevels(){return Object.freeze(L(this,B))}isTargetAllowed(e){return e===C.NONE?!1:e===C.ALL||this.getActiveTarget()===C.ALL?!0:this.activeTargets.includes(e)}getCurrentTime(){let e=new Date,t=String(e.getHours()).padStart(2,"0"),n=String(e.getMinutes()).padStart(2,"0"),o=String(e.getSeconds()).padStart(2,"0");return`${t}:${n}:${o}`}getCurrentDate(){let e=new Date,t=String(e.getDate()).padStart(2,"0"),n=String(e.getMonth()+1).padStart(2,"0"),o=String(e.getFullYear()).slice(-2);return`${t}-${n}-${o}`}setColumns(e,t,n){let o=1,r=!1;for(let a in t){if(!["contextName","symbol","lid","text","enableDate","enableTime"].includes(a))continue;let u=t[a];a==="enableDate"&&(u=this.getCurrentDate()+" "+this.getCurrentTime()),a==="enableTime"&&(u=this.getCurrentTime());let l=document.createElement("span");l.classList.add("analogger-col",`analogger-col-${a}`,`analogger-col-${o}`),++o,a!=="enableDate"&&a!=="enableTime"?(l.textContent=u,e.append(l)):(l.textContent=`[${u}]`,r=l)}r&&(r.classList.add("analogger-col","analogger-col-time","analogger-col-0"),e.prepend(r));let s=document.createElement("span");s.classList.add("analogger-col","analogger-col-text",`analogger-col-${o}`),s.textContent=n,e.append(s);for(let a=1;a<=3;++a)s=document.createElement("span"),s.classList.add("analogger-col","analogger-col-extra",`analogger-extra-${a}`),e.append(s)}checkOnLoggingToDom(e,t){try{let n=e.onLoggingToDom;return typeof n!="function"?void 0:n.call(this,e,t)}catch{}}addLineToDom(e,t,{context:n,addType:o,message:r,text:s,args:a}){if(this.checkOnLoggingToDom(n,{message:r,text:s,args:a,logCounter:this.logCounter,$view:e,$line:t,addType:o})===!1)return;if(o===oe.BOTTOM?e.append(t):e.insertBefore(t,e.firstChild),this.removeDomOldEntries(e)){if(e.getElementsByClassName(Oe).length)return;this.showRemovedNotification(n);return}this.scrollDivToBottom(e)}showRemovedNotification(e){e.contextName=Ve,e.symbol="\u{1F5D1}",e.color="orange",e.className=Oe,clearTimeout(this.timerAddLineToDomID),this.timerAddLineToDomID=setTimeout(()=>{this.timerAddLineToDomID=null,this.writeLogToDom(e,"",{addType:oe.TOP,message:"Oldest entries removed"})},500)}writeLogToDom(e,t,{addType:n=oe.BOTTOM,message:o="",args:r=null}={}){(!this.$containers||!this.$containers.length)&&(this.$containers=document.querySelectorAll(this.options.logToDom)),t=o||t;for(let s=0;s<this.$containers.length;++s){let a=this.$containers[s],u=a.querySelector("."+Re);u||(u=document.createElement("div"),u.classList.add(Re),u.append(document.createElement("span")),u.append(document.createElement("span")),u.append(document.createElement("span")),a.append(u));let l=a.querySelector("."+Ae);l||(l=document.createElement("div"),l.classList.add(Ae),a.append(l));let d=a.querySelector("."+Ce);d||(d=document.createElement("div"),d.classList.add(Ce),d.append(document.createElement("span")),d.append(document.createElement("span")),d.append(document.createElement("span")),a.append(d));let h=document.createElement("div");h.classList.add(qe),e.className&&h.classList.add(e.className),h.style.color=e.color,this.setColumns(h,e,t,r),setTimeout(function(g,p,{addType:v,context:w,message:S,text:m,args:N}){this.addLineToDom(g,p,{addType:v,context:w,message:S,text:m,args:N})}.bind(this,l,h,{addType:n,context:e,message:o,text:t,args:r}),0)}}writeLogToFile(e){try{if(!fs.existsSync(this.options.logToFilePath)){let t=path.dirname(this.options.logToFilePath);fs.existsSync(t)||fs.mkdirSync(t,{recursive:!0}),fs.writeFileSync(this.options.logToFilePath,"")}if(this.options.logMaxSize&&fs.statSync(this.options.logToFilePath).size>this.options.logMaxSize){this.options.logIndexArchive<this.options.logMaxArchives?++this.options.logIndexArchive:this.options.logIndexArchive=1;let o=this.options.logMaxArchives.toString().length+1,{filePath:r,extension:s,basename:a,dirname:u}=Pt(this.options.logToFilePath),l,d;l=this.options.addArchiveIndex?"."+this.options.logIndexArchive.toString().padStart(o,"0"):"",d=this.options.addArchiveTimestamp?"."+Ht():"";let h=`${r}${d}${l}${s}`,g=this.options.compressArchives?`${r}.tar.gz`:"";Bt(u,a,l,s,g,this.options.compressionLevel,p=>{p&&console.error("DELETION_FAILURE: Failed to delete some files")}),fs.renameSync(this.options.logToFilePath,h),fs.writeFileSync(this.options.logToFilePath,"")}fs.appendFileSync(this.options.logToFilePath,e+this.EOL)}catch(t){f.Console.error("LOG_TO_FILE_FAILURE: ",t.message)}}writeLogToRemote(...e){try{if(this.options.logToRemoteMaxEntries===void 0&&this.options.logToRemoteDebounce===void 0&&this.options.logToRemoteMaxSize===void 0){this.performRemotePost([...e]);return}if(Array.isArray(this.remoteBuffer)){if(this.remoteBuffer.push([...e]),this.options.logToRemoteMaxEntries!==void 0&&this.remoteBuffer.length>=this.options.logToRemoteMaxEntries){this.flushRemoteLogs(!0);return}if(this.options.logToRemoteMaxSize!==void 0&&JSON.stringify(this.remoteBuffer).length>=this.options.logToRemoteMaxSize){this.flushRemoteLogs(!0);return}}this.options.logToRemoteDebounce!==void 0&&!this.remoteTimer&&(this.remoteTimer=setTimeout(()=>{this.flushRemoteLogs()},this.options.logToRemoteDebounce))}catch(t){f.Console.error("LOG_TO_REMOTE_FAILURE: ",t.message)}}flushRemoteLogs(e=!1){if(this.remoteBuffer.length===0)return;if(!e&&this.options.logToRemoteMinSize!==void 0&&JSON.stringify(this.remoteBuffer).length<this.options.logToRemoteMinSize&&(this.remoteWaitCount=(this.remoteWaitCount||0)+1,this.remoteWaitCount<2)){this.options.logToRemoteDebounce!==void 0&&(this.remoteTimer&&clearTimeout(this.remoteTimer),this.remoteTimer=setTimeout(()=>{this.flushRemoteLogs()},this.options.logToRemoteDebounce));return}this.remoteTimer&&(clearTimeout(this.remoteTimer),this.remoteTimer=null),this.remoteWaitCount=0;let t=[...this.remoteBuffer];this.remoteBuffer=[],this.performRemotePost(t)}performRemotePost(e){try{let t=this.generateLogToRemoteUrl(this.options.logToRemoteUrl);if(!t)return null;let n=JSON.stringify(e);fetch(t,{method:"post",body:n,headers:{"Content-Type":"application/json"}}).then(o=>o.json()).catch(()=>null)}catch(t){f.Console.error("REMOTE_POST_FAILURE: ",t.message)}}writeLogToLocalStorage(e,...t){try{if(!this.isBrowser()||!window.localStorage)return;let n=`analogger_history_${this.instanceName}`,o=[];try{let u=localStorage.getItem(n);u&&(o=JSON.parse(u))}catch{o=[]}o.push({context:e,args:t});let r=this.options.logToLocalStorageMax||50;o.length>r&&(o=o.slice(o.length-r));let s=this.options.logToLocalStorageSize||1e4,a=JSON.stringify(o);for(;a.length>s&&o.length>1;)o.shift(),a=JSON.stringify(o);localStorage.setItem(n,a)}catch(n){f.Console.error("LOG_TO_LOCAL_STORAGE_FAILURE: ",n.message)}}restoreLogs(){try{if(!this.isBrowser()||!window.localStorage)return;let e=`analogger_history_${this.instanceName}`,t=localStorage.getItem(e);if(!t)return;let n=JSON.parse(t);if(!Array.isArray(n))return;let o=this.options.logToLocalStorage;this.options.logToLocalStorage=!1,n.forEach(r=>{let{context:s,args:a}=r;s&&(s.symbol="floppy_disk",delete s.order,delete s.maxSeen,delete s.test),this.processOutput(s,...a)}),this.options.logToLocalStorage=o}catch(e){f.Console.error("RESTORE_LOGS_FAILURE: ",e.message)}}uploadDataToRemote(e,t=null,n=null){try{if(!this.options.logToRemote)return;let o=this.generateLogToRemoteUrl(this.options.logToRemoteBinaryUrl,{pathname:A.binarypathname});if(!o)return null;let r=e;t&&(r=JSON.stringify({raw:e,context:t})),fetch(o,{method:"post",body:r}).then(s=>s.json()).then(s=>n&&n(s)).catch(s=>s)}catch(o){f.Console.error("BINARY_TO_REMOTE_FAILURE: ",o.message)}}stringifyEntry(e){let t;try{t=JSON.stringify(e)}catch{}if(!t)try{t=Je(e)}catch{}return t}convertEntry(e){try{if(e==null||e==="")return e;if(typeof e=="boolean")return e;if(typeof e=="symbol"||typeof e=="number")return e;if(typeof e=="string"||myVar instanceof e)return e;if(e instanceof Date)return e}catch{}return this.stringifyEntry(e)}convertArgumentsToText(e){let t=[],n,o=e.length;for(let r=0;r<o;++r){let s,a=e[r];s=this.convertEntry(a),t.push(s)}return n=t.join("\u2022"),n}writeToConsole(e,t){let n=[e];this.isBrowser()&&n.push(`color: ${t.color}`);let o=t.contextLevel||E.LOG;o>=E.ERROR?f.Console.error(...n):o>=E.WARN?f.Console.warn(...n):o>=E.INFO?f.Console.info(...n):o>=E.LOG?f.Console.log(...n):o>=E.DEBUG&&f.Console.debug(...n)}checkPlugins(e,{message:t,text:n,args:o,logCounter:r}){try{if(!Object.keys(f.pluginTable).length)return;let s=!0;for(let a in e){let u=e[a];if(!u)continue;let l=f.pluginTable[a];if(!l||typeof l!="object")continue;let{callback:d,methodName:h,type:g}=l;if(typeof d!="function")continue;d.call(this,e,{message:t,text:n,args:o,logCounter:r,methodName:h,type:g,pluginOptions:u})===!1&&(s=!1)}return s}catch{}}checkOnLogging(e,t,n,o){if(!!o)try{let r=e[o];return typeof r!="function"?void 0:r.call(this,t,n)}catch{}}isContextMessagePattern(e){return/\{\{[^}]+}}/.test(e)}transformContextMessage(e,t){let n=e;for(let o in t){let r=`{{${o}}}`,s=t[o];n=n.replaceAll(r,s)}return n}resetOrder(){this._lastOrderEntry=null}report(){let e=this._testResults.length,t=this._testResults.filter(u=>u.passed).length,n=e-t,o=n>0,r="================== ANALOGGER TEST RESULT ================",s="==========================================================",a=[r,` Total : ${e}`,` Passed : ${t}`,` Failed : ${n}`,s];if(this.isBrowser()){let u=o?"color: red; font-weight: bold;":"color: green; font-weight: bold;";a.forEach(l=>f.Console.log(`%c${l}`,u))}else a.forEach(u=>{let l=Y.getTextFromColor(u,{fg:o?"#FF0000":"#00CC44",isBold:!0});f.Console.log(l)});return{total:e,passed:t,failed:n}}processOutput(e={},...t){try{let n="";if(f.lidTableOn&&e.lid){let l=f.lidTable[e.lid];l?(e.message=e.message||l.message,l.callCount=l.callCount||0,++l.callCount,l.callTimes.push(Date.now())):f.lidTable[e.lid]={...e,message:t[0],lid:e.lid,callCount:1,callTimes:[Date.now()]}}if(e.message&&(this.isContextMessagePattern(e.message)&&t.length>=1&&typeof t[0]=="object"&&(e.message=this.transformContextMessage(e.message,t[0]),t.shift()),t.unshift(e.message)),this.applySymbolByName(e),this.checkOnLogging(e,e,t,"onContext"),!this.isTargetAllowed(e.target)||e.logLevel===E.OFF||this.options.requiredLogLevel>e.logLevel||this.options.only!==void 0&&this.options.only!==null&&!(Array.isArray(this.options.only)?this.options.only:[this.options.only]).some(h=>{let g=e.lid||"",p=e.only||"";return h instanceof RegExp?h.test(g)||h.test(p):typeof h=="string"?g.includes(h)||p.includes(h):h===g||h===p})||!O(this,fe,ot).call(this,e))return;O(this,le,et).call(this,e),O(this,ce,tt).call(this,e);let o=this.checkOnLogging(e,t[0],arguments,"onMessage");o!==void 0&&(arguments[1]=o);let r=t;n=this.convertArgumentsToText(r),O(this,ue,nt).call(this,e,n),this.options.logUidToRemote&&(e.uid=this.getUid());let s="",a=this.format({...e,message:n});this.keepLog&&this.addToLogHistory({context:e,message:n,text:a}),++this.logCounter;let u=this.checkOnLogging(e,a,{message:n,args:r,logCounter:this.logCounter},"onOutput");if(u===!1||((typeof u=="string"||u instanceof String)&&(a=u),u=this.checkPlugins(e,{message:n,text:a,args:r,logCounter:this.logCounter}),u===!1)||(this.options.logToRemote&&this.writeLogToRemote(e,...r),this.options.logToLocalStorage&&this.writeLogToLocalStorage(e,...r),this.isBrowser()?(e.environnment=f.ENVIRONMENT_TYPE.BROWSER,this.options.logToDom&&this.writeLogToDom(e,a,{message:n,args:r}),s=`%c${a}`):(e.environnment=f.ENVIRONMENT_TYPE.NODE,s=Y.getTextFromColor(a,{fg:e.color,bg:e.bgColor,isBold:e.bold,isUnderline:e.underline,isReversed:e.reversed}),this.options.logToFile&&this.writeLogToFile(a)),!(e.silent===!1||e.hideLog===!1)&&(this.options.hideLog||e.hideLog||e.silent)))return;this.writeToConsole(s,e),this.errorTargetHandler(e,r)}catch{}}isExtendedOptionsPassed(e){return typeof e!="object"?!1:e.hasOwnProperty("context")||e.hasOwnProperty("target")||e.hasOwnProperty("color")||e.hasOwnProperty("contextName")||e.hasOwnProperty("raw")||e.hasOwnProperty("only")||e.hasOwnProperty("lid")}stringToObject(e){try{if(e=e.trim(),e.startsWith("{")&&e.endsWith("}")&&(e=e.slice(1,-1).trim()),!e)return{};let t={},n=e.split(",");for(let o of n){let r=o.trim().split(":");if(r.length<2){if(r.length===2){let d=r[0].trim().replace(/^['"]|['"]$/g,"");t[d]=r[1].trim().replace(/^['"]|['"]$/g,"")}else if(r.length===1&&Object.keys(t).length>0){let d=Object.keys(t).pop();t[d]instanceof Array?t[d].push(r[0].trim().replace(/^['"]|['"]$/g,"")):t[d]=[t[d],r[0].trim().replace(/^['"]|['"]$/g,"")]}continue}let s=r[0],a=r.slice(1).join(":"),u=s.trim().replace(/^['"]|['"]$/g,""),l=a.trim().replace(/^['"]|['"]$/g,"");!isNaN(l)&&!isNaN(parseFloat(l))?t[u]=parseFloat(l):t[u]=l}return t}catch{return null}}extractContextFromInput(e){if(typeof e=="string"||e instanceof String){if(e.toLowerCase().indexOf("lid:")!==0)return e;let t=this.stringToObject(e);t&&(e=t)}if(typeof e=="object"&&!Array.isArray(e)&&e!==null&&this.isExtendedOptionsPassed(e)){if(e.contextName){let t=L(this,$)[e.contextName];t&&(e=Object.assign({},t,e))}e.target||(e.target=this.getActiveTarget())}return e}listSymbols(){for(let e in ie)console.rawLog(ie[e]+` ${e} `)}applySymbolByName(e){try{e.symbol&&ie[e.symbol]&&(e.symbol=ie[e.symbol])}catch{}}convertToContext(e,t){e=e||t;let n=e;if(e.context&&typeof e.context=="object"){let o=Object.assign({},e);delete o.context,n=Object.assign({},e.context,o)}return n=Object.assign({},t,n),delete n.context,n}log(e,...t){if(e=this.extractContextFromInput(e),!this.isExtendedOptionsPassed(e)){if(!this.forceLidOn){let s=this.generateDefaultContext();this.processOutput.apply(this,[s,e,...t]);return}(!t||!t.length)&&(t=[e]),e={lid:Xe(this.options.lidLenMax)}}let n=this.generateDefaultContext(),o=this.convertToContext(e,n);if(o.raw){f.Console.log(...t);return}this.resolveLineCall&&(this.resolveErrorLineCall||(o.stack=Ne())),this.processOutput.apply(this,[o,...t])}error(e,...t){if(this.options.hideError)return;if(e=this.extractContextFromInput(e),!this.isExtendedOptionsPassed(e)){if(!this.forceLidOn){let s=this.generateErrorContext();this.processOutput.apply(this,[s,e,...t]);return}e={lid:Xe(this.options.lidLenMax)}}let n=this.generateErrorContext(),o=this.convertToContext(e,n);this.resolveErrorLineCall&&(o.stack=Ne()),this.log(o,...t),this.options.enableTrace&&console.trace(...t)}overrideError(){this.options.hideHookMessage||f.Console.log("AnaLogger: Hook placed on console.error"),L(this,M).error=!0,console.error=this.onDisplayError.bind(this)}attachConsole(){try{return console.rawLog=f.Console.log,console.raw=f.Console.log,console.rawInfo=f.Console.info,console.rawWarn=f.Console.warn,console.rawError=f.Console.error,console.logHistory=this.logHistory,console.logHistory=this.logHistory,Vt.forEach(e=>{console[e]=function(...t){this[e](...t)}.bind(this)}),!0}catch(e){console.error({lid:4321},e.message)}return!1}overrideConsole({log:e=!0,info:t=!0,warn:n=!0,error:o=!1}={}){this.options.hideHookMessage||f.Console.log("AnaLogger: Hook placed on console.log"),[{log:e},{info:t},{warn:n}].forEach(function(r){let s=Object.keys(r)[0];r[s]&&(L(this,M)[s]=!0,console[s]=this.onDisplayLog.bind(this))}.bind(this)),o&&this.overrideError(),this.attachConsole()}removeOverrideError(){console.error=f.Console.error,L(this,M).error=!1}removeOverride({log:e=!0,info:t=!0,warn:n=!0,error:o=!1}={}){e&&(console.log=f.Console.log,L(this,M).log=!1),t&&(console.info=f.Console.info,L(this,M).info=!1),n&&(console.warn=f.Console.warn,L(this,M).warn=!1),o&&this.removeOverrideError()}info(...e){return this.log(...e)}warn(...e){return this.log(...e)}table(...e){if(!L(this,M).log){f.Console.table(...e);return}let t=console.log;console.log=f.Console.log,f.Console.table(...e),console.log=t}takeScreenshot(e={selector:"body",quality:.95,canvasHeight:480,canvasWidth:640}){return new Promise((t,n)=>{if(!this.isBrowser())return;let o="";if(!htmlToImage){o="MISSING_HTML_IMAGE_LIBRARY: htmlToImage is not defined. Please install it first.",f.Console.error(o),n(new Error);return}let{selector:r,quality:s,canvasHeight:a,canvasWidth:u}=e,l=document.querySelector(r),d={quality:s,canvasHeight:a,canvasWidth:u};htmlToImage.toPng(l,d).then(function(h,g){this.uploadDataToRemote(g,h,p=>{t({imageData:g,serverResponse:p})})}.bind(this,e)).catch(function(h){o=`IMAGE_PROCESSING_FAILURE: ${h.message}`,f.Console.error(o),n(new Error(o))})})}alert(...e){if(!this.isBrowser())return this.log(...e);let t;if(e&&(e[0]&&e[0].hasOwnProperty("lid")||this.isContextValid(e[0]))){let n=this.generateDefaultContext();t=this.convertToContext(e[0],n).lid+": "+e.slice(1).join(" | ")}else t=e.join(" | ");alert(t)}assert(e,t=!0,...n){let o;try{return typeof e=="function"?(o=e(...n),o!==t?(this.error("Asset failed"),!1):(this.options.hidePassingTests||this.log("SUCCESS: Assert passed"),!0)):e!==t?(this.error("Assert failed"),!1):(this.options.hidePassingTests||this.log("SUCCESS: Assert passed"),!0)}catch{this.error("Unexpected error in assert")}return!1}startSnapshotProcess(){let e=this.getRawLogHistory?this.getRawLogHistory():this.logHistory||[];this._snapshotWindowStart=e.length,console.log(`[AnaLogger] Snapshot window started at history index ${this._snapshotWindowStart}.`)}takeSnapshot(e,t={}){try{if(!e||typeof e!="string")return console.warn("[AnaLogger] takeSnapshot: snapshotID must be a non-empty string."),[];let{messages:n=!0,context:o=!0}=t,r=O(this,he,it).call(this,{messages:n,context:o}),s={snapshotID:e,timestamp:Date.now(),options:{messages:n,context:o},entries:r};return O(this,de,rt).call(this,O(this,z,se).call(this,e),JSON.stringify(s)),console.log(`[AnaLogger] Snapshot "${e}" saved - ${r.length} lid(s) captured.`),r}catch(n){return console.error("[AnaLogger] takeSnapshot error:",n.message),[]}}compareSnapshots(e,t,n=[]){try{let o=O(this,Q,Me).call(this,O(this,z,se).call(this,e)),r=O(this,Q,Me).call(this,O(this,z,se).call(this,t));if(o||console.warn(`[AnaLogger] compareSnapshots: snapshot "${e}" not found.`),r||console.warn(`[AnaLogger] compareSnapshots: snapshot "${t}" not found.`),!o||!r)return null;let s=JSON.parse(o),a=JSON.parse(r),u=!!(n[0]&&n[0].messages),l=!!(n[1]&&n[1].messages),d=new Map(s.entries.map(m=>[m.lid,m])),h=new Map(a.entries.map(m=>[m.lid,m])),g=new Set([...d.keys(),...h.keys()]),p=[],v=[],w=[];for(let m of g){let N=d.has(m),F=h.has(m);N&&F?p.push(m):N?v.push(m):w.push(m)}let S=[];for(let m of p)S.push({left:m,right:m,status:"both",msgLeft:d.get(m)?.message??"",msgRight:h.get(m)?.message??""});for(let m of v)S.push({left:m,right:"",status:"left",msgLeft:d.get(m)?.message??"",msgRight:""});for(let m of w)S.push({left:"",right:m,status:"right",msgLeft:"",msgRight:h.get(m)?.message??""});return O(this,ge,st).call(this,e,t,S,s,a,{showMsg1:u,showMsg2:l}),{onlyInSnap1:v,onlyInSnap2:w,inBoth:p}}catch(o){return console.error("[AnaLogger] compareSnapshots error:",o.message),null}}applyAnalogFormatting({activeTarget:e="",override:t=!1}={}){try{let o={STANDARD:null,TEST:{color:"#B18904",symbol:"diamonds"}};return this.setDefaultContext(o.DEFAULT),e&&this.setActiveTarget(e),this.setOptions({silent:!1,hideError:!1,hideHookMessage:!0,lidLenMax:6}),t&&(this.overrideConsole(),this.overrideError()),!0}catch(n){console.error({lid:3249},n.message)}return!1}applyPredefinedFormat(e=re.DEFAULT_FORMAT,{activeTarget:t="",override:n=!1}={}){if(e===re.DEFAULT_FORMAT)return this.applyAnalogFormatting({activeTarget:t,override:n})}static generateInstance(){return new f}static getInstance(e=0){return f.instanceCount?L(f,X)[e]:null}static generateMainInstance(){let e=f.getInstance();return e||new f}static startLogger(){f.generateMainInstance().applyPredefinedFormat(re.DEFAULT_FORMAT,{override:!0})}static stopLogger(){let e=f.generateMainInstance();e.removeOverride(),e.removeOverrideError()}convertToUrl({protocol:e=A.protocol,host:t=A.host,port:n=A.port,pathname:o=A.pathname}={}){let r=new URL("http://localhost");return r.protocol=e,r.host=t,r.port=n,o&&(r.pathname=o),r.toString()}generateLogToRemoteUrl(e=null,{pathname:t=A.pathname}={}){if(typeof e=="string"||e instanceof String)return e;if(!this.isBrowser())return null;let n=this.options.protocol||window.location.protocol+"//",o=this.options.host||window.location.host||A.host,r=this.options.port||A.port;return t=this.options.pathname||t,this.convertToUrl({protocol:n,host:o,port:r,pathname:t})}addPlugin(e,t,n=""){n=n||e,this[e]=t,f.pluginTable[n]={type:Ke.LOCAL,methodName:e,callback:t}}addGlobalPlugin(e,t,n){f[e]=t,f.pluginTable[n]={type:Ke.GLOBAL,methodName:e,callback:t}}getPluginList(){return Object.keys(f.pluginTable)}validatePlugin(e){return f.pluginTable[e]?!0:(console.warn(`The plugin ${e} is not registered`),!1)}},R=f;X=new WeakMap,$=new WeakMap,k=new WeakMap,B=new WeakMap,M=new WeakMap,ae=new WeakSet,Ze=function(e){let t=this.generateNewContext(),n=Object.assign({},t,e);return n.color.toLowerCase().indexOf("rgb")>-1?n.color=Y.rgbStringToHex(n.color):n.color.indexOf("#")===-1&&(n.color=Y.colorNameToHex(n.color)),n},le=new WeakSet,et=function(e){if(e.resetOrder&&this.resetOrder(),e.order===void 0||e.order===null)return;let t=e.order,n=e.lid||"";if(this._lastOrderEntry!==null){let{lid:o,order:r}=this._lastOrderEntry;if(t<r){let s=`! Order mismatch: [${n}| order: ${t}] appeared after [${o}| order: ${r}]`;f.Console.warn(s)}}this._lastOrderEntry={lid:n,order:t}},ce=new WeakSet,tt=function(e){if(e.maxSeen===void 0||e.maxSeen===null)return;let t=e.lid||"",n=e.maxSeen;this._seenCount[t]=(this._seenCount[t]||0)+1;let o=this._seenCount[t];if(o>n){let r=`! MaxSeen exceeded: [${t}| maxSeen: ${n}] has been seen ${o} time(s)`;f.Console.warn(r)}},ue=new WeakSet,nt=function(e,t){if(!e.hasOwnProperty("test"))return;let n=e.lid||"",o=e.test,r=typeof o=="function"?!!o():!!o;this._testResults.push({lid:n,passed:r,message:t}),r||f.Console.warn(`! Test failed: [${n}] ${t}`)},fe=new WeakSet,ot=function(e){let t=e.only,n=(u,l)=>u instanceof RegExp?u.test(l):typeof u=="string"||u instanceof String?l.includes(u):u===l,o=(u,l)=>Array.isArray(u)?u.some(d=>n(d,l)):n(u,l),r=u=>Array.isArray(u)?u.map(l=>l instanceof RegExp?l.toString():String(l)).join(", "):u instanceof RegExp?u.toString():String(u),s=e.lid||"";if(t==null)return this._localOnlyFilter!==void 0?o(this._localOnlyFilter,s):!0;if(!o(t,s))return!1;let a=r(t);if(this._localOnlyFilter===void 0)this.isBrowser()?f.Console.clear?f.Console.clear():typeof console<"u"&&console.clear&&console.clear():process.stdout.write("\x1Bc");else if(this._localOnlyLabel!==a){let u=`\u2500\u2500\u2500 only switched to ${a} \u2500\u2500\u2500`;this.isBrowser()?f.Console.log(`%c${u}`,"color: #888; font-style: italic"):f.Console.log(u)}return this._localOnlyFilter=t,this._localOnlyLabel=a,!0},Fe=new WeakSet,Wt=function(e){},Q=new WeakSet,Me=function(e){try{if(this.isBrowser()&&typeof localStorage<"u")return localStorage.getItem(e)}catch{}return null},de=new WeakSet,rt=function(e,t){try{if(this.isBrowser()&&typeof localStorage<"u"){localStorage.setItem(e,t);return}}catch{}},z=new WeakSet,se=function(e){return`analogger_snapshot_${this.instanceName||"default"}_${e}`},he=new WeakSet,it=function(e={}){let{messages:t=!0,context:n=!0}=e,o=this.getRawLogHistory?this.getRawLogHistory():this.logHistory||[],r=this._snapshotWindowStart!==void 0?o.slice(this._snapshotWindowStart):o,s=new Map;for(let a of r){let u=a.context||{},l=u.lid;if(!l)continue;let d={lid:l};t&&(d.message=a.message??""),n&&(d.context={...u}),s.set(l,d)}return Array.from(s.values())},ge=new WeakSet,st=function(e,t,n,o,r,{showMsg1:s=!1,showMsg2:a=!1}={}){let u=g=>g.timestamp?new Date(g.timestamp).toLocaleTimeString():"-";console.log(`
|
|
9
9
|
Snapshot comparison: "${e}" vs "${t}"`),console.log(` ${e} captured at ${u(o)} - ${o.entries.length} lid(s)`),console.log(` ${t} captured at ${u(r)} - ${r.entries.length} lid(s)
|
|
10
10
|
`);let l=`${e} message`,d=`${t} message`,h=n.length?n.map(g=>{let p={[e]:g.left,[t]:g.right};return s&&(p[l]=g.msgLeft),a&&(p[d]=g.msgRight),p}):[(()=>{let g={[e]:"(empty)",[t]:"(empty)"};return s&&(g[l]=""),a&&(g[d]=""),g})()];console.table(h),typeof document<"u"&&O(this,pe,at).call(this,e,t,n,o,r,u,{showMsg1:s,showMsg2:a})},pe=new WeakSet,at=function(e,t,n,o,r,s,{showMsg1:a=!1,showMsg2:u=!1}={}){try{let l={both:"#1e293b",bothBg:"#f8fafc",left:"#7f1d1d",leftBg:"#fef2f2",right:"#14532d",rightBg:"#f0fdf4",msg:"#475569",msgBg:"#f8fafc",header:"#1e40af",border:"#e2e8f0"},d=o.entries.filter(b=>r.entries.some(P=>P.lid===b.lid)).length,h=o.entries.length-d,g=r.entries.length-d,p=3+(a?1:0)+(u?1:0),v=(b="")=>`padding:4px 10px;font-family:monospace;font-size:12px;border-bottom:1px solid ${l.border};${b}`,w=(b="")=>`padding:4px 10px;font-size:11px;color:${l.msg};border-bottom:1px solid ${l.border};max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;${b}`,S=`padding:5px 10px;text-align:left;background:#f1f5f9;font-size:11px;color:#475569;border-bottom:2px solid ${l.border}`,m=b=>{let P=b.status==="left"?l.leftBg:l.bothBg,q=b.status==="right"?l.rightBg:l.bothBg,ye=b.status==="left"?l.left:b.status==="right"?"#94a3b8":l.both,be=b.status==="right"?l.right:b.status==="left"?"#94a3b8":l.both,ve=b.status==="both"?"=":b.status==="left"?"\u25C0":b.status==="right"?"\u25B6":"\u2260";return`<tr>
|
|
11
11
|
<td style="${v(`background:${P};color:${ye}`)}">${b.left||""}</td>
|
package/esm/ana-logger.mjs
CHANGED
|
@@ -2618,6 +2618,14 @@ class ____AnaLogger
|
|
|
2618
2618
|
return result;
|
|
2619
2619
|
}
|
|
2620
2620
|
|
|
2621
|
+
/**
|
|
2622
|
+
* Resets the order tracking.
|
|
2623
|
+
*/
|
|
2624
|
+
resetOrder()
|
|
2625
|
+
{
|
|
2626
|
+
this._lastOrderEntry = null;
|
|
2627
|
+
}
|
|
2628
|
+
|
|
2621
2629
|
/**
|
|
2622
2630
|
* Check that log calls with an "order" property arrive in non-decreasing order.
|
|
2623
2631
|
* When a call with a lower order value appears after one with a higher order value,
|
|
@@ -2628,6 +2636,11 @@ class ____AnaLogger
|
|
|
2628
2636
|
*/
|
|
2629
2637
|
#checkOrder(context)
|
|
2630
2638
|
{
|
|
2639
|
+
if (context.resetOrder)
|
|
2640
|
+
{
|
|
2641
|
+
this.resetOrder();
|
|
2642
|
+
}
|
|
2643
|
+
|
|
2631
2644
|
if (context.order === undefined || context.order === null)
|
|
2632
2645
|
{
|
|
2633
2646
|
return;
|
package/package.json
CHANGED
package/src/ana-logger.cjs
CHANGED
|
@@ -2606,6 +2606,14 @@ class ____AnaLogger
|
|
|
2606
2606
|
return result;
|
|
2607
2607
|
}
|
|
2608
2608
|
|
|
2609
|
+
/**
|
|
2610
|
+
* Resets the order tracking.
|
|
2611
|
+
*/
|
|
2612
|
+
resetOrder()
|
|
2613
|
+
{
|
|
2614
|
+
this._lastOrderEntry = null;
|
|
2615
|
+
}
|
|
2616
|
+
|
|
2609
2617
|
/**
|
|
2610
2618
|
* Check that log calls with an "order" property arrive in non-decreasing order.
|
|
2611
2619
|
* When a call with a lower order value appears after one with a higher order value,
|
|
@@ -2616,6 +2624,11 @@ class ____AnaLogger
|
|
|
2616
2624
|
*/
|
|
2617
2625
|
#checkOrder(context)
|
|
2618
2626
|
{
|
|
2627
|
+
if (context.resetOrder)
|
|
2628
|
+
{
|
|
2629
|
+
this.resetOrder();
|
|
2630
|
+
}
|
|
2631
|
+
|
|
2619
2632
|
if (context.order === undefined || context.order === null)
|
|
2620
2633
|
{
|
|
2621
2634
|
return;
|