traceperf 0.2.0 → 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.
Files changed (268) hide show
  1. package/README.md +612 -209
  2. package/dist/__tests__/helpers/console.d.ts +9 -0
  3. package/dist/__tests__/helpers/console.js +25 -0
  4. package/dist/__tests__/helpers/console.js.map +1 -0
  5. package/dist/auto.d.ts +30 -0
  6. package/dist/auto.js +91 -0
  7. package/dist/auto.js.map +1 -0
  8. package/dist/browser.d.ts +52 -144
  9. package/dist/browser.js +112 -439
  10. package/dist/browser.js.map +1 -1
  11. package/dist/cli.d.ts +68 -0
  12. package/dist/cli.js +528 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/core/allocations.d.ts +38 -0
  15. package/dist/core/allocations.js +85 -0
  16. package/dist/core/allocations.js.map +1 -0
  17. package/dist/core/cpu-profile.d.ts +84 -0
  18. package/dist/core/cpu-profile.js +181 -0
  19. package/dist/core/cpu-profile.js.map +1 -0
  20. package/dist/core/env.d.ts +10 -0
  21. package/dist/core/env.js +40 -0
  22. package/dist/core/env.js.map +1 -0
  23. package/dist/core/event-loop.d.ts +30 -0
  24. package/dist/core/event-loop.js +43 -0
  25. package/dist/core/event-loop.js.map +1 -0
  26. package/dist/core/explain.d.ts +48 -0
  27. package/dist/core/explain.js +236 -0
  28. package/dist/core/explain.js.map +1 -0
  29. package/dist/core/exporters.d.ts +111 -0
  30. package/dist/core/exporters.js +236 -0
  31. package/dist/core/exporters.js.map +1 -0
  32. package/dist/core/index.d.ts +9 -3
  33. package/dist/core/index.js +9 -3
  34. package/dist/core/index.js.map +1 -1
  35. package/dist/core/optimized-performance-monitor.d.ts +180 -26
  36. package/dist/core/optimized-performance-monitor.js +687 -175
  37. package/dist/core/optimized-performance-monitor.js.map +1 -1
  38. package/dist/core/prometheus.d.ts +36 -0
  39. package/dist/core/prometheus.js +93 -0
  40. package/dist/core/prometheus.js.map +1 -0
  41. package/dist/core/records.d.ts +97 -0
  42. package/dist/core/records.js +87 -0
  43. package/dist/core/records.js.map +1 -0
  44. package/dist/core/stats.d.ts +45 -0
  45. package/dist/core/stats.js +136 -0
  46. package/dist/core/stats.js.map +1 -0
  47. package/dist/core/timeline.d.ts +28 -0
  48. package/dist/core/timeline.js +65 -0
  49. package/dist/core/timeline.js.map +1 -0
  50. package/dist/drivers.d.ts +51 -0
  51. package/dist/drivers.js +205 -0
  52. package/dist/drivers.js.map +1 -0
  53. package/dist/esm/auto.d.ts +30 -0
  54. package/dist/esm/auto.js +87 -0
  55. package/dist/esm/auto.js.map +1 -0
  56. package/dist/esm/browser.d.ts +52 -144
  57. package/dist/esm/browser.js +101 -445
  58. package/dist/esm/browser.js.map +1 -1
  59. package/dist/esm/cli.d.ts +68 -0
  60. package/dist/esm/cli.js +520 -0
  61. package/dist/esm/cli.js.map +1 -0
  62. package/dist/esm/core/allocations.d.ts +38 -0
  63. package/dist/esm/core/allocations.js +82 -0
  64. package/dist/esm/core/allocations.js.map +1 -0
  65. package/dist/esm/core/cpu-profile.d.ts +84 -0
  66. package/dist/esm/core/cpu-profile.js +176 -0
  67. package/dist/esm/core/cpu-profile.js.map +1 -0
  68. package/dist/esm/core/env.d.ts +10 -0
  69. package/dist/esm/core/env.js +35 -0
  70. package/dist/esm/core/env.js.map +1 -0
  71. package/dist/esm/core/event-loop.d.ts +30 -0
  72. package/dist/esm/core/event-loop.js +40 -0
  73. package/dist/esm/core/event-loop.js.map +1 -0
  74. package/dist/esm/core/explain.d.ts +48 -0
  75. package/dist/esm/core/explain.js +232 -0
  76. package/dist/esm/core/explain.js.map +1 -0
  77. package/dist/esm/core/exporters.d.ts +111 -0
  78. package/dist/esm/core/exporters.js +229 -0
  79. package/dist/esm/core/exporters.js.map +1 -0
  80. package/dist/esm/core/index.d.ts +10 -4
  81. package/dist/esm/core/index.js +10 -4
  82. package/dist/esm/core/index.js.map +1 -1
  83. package/dist/esm/core/optimized-performance-monitor.d.ts +180 -26
  84. package/dist/esm/core/optimized-performance-monitor.js +685 -173
  85. package/dist/esm/core/optimized-performance-monitor.js.map +1 -1
  86. package/dist/esm/core/prometheus.d.ts +36 -0
  87. package/dist/esm/core/prometheus.js +89 -0
  88. package/dist/esm/core/prometheus.js.map +1 -0
  89. package/dist/esm/core/records.d.ts +97 -0
  90. package/dist/esm/core/records.js +82 -0
  91. package/dist/esm/core/records.js.map +1 -0
  92. package/dist/esm/core/stats.d.ts +45 -0
  93. package/dist/esm/core/stats.js +131 -0
  94. package/dist/esm/core/stats.js.map +1 -0
  95. package/dist/esm/core/timeline.d.ts +28 -0
  96. package/dist/esm/core/timeline.js +62 -0
  97. package/dist/esm/core/timeline.js.map +1 -0
  98. package/dist/esm/drivers.d.ts +51 -0
  99. package/dist/esm/drivers.js +197 -0
  100. package/dist/esm/drivers.js.map +1 -0
  101. package/dist/esm/index.d.ts +13 -5
  102. package/dist/esm/index.js +21 -17
  103. package/dist/esm/index.js.map +1 -1
  104. package/dist/esm/instrument.d.ts +88 -0
  105. package/dist/esm/instrument.js +274 -0
  106. package/dist/esm/instrument.js.map +1 -0
  107. package/dist/esm/integrations.d.ts +70 -0
  108. package/dist/esm/integrations.js +197 -0
  109. package/dist/esm/integrations.js.map +1 -0
  110. package/dist/esm/node-builtins.d.ts +1 -0
  111. package/dist/esm/node-builtins.js +32 -0
  112. package/dist/esm/node-builtins.js.map +1 -0
  113. package/dist/esm/package.json +3 -0
  114. package/dist/esm/register.d.ts +20 -0
  115. package/dist/esm/register.js +98 -0
  116. package/dist/esm/register.js.map +1 -0
  117. package/dist/esm/report-html.d.ts +11 -0
  118. package/dist/esm/report-html.js +106 -0
  119. package/dist/esm/report-html.js.map +1 -0
  120. package/dist/esm/types/index.d.ts +4 -80
  121. package/dist/esm/types/index.js +1 -2
  122. package/dist/esm/types/index.js.map +1 -1
  123. package/dist/esm/types/options.d.ts +72 -0
  124. package/dist/esm/types/options.js +2 -0
  125. package/dist/esm/types/options.js.map +1 -0
  126. package/dist/esm/watch.d.ts +17 -0
  127. package/dist/esm/watch.js +87 -0
  128. package/dist/esm/watch.js.map +1 -0
  129. package/dist/index.d.ts +10 -2
  130. package/dist/index.js +26 -29
  131. package/dist/index.js.map +1 -1
  132. package/dist/instrument.d.ts +88 -0
  133. package/dist/instrument.js +282 -0
  134. package/dist/instrument.js.map +1 -0
  135. package/dist/integrations.d.ts +70 -0
  136. package/dist/integrations.js +205 -0
  137. package/dist/integrations.js.map +1 -0
  138. package/dist/node-builtins.d.ts +1 -0
  139. package/dist/node-builtins.js +67 -0
  140. package/dist/node-builtins.js.map +1 -0
  141. package/dist/register.d.ts +20 -0
  142. package/dist/register.js +103 -0
  143. package/dist/register.js.map +1 -0
  144. package/dist/report-html.d.ts +11 -0
  145. package/dist/report-html.js +109 -0
  146. package/dist/report-html.js.map +1 -0
  147. package/dist/traceperf.browser.js +1910 -0
  148. package/dist/traceperf.browser.min.js +6 -0
  149. package/dist/types/index.d.ts +4 -80
  150. package/dist/types/index.js +1 -2
  151. package/dist/types/index.js.map +1 -1
  152. package/dist/types/options.d.ts +72 -0
  153. package/dist/types/{config.js → options.js} +1 -1
  154. package/dist/types/options.js.map +1 -0
  155. package/dist/watch.d.ts +17 -0
  156. package/dist/watch.js +90 -0
  157. package/dist/watch.js.map +1 -0
  158. package/package.json +99 -19
  159. package/dist/core/config.d.ts +0 -77
  160. package/dist/core/config.js +0 -116
  161. package/dist/core/config.js.map +0 -1
  162. package/dist/core/constants.d.ts +0 -78
  163. package/dist/core/constants.js +0 -109
  164. package/dist/core/constants.js.map +0 -1
  165. package/dist/core/logger.d.ts +0 -97
  166. package/dist/core/logger.js +0 -186
  167. package/dist/core/logger.js.map +0 -1
  168. package/dist/esm/core/config.d.ts +0 -77
  169. package/dist/esm/core/config.js +0 -112
  170. package/dist/esm/core/config.js.map +0 -1
  171. package/dist/esm/core/constants.d.ts +0 -78
  172. package/dist/esm/core/constants.js +0 -106
  173. package/dist/esm/core/constants.js.map +0 -1
  174. package/dist/esm/core/logger.d.ts +0 -97
  175. package/dist/esm/core/logger.js +0 -182
  176. package/dist/esm/core/logger.js.map +0 -1
  177. package/dist/esm/formatters/ascii.d.ts +0 -52
  178. package/dist/esm/formatters/ascii.js +0 -100
  179. package/dist/esm/formatters/ascii.js.map +0 -1
  180. package/dist/esm/formatters/cli.d.ts +0 -50
  181. package/dist/esm/formatters/cli.js +0 -96
  182. package/dist/esm/formatters/cli.js.map +0 -1
  183. package/dist/esm/formatters/index.d.ts +0 -3
  184. package/dist/esm/formatters/index.js +0 -4
  185. package/dist/esm/formatters/index.js.map +0 -1
  186. package/dist/esm/formatters/json.d.ts +0 -45
  187. package/dist/esm/formatters/json.js +0 -85
  188. package/dist/esm/formatters/json.js.map +0 -1
  189. package/dist/esm/trackers/execution.d.ts +0 -101
  190. package/dist/esm/trackers/execution.js +0 -226
  191. package/dist/esm/trackers/execution.js.map +0 -1
  192. package/dist/esm/trackers/index.d.ts +0 -2
  193. package/dist/esm/trackers/index.js +0 -3
  194. package/dist/esm/trackers/index.js.map +0 -1
  195. package/dist/esm/trackers/performance.d.ts +0 -68
  196. package/dist/esm/trackers/performance.js +0 -112
  197. package/dist/esm/trackers/performance.js.map +0 -1
  198. package/dist/esm/types/config.d.ts +0 -142
  199. package/dist/esm/types/config.js +0 -2
  200. package/dist/esm/types/config.js.map +0 -1
  201. package/dist/esm/types/logger.d.ts +0 -147
  202. package/dist/esm/types/logger.js +0 -2
  203. package/dist/esm/types/logger.js.map +0 -1
  204. package/dist/esm/utils/colors.d.ts +0 -87
  205. package/dist/esm/utils/colors.js +0 -146
  206. package/dist/esm/utils/colors.js.map +0 -1
  207. package/dist/esm/utils/index.d.ts +0 -3
  208. package/dist/esm/utils/index.js +0 -4
  209. package/dist/esm/utils/index.js.map +0 -1
  210. package/dist/esm/utils/proxy-tracker.d.ts +0 -68
  211. package/dist/esm/utils/proxy-tracker.js +0 -127
  212. package/dist/esm/utils/proxy-tracker.js.map +0 -1
  213. package/dist/esm/utils/stack.d.ts +0 -63
  214. package/dist/esm/utils/stack.js +0 -110
  215. package/dist/esm/utils/stack.js.map +0 -1
  216. package/dist/esm/utils/string.d.ts +0 -29
  217. package/dist/esm/utils/string.js +0 -45
  218. package/dist/esm/utils/string.js.map +0 -1
  219. package/dist/esm/utils/timing.d.ts +0 -65
  220. package/dist/esm/utils/timing.js +0 -99
  221. package/dist/esm/utils/timing.js.map +0 -1
  222. package/dist/formatters/ascii.d.ts +0 -52
  223. package/dist/formatters/ascii.js +0 -104
  224. package/dist/formatters/ascii.js.map +0 -1
  225. package/dist/formatters/cli.d.ts +0 -50
  226. package/dist/formatters/cli.js +0 -100
  227. package/dist/formatters/cli.js.map +0 -1
  228. package/dist/formatters/index.d.ts +0 -3
  229. package/dist/formatters/index.js +0 -20
  230. package/dist/formatters/index.js.map +0 -1
  231. package/dist/formatters/json.d.ts +0 -45
  232. package/dist/formatters/json.js +0 -89
  233. package/dist/formatters/json.js.map +0 -1
  234. package/dist/trackers/execution.d.ts +0 -101
  235. package/dist/trackers/execution.js +0 -230
  236. package/dist/trackers/execution.js.map +0 -1
  237. package/dist/trackers/index.d.ts +0 -2
  238. package/dist/trackers/index.js +0 -19
  239. package/dist/trackers/index.js.map +0 -1
  240. package/dist/trackers/performance.d.ts +0 -68
  241. package/dist/trackers/performance.js +0 -116
  242. package/dist/trackers/performance.js.map +0 -1
  243. package/dist/types/config.d.ts +0 -142
  244. package/dist/types/config.js.map +0 -1
  245. package/dist/types/logger.d.ts +0 -147
  246. package/dist/types/logger.js +0 -3
  247. package/dist/types/logger.js.map +0 -1
  248. package/dist/types.d.ts +0 -65
  249. package/dist/types.js +0 -6
  250. package/dist/types.js.map +0 -1
  251. package/dist/utils/colors.d.ts +0 -87
  252. package/dist/utils/colors.js +0 -160
  253. package/dist/utils/colors.js.map +0 -1
  254. package/dist/utils/index.d.ts +0 -3
  255. package/dist/utils/index.js +0 -20
  256. package/dist/utils/index.js.map +0 -1
  257. package/dist/utils/proxy-tracker.d.ts +0 -68
  258. package/dist/utils/proxy-tracker.js +0 -131
  259. package/dist/utils/proxy-tracker.js.map +0 -1
  260. package/dist/utils/stack.d.ts +0 -63
  261. package/dist/utils/stack.js +0 -116
  262. package/dist/utils/stack.js.map +0 -1
  263. package/dist/utils/string.d.ts +0 -29
  264. package/dist/utils/string.js +0 -50
  265. package/dist/utils/string.js.map +0 -1
  266. package/dist/utils/timing.d.ts +0 -65
  267. package/dist/utils/timing.js +0 -106
  268. 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();})();
