UNPKG

@stacksjs/dtsx

Version:

A modern, fast .d.ts generation tool, powered by Bun.

5 lines (4 loc) 5.62 kB
// @bun import{Af as v}from"./chunk-p0p65mbf.js";class _{config;memorySamples=[];cpuSamples=[];ioOperations=[];startTime=0;memoryInterval=null;cpuInterval=null;lastCpuUsage=null;isRunning=!1;constructor(q={}){this.config={memory:q.memory??!1,memoryLimit:q.memoryLimit??1024,cpu:q.cpu??!1,samplingInterval:q.samplingInterval??100,io:q.io??!1,trackOperations:q.trackOperations??["read","write"],outputFile:q.outputFile??""}}start(){if(this.isRunning)return;if(this.isRunning=!0,this.startTime=Date.now(),this.memorySamples=[],this.cpuSamples=[],this.ioOperations=[],this.lastCpuUsage=null,this.config.memory)this.sampleMemory(),this.memoryInterval=setInterval(()=>this.sampleMemory(),this.config.samplingInterval);if(this.config.cpu)this.sampleCpu(),this.cpuInterval=setInterval(()=>this.sampleCpu(),this.config.samplingInterval)}stop(){if(!this.isRunning)return;if(this.isRunning=!1,this.memoryInterval)clearInterval(this.memoryInterval),this.memoryInterval=null;if(this.cpuInterval)clearInterval(this.cpuInterval),this.cpuInterval=null}sampleMemory(){let q=Z();this.memorySamples.push(q)}sampleCpu(){let q=w();if(this.lastCpuUsage){let A={timestamp:Date.now(),user:q.user-this.lastCpuUsage.user,system:q.system-this.lastCpuUsage.system,total:q.user-this.lastCpuUsage.user+(q.system-this.lastCpuUsage.system)};this.cpuSamples.push(A)}this.lastCpuUsage=q}recordIo(q,A,D,E){if(!this.config.io)return;if(!this.config.trackOperations.includes(q))return;this.ioOperations.push({timestamp:Date.now(),operation:q,path:A,size:D,durationMs:E})}getResults(){let q=Date.now(),A=[],D=this.memorySamples[0]||Z(),E=0;for(let G of this.memorySamples){if(E+=G.heapUsed,G.heapUsed>D.heapUsed)D=G;let Y=G.heapUsed/1048576;if(Y>this.config.memoryLimit)A.push(`Memory limit exceeded at ${new Date(G.timestamp).toISOString()}: ${Y.toFixed(2)}MB > ${this.config.memoryLimit}MB`)}let F=this.memorySamples.length>0?E/this.memorySamples.length:0,I=0,K=0;for(let G of this.cpuSamples)I+=G.user,K+=G.system;let L=0,N=0,O=0,Q=0,V=0,X=0;for(let G of this.ioOperations)if(G.operation==="read")L++,O+=G.size,V+=G.durationMs;else N++,Q+=G.size,X+=G.durationMs;return{startTime:this.startTime,endTime:q,durationMs:q-this.startTime,memory:{samples:this.memorySamples,peak:D,average:{timestamp:0,heapUsed:F,heapTotal:0,external:0,arrayBuffers:0,rss:0},warnings:A},cpu:{samples:this.cpuSamples,totalUser:I,totalSystem:K},io:{operations:this.ioOperations,totalReads:L,totalWrites:N,totalReadBytes:O,totalWriteBytes:Q,totalReadMs:V,totalWriteMs:X}}}formatResults(){let q=this.getResults(),A=["=== Profiling Results ===",""];if(A.push(`Duration: ${q.durationMs}ms`),A.push(""),this.config.memory){if(A.push("Memory:"),A.push(` Samples: ${q.memory.samples.length}`),A.push(` Peak heap: ${J(q.memory.peak.heapUsed)}`),A.push(` Average heap: ${J(q.memory.average.heapUsed)}`),q.memory.warnings.length>0){A.push(" Warnings:");for(let D of q.memory.warnings)A.push(` - ${D}`)}A.push("")}if(this.config.cpu)A.push("CPU:"),A.push(` Samples: ${q.cpu.samples.length}`),A.push(` Total user time: ${(q.cpu.totalUser/1000).toFixed(2)}ms`),A.push(` Total system time: ${(q.cpu.totalSystem/1000).toFixed(2)}ms`),A.push("");if(this.config.io)A.push("I/O:"),A.push(` Total reads: ${q.io.totalReads}`),A.push(` Total writes: ${q.io.totalWrites}`),A.push(` Total read: ${J(q.io.totalReadBytes)} in ${q.io.totalReadMs.toFixed(2)}ms`),A.push(` Total write: ${J(q.io.totalWriteBytes)} in ${q.io.totalWriteMs.toFixed(2)}ms`),A.push("");return A.join(` `)}async writeResults(){if(!this.config.outputFile)return;let q=this.getResults(),A=JSON.stringify(q,null,2);try{await(await import("fs/promises")).writeFile(this.config.outputFile,A,"utf-8")}catch{await Bun.write(this.config.outputFile,A)}}}function Z(){if(typeof process<"u"&&process.memoryUsage){let q=process.memoryUsage();return{timestamp:Date.now(),heapUsed:q.heapUsed,heapTotal:q.heapTotal,external:q.external,arrayBuffers:q.arrayBuffers||0,rss:q.rss}}return{timestamp:Date.now(),heapUsed:0,heapTotal:0,external:0,arrayBuffers:0,rss:0}}function w(){if(typeof process<"u"&&process.cpuUsage){let q=process.cpuUsage();return{user:q.user,system:q.system}}return{user:0,system:0}}function J(q){if(q===0)return"0 B";let A=["B","KB","MB","GB"],D=1024,E=Math.floor(Math.log(q)/Math.log(D));return`${Number.parseFloat((q/D**E).toFixed(2))} ${A[E]}`}function j(q){return new _(q)}async function x(q,A){let D=j({memory:!0,cpu:!0,...A});D.start();try{return{result:await q(),profile:D.getResults()}}finally{D.stop()}}function C(q){return{async read(A,D){let E=Date.now();try{let F=await D(),I=typeof F==="string"?F.length:0;return q.recordIo("read",A,I,Date.now()-E),F}catch(F){throw q.recordIo("read",A,0,Date.now()-E),F}},async write(A,D,E){let F=Date.now();try{await D(),q.recordIo("write",A,E,Date.now()-F)}catch(I){throw q.recordIo("write",A,0,Date.now()-F),I}}}}class ${marks=new Map;durations=new Map;mark(q){this.marks.set(q,performance.now())}measure(q,A){let D=this.marks.get(A);if(D===void 0)throw Error(`Mark "${A}" not found`);let E=performance.now()-D,F=this.durations.get(q)||[];return F.push(E),this.durations.set(q,F),E}getDurations(q){return this.durations.get(q)||[]}getAverage(q){let A=this.getDurations(q);if(A.length===0)return 0;return A.reduce((D,E)=>D+E,0)/A.length}getSummary(){let q=new Map;for(let[A,D]of this.durations)q.set(A,{count:D.length,total:D.reduce((E,F)=>E+F,0),average:D.reduce((E,F)=>E+F,0)/D.length,min:Math.min(...D),max:Math.max(...D)});return q}clear(){this.marks.clear(),this.durations.clear()}}function S(){return new $} export{_ as Wa,j as Xa,x as Ya,C as Za,$ as _a,S as $a};