UNPKG

@neosjs/timer-logger

Version:

A timer logger for NeosJS

7 lines 3.32 kB
/*! * @neosjs/timer-logger * Version: 1.0.0 * Copyright (c) 2021-PRESENT NeosJS * ReleaseTime: 2025/9/12 16:53:20 */ const e=()=>{if(!(typeof window>`u`)&&(`performance`in window||(window.performance={}),Date.now||(Date.now=()=>new Date().getTime()),!(`now`in window.performance))){let e=Date.now();performance.timing?.navigationStart&&(e=performance.timing.navigationStart),window.performance.now=()=>Date.now()-e}},t=t=>{if(typeof process<`u`&&process.hrtime)return process.hrtime(t);if(typeof window<`u`){e();let n=Math.floor((Date.now()-performance.now())*.001),r=performance.now()*.001,i=Math.floor(r)+n,a=Math.floor(r%1*1e9);return t&&(i-=t[0],a-=t[1],a<0&&(i--,a+=1e9)),[i,a]}let n=Date.now(),r=Math.floor(n/1e3),i=n%1e3*1e6;if(t){let e=r-t[0],n=i-t[1];return n<0?[e-1,n+1e9]:[e,n]}return[r,i]};t.bigint=e=>{let n=t(e);return BigInt(n[0]*1e9+n[1])};var n=t,r=class e{startTime;endTime=null;isEnded=!1;constructor(){this.startTime=n()}static formatTime(e){let t=Math.round((e[0]*1e9+e[1])/1e6),n=Math.floor(t/36e5),r=Math.floor(t%36e5/6e4),i=Math.floor(t%6e4/1e3),a=Math.round(t%1e3),o=[];return n>0&&o.push(`${n}h`),r>0&&o.push(`${r}m`),i>0&&o.push(`${i}s`),o.length===0&&o.push(`${a}ms`),`${o.join(` `)} (${t}ms)`}getElapsedTime(){if(this.isEnded&&this.endTime){let e=this.startTime[0],t=this.startTime[1],n=this.endTime[0],r=this.endTime[1],i=n-e,a=r-t;return a<0&&(i--,a+=1e9),[i,a]}else return n(this.startTime)}end(t){if(this.isEnded){console.warn(`[TimerLogger] Timer has already ended`);return}this.endTime=n(),this.isEnded=!0;let r=this.getElapsedTime(),i=e.formatTime(r),a=t?`${t}:`:`✨`;console.log(`%c[TimerLogger] %c${a} %c${i}`,`color:#7048e8`,`color:#2d8cf0`,`color:#565656`)}get(){return e.formatTime(this.getElapsedTime())}getMs(){let e=this.getElapsedTime();return(e[0]*1e9+e[1])/1e6}isTimerEnded(){return this.isEnded}},i=class e{static enabled;static timers=new Map;static logs=[];constructor(t={}){e.enabled=t.enabled??!1}setEnabled=t=>{e.enabled=t};isEnabled=()=>e.enabled;static fromatTimestamp(e){e=e&&typeof e==`number`?new Date(e):e||new Date;let t=e.getHours(),n=e.getMinutes().toString().padStart(2,`0`),r=e.getSeconds().toString().padStart(2,`0`),i=e.getMilliseconds().toString().padStart(3,`0`);return`${t}:${n}:${r}.${i}`}start=t=>{if(!e.enabled)return;let n=new r;return t&&(e.has(t)&&console.warn(`Timer with label '${t}' already exists, replacing it`),e.timers.set(t,n)),n};end=(t,n)=>{if(!e.enabled)return;let r=e.timers.get(t);if(!r){console.warn(`No timer found for label '${t}'`);return}return r.end(n||t),e.logs.push({label:n||t,duration:Number(r.getMs().toFixed(2)),endTime:e.fromatTimestamp(Date.now())}),this.clear(t),r.getMs()};static get=t=>{let n=e.timers.get(t);if(!n){console.warn(`No timer found for label '${t}'`);return}return n.get()};getLabelTime=t=>{let n=e.timers.get(t);if(!n){console.warn(`No timer found for label '${t}'`);return}return n.getMs()};getTotalTime=()=>{if(e.logs.length===0)return 0;let t=0;for(let n of e.logs)t+=n.duration;return Math.round(t)};getLogs=()=>[...e.logs];static has=t=>e.timers.has(t);static getActiveLabels=()=>Array.from(e.timers.keys());clear=t=>e.timers.delete(t);reset=()=>{e.timers.clear(),e.logs.length=0}},a=new i;const o=e=>new i(e);export{r as BaseTimerLogger,i as TimerLoggerClass,o as createTimerLogger,a as default};