traceperf 0.2.1 → 1.3.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 +608 -253
- package/dist/__tests__/helpers/console.d.ts +9 -0
- package/dist/__tests__/helpers/console.js +25 -0
- package/dist/__tests__/helpers/console.js.map +1 -0
- package/dist/auto.d.ts +30 -0
- package/dist/auto.js +91 -0
- package/dist/auto.js.map +1 -0
- package/dist/browser.d.ts +52 -144
- package/dist/browser.js +112 -439
- package/dist/browser.js.map +1 -1
- package/dist/cli.d.ts +68 -0
- package/dist/cli.js +528 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/allocations.d.ts +38 -0
- package/dist/core/allocations.js +85 -0
- package/dist/core/allocations.js.map +1 -0
- package/dist/core/cpu-profile.d.ts +84 -0
- package/dist/core/cpu-profile.js +181 -0
- package/dist/core/cpu-profile.js.map +1 -0
- package/dist/core/env.d.ts +10 -0
- package/dist/core/env.js +40 -0
- package/dist/core/env.js.map +1 -0
- package/dist/core/event-loop.d.ts +30 -0
- package/dist/core/event-loop.js +43 -0
- package/dist/core/event-loop.js.map +1 -0
- package/dist/core/explain.d.ts +48 -0
- package/dist/core/explain.js +236 -0
- package/dist/core/explain.js.map +1 -0
- package/dist/core/exporters.d.ts +111 -0
- package/dist/core/exporters.js +236 -0
- package/dist/core/exporters.js.map +1 -0
- package/dist/core/index.d.ts +9 -3
- package/dist/core/index.js +9 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/optimized-performance-monitor.d.ts +180 -26
- package/dist/core/optimized-performance-monitor.js +687 -175
- package/dist/core/optimized-performance-monitor.js.map +1 -1
- package/dist/core/prometheus.d.ts +36 -0
- package/dist/core/prometheus.js +93 -0
- package/dist/core/prometheus.js.map +1 -0
- package/dist/core/records.d.ts +97 -0
- package/dist/core/records.js +87 -0
- package/dist/core/records.js.map +1 -0
- package/dist/core/stats.d.ts +45 -0
- package/dist/core/stats.js +136 -0
- package/dist/core/stats.js.map +1 -0
- package/dist/core/timeline.d.ts +28 -0
- package/dist/core/timeline.js +65 -0
- package/dist/core/timeline.js.map +1 -0
- package/dist/drivers.d.ts +51 -0
- package/dist/drivers.js +205 -0
- package/dist/drivers.js.map +1 -0
- package/dist/esm/auto.d.ts +30 -0
- package/dist/esm/auto.js +87 -0
- package/dist/esm/auto.js.map +1 -0
- package/dist/esm/browser.d.ts +52 -144
- package/dist/esm/browser.js +101 -445
- package/dist/esm/browser.js.map +1 -1
- package/dist/esm/cli.d.ts +68 -0
- package/dist/esm/cli.js +520 -0
- package/dist/esm/cli.js.map +1 -0
- package/dist/esm/core/allocations.d.ts +38 -0
- package/dist/esm/core/allocations.js +82 -0
- package/dist/esm/core/allocations.js.map +1 -0
- package/dist/esm/core/cpu-profile.d.ts +84 -0
- package/dist/esm/core/cpu-profile.js +176 -0
- package/dist/esm/core/cpu-profile.js.map +1 -0
- package/dist/esm/core/env.d.ts +10 -0
- package/dist/esm/core/env.js +35 -0
- package/dist/esm/core/env.js.map +1 -0
- package/dist/esm/core/event-loop.d.ts +30 -0
- package/dist/esm/core/event-loop.js +40 -0
- package/dist/esm/core/event-loop.js.map +1 -0
- package/dist/esm/core/explain.d.ts +48 -0
- package/dist/esm/core/explain.js +232 -0
- package/dist/esm/core/explain.js.map +1 -0
- package/dist/esm/core/exporters.d.ts +111 -0
- package/dist/esm/core/exporters.js +229 -0
- package/dist/esm/core/exporters.js.map +1 -0
- package/dist/esm/core/index.d.ts +10 -4
- package/dist/esm/core/index.js +10 -4
- package/dist/esm/core/index.js.map +1 -1
- package/dist/esm/core/optimized-performance-monitor.d.ts +180 -26
- package/dist/esm/core/optimized-performance-monitor.js +685 -173
- package/dist/esm/core/optimized-performance-monitor.js.map +1 -1
- package/dist/esm/core/prometheus.d.ts +36 -0
- package/dist/esm/core/prometheus.js +89 -0
- package/dist/esm/core/prometheus.js.map +1 -0
- package/dist/esm/core/records.d.ts +97 -0
- package/dist/esm/core/records.js +82 -0
- package/dist/esm/core/records.js.map +1 -0
- package/dist/esm/core/stats.d.ts +45 -0
- package/dist/esm/core/stats.js +131 -0
- package/dist/esm/core/stats.js.map +1 -0
- package/dist/esm/core/timeline.d.ts +28 -0
- package/dist/esm/core/timeline.js +62 -0
- package/dist/esm/core/timeline.js.map +1 -0
- package/dist/esm/drivers.d.ts +51 -0
- package/dist/esm/drivers.js +197 -0
- package/dist/esm/drivers.js.map +1 -0
- package/dist/esm/index.d.ts +13 -5
- package/dist/esm/index.js +21 -17
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/instrument.d.ts +88 -0
- package/dist/esm/instrument.js +274 -0
- package/dist/esm/instrument.js.map +1 -0
- package/dist/esm/integrations.d.ts +70 -0
- package/dist/esm/integrations.js +197 -0
- package/dist/esm/integrations.js.map +1 -0
- package/dist/esm/node-builtins.d.ts +1 -0
- package/dist/esm/node-builtins.js +32 -0
- package/dist/esm/node-builtins.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/register.d.ts +20 -0
- package/dist/esm/register.js +98 -0
- package/dist/esm/register.js.map +1 -0
- package/dist/esm/report-html.d.ts +11 -0
- package/dist/esm/report-html.js +106 -0
- package/dist/esm/report-html.js.map +1 -0
- package/dist/esm/types/index.d.ts +4 -80
- package/dist/esm/types/index.js +1 -2
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/types/options.d.ts +72 -0
- package/dist/esm/types/options.js +2 -0
- package/dist/esm/types/options.js.map +1 -0
- package/dist/esm/watch.d.ts +17 -0
- package/dist/esm/watch.js +87 -0
- package/dist/esm/watch.js.map +1 -0
- package/dist/index.d.ts +10 -2
- package/dist/index.js +26 -29
- package/dist/index.js.map +1 -1
- package/dist/instrument.d.ts +88 -0
- package/dist/instrument.js +282 -0
- package/dist/instrument.js.map +1 -0
- package/dist/integrations.d.ts +70 -0
- package/dist/integrations.js +205 -0
- package/dist/integrations.js.map +1 -0
- package/dist/node-builtins.d.ts +1 -0
- package/dist/node-builtins.js +67 -0
- package/dist/node-builtins.js.map +1 -0
- package/dist/register.d.ts +20 -0
- package/dist/register.js +103 -0
- package/dist/register.js.map +1 -0
- package/dist/report-html.d.ts +11 -0
- package/dist/report-html.js +109 -0
- package/dist/report-html.js.map +1 -0
- package/dist/traceperf.browser.js +1910 -0
- package/dist/traceperf.browser.min.js +6 -0
- package/dist/types/index.d.ts +4 -80
- package/dist/types/index.js +1 -2
- package/dist/types/index.js.map +1 -1
- package/dist/types/options.d.ts +72 -0
- package/dist/types/{config.js → options.js} +1 -1
- package/dist/types/options.js.map +1 -0
- package/dist/watch.d.ts +17 -0
- package/dist/watch.js +90 -0
- package/dist/watch.js.map +1 -0
- package/package.json +99 -19
- package/dist/core/config.d.ts +0 -77
- package/dist/core/config.js +0 -116
- package/dist/core/config.js.map +0 -1
- package/dist/core/constants.d.ts +0 -78
- package/dist/core/constants.js +0 -109
- package/dist/core/constants.js.map +0 -1
- package/dist/core/logger.d.ts +0 -97
- package/dist/core/logger.js +0 -186
- package/dist/core/logger.js.map +0 -1
- package/dist/esm/core/config.d.ts +0 -77
- package/dist/esm/core/config.js +0 -112
- package/dist/esm/core/config.js.map +0 -1
- package/dist/esm/core/constants.d.ts +0 -78
- package/dist/esm/core/constants.js +0 -106
- package/dist/esm/core/constants.js.map +0 -1
- package/dist/esm/core/logger.d.ts +0 -97
- package/dist/esm/core/logger.js +0 -182
- package/dist/esm/core/logger.js.map +0 -1
- package/dist/esm/formatters/ascii.d.ts +0 -52
- package/dist/esm/formatters/ascii.js +0 -100
- package/dist/esm/formatters/ascii.js.map +0 -1
- package/dist/esm/formatters/cli.d.ts +0 -50
- package/dist/esm/formatters/cli.js +0 -96
- package/dist/esm/formatters/cli.js.map +0 -1
- package/dist/esm/formatters/index.d.ts +0 -3
- package/dist/esm/formatters/index.js +0 -4
- package/dist/esm/formatters/index.js.map +0 -1
- package/dist/esm/formatters/json.d.ts +0 -45
- package/dist/esm/formatters/json.js +0 -85
- package/dist/esm/formatters/json.js.map +0 -1
- package/dist/esm/trackers/execution.d.ts +0 -101
- package/dist/esm/trackers/execution.js +0 -226
- package/dist/esm/trackers/execution.js.map +0 -1
- package/dist/esm/trackers/index.d.ts +0 -2
- package/dist/esm/trackers/index.js +0 -3
- package/dist/esm/trackers/index.js.map +0 -1
- package/dist/esm/trackers/performance.d.ts +0 -68
- package/dist/esm/trackers/performance.js +0 -112
- package/dist/esm/trackers/performance.js.map +0 -1
- package/dist/esm/types/config.d.ts +0 -142
- package/dist/esm/types/config.js +0 -2
- package/dist/esm/types/config.js.map +0 -1
- package/dist/esm/types/logger.d.ts +0 -147
- package/dist/esm/types/logger.js +0 -2
- package/dist/esm/types/logger.js.map +0 -1
- package/dist/esm/utils/colors.d.ts +0 -87
- package/dist/esm/utils/colors.js +0 -146
- package/dist/esm/utils/colors.js.map +0 -1
- package/dist/esm/utils/index.d.ts +0 -3
- package/dist/esm/utils/index.js +0 -4
- package/dist/esm/utils/index.js.map +0 -1
- package/dist/esm/utils/proxy-tracker.d.ts +0 -68
- package/dist/esm/utils/proxy-tracker.js +0 -127
- package/dist/esm/utils/proxy-tracker.js.map +0 -1
- package/dist/esm/utils/stack.d.ts +0 -63
- package/dist/esm/utils/stack.js +0 -110
- package/dist/esm/utils/stack.js.map +0 -1
- package/dist/esm/utils/string.d.ts +0 -29
- package/dist/esm/utils/string.js +0 -45
- package/dist/esm/utils/string.js.map +0 -1
- package/dist/esm/utils/timing.d.ts +0 -65
- package/dist/esm/utils/timing.js +0 -99
- package/dist/esm/utils/timing.js.map +0 -1
- package/dist/formatters/ascii.d.ts +0 -52
- package/dist/formatters/ascii.js +0 -104
- package/dist/formatters/ascii.js.map +0 -1
- package/dist/formatters/cli.d.ts +0 -50
- package/dist/formatters/cli.js +0 -100
- package/dist/formatters/cli.js.map +0 -1
- package/dist/formatters/index.d.ts +0 -3
- package/dist/formatters/index.js +0 -20
- package/dist/formatters/index.js.map +0 -1
- package/dist/formatters/json.d.ts +0 -45
- package/dist/formatters/json.js +0 -89
- package/dist/formatters/json.js.map +0 -1
- package/dist/trackers/execution.d.ts +0 -101
- package/dist/trackers/execution.js +0 -230
- package/dist/trackers/execution.js.map +0 -1
- package/dist/trackers/index.d.ts +0 -2
- package/dist/trackers/index.js +0 -19
- package/dist/trackers/index.js.map +0 -1
- package/dist/trackers/performance.d.ts +0 -68
- package/dist/trackers/performance.js +0 -116
- package/dist/trackers/performance.js.map +0 -1
- package/dist/types/config.d.ts +0 -142
- package/dist/types/config.js.map +0 -1
- package/dist/types/logger.d.ts +0 -147
- package/dist/types/logger.js +0 -3
- package/dist/types/logger.js.map +0 -1
- package/dist/types.d.ts +0 -65
- package/dist/types.js +0 -6
- package/dist/types.js.map +0 -1
- package/dist/utils/colors.d.ts +0 -87
- package/dist/utils/colors.js +0 -160
- package/dist/utils/colors.js.map +0 -1
- package/dist/utils/index.d.ts +0 -3
- package/dist/utils/index.js +0 -20
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/proxy-tracker.d.ts +0 -68
- package/dist/utils/proxy-tracker.js +0 -131
- package/dist/utils/proxy-tracker.js.map +0 -1
- package/dist/utils/stack.d.ts +0 -63
- package/dist/utils/stack.js +0 -116
- package/dist/utils/stack.js.map +0 -1
- package/dist/utils/string.d.ts +0 -29
- package/dist/utils/string.js +0 -50
- package/dist/utils/string.js.map +0 -1
- package/dist/utils/timing.d.ts +0 -65
- package/dist/utils/timing.js +0 -106
- package/dist/utils/timing.js.map +0 -1
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*! traceperf v1.3.0 | MIT License | browser global build */
|
|
2
|
+
"use strict";var TracePerf=(()=>{var B=(n=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(n,{get:(e,t)=>(typeof require!="undefined"?require:e)[t]}):n)(function(n){if(typeof require!="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var k=(n,e)=>()=>{try{return e||n((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}};var x=k($=>{"use strict";Object.defineProperty($,"__esModule",{value:!0});$.coveredLength=pe;$.walkRecords=Y;$.formatTree=be;function pe(n){if(n.length===0)return 0;let e=n.slice().sort((a,o)=>a[0]-o[0]),t=0,[r,s]=e[0];for(let a=1;a<e.length;a++){let[o,i]=e[a];o>s?(t+=s-r,r=o,s=i):i>s&&(s=i)}return t+(s-r)}function Y(n,e,t=0){e(n,t);for(let r of n.children)Y(r,e,t+1)}var N=n=>`${n.toFixed(3)} ms`;function ge(n){return n instanceof Error?n.message:String(n)}function ye(n,e){let t=n.args&&n.args.length>0?`(${n.args.join(", ")})`:"",r=`${n.label}${t}: ${N(n.duration)}`;if(e.detailed){let s=[];n.children.length>0&&s.push(`self ${N(n.selfDuration)}`),n.async&&s.push(`sync ${N(n.syncDuration)}`),s.length>0&&(r+=` (${s.join(", ")})`)}if(n.memoryDelta!==void 0){let s=(n.memoryDelta/1024).toFixed(2);r+=` \u{1F4CA} ${n.memoryDelta>=0?"+":""}${s} KB`,n.memoryDelta<0&&(r+=" (gc)")}return e.detailed&&e.blockingThreshold!==void 0&&e.blockingThreshold>0&&n.syncDuration>=e.blockingThreshold&&(r+=` \u26A0 blocked event loop ${N(n.syncDuration)}`),e.showErrors&&n.error!==void 0&&n.error!==null&&(r+=` \u2716 ${ge(n.error)}`),r}function be(n,e={}){let t=[],r=(s,a,o)=>{let i=a.map(u=>u?"\u2502 ":" ").join("");t.push(`${i}${o?"\u2514\u2500 ":"\u251C\u2500 "}${ye(s,e)}`);let c=s.children.filter(u=>u.duration>=u.threshold);c.forEach((u,l)=>r(u,[...a,!o],l===c.length-1))};return r(n,[],!0),t.join(`
|
|
3
|
+
`)}});var V=k(M=>{"use strict";Object.defineProperty(M,"__esModule",{value:!0});M.StatsCollector=M.OTHER_LABEL=void 0;M.formatStatsTable=ke;var Te=x();M.OTHER_LABEL="(other)";var I=class{constructor(e){this.reservoirSize=e,this.count=0,this.errors=0,this.total=0,this.selfTotal=0,this.min=1/0,this.max=-1/0,this.samples=[]}add(e,t,r){if(this.count++,this.total+=e,this.selfTotal+=t,r&&this.errors++,e<this.min&&(this.min=e),e>this.max&&(this.max=e),this.samples.length<this.reservoirSize)this.samples.push(e);else{let s=Math.floor(Math.random()*this.count);s<this.reservoirSize&&(this.samples[s]=e)}}snapshot(){let e=this.samples.slice().sort((r,s)=>r-s),t=r=>{if(e.length===0)return 0;let s=Math.min(e.length-1,Math.max(0,Math.ceil(r*e.length)-1));return e[s]};return{count:this.count,errors:this.errors,total:this.total,mean:this.count?this.total/this.count:0,min:this.count?this.min:0,max:this.count?this.max:0,p50:t(.5),p95:t(.95),p99:t(.99),selfMean:this.count?this.selfTotal/this.count:0}}},U=class{constructor(e={}){var t,r;this.labels=new Map,this.reservoirSize=Math.max(1,(t=e.reservoirSize)!==null&&t!==void 0?t:1024),this.maxLabels=Math.max(1,(r=e.maxLabels)!==null&&r!==void 0?r:1e3)}add(e){let t=e.label,r=this.labels.get(t);r||(this.labels.size>=this.maxLabels-1&&(t=M.OTHER_LABEL,r=this.labels.get(t)),r||(r=new I(this.reservoirSize),this.labels.set(t,r))),r.add(e.duration,e.selfDuration,e.error!==void 0&&e.error!==null)}addTree(e){(0,Te.walkRecords)(e,t=>this.add(t))}get(e){var t;return(t=this.labels.get(e))===null||t===void 0?void 0:t.snapshot()}all(){let e={};return this.labels.forEach((t,r)=>{e[r]=t.snapshot()}),e}reset(){this.labels=new Map}};M.StatsCollector=U;function ke(n){let e=Object.keys(n).map(o=>({label:o,...n[o]})).sort((o,i)=>i.total-o.total);if(e.length===0)return"traceperf: no calls recorded";let t=["label","calls","errors","total ms","mean","p50","p95","p99","max","self mean"],r=e.map(o=>[o.label,String(o.count),String(o.errors),o.total.toFixed(1),o.mean.toFixed(3),o.p50.toFixed(3),o.p95.toFixed(3),o.p99.toFixed(3),o.max.toFixed(3),o.selfMean.toFixed(3)]),s=t.map((o,i)=>Math.max(o.length,...r.map(c=>c[i].length))),a=o=>o.map((i,c)=>c===0?i.padEnd(s[c]):i.padStart(s[c])).join(" ");return[a(t),s.map(o=>"-".repeat(o)).join(" "),...r.map(a)].join(`
|
|
4
|
+
`)}});var H=k(w=>{"use strict";Object.defineProperty(w,"__esModule",{value:!0});w.toChromeTrace=ne;w.createTraceRecorder=Me;w.openTelemetryExporter=_e;w.recordToJSON=z;w.jsonLinesExporter=we;var te=x();function ne(n){let e=[],t=[],r=(l,d,h)=>{for(;l.length>0&&l[l.length-1]<=d;)l.pop();return l.length===0||h<=l[l.length-1]},s=(l,d)=>{let h=[d,...t.map((f,m)=>m).filter(f=>f!==d)];for(let f of h)if(t[f]&&r(t[f],l.startTime,l.endTime))return t[f].push(l.endTime),f;return t.push([l.endTime]),t.length-1},a=[],o=n.slice().sort((l,d)=>l.startTime-d.startTime),i=(l,d)=>{a.push({record:l,parentLane:d})};o.forEach(l=>(0,te.walkRecords)(l,d=>i(d,0))),a.sort((l,d)=>l.record.startTime-d.record.startTime||d.record.duration-l.record.duration);let c=new Map;for(let{record:l}of a){let d=l.parentId!==null&&c.has(l.parentId)?c.get(l.parentId):0,h=s(l,d);c.set(l.id,h);let f={selfMs:l.selfDuration,syncMs:l.syncDuration};l.memoryDelta!==void 0&&(f.memoryDeltaBytes=l.memoryDelta),l.args&&l.args.length&&(f.args=l.args),l.error!==void 0&&l.error!==null&&(f.error=l.error instanceof Error?l.error.message:String(l.error)),e.push({name:l.label,cat:"traceperf",ph:"X",ts:Math.round(l.startTime*1e3),dur:Math.max(0,Math.round(l.duration*1e3)),pid:1,tid:h+1,args:f})}return{traceEvents:[...[{name:"process_name",cat:"__metadata",ph:"M",ts:0,pid:1,tid:0,args:{name:"traceperf"}},...t.map((l,d)=>({name:"thread_name",cat:"__metadata",ph:"M",ts:0,pid:1,tid:d+1,args:{name:d===0?"main":`concurrent ${d}`}}))],...e],displayTimeUnit:"ms"}}function Me(n={}){var e;let t=Math.max(1,(e=n.maxRoots)!==null&&e!==void 0?e:1e4),r=[],s=!1;return{name:"chrome-trace",roots:r,onComplete(a){s||(r.push(a),r.length>t&&r.shift())},stop(){return s||(s=!0,n.onStop&&n.onStop()),ne(r)}}}var ve=2;function ee(n,e){n.setAttribute("traceperf.self_ms",e.selfDuration),n.setAttribute("traceperf.sync_ms",e.syncDuration),n.setAttribute("traceperf.async",e.async),e.memoryDelta!==void 0&&n.setAttribute("traceperf.memory_delta_bytes",e.memoryDelta),e.args&&e.args.length&&n.setAttribute("traceperf.args",e.args.join(", ")),e.error!==void 0&&e.error!==null&&(n.recordException(e.error),n.setStatus({code:ve,message:e.error instanceof Error?e.error.message:String(e.error)}))}function _e(n,e={}){var t,r;let s=(t=e.tracer)!==null&&t!==void 0?t:n.trace.getTracer((r=e.tracerName)!==null&&r!==void 0?r:"traceperf");if(e.live){if(typeof n.context.with!="function")throw new Error("openTelemetryExporter: live mode needs api.context.with (pass @opentelemetry/api)");let o=new Map;return{name:"opentelemetry-live",onStart(i){o.set(i.id,s.startSpan(i.label,{startTime:i.startEpochMs},n.context.active()))},wrap(i,c){let u=o.get(i.id);return u?n.context.with(n.trace.setSpan(n.context.active(),u),c):c()},onComplete(i){(0,te.walkRecords)(i,c=>{let u=o.get(c.id);u&&(o.delete(c.id),u.updateName&&u.updateName(c.label),ee(u,c),u.end(c.startEpochMs+c.duration))})}}}let a=new Map;return{name:"opentelemetry",onStart(o){o.parentId===null&&a.set(o.id,n.context.active())},onComplete(o){var i;let c=(i=a.get(o.id))!==null&&i!==void 0?i:n.context.active();a.delete(o.id);let u=(l,d)=>{let h=s.startSpan(l.label,{startTime:l.startEpochMs},d);ee(h,l);let f=n.trace.setSpan(d,h);l.children.forEach(m=>u(m,f)),h.end(l.startEpochMs+l.duration)};u(o,c)}}}function z(n){return{label:n.label,start:new Date(n.startEpochMs).toISOString(),durationMs:n.duration,selfMs:n.selfDuration,syncMs:n.syncDuration,async:n.async,...n.memoryDelta!==void 0?{memoryDeltaBytes:n.memoryDelta}:{},...n.args&&n.args.length?{args:n.args}:{},...n.error!==void 0&&n.error!==null?{error:n.error instanceof Error?n.error.message:String(n.error)}:{},children:n.children.map(z)}}function we(n){let e=n!=null?n:(t=>{let r=typeof process!="undefined"?process:void 0;r&&r.stdout&&typeof r.stdout.write=="function"?r.stdout.write(t+`
|
|
5
|
+
`):console.log(t)});return{name:"json-lines",onComplete(t){e(JSON.stringify(z(t)))}}}});var G=k(E=>{"use strict";Object.defineProperty(E,"__esModule",{value:!0});E.loadNodeBuiltin=E.provideNodeBuiltins=void 0;var q={},xe=n=>{Object.assign(q,n)};E.provideNodeBuiltins=xe;var Ee=n=>{if(q[n])return q[n];try{let e=typeof process!="undefined"?process:void 0;if(!e||!e.versions||!e.versions.node)return;if(typeof e.getBuiltinModule=="function")return e.getBuiltinModule(n);let t=typeof B=="function"?B:void 0;return t?t(n):void 0}catch(e){return}};E.loadNodeBuiltin=Ee});var le=k(p=>{"use strict";Object.defineProperty(p,"__esModule",{value:!0});p.OptimizedPerformanceMonitor=p.OptimizedExecutionTracker=p.formatArg=p.getDuration=p.getTimestamp=p.getMemoryUsage=p.TrackingModes=void 0;var K=x(),ie=V(),Se=H(),ae=G();p.TrackingModes={PERFORMANCE:"performance",BALANCED:"balanced",DETAILED:"detailed",DEBUG:"debug"};var Oe=p.TrackingModes.BALANCED,J=(0,ae.loadNodeBuiltin)("v8"),re=J&&typeof J.getHeapStatistics=="function"?()=>J.getHeapStatistics().used_heap_size:void 0,$e=()=>{var n;return re?re():typeof process!="undefined"&&process.memoryUsage?process.memoryUsage().heapUsed:typeof performance!="undefined"&&"memory"in performance&&((n=performance.memory)===null||n===void 0?void 0:n.usedJSHeapSize)||0};p.getMemoryUsage=$e;p.getTimestamp=typeof performance!="undefined"&&typeof performance.now=="function"?()=>performance.now()*1e6:typeof process!="undefined"&&typeof process.hrtime=="function"?()=>{let n=process.hrtime();return n[0]*1e9+n[1]}:()=>Date.now()*1e6;var je=n=>(0,p.getTimestamp)()-n;p.getDuration=je;var se=Date.now()-(0,p.getTimestamp)()/1e6,P=50,Re=n=>{var e,t;let r;try{if(typeof n=="string")r=JSON.stringify(n.length>P?n.slice(0,P):n);else if(typeof n=="function")r=`[Function ${n.name||"anonymous"}]`;else if(Array.isArray(n))r=`Array(${n.length})`;else if(n!==null&&typeof n=="object"){let s=Object.keys(n);s.length<=5?r=JSON.stringify(n):r=`${((e=n.constructor)===null||e===void 0?void 0:e.name)||"Object"}{${s.length} keys}`}else r=String(n)}catch(s){let a=(t=n==null?void 0:n.constructor)===null||t===void 0?void 0:t.name;r=typeof a=="string"&&a?`[${a}]`:"[object]"}return r.length>P?`${r.slice(0,P-1)}\u2026`:r};p.formatArg=Re;var Ne=()=>{var n,e;return(e=(n=(0,ae.loadNodeBuiltin)("async_hooks"))===null||n===void 0?void 0:n.AsyncLocalStorage)!==null&&e!==void 0?e:typeof globalThis!="undefined"?globalThis.AsyncLocalStorage:void 0},Pe=n=>{let e=n!=null?n:Ne();if(e){let s=new e;return{current:()=>{var a;return(a=s.getStore())!==null&&a!==void 0?a:null},run:(a,o)=>s.run(a,o),apply:(a,o,i,c)=>s.run(a,Reflect.apply,o,i,c)}}let t=null,r=(s,a)=>{let o=t;t=s;try{return a()}finally{t=o}};return{current:()=>t,run:r,apply:(s,a,o,i)=>r(s,()=>a.apply(o,i))}},oe={id:"",setLabel:()=>{},run:n=>n(),end:()=>{}},S=n=>Math.max(0,Math.min(1,n)),De=n=>n!==null&&typeof n=="object"&&(n instanceof Promise||typeof n.then=="function"&&Object.prototype.toString.call(n)==="[object Promise]"),D=class{constructor(e={}){var t,r,s,a,o,i,c,u,l;this.executionTree=new Map,this.currentExecutionId=0,this.activeExecutions=new Map,this.plugins=[],this.wrappers=[],this.failedPlugins=new Set,this.showMemoryUsage=(t=e.showMemoryUsage)!==null&&t!==void 0?t:!0,this.enableNestedTracking=(r=e.enableNestedTracking)!==null&&r!==void 0?r:!0,this.silent=(s=e.silent)!==null&&s!==void 0?s:!1,this.trackingMode=(a=e.trackingMode)!==null&&a!==void 0?a:p.TrackingModes.BALANCED,this.defaultThreshold=(o=e.threshold)!==null&&o!==void 0?o:0,this.defaultSampleRate=S((i=e.sampleRate)!==null&&i!==void 0?i:1),this.context=Pe(e.asyncLocalStorage),this.enabled=(c=e.enabled)!==null&&c!==void 0?c:!0,this.blockingThreshold=(u=e.blockingThreshold)!==null&&u!==void 0?u:50,this.reporter=(l=e.reporter)!==null&&l!==void 0?l:null,this.stats=e.stats===!1?null:new ie.StatsCollector(typeof e.stats=="object"?e.stats:{}),(e.plugins||[]).forEach(d=>this.use(d))}use(e){return this.plugins=[...this.plugins,e],this.wrappers=this.plugins.filter(t=>typeof t.wrap=="function"),()=>{this.plugins=this.plugins.filter(t=>t!==e),this.wrappers=this.plugins.filter(t=>typeof t.wrap=="function")}}_wrap(e,t){let r=t;for(let s=this.wrappers.length-1;s>=0;s--){let a=this.wrappers[s],o=r;r=()=>{let i=!1,c=()=>(i=!0,o());try{return a.wrap(e,c)}catch(u){if(i)throw u;return this._pluginFailed(a,"wrap",u),o()}}}return r()}_pluginFailed(e,t,r){this.failedPlugins.has(e)||(this.failedPlugins.add(e),console.warn(`traceperf: plugin ${e.name||"(unnamed)"} threw in ${t}:`,r))}_callPlugins(e,t){for(let r of this.plugins){let s=r[e];if(s)try{s.call(r,t)}catch(a){this._pluginFailed(r,e,a)}}}startTimer(e,t=null,r={},s=r.args){var a,o,i,c;let u=(a=r.trackingMode)!==null&&a!==void 0?a:this.trackingMode,l=(o=r.trackMemory)!==null&&o!==void 0?o:this.showMemoryUsage,d=u!==p.TrackingModes.PERFORMANCE&&l,h=(0,p.getTimestamp)(),f=(++this.currentExecutionId).toString(),m={id:f,label:e||"anonymous",startTime:h,endTime:0,duration:0,parentId:t,children:[],args:r.captureArgs&&s?Array.from(s).map(p.formatArg):void 0,complete:!1,silent:(i=r.silent)!==null&&i!==void 0?i:this.silent,trackingMode:u,threshold:(c=r.threshold)!==null&&c!==void 0?c:this.defaultThreshold};if(d&&(m.memoryAtStart=(0,p.getMemoryUsage)(),m.memoryAtEnd=0,m.memoryDelta=0),t&&this.activeExecutions.has(t)){let g=this.activeExecutions.get(t);g&&g.children&&g.children.push(f)}return this.activeExecutions.set(f,m),this.plugins.length>0&&this._callPlugins("onStart",{id:f,label:m.label,parentId:t,startEpochMs:se+h/1e6}),f}endTimer(e,t,r=null){if(!this.activeExecutions.has(e))return null;let s=this.activeExecutions.get(e);if(this.activeExecutions.delete(e),s.endTime=(0,p.getTimestamp)(),s.duration=s.endTime-s.startTime,s.result=t,s.error=r,s.complete=!0,s.memoryAtStart!==void 0&&(s.memoryAtEnd=(0,p.getMemoryUsage)(),s.memoryDelta=s.memoryAtEnd-(s.memoryAtStart||0)),s.parentId!==null&&this.activeExecutions.has(s.parentId))return this.executionTree.set(e,s),s;let o=this._toRecord(s);return s.children.length>0&&this._release(s),this.stats&&this.stats.addTree(o),!o.silent&&o.trackingMode!==p.TrackingModes.PERFORMANCE&&o.duration>=o.threshold&&this._report(o),this.plugins.length>0&&this._callPlugins("onComplete",o),s}_release(e){for(let t of e.children){let r=this.executionTree.get(t);r&&(this.executionTree.delete(t),this._release(r))}}markSyncEnd(e){let t=this.activeExecutions.get(e);t&&(t.syncEndTime=(0,p.getTimestamp)())}_toRecord(e){var t,r,s;let a=e.startTime/1e6,o=e.endTime/1e6,i=e.duration/1e6,c=[],u=0;if(e.children.length>0){for(let h of e.children){let f=this.executionTree.get(h);f&&c.push(this._toRecord(f))}u=(0,K.coveredLength)(c.map(h=>[Math.max(h.startTime,a),Math.min(h.endTime,o)]))}let l=e.syncEndTime!==void 0,d={id:e.id,label:e.label,parentId:e.parentId,startTime:a,endTime:o,startEpochMs:se+a,duration:i,selfDuration:Math.max(0,i-u),syncDuration:l?(e.syncEndTime-e.startTime)/1e6:i,async:l,children:c,threshold:(t=e.threshold)!==null&&t!==void 0?t:0,trackingMode:(r=e.trackingMode)!==null&&r!==void 0?r:this.trackingMode,silent:(s=e.silent)!==null&&s!==void 0?s:this.silent};return e.memoryAtStart!==void 0&&e.memoryDelta!==void 0&&(d.memoryDelta=e.memoryDelta),e.error!==null&&e.error!==void 0&&(d.error=e.error),e.args&&e.args.length>0&&(d.args=e.args),d}_report(e){if(this.reporter){this.reporter(e);return}let t=e.trackingMode===p.TrackingModes.DETAILED||e.trackingMode===p.TrackingModes.DEBUG;console.log((0,K.formatTree)(e,{detailed:t,showErrors:t,blockingThreshold:this.blockingThreshold}))}_invoke(e,t,r,s,a){if(!this.enabled)return e.apply(t,r);let o=s.sampleRate!==void 0?S(s.sampleRate):this.defaultSampleRate;if(!(Math.random()<o))return e.apply(t,r);let c=this.enableNestedTracking&&s.enableNestedTracking!==!1,u=s.parentExecutionId||null,l=u!=null?u:c?this.context.current():null,d=this.startTimer(a,l,s,r),h;try{this.wrappers.length>0?h=this._wrap({id:d,label:a,parentId:l},()=>c?this.context.apply(d,e,t,r):e.apply(t,r)):h=c?this.context.apply(d,e,t,r):e.apply(t,r)}catch(f){throw this.endTimer(d,void 0,f),f}return De(h)?(this.markSyncEnd(d),h.then(f=>(this.endTimer(d,f),f),f=>{throw this.endTimer(d,void 0,f),f})):(this.endTimer(d,h),h)}createTrackable(e,t={}){var r;if(typeof e!="function")throw new Error("First argument must be a function");let s=t.label||e.name||"anonymous",a=(r=t.silent)!==null&&r!==void 0?r:this.silent;if((t.trackingMode||this.trackingMode)===p.TrackingModes.PERFORMANCE&&a&&!this.enableNestedTracking)return e;let i=(u,l)=>this._invoke(e,u,l,t,s),c=function(...u){return i(this,u)};return Object.defineProperty(c,"name",{value:e.name,configurable:!0}),Object.defineProperty(c,"length",{value:e.length}),c}startSpan(e,t={}){if(!this.enabled)return oe;let r=t.sampleRate!==void 0?S(t.sampleRate):this.defaultSampleRate;if(!(Math.random()<r))return oe;let s=this.enableNestedTracking&&t.enableNestedTracking!==!1,a=t.parentExecutionId||null,o=a!=null?a:s?this.context.current():null,i=this.startTimer(e||"anonymous",o,{trackMemory:t.trackMemory,silent:t.silent,trackingMode:t.trackingMode,threshold:t.threshold}),c=!1;return{id:i,setLabel:u=>{let l=this.activeExecutions.get(i);l&&u&&(l.label=u)},run:u=>{let l=()=>s?this.context.run(i,u):u(),d=this.wrappers.length>0?this._wrap({id:i,label:e||"anonymous",parentId:o},l):l(),h=this.activeExecutions.get(i);return h&&h.syncEndTime===void 0&&(h.syncEndTime=(0,p.getTimestamp)()),d},end:u=>{c||(c=!0,this.endTimer(i,void 0,u!=null?u:null))}}}trackModule(e,t={}){var r;if(!e||typeof e!="object")throw new Error("Module must be an object");let s=t.prefix||"";if((t.trackingMode||this.trackingMode)===p.TrackingModes.PERFORMANCE&&((r=t.silent)!==null&&r!==void 0?r:this.silent)&&!this.enableNestedTracking)return e;let o=Object.create(Object.getPrototypeOf(e));return Object.getOwnPropertyNames(e).forEach(i=>{let c=Object.getOwnPropertyDescriptor(e,i);if(c)if(typeof e[i]=="function"){let u={...t,label:`${s}${i}`};o[i]=this.createTrackable(e[i],u)}else Object.defineProperty(o,i,c)}),o}track(e,t={}){var r;if(typeof e!="function")throw new Error("First argument must be a function");if((t.trackingMode||this.trackingMode)===p.TrackingModes.PERFORMANCE&&((r=t.silent)!==null&&r!==void 0?r:this.silent)&&!this.enableNestedTracking)return e.apply(t.thisContext,t.args||[]);let s=t.label||e.name||"anonymous";return this._invoke(e,t.thisContext,t.args||[],t,s)}reset(){this.executionTree=new Map,this.currentExecutionId=0,this.activeExecutions=new Map,this.stats&&this.stats.reset()}};p.OptimizedExecutionTracker=D;var X=class{constructor(e={}){var t,r,s;this.config={trackingMode:e.trackingMode||Oe,silent:e.silent||!1,trackMemory:e.trackMemory!==void 0?e.trackMemory:!0,enableNestedTracking:e.enableNestedTracking!==void 0?e.enableNestedTracking:!0,threshold:(t=e.threshold)!==null&&t!==void 0?t:0,sampleRate:e.sampleRate!==void 0?S(e.sampleRate):1,enabled:(r=e.enabled)!==null&&r!==void 0?r:!0,blockingThreshold:(s=e.blockingThreshold)!==null&&s!==void 0?s:50},this.executionTracker=new D({trackingMode:this.config.trackingMode,silent:this.config.silent,showMemoryUsage:this.config.trackMemory,enableNestedTracking:this.config.enableNestedTracking,threshold:this.config.threshold,sampleRate:this.config.sampleRate,enabled:this.config.enabled,blockingThreshold:this.config.blockingThreshold,stats:e.stats,reporter:e.reporter,plugins:e.plugins,asyncLocalStorage:e.asyncLocalStorage}),e.onComplete&&this.onComplete(e.onComplete)}track(e,t={}){if(typeof e!="function")throw new Error("First argument must be a function");return this.executionTracker.track(e,t)}createTrackable(e,t={}){if(typeof e!="function")throw new Error("First argument must be a function");return this.executionTracker.createTrackable(e,t)}registerModule(e,t={}){if(!e||typeof e!="object")throw new Error("Module must be an object");return this.executionTracker.trackModule(e,t)}trackObject(e,t={}){var r;if(!e||typeof e!="object"&&typeof e!="function")throw new Error("trackObject expects an object");let s=e.constructor&&e.constructor!==Object?e.constructor.name:"",a=(r=t.prefix)!==null&&r!==void 0?r:s?`${s}.`:"",o={...t};delete o.prefix;let i=new Map,c=(l,d,h)=>{var f;let m=this.createTrackable(l,{...o,label:(f=o.label)!==null&&f!==void 0?f:`${a}${d}`});return function(...g){return m.apply(this===h?e:this,g)}},u=new Proxy(e,{get:(l,d,h)=>{let f=Reflect.get(l,d,h);if(typeof f!="function"||typeof d=="symbol"||d==="constructor"||Object.prototype[d]===f)return f;let m=i.get(d);if(m&&m.original===f)return m.tracked;let g=c(f,d,u);return i.set(d,{original:f,tracked:g}),g}});return u}traced(e={}){let t=new Map,r=(o,i)=>{let c=t.get(i);return c||(c=this.createTrackable(o,{...e,label:i}),t.set(i,c)),c},s=o=>{var i;return typeof o=="function"?o.name:((i=o==null?void 0:o.constructor)===null||i===void 0?void 0:i.name)||"anonymous"},a=(o,i)=>{let c=function(...u){var l;let d=(l=e.label)!==null&&l!==void 0?l:`${s(this)}.${i}`;return r(o,d).apply(this,u)};return Object.defineProperty(c,"name",{value:o.name,configurable:!0}),Object.defineProperty(c,"length",{value:o.length,configurable:!0}),c};return(o,i,c)=>{if(typeof o=="function"&&i&&typeof i=="object"&&"kind"in i){if(i.kind!=="method")throw new TypeError("@traced can only decorate methods");return a(o,String(i.name))}if(c&&typeof c.value=="function")return c.value=a(c.value,String(i)),c;throw new TypeError("@traced can only decorate methods")}}start(e,t={}){return this.executionTracker.startSpan(e,t)}use(e){return this.executionTracker.use(e)}onComplete(e){return this.use({name:"onComplete",onComplete:e})}onSlow(e,t){let r=typeof e=="number"?()=>e:s=>s in e?e[s]:e["*"];return this.use({name:"onSlow",onComplete:s=>{(0,K.walkRecords)(s,a=>{let o=r(a.label);o!==void 0&&a.duration>=o&&t(a,s)})}})}getStats(e){let t=this.executionTracker.stats;return e!==void 0?t?t.get(e):void 0:t?t.all():{}}resetStats(){return this.executionTracker.stats&&this.executionTracker.stats.reset(),this}formatStats(){return(0,ie.formatStatsTable)(this.getStats())}printStats(){return console.log(this.formatStats()),this}startTrace(e={}){let t=()=>{},r=(0,Se.createTraceRecorder)({maxRoots:e.maxRoots,onStop:()=>t()});return t=this.use(r),r}enable(){return this.config.enabled=!0,this.executionTracker.enabled=!0,this}disable(){return this.config.enabled=!1,this.executionTracker.enabled=!1,this}isEnabled(){return this.config.enabled}setConfig(e={}){return e.trackingMode&&(this.config.trackingMode=e.trackingMode,this.executionTracker.trackingMode=e.trackingMode),e.silent!==void 0&&(this.config.silent=e.silent,this.executionTracker.silent=e.silent),e.trackMemory!==void 0&&(this.config.trackMemory=e.trackMemory,this.executionTracker.showMemoryUsage=e.trackMemory),e.enableNestedTracking!==void 0&&(this.config.enableNestedTracking=e.enableNestedTracking,this.executionTracker.enableNestedTracking=e.enableNestedTracking),e.threshold!==void 0&&(this.config.threshold=e.threshold,this.executionTracker.defaultThreshold=e.threshold),e.sampleRate!==void 0&&(this.config.sampleRate=S(e.sampleRate),this.executionTracker.defaultSampleRate=this.config.sampleRate),e.enabled!==void 0&&(this.config.enabled=e.enabled,this.executionTracker.enabled=e.enabled),e.blockingThreshold!==void 0&&(this.config.blockingThreshold=e.blockingThreshold,this.executionTracker.blockingThreshold=e.blockingThreshold),e.reporter!==void 0&&(this.executionTracker.reporter=e.reporter),e.plugins&&e.plugins.forEach(t=>this.use(t)),e.onComplete&&this.onComplete(e.onComplete),{...this.config}}enableSilentMode(){return this.config.silent=!0,this.executionTracker.silent=!0,this}disableSilentMode(){return this.config.silent=!1,this.executionTracker.silent=!1,this}setTrackingMode(e){return this.config.trackingMode=e,this.executionTracker.trackingMode=e,this}getTrackingMode(){return this.config.trackingMode}enableMemoryTracking(){return this.config.trackMemory=!0,this.executionTracker.showMemoryUsage=!0,this}disableMemoryTracking(){return this.config.trackMemory=!1,this.executionTracker.showMemoryUsage=!1,this}setSampleRate(e){return this.config.sampleRate=S(e),this.executionTracker.defaultSampleRate=this.config.sampleRate,this}reset(){return this.executionTracker.reset(),this}};p.OptimizedPerformanceMonitor=X});var ce=k(W=>{"use strict";Object.defineProperty(W,"__esModule",{value:!0});W.performanceTimeline=Ce;var Fe=x();function Ce(n={}){var e;let t=typeof performance!="undefined"?performance:void 0,r=!!t&&typeof t.measure=="function",s=(e=n.track)!==null&&e!==void 0?e:"traceperf";return{name:"performance-timeline",onComplete(a){r&&(0,Fe.walkRecords)(a,o=>{let i=o.error!==void 0&&o.error!==null,c=[["duration",`${o.duration.toFixed(3)} ms`],["self",`${o.selfDuration.toFixed(3)} ms`]];o.async&&c.push(["sync",`${o.syncDuration.toFixed(3)} ms`]),o.memoryDelta!==void 0&&c.push(["heap \u0394",`${(o.memoryDelta/1024).toFixed(2)} KB`]),i&&c.push(["error",o.error instanceof Error?o.error.message:String(o.error)]);try{t.measure(o.label,{start:o.startTime,duration:o.duration,detail:{devtools:{dataType:"track-entry",track:s,...n.trackGroup?{trackGroup:n.trackGroup}:{},color:i?"error":"primary",properties:c,tooltipText:`${o.label}: ${o.duration.toFixed(2)} ms`}}}),!n.keep&&typeof t.clearMeasures=="function"&&t.clearMeasures(o.label)}catch(u){}})}}}});var he=k(_=>{"use strict";Object.defineProperty(_,"__esModule",{value:!0});_.instrumentFetch=Ae;_.instrumentHttp=Be;_.instrumentMethods=Ie;_.prismaExtension=Ue;_.normalizePath=de;_.instrumentHttpServer=qe;var ue=G(),v=Symbol.for("traceperf.instrumented");function Le(n){try{if(typeof n=="string"||n instanceof URL){let e=new URL(String(n),"http://localhost");return{host:e.host,path:e.pathname}}if(n&&typeof n.url=="string"){let e=new URL(n.url,"http://localhost");return{method:n.method,host:e.host,path:e.pathname}}}catch(e){}return{host:"unknown",path:""}}function Ae(n,e={}){let t=typeof globalThis!="undefined"?globalThis:void 0;if(!t||typeof t.fetch!="function")return()=>{};if(t.fetch[v])return()=>{};let{errorStatus:r=500,...s}=e,a=t.fetch,o=function(c,u){let{method:l,host:d,path:h}=Le(c),f=u&&u.method||l||"GET",m=n.start(`fetch ${f.toUpperCase()} ${d}${h}`,s),g;try{g=m.run(()=>a.call(this,c,u))}catch(b){throw m.end(b),b}return Promise.resolve(g).then(b=>(m.end(b&&b.status>=r?new Error(`HTTP ${b.status}`):void 0),b),b=>{throw m.end(b),b})};return o[v]=a,t.fetch=o,()=>{t.fetch===o&&(t.fetch=a)}}function Be(n,e={}){let{errorStatus:t=500,...r}=e,s=[];for(let a of["http","https"]){let o=(0,ue.loadNodeBuiltin)(a);if(o)for(let i of["request","get"]){let c=o[i];if(typeof c!="function"||c[v])continue;let u=function(...l){let d=n.start(`${a} request`,r),h;try{h=d.run(()=>c.apply(this,l))}catch(T){throw d.end(T),T}let f=typeof h.getHeader=="function"&&h.getHeader("host")||h.host||"unknown";d.setLabel(`${a} ${h.method||"GET"} ${f}${String(h.path||"").split("?")[0]}`);let m=!1,g,b=(T=g)=>{m||(m=!0,d.end(T))};return h.once("response",T=>{g=T.statusCode>=t?new Error(`HTTP ${T.statusCode}`):void 0,T.once("end",()=>b()),T.once("close",()=>b())}),h.once("error",T=>b(T)),h.once("close",()=>b()),h};u[v]=c,o[i]=u,s.push(()=>{o[i]===u&&(o[i]=c)})}}return()=>s.forEach(a=>a())}function Ie(n,e,t,r={}){let{prefix:s,labelFor:a,...o}=r,i=e.constructor,c=typeof e=="function"?e.name:i&&i.prototype===e||i&&i!==Object?i.name:"",u=s!=null?s:c?`${c}.`:"",l=t!=null?t:Object.getOwnPropertyNames(e).filter(h=>{if(h==="constructor")return!1;let f=Object.getOwnPropertyDescriptor(e,h);return!!f&&typeof f.value=="function"}),d=[];for(let h of l){let f=e[h];if(typeof f!="function"||f[v])continue;let m=function(...b){let T=a?a(h,b):`${u}${h}`;return n.track(()=>f.apply(this,b),{...o,label:T})};Object.defineProperty(m,"name",{value:f.name,configurable:!0}),Object.defineProperty(m,"length",{value:f.length,configurable:!0}),m[v]=f;let g=Object.prototype.hasOwnProperty.call(e,h);e[h]=m,d.push(()=>{e[h]===m&&(g?e[h]=f:delete e[h])})}return()=>d.forEach(h=>h())}function Ue(n,e={}){return{name:"traceperf",query:{$allModels:{$allOperations(t){var r,s;let a=(r=e.label)!==null&&r!==void 0?r:`prisma.${(s=t.model)!==null&&s!==void 0?s:"raw"}.${t.operation}`;return n.track(()=>t.query(t.args),{...e,label:a})}}}}}function de(n){let e=String(n||"/"),t=e.search(/[?#]/);if(t!==-1&&(e=e.slice(0,t)),!e)return"/";if(!/\d/.test(e))return e;let r=e.split("/");for(let s=0;s<r.length;s++){let a=r[s];a&&/\d/.test(a)&&He(a)&&(r[s]=":id")}return r.join("/")}var ze=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function He(n){return/^\d+$/.test(n)||n.length===36&&ze.test(n)||n.length>=16&&/^[0-9a-f]+$/i.test(n)?!0:n.length>=20&&/^[A-Za-z0-9_-]+$/.test(n)}function qe(n,e={}){let{errorStatus:t=500,labelFor:r,ignore:s,...a}=e,o=[];for(let i of["http","https"]){let c=(0,ue.loadNodeBuiltin)(i),u=c&&c.Server&&c.Server.prototype;if(!u)continue;let l=u.emit;if(typeof l!="function"||l[v])continue;let d=Object.prototype.hasOwnProperty.call(u,"emit"),h=function(f,m,g,...b){if(f!=="request"||!m||!g||typeof g.once!="function"||s&&s(m))return l.call(this,f,m,g,...b);let T=r?r(m):`${m.method||"GET"} ${de(m.url)}`,L=n.start(T,a);if(!L.id)return l.call(this,f,m,g,...b);let Q=!1,A=R=>{Q||(Q=!0,L.end(R))};g.once("finish",()=>A(g.statusCode>=t?new Error(`HTTP ${g.statusCode}`):void 0)),g.once("close",()=>A(g.writableFinished?void 0:new Error("connection closed before the response was sent")));try{return L.run(()=>l.call(this,f,m,g,...b))}catch(R){throw A(R),R}};h[v]=l,u.emit=h,o.push(()=>{u.emit===h&&(d?u.emit=l:delete u.emit)})}return()=>o.forEach(i=>i())}});var Qe=k((y,j)=>{Object.defineProperty(y,"__esModule",{value:!0});y.instrumentFetch=y.formatTree=y.recordToJSON=y.openTelemetryExporter=y.jsonLinesExporter=y.toChromeTrace=y.performanceTimeline=y.BrowserLogger=y.TrackingMode=void 0;y.createBrowserLogger=F;y.createTracePerf=me;var fe=le();y.TrackingMode=fe.TrackingModes;var Ge=(n,e)=>{Object.defineProperty(n,"name",{value:e.name,configurable:!0}),Object.defineProperty(n,"length",{value:e.length,configurable:!0})},O=class extends fe.OptimizedPerformanceMonitor{constructor(e={}){super({trackingMode:e.trackingMode,silent:e.silent,trackMemory:e.trackMemory,enableNestedTracking:e.enableNestedTracking,threshold:e.threshold,sampleRate:e.sampleRate,enabled:e.enabled,blockingThreshold:e.blockingThreshold,stats:e.stats,plugins:e.plugins,onComplete:e.onComplete,reporter:e.reporter,asyncLocalStorage:e.asyncLocalStorage}),this._mode="dev",this._indentLevel=0,this._mode=e.mode||"dev",this._slowThreshold=e.performanceThreshold||100,e.reporter||this.setConfig({reporter:t=>console.log(this.formatFlow(t))})}formatFlow(e){let t=["Execution Flow:"],r=(s,a)=>{let o=" ".repeat(a),i=s.threshold>0?s.threshold:this._slowThreshold,c=s.duration>i,u=s.memoryDelta!==void 0&&s.memoryDelta>0?` [${Je(s.memoryDelta)}]`:"";t.push(`${o}\u2192 ${s.label} (${s.duration.toFixed(2)}ms)${c?" [SLOW]":""}${u}`);let l=c?Ke(s.label,s.duration):"";l&&t.push(`${o} \u26A0\uFE0F ${l}`),s.children.filter(d=>d.duration>=d.threshold).forEach(d=>r(d,a+1))};return r(e,0),t.join(`
|
|
6
|
+
`)}info(e,...t){this.log("info",e,t)}warn(e,...t){this.log("warn",e,t)}error(e,...t){this.log("error",e,t)}debug(e,...t){this._mode!=="prod"&&this.log("debug",e,t)}group(e){this.info(e),this._indentLevel++,typeof console.group=="function"&&console.group(e)}groupEnd(){this._indentLevel>0&&this._indentLevel--,typeof console.groupEnd=="function"&&console.groupEnd()}setMode(e){this._mode=e}getMode(){return this._mode}setTrackingMode(e){return super.setTrackingMode(e),this}createTrackable(e,t={}){let r=t.label||e.name||"anonymous",s=(o,i)=>this.track(()=>e.apply(o,i),{...t,label:r}),a=function(...o){return s(this,o)};return Ge(a,e),a}log(e,t,r){if(this._mode==="prod"&&e!=="error"||this._mode==="staging"&&(e==="debug"||e==="info"))return;let s;if(typeof t=="string")s=t;else try{s=JSON.stringify(t,null,2)}catch(o){s=String(t)}switch(s=`${" ".repeat(this._indentLevel)}${s}`,e){case"info":console.info(s,...r);break;case"warn":console.warn(s,...r);break;case"error":console.error(s,...r);break;case"debug":console.debug(s,...r);break}}};y.BrowserLogger=O;function Je(n){return n<1024?`${n.toFixed(2)}B`:n<1024*1024?`${(n/1024).toFixed(2)}KB`:n<1024*1024*1024?`${(n/(1024*1024)).toFixed(2)}MB`:`${(n/(1024*1024*1024)).toFixed(2)}GB`}function Ke(n,e){return e>500?`Function "${n}" took ${e.toFixed(2)}ms to execute. Consider optimizing or breaking it down into smaller functions.`:e>200?`Function "${n}" took ${e.toFixed(2)}ms to execute. Consider optimizing if called frequently.`:e>100?`Function "${n}" took ${e.toFixed(2)}ms to execute. Monitor if called in critical paths.`:""}function F(n={}){return n.logger instanceof O?n.logger:new O(n)}function me(n={}){return F(n)}var Z=F();y.default=Z;var Xe=ce();Object.defineProperty(y,"performanceTimeline",{enumerable:!0,get:function(){return Xe.performanceTimeline}});var C=H();Object.defineProperty(y,"toChromeTrace",{enumerable:!0,get:function(){return C.toChromeTrace}});Object.defineProperty(y,"jsonLinesExporter",{enumerable:!0,get:function(){return C.jsonLinesExporter}});Object.defineProperty(y,"openTelemetryExporter",{enumerable:!0,get:function(){return C.openTelemetryExporter}});Object.defineProperty(y,"recordToJSON",{enumerable:!0,get:function(){return C.recordToJSON}});var We=x();Object.defineProperty(y,"formatTree",{enumerable:!0,get:function(){return We.formatTree}});var Ze=he();Object.defineProperty(y,"instrumentFetch",{enumerable:!0,get:function(){return Ze.instrumentFetch}});typeof j!="undefined"&&j.exports&&(j.exports=Object.assign(Z,j.exports,{default:Z,createBrowserLogger:F,createTracePerf:me,BrowserLogger:O,TrackingMode:y.TrackingMode}))});return Qe();})();
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,82 +1,6 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
|
|
1
|
+
export * from './options';
|
|
2
|
+
import type { TracePerfConfig } from './options';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* @deprecated Use `TracePerfConfig`.
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
7
|
-
/** Tracking mode for balancing performance vs detail */
|
|
8
|
-
trackingMode?: string;
|
|
9
|
-
/** Whether to suppress console output */
|
|
10
|
-
silent?: boolean;
|
|
11
|
-
/** Whether to track memory usage */
|
|
12
|
-
trackMemory?: boolean;
|
|
13
|
-
/** Whether to enable nested function tracking */
|
|
14
|
-
enableNestedTracking?: boolean;
|
|
15
|
-
/** Minimum duration threshold in microseconds */
|
|
16
|
-
threshold?: number;
|
|
17
|
-
/** Sampling rate (0.0-1.0) for reducing overhead */
|
|
18
|
-
sampleRate?: number;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Interface for tracking options
|
|
22
|
-
*/
|
|
23
|
-
export interface ITrackOptions {
|
|
24
|
-
/** Custom label for the tracked function */
|
|
25
|
-
label?: string;
|
|
26
|
-
/** Override default tracking mode */
|
|
27
|
-
trackingMode?: string;
|
|
28
|
-
/** Override default silent setting */
|
|
29
|
-
silent?: boolean;
|
|
30
|
-
/** Override default memory tracking */
|
|
31
|
-
trackMemory?: boolean;
|
|
32
|
-
/** Override default nested tracking */
|
|
33
|
-
enableNestedTracking?: boolean;
|
|
34
|
-
/** Minimum duration threshold in microseconds */
|
|
35
|
-
threshold?: number;
|
|
36
|
-
/** Sampling rate (0.0-1.0) for reducing overhead */
|
|
37
|
-
sampleRate?: number;
|
|
38
|
-
/** Any other options */
|
|
39
|
-
[key: string]: any;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Interface for execution trackers
|
|
43
|
-
*/
|
|
44
|
-
export interface IExecutionTracker {
|
|
45
|
-
/**
|
|
46
|
-
* Track the execution of a function
|
|
47
|
-
*
|
|
48
|
-
* @param fn - The function to track
|
|
49
|
-
* @param options - Options for tracking
|
|
50
|
-
* @returns The return value of the tracked function
|
|
51
|
-
*/
|
|
52
|
-
track<T>(fn: () => T, options?: ITrackOptions): T;
|
|
53
|
-
/**
|
|
54
|
-
* Create a trackable version of a function
|
|
55
|
-
*
|
|
56
|
-
* This is a helper method to create a tracked version of a function
|
|
57
|
-
* that can be used for nested function tracking.
|
|
58
|
-
*
|
|
59
|
-
* @param fn - The function to make trackable
|
|
60
|
-
* @param options - Options for tracking
|
|
61
|
-
* @returns A tracked version of the function
|
|
62
|
-
*/
|
|
63
|
-
createTrackable<T extends (...args: any[]) => any>(fn: T, options?: Omit<ITrackOptions, 'label'> & {
|
|
64
|
-
label?: string;
|
|
65
|
-
}): (...args: Parameters<T>) => ReturnType<T>;
|
|
66
|
-
/**
|
|
67
|
-
* Get the current call stack
|
|
68
|
-
*
|
|
69
|
-
* @returns The current call stack
|
|
70
|
-
*/
|
|
71
|
-
getCallStack(): string[];
|
|
72
|
-
/**
|
|
73
|
-
* Generate a visual representation of the execution flow
|
|
74
|
-
*
|
|
75
|
-
* @returns ASCII flow chart of the execution
|
|
76
|
-
*/
|
|
77
|
-
generateFlowChart(): string;
|
|
78
|
-
/**
|
|
79
|
-
* Clear all execution records
|
|
80
|
-
*/
|
|
81
|
-
clear(): void;
|
|
82
|
-
}
|
|
6
|
+
export type ITracePerfConfig = TracePerfConfig;
|
package/dist/types/index.js
CHANGED
|
@@ -14,6 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./
|
|
18
|
-
__exportStar(require("./logger"), exports);
|
|
17
|
+
__exportStar(require("./options"), exports);
|
|
19
18
|
//# sourceMappingURL=index.js.map
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { ExecutionRecord, TracePerfPlugin, TrackingModeName } from '../core/records';
|
|
2
|
+
import type { StatsOptions } from '../core/stats';
|
|
3
|
+
/**
|
|
4
|
+
* Options for a single tracked function or call. Anything left out falls
|
|
5
|
+
* back to the instance configuration at the time of the call.
|
|
6
|
+
*/
|
|
7
|
+
export interface TrackOptions {
|
|
8
|
+
/** Label shown in output and stats (default: the function name) */
|
|
9
|
+
label?: string;
|
|
10
|
+
/** Tracking mode for this call */
|
|
11
|
+
trackingMode?: TrackingModeName;
|
|
12
|
+
/** Suppress console output for this call */
|
|
13
|
+
silent?: boolean;
|
|
14
|
+
/** Record the heap change for this call */
|
|
15
|
+
trackMemory?: boolean;
|
|
16
|
+
/** Only report this call if it takes at least this many milliseconds */
|
|
17
|
+
threshold?: number;
|
|
18
|
+
/** Fraction of calls to track (0.0 - 1.0) */
|
|
19
|
+
sampleRate?: number;
|
|
20
|
+
/** Include a short rendering of the arguments in output and records */
|
|
21
|
+
captureArgs?: boolean;
|
|
22
|
+
/** Attach tracked calls made inside this one as children (default true) */
|
|
23
|
+
enableNestedTracking?: boolean;
|
|
24
|
+
/** Attach this call to a specific parent execution */
|
|
25
|
+
parentExecutionId?: string | null;
|
|
26
|
+
}
|
|
27
|
+
/** Options for `track(fn, options)` */
|
|
28
|
+
export interface TrackCallOptions extends TrackOptions {
|
|
29
|
+
/** `this` for the tracked function */
|
|
30
|
+
thisContext?: unknown;
|
|
31
|
+
/** Arguments passed to the tracked function */
|
|
32
|
+
args?: unknown[];
|
|
33
|
+
}
|
|
34
|
+
/** Options for `registerModule` / `trackObject` */
|
|
35
|
+
export interface ModuleTrackOptions extends TrackOptions {
|
|
36
|
+
/** Prefix for each method label, e.g. "userService." */
|
|
37
|
+
prefix?: string;
|
|
38
|
+
}
|
|
39
|
+
/** Configuration for `createTracePerf()` / `new OptimizedPerformanceMonitor()` */
|
|
40
|
+
export interface TracePerfConfig {
|
|
41
|
+
/** Detail level (default "balanced") */
|
|
42
|
+
trackingMode?: TrackingModeName;
|
|
43
|
+
/** Suppress console output (stats, hooks and exporters still run) */
|
|
44
|
+
silent?: boolean;
|
|
45
|
+
/** Record heap change per call (default true) */
|
|
46
|
+
trackMemory?: boolean;
|
|
47
|
+
/** Attach nested tracked calls to their caller (default true) */
|
|
48
|
+
enableNestedTracking?: boolean;
|
|
49
|
+
/** Only report calls taking at least this many milliseconds (default 0) */
|
|
50
|
+
threshold?: number;
|
|
51
|
+
/** Fraction of calls to track (default 1) */
|
|
52
|
+
sampleRate?: number;
|
|
53
|
+
/** Set to false to make every tracked function a plain pass-through */
|
|
54
|
+
enabled?: boolean;
|
|
55
|
+
/** Detailed mode flags calls whose synchronous part runs at least this long (ms, default 50; 0 disables) */
|
|
56
|
+
blockingThreshold?: number;
|
|
57
|
+
/** Collect per-label statistics (default true) */
|
|
58
|
+
stats?: boolean | StatsOptions;
|
|
59
|
+
/** Replace console output: called with each reported top-level tree */
|
|
60
|
+
reporter?: (root: ExecutionRecord) => void;
|
|
61
|
+
/** Plugins/exporters to register */
|
|
62
|
+
plugins?: TracePerfPlugin[];
|
|
63
|
+
/** Called with every finished top-level tree (also when silent) */
|
|
64
|
+
onComplete?: (root: ExecutionRecord) => void;
|
|
65
|
+
/**
|
|
66
|
+
* AsyncLocalStorage class to use for nesting across `await`. Detected
|
|
67
|
+
* automatically on Node.js, Bun, Deno and where it is a global; pass it
|
|
68
|
+
* explicitly on runtimes where it is only importable, e.g. Cloudflare
|
|
69
|
+
* Workers: `import { AsyncLocalStorage } from 'node:async_hooks'`.
|
|
70
|
+
*/
|
|
71
|
+
asyncLocalStorage?: new () => any;
|
|
72
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/types/options.ts"],"names":[],"mappings":""}
|
package/dist/watch.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface WatchOptions {
|
|
2
|
+
top?: number;
|
|
3
|
+
sort?: 'p95' | 'p99' | 'mean' | 'total' | 'count' | 'max';
|
|
4
|
+
/** Calls/s is computed over this window (ms, default 10000) */
|
|
5
|
+
rateWindow?: number;
|
|
6
|
+
/** Show the arrival rate (only meaningful while following a live file; default true) */
|
|
7
|
+
showRate?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** Incremental state for `traceperf watch`; feed it text, render frames */
|
|
10
|
+
export declare function createWatcher(options?: WatchOptions): {
|
|
11
|
+
/** Add newly appended text (may end mid-line) */
|
|
12
|
+
ingest(text: string, now?: number): void;
|
|
13
|
+
/** Forget everything (e.g. the file was truncated) */
|
|
14
|
+
reset(): void;
|
|
15
|
+
/** Render one frame as text */
|
|
16
|
+
frame(title: string, now?: number): string;
|
|
17
|
+
};
|
package/dist/watch.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createWatcher = createWatcher;
|
|
4
|
+
/**
|
|
5
|
+
* traceperf watch: a live, top-style view of a JSON-lines log
|
|
6
|
+
* (from jsonLinesExporter) as the application writes it.
|
|
7
|
+
*/
|
|
8
|
+
const stats_1 = require("./core/stats");
|
|
9
|
+
function toRecord(label, duration, selfDuration, error) {
|
|
10
|
+
return {
|
|
11
|
+
id: '', label, parentId: null, startTime: 0, endTime: duration, startEpochMs: 0, duration,
|
|
12
|
+
selfDuration, syncDuration: duration, async: false, children: [], threshold: 0,
|
|
13
|
+
trackingMode: 'balanced', silent: true, ...(error ? { error: new Error(error) } : {}),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/** Incremental state for `traceperf watch`; feed it text, render frames */
|
|
17
|
+
function createWatcher(options = {}) {
|
|
18
|
+
var _a;
|
|
19
|
+
const stats = new stats_1.StatsCollector({ reservoirSize: 2048, maxLabels: 5000 });
|
|
20
|
+
const window = (_a = options.rateWindow) !== null && _a !== void 0 ? _a : 10000;
|
|
21
|
+
const arrivals = [];
|
|
22
|
+
let pending = '';
|
|
23
|
+
let calls = 0;
|
|
24
|
+
let invalid = 0;
|
|
25
|
+
const visit = (node) => {
|
|
26
|
+
if (!node || typeof node.label !== 'string' || typeof node.durationMs !== 'number')
|
|
27
|
+
return;
|
|
28
|
+
stats.add(toRecord(node.label, node.durationMs, typeof node.selfMs === 'number' ? node.selfMs : node.durationMs, node.error));
|
|
29
|
+
calls++;
|
|
30
|
+
(node.children || []).forEach(visit);
|
|
31
|
+
};
|
|
32
|
+
return {
|
|
33
|
+
/** Add newly appended text (may end mid-line) */
|
|
34
|
+
ingest(text, now = Date.now()) {
|
|
35
|
+
var _a;
|
|
36
|
+
const lines = (pending + text).split('\n');
|
|
37
|
+
pending = (_a = lines.pop()) !== null && _a !== void 0 ? _a : '';
|
|
38
|
+
for (const line of lines) {
|
|
39
|
+
if (!line.trim())
|
|
40
|
+
continue;
|
|
41
|
+
try {
|
|
42
|
+
const before = calls;
|
|
43
|
+
visit(JSON.parse(line));
|
|
44
|
+
for (let i = before; i < calls; i++)
|
|
45
|
+
arrivals.push(now);
|
|
46
|
+
}
|
|
47
|
+
catch (_b) {
|
|
48
|
+
invalid++;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
while (arrivals.length && arrivals[0] < now - window)
|
|
52
|
+
arrivals.shift();
|
|
53
|
+
},
|
|
54
|
+
/** Forget everything (e.g. the file was truncated) */
|
|
55
|
+
reset() {
|
|
56
|
+
stats.reset();
|
|
57
|
+
arrivals.length = 0;
|
|
58
|
+
pending = '';
|
|
59
|
+
calls = 0;
|
|
60
|
+
invalid = 0;
|
|
61
|
+
},
|
|
62
|
+
/** Render one frame as text */
|
|
63
|
+
frame(title, now = Date.now()) {
|
|
64
|
+
var _a, _b;
|
|
65
|
+
while (arrivals.length && arrivals[0] < now - window)
|
|
66
|
+
arrivals.shift();
|
|
67
|
+
const sort = (_a = options.sort) !== null && _a !== void 0 ? _a : 'p95';
|
|
68
|
+
const all = stats.all();
|
|
69
|
+
const labels = Object.keys(all).sort((a, b) => all[b][sort] - all[a][sort])
|
|
70
|
+
.slice(0, Math.max(1, (_b = options.top) !== null && _b !== void 0 ? _b : 15));
|
|
71
|
+
const rate = arrivals.length / (window / 1000);
|
|
72
|
+
const rateText = options.showRate === false ? '' : ` | ${rate.toFixed(1)} calls/s (last ${window / 1000}s)`;
|
|
73
|
+
const head = `${title} | ${calls.toLocaleString('en-US')} calls${rateText} | ${new Date(now).toISOString().slice(11, 19)}`
|
|
74
|
+
+ (invalid ? ` | ${invalid} invalid lines` : '');
|
|
75
|
+
if (labels.length === 0)
|
|
76
|
+
return `${head}\n\nwaiting for data...`;
|
|
77
|
+
const cols = [
|
|
78
|
+
['calls', s => String(s.count)], ['errors', s => String(s.errors)], ['p50', s => s.p50.toFixed(2)],
|
|
79
|
+
['p95', s => s.p95.toFixed(2)], ['p99', s => s.p99.toFixed(2)], ['max', s => s.max.toFixed(2)], ['total', s => s.total.toFixed(0)],
|
|
80
|
+
];
|
|
81
|
+
const rows = labels.map(l => [l, ...cols.map(([, f]) => f(all[l]))]);
|
|
82
|
+
const header = ['label', ...cols.map(([n]) => (n === sort ? `${n}▼` : n))];
|
|
83
|
+
const widths = header.map((h, i) => Math.max(h.length, ...rows.map(r => r[i].length)));
|
|
84
|
+
const fmt = (cells) => cells.map((c, i) => (i === 0 ? c.padEnd(widths[i]) : c.padStart(widths[i]))).join(' ');
|
|
85
|
+
const footer = options.showRate === false ? 'times in ms' : 'times in ms - Ctrl+C to exit';
|
|
86
|
+
return [head, '', fmt(header), widths.map(w => '-'.repeat(w)).join(' '), ...rows.map(fmt), '', footer].join('\n');
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,37 +1,83 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "traceperf",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.3.0",
|
|
4
|
+
"description": "See where the time goes: call trees in development, cheap per-function stats in production, export to Perfetto and OpenTelemetry. Node.js and browsers.",
|
|
5
|
+
"type": "commonjs",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
7
|
"module": "dist/esm/index.js",
|
|
7
8
|
"types": "dist/index.d.ts",
|
|
9
|
+
"bin": {
|
|
10
|
+
"traceperf": "dist/cli.js"
|
|
11
|
+
},
|
|
8
12
|
"browser": "dist/browser.js",
|
|
13
|
+
"typesVersions": {
|
|
14
|
+
"*": {
|
|
15
|
+
"browser": [
|
|
16
|
+
"dist/browser.d.ts"
|
|
17
|
+
],
|
|
18
|
+
"auto": [
|
|
19
|
+
"dist/register.d.ts"
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
},
|
|
9
23
|
"exports": {
|
|
10
24
|
".": {
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
|
|
25
|
+
"import": {
|
|
26
|
+
"types": "./dist/esm/index.d.ts",
|
|
27
|
+
"default": "./dist/esm/index.js"
|
|
28
|
+
},
|
|
29
|
+
"require": {
|
|
30
|
+
"types": "./dist/index.d.ts",
|
|
31
|
+
"default": "./dist/index.js"
|
|
32
|
+
}
|
|
14
33
|
},
|
|
15
34
|
"./browser": {
|
|
16
|
-
"
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
35
|
+
"import": {
|
|
36
|
+
"types": "./dist/esm/browser.d.ts",
|
|
37
|
+
"default": "./dist/esm/browser.js"
|
|
38
|
+
},
|
|
39
|
+
"require": {
|
|
40
|
+
"types": "./dist/browser.d.ts",
|
|
41
|
+
"default": "./dist/browser.js"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"./auto": {
|
|
45
|
+
"import": {
|
|
46
|
+
"types": "./dist/esm/register.d.ts",
|
|
47
|
+
"default": "./dist/esm/register.js"
|
|
48
|
+
},
|
|
49
|
+
"require": {
|
|
50
|
+
"types": "./dist/register.d.ts",
|
|
51
|
+
"default": "./dist/register.js"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"./package.json": "./package.json"
|
|
20
55
|
},
|
|
21
56
|
"files": [
|
|
22
57
|
"dist"
|
|
23
58
|
],
|
|
24
59
|
"scripts": {
|
|
25
60
|
"build": "tsc",
|
|
26
|
-
"build:esm": "tsc -p tsconfig.esm.json",
|
|
27
|
-
"build:browser": "tsc -p tsconfig.browser.json",
|
|
61
|
+
"build:esm": "tsc -p tsconfig.esm.json && node scripts/postbuild-esm.js",
|
|
62
|
+
"build:browser": "tsc -p tsconfig.browser.json && node scripts/build-browser-global.js",
|
|
28
63
|
"build:all": "npm run build && npm run build:esm && npm run build:browser",
|
|
29
64
|
"test": "jest",
|
|
30
|
-
"lint": "eslint src --ext .ts",
|
|
65
|
+
"lint": "eslint src --ext .ts --max-warnings 0",
|
|
31
66
|
"format": "prettier --write \"src/**/*.ts\"",
|
|
32
|
-
"prepare": "husky
|
|
67
|
+
"prepare": "husky || true",
|
|
33
68
|
"prepublishOnly": "npm run build:all",
|
|
34
|
-
"dev": "tsc --watch"
|
|
69
|
+
"dev": "tsc --watch",
|
|
70
|
+
"verify:package": "node scripts/verify-package.js",
|
|
71
|
+
"lint:package": "publint --strict && attw --pack .",
|
|
72
|
+
"test:browser": "playwright test",
|
|
73
|
+
"verify:docs": "node scripts/check-docs.js",
|
|
74
|
+
"verify": "npm run lint:package && npm run verify:package && npm run verify:docs",
|
|
75
|
+
"bench": "node scripts/bench.js",
|
|
76
|
+
"bench:check": "node scripts/bench.js --check",
|
|
77
|
+
"typecheck": "tsc --noEmit -p tsconfig.eslint.json",
|
|
78
|
+
"test:runtimes": "bun test/runtimes/smoke.mjs && deno run --allow-read --allow-env --allow-sys test/runtimes/smoke.mjs && node test/runtimes/edge.test.js && test/runtimes/workerd.sh",
|
|
79
|
+
"bench:compare": "node scripts/compare.js",
|
|
80
|
+
"docs:api": "typedoc"
|
|
35
81
|
},
|
|
36
82
|
"keywords": [
|
|
37
83
|
"performance",
|
|
@@ -44,7 +90,15 @@
|
|
|
44
90
|
"bottleneck-detection",
|
|
45
91
|
"sampling",
|
|
46
92
|
"debug",
|
|
47
|
-
"optimization"
|
|
93
|
+
"optimization",
|
|
94
|
+
"opentelemetry",
|
|
95
|
+
"perfetto",
|
|
96
|
+
"tracing",
|
|
97
|
+
"express",
|
|
98
|
+
"fastify",
|
|
99
|
+
"hono",
|
|
100
|
+
"decorators",
|
|
101
|
+
"async-hooks"
|
|
48
102
|
],
|
|
49
103
|
"author": "Shubh Wadekar",
|
|
50
104
|
"license": "MIT",
|
|
@@ -60,20 +114,46 @@
|
|
|
60
114
|
},
|
|
61
115
|
"homepage": "https://github.com/thelastbackspace/traceperf#readme",
|
|
62
116
|
"devDependencies": {
|
|
117
|
+
"@arethetypeswrong/cli": "^0.18.5",
|
|
118
|
+
"@aws-sdk/client-s3": "^3.1153.0",
|
|
119
|
+
"@nestjs/common": "^12.2.0",
|
|
120
|
+
"@nestjs/core": "^12.2.0",
|
|
121
|
+
"@nestjs/platform-express": "^12.2.0",
|
|
122
|
+
"@opentelemetry/api": "^1.9.1",
|
|
123
|
+
"@opentelemetry/context-async-hooks": "^2.12.0",
|
|
124
|
+
"@opentelemetry/sdk-trace-base": "^2.12.0",
|
|
125
|
+
"@playwright/test": "^1.64.1",
|
|
126
|
+
"@types/express": "^5.0.6",
|
|
63
127
|
"@types/jest": "^29.5.14",
|
|
128
|
+
"@types/koa": "^2.15.2",
|
|
64
129
|
"@types/node": "^22.13.10",
|
|
65
|
-
"@types/
|
|
130
|
+
"@types/pg": "^8.23.1",
|
|
66
131
|
"@typescript-eslint/eslint-plugin": "^8.26.1",
|
|
67
132
|
"@typescript-eslint/parser": "^8.26.1",
|
|
133
|
+
"edge-runtime": "^4.0.1",
|
|
134
|
+
"esbuild": "^0.28.2",
|
|
68
135
|
"eslint": "^8.56.0",
|
|
69
136
|
"eslint-config-prettier": "^10.1.1",
|
|
137
|
+
"express": "^5.3.0",
|
|
138
|
+
"fastify": "^5.12.7",
|
|
139
|
+
"hono": "^4.13.13",
|
|
70
140
|
"husky": "^9.1.7",
|
|
141
|
+
"ioredis": "^6.0.0",
|
|
71
142
|
"jest": "^29.7.0",
|
|
143
|
+
"koa": "^3.2.1",
|
|
144
|
+
"mongodb": "^7.7.0",
|
|
145
|
+
"mysql2": "^3.24.6",
|
|
146
|
+
"pg": "^8.23.1",
|
|
72
147
|
"prettier": "^3.5.3",
|
|
148
|
+
"publint": "^0.3.25",
|
|
149
|
+
"reflect-metadata": "^0.2.2",
|
|
150
|
+
"rxjs": "^7.8.2",
|
|
73
151
|
"ts-jest": "^29.2.6",
|
|
152
|
+
"typedoc": "^0.28.20",
|
|
74
153
|
"typescript": "^5.8.2"
|
|
75
154
|
},
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
|
|
155
|
+
"sideEffects": [
|
|
156
|
+
"./dist/register.js",
|
|
157
|
+
"./dist/esm/register.js"
|
|
158
|
+
]
|
|
79
159
|
}
|
package/dist/core/config.d.ts
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { ILoggerConfig, LogLevel, LogMode } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* Configuration manager for the logger
|
|
4
|
-
* Handles merging user config with defaults and provides utility methods
|
|
5
|
-
*/
|
|
6
|
-
export declare class ConfigManager {
|
|
7
|
-
private _config;
|
|
8
|
-
/**
|
|
9
|
-
* Create a new ConfigManager instance
|
|
10
|
-
*
|
|
11
|
-
* @param userConfig - User-provided configuration options
|
|
12
|
-
*/
|
|
13
|
-
constructor(userConfig?: Partial<ILoggerConfig>);
|
|
14
|
-
/**
|
|
15
|
-
* Get the current configuration
|
|
16
|
-
*
|
|
17
|
-
* @returns The current configuration
|
|
18
|
-
*/
|
|
19
|
-
getConfig(): ILoggerConfig;
|
|
20
|
-
/**
|
|
21
|
-
* Update the configuration
|
|
22
|
-
*
|
|
23
|
-
* @param newConfig - New configuration options to merge
|
|
24
|
-
*/
|
|
25
|
-
updateConfig(newConfig: Partial<ILoggerConfig>): void;
|
|
26
|
-
/**
|
|
27
|
-
* Get the current mode
|
|
28
|
-
*
|
|
29
|
-
* @returns The current mode
|
|
30
|
-
*/
|
|
31
|
-
getMode(): LogMode;
|
|
32
|
-
/**
|
|
33
|
-
* Set the current mode
|
|
34
|
-
*
|
|
35
|
-
* @param mode - The mode to set
|
|
36
|
-
*/
|
|
37
|
-
setMode(mode: LogMode): void;
|
|
38
|
-
/**
|
|
39
|
-
* Check if a log level should be displayed based on the current mode and level
|
|
40
|
-
*
|
|
41
|
-
* @param level - The log level to check
|
|
42
|
-
* @returns Whether the log level should be displayed
|
|
43
|
-
*/
|
|
44
|
-
shouldLog(level: LogLevel): boolean;
|
|
45
|
-
/**
|
|
46
|
-
* Get the higher priority level between two log levels
|
|
47
|
-
*
|
|
48
|
-
* @param levelA - First log level
|
|
49
|
-
* @param levelB - Second log level
|
|
50
|
-
* @returns The higher priority level
|
|
51
|
-
*/
|
|
52
|
-
private getHigherPriorityLevel;
|
|
53
|
-
/**
|
|
54
|
-
* Get the performance threshold
|
|
55
|
-
*
|
|
56
|
-
* @returns The performance threshold in milliseconds
|
|
57
|
-
*/
|
|
58
|
-
getPerformanceThreshold(): number;
|
|
59
|
-
/**
|
|
60
|
-
* Get the indentation size
|
|
61
|
-
*
|
|
62
|
-
* @returns The number of spaces for each indentation level
|
|
63
|
-
*/
|
|
64
|
-
getIndentSize(): number;
|
|
65
|
-
/**
|
|
66
|
-
* Check if colorization is enabled
|
|
67
|
-
*
|
|
68
|
-
* @returns Whether colorization is enabled
|
|
69
|
-
*/
|
|
70
|
-
isColorEnabled(): boolean;
|
|
71
|
-
/**
|
|
72
|
-
* Check if timestamps are enabled
|
|
73
|
-
*
|
|
74
|
-
* @returns Whether timestamps are enabled
|
|
75
|
-
*/
|
|
76
|
-
isTimestampEnabled(): boolean;
|
|
77
|
-
}
|