@@ -1,82 +1,6 @@
1
- export * from './config';
2
- export * from './logger';
1
+ export * from './options';
2
+ import type { TracePerfConfig } from './options';
3
3
  /**
4
- * Interface for TracePerf configuration
4
+ * @deprecated Use `TracePerfConfig`.
5
5
  */
6
- export interface ITracePerfConfig {
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;
@@ -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("./config"), exports);
18
- __exportStar(require("./logger"), exports);
17
+ __exportStar(require("./options"), exports);
19
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,2CAAyB"}
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
+ }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=config.js.map
3
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/types/options.ts"],"names":[],"mappings":""}
@@ -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": "0.2.0",
4
- "description": "High-performance function execution tracking and monitoring for Node.js",
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
- "require": "./dist/index.js",
12
- "import": "./dist/esm/index.js",
13
- "types": "./dist/index.d.ts"
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
- "require": "./dist/browser.js",
17
- "import": "./dist/esm/browser.js",
18
- "types": "./dist/browser.d.ts"
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 install",
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/uuid": "^10.0.0",
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
- "dependencies": {
77
- "uuid": "^11.1.0"
78
- }
155
+ "sideEffects": [
156
+ "./dist/register.js",
157
+ "./dist/esm/register.js"
158
+ ]
79
159
  }
@@ -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
- }