ostia 0.2.3 → 0.2.4

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.
@@ -0,0 +1,12 @@
1
+ // @bun
2
+ class we extends Error{}function N(n){if(typeof n.pattern==="string")return;let{flags:s}=n.pattern;if(s.includes("g")||s.includes("y")||s.includes("d"))throw RangeError("timeSource pattern must not use the g or y flag")}function qe(...n){let s=n.filter((i)=>i!==void 0);if(s.length===0)return;if(s.length===1)return s[0];return AbortSignal.any(s)}var Ye={ns:1,us:1000,ms:1e6,s:1e9};function D(n,s){let i=n!==void 0?AbortSignal.timeout(n):void 0,u=qe(i,s);return{spawn:u?{signal:u,killSignal:"SIGKILL"}:{},timedOut:()=>i?.aborted??!1}}async function q(n){let s=n.timeSource!==void 0,i=Bun.nanoseconds(),u=D(n.timeoutMs,n.signal),c=Bun.spawn(n.argv,{cwd:n.cwd,env:n.env,stdout:s?"pipe":"ignore",stderr:s?"pipe":"ignore",stdin:"ignore",...u.spawn}),b=s?Promise.all([new Response(c.stdout).text(),new Response(c.stderr).text()]):void 0,I=await c.exited,C=Bun.nanoseconds(),S=c.resourceUsage?.(),j=u.timedOut(),W={wallNs:C-i,exitCode:j?null:I,userNs:S?Number(S.cpuTime.user)*1000:void 0,systemNs:S?Number(S.cpuTime.system)*1000:void 0,maxRssBytes:S?.maxRSS,...j?{timedOut:!0}:{}};if(b){let[_,H]=await b;if(n.timeSource&&!j)try{W.reportedNs=Ze(n.timeSource,_,H,n.argv)}catch(ne){if(!(ne instanceof we))throw ne;W.timeSourceNoMatch=!0,W.timeSourceMissOutput=Xe(_,H)}}return W}function Ze(n,s,i,u=[]){let c=typeof n.pattern==="string"?new RegExp(n.pattern):n.pattern,b=n.group??1,I=c.exec(s)??c.exec(i),C=u.length>0?` for "${u.join(" ")}"`:"";if(!I)throw new we(`timeSource pattern ${c} did not match the output${C}. Output was:
3
+ ${Ie(s,i)}`);let S=I[b];if(S===void 0)throw Error(`timeSource pattern ${c} matched${C} but has no capture group ${b} (matched text: "${I[0]}").`);let j=Number(S);if(!Number.isFinite(j))throw Error(`timeSource pattern ${c} group ${b} captured "${S}"${C}, which is not a number.`);return j*Ye[n.unit??"ms"]}function Ie(n,s){let u=(b)=>b.length>800?`${b.slice(0,800)}\u2026(${b.length-800} more)`:b,c=[];if(n.trim())c.push(`--- stdout ---
4
+ ${u(n.trimEnd())}`);if(s.trim())c.push(`--- stderr ---
5
+ ${u(s.trimEnd())}`);return c.length>0?c.join(`
6
+ `):"(empty)"}var he=2048;function Xe(n,s){let i=Ie(n,s);if(Buffer.byteLength(i,"utf8")<=he)return i;let u=i.slice(0,he);while(Buffer.byteLength(u,"utf8")>he)u=u.slice(0,-1);return`${u}\u2026`}var Qe=1048576,en=(n)=>`
7
+ \u2026(${n} bytes elided)\u2026
8
+ `;async function nn(n,s=Qe){let i=Math.floor(s/2),u=n.getReader(),c=[],b=0,I=[],C=0,S=0;try{for(;;){let{done:ne,value:re}=await u.read();if(ne)break;if(!re||re.byteLength===0)continue;S+=re.byteLength;let V=re;if(b<i){let J=i-b;if(V.byteLength<=J){c.push(V),b+=V.byteLength;continue}c.push(V.subarray(0,J)),b+=J,V=V.subarray(J)}I.push(V),C+=V.byteLength;while(C>i&&I.length>0){let J=I[0],Q=C-i;if(J.byteLength<=Q)I.shift(),C-=J.byteLength;else I[0]=J.subarray(Q),C-=Q}}}finally{u.releaseLock()}let j=new TextDecoder,W=j.decode(ve(c));if(S<=b+C)return W;let _=j.decode(ve(I)),H=S-b-C;return`${W}${en(H)}${_}`}function ve(n){let s=n.reduce((c,b)=>c+b.byteLength,0),i=new Uint8Array(s),u=0;for(let c of n)i.set(c,u),u+=c.byteLength;return i}async function F(n,s,i){if(typeof n==="function"){await n(s);return}let u=ke(n),c=D(i.timeoutMs,i.signal),b=Bun.spawn(u,{cwd:i.cwd,env:i.env,stdout:"ignore",stderr:"pipe",stdin:"ignore",...c.spawn}),I=nn(b.stderr).catch(()=>""),C=await b.exited;if(c.timedOut()){let S=(await I).trim();throw Error(`prepare command "${u.join(" ")}" timed out after ${i.timeoutMs}ms before ${s.phase} trial ${s.index}.${S?`
9
+ ${S}`:""}`)}if(i.signal?.aborted)return;if(C!==0){let S=(await I).trim();throw Error(`prepare command "${u.join(" ")}" exited with code ${C} before ${s.phase} trial ${s.index}.${S?`
10
+ ${S}`:""}`)}}function ke(n){if(n===void 0||typeof n==="function")return;return Array.isArray(n)?n:m(n)}function Ne(n){if(n===void 0)return;return{pattern:typeof n.pattern==="string"?n.pattern:n.pattern.source,...n.group!==void 0&&{group:n.group},...n.unit!==void 0&&{unit:n.unit}}}function m(n){return n.trim().split(/\s+/).filter(Boolean)}import{renameSync as rn}from"fs";var Oe={name:"ostia",version:"0.2.4",description:"Fast profiling and benchmarking for Bun.",type:"module",engines:{bun:">=1.4.0"},exports:{".":"./src/index.ts"},bin:{ostia:"./src/cli/main.ts"},scripts:{build:"bun scripts/build.ts",test:"bun test",typecheck:"tsc6",lint:"biome check .","lint:fix":"biome check --write . --unsafe","lint:changed":"biome check --changed --no-errors-on-unmatched .","lint:fix:changed":"biome check --write --unsafe --changed --no-errors-on-unmatched .",knip:"knip-bun",bench:"bun src/cli/main.ts bench bench/*.ts","bench:baseline":"bun src/cli/main.ts bench bench/*.ts --budget 3000 --min-samples 30 --export-json .ostia/baselines/bench-main.json",baseline:"bun src/cli/main.ts baseline save",dogfood:"bun test && bun src/cli/main.ts ci",examples:"bun scripts/run-examples.ts"},devDependencies:{"@biomejs/biome":"2.5.12","@types/bun":"^1.4.0",knip:"^6.34.0",typescript:"npm:@typescript/typescript6@^6.0.2"}};var x=Oe.version;function y(n,s){return JSON.stringify(ye(n),null,s)}function ye(n){if(Array.isArray(n)){let s=!1;for(let i=0;i<n.length;i++){let u=n[i];if(u!==null&&typeof u==="object"){s=!0;break}}return s?n.map(ye):n}if(n!==null&&typeof n==="object"){let s=n,i={};for(let u of Object.keys(s).sort())i[u]=ye(s[u]);return i}return n}function e(n,...s){let i=Bun.CryptoHasher.hash("sha256",y(s),"hex");return`${n}_${i.slice(0,16)}`}var ge,Pe=!1;function Te(n){let s=Bun.spawnSync(["git",...n],{timeout:200,stdout:"pipe",stderr:"ignore"});return s.success?s.stdout.toString().trim():void 0}function Ee(){if(Pe)return ge;Pe=!0;try{let n=Te(["rev-parse","--short","HEAD"]);if(n===void 0)ge=void 0;else{let s=Te(["rev-parse","--abbrev-ref","HEAD"]),i=Te(["status","--porcelain"]);ge={sha:n,branch:s??"HEAD",dirty:(i?.length??0)>0}}}catch{ge=void 0}return ge}function t(n,s,i){let u=Ee();return{schemaVersion:2,toolVersion:x,bunVersion:Bun.version,platform:{os:process.platform,arch:process.arch},createdAt:new Date().toISOString(),workloads:n,measurements:s,...i!==void 0&&{environment:i},...u!==void 0&&{git:u}}}function P(n,s,i={}){if(i.timeSource)N(i.timeSource);let u=ke(i.prepare),c=Ne(i.timeSource),b=typeof i.prepare==="function"?i.prepare.toString():u;return{id:e("wl","subprocess",n,...b!==void 0||c!==void 0?[b??null,c??null]:[]),kind:"subprocess",command:n,label:s,...u!==void 0&&{prepare:u},...c!==void 0&&{timeSource:c}}}function K(n,s){return{id:e("wl","inprocess",n.name,n.toString()),kind:"inprocess",label:s}}function Be(n,s,i={}){return{id:i.params!==void 0?e("wl","inprocess-entry",n,s,i.params):e("wl","inprocess-entry",n,s),kind:"inprocess",entry:{file:n,task:s,...i.group!==void 0&&{group:i.group}},...i.label!==void 0&&{label:i.label},...i.baseline!==void 0&&{baseline:i.baseline},...i.description!==void 0&&{description:i.description},...i.groupDescription!==void 0&&{groupDescription:i.groupDescription},...i.isolated!==void 0&&{isolated:i.isolated},...i.params!==void 0&&{params:i.params},...i.skipped!==void 0&&{skipped:i.skipped}}}function d(n){return{id:e("run",n.workload.id,"timing",n.configFingerprint,Bun.version,x),workloadId:n.workload.id,phase:"timing",instrumented:!1,configFingerprint:n.configFingerprint,trials:n.trials,timing:n.timing,warnings:n.warnings,artifacts:[],memory:on(n.trials),...n.interleaved!==void 0&&{interleaved:n.interleaved}}}function on(n){let s=n.map((i)=>i.maxRssBytes).filter((i)=>i!==void 0);if(s.length===0)return;return{origin:"resourceUsage",perTrial:n.map((i)=>({rssBytes:i.maxRssBytes})),maxRssBytes:Math.max(...s)}}function p(n){return{id:e("run",n.workload.id,n.phase,n.configFingerprint,Bun.version,x),workloadId:n.workload.id,phase:n.phase,instrumented:!0,configFingerprint:n.configFingerprint,trials:[{i:0,wallNs:n.diagnosticWallNs,exitCode:n.exitCode}],diagnosticWallNs:n.diagnosticWallNs,cpu:n.cpu,heap:n.heap,memory:n.memory,jit:n.jit,warnings:n.warnings,artifacts:n.artifacts}}async function Y(n,s,i){let c=await Bun.file(i).arrayBuffer(),b=new Bun.CryptoHasher("sha256");return b.update(c),{id:e("art",n,s,i),kind:s,path:i,sha256:b.digest("hex"),bytes:c.byteLength}}function o(n){return e("cfg",n)}function f(n){return`${y(n,2)}
11
+ `}async function E(n,s){let i=`${s}.tmp-${process.pid}`;await Bun.write(i,n),rn(i,s)}async function a(n,s){await E(f(n),s)}function sn(n){if(n.schemaVersion===2)return n;let{runs:s,comparisons:i,...u}=n;return{...u,schemaVersion:2,measurements:s.map(({baselineRunId:c,...b})=>b),...i!==void 0&&{comparisons:i.map(({baselineRunId:c,candidateRunId:b,...I})=>({...I,baselineMeasurementId:c,candidateMeasurementId:b}))}}}class A extends Error{code;path;schemaVersion;constructor(n,s,i={}){super(s);this.name="OstiaDocumentError",this.code=n,this.path=i.path,this.schemaVersion=i.schemaVersion}}async function r(n){let s=await Bun.file(n).text(),i;try{i=JSON.parse(s)}catch(c){let b=c instanceof Error?c.message:String(c);throw new A("invalid-json",`${n}: invalid JSON (${b})`,{path:n})}let u=i!==null&&typeof i==="object"?i.schemaVersion:void 0;if(typeof u!=="number")throw new A("not-a-document",`${n}: not a ProfileDocument (missing schemaVersion)`,{path:n});if(u!==1&&u!==2)throw new A("unsupported-schema",`${n}: unsupported ProfileDocument schemaVersion ${u} (this ostia reads 1\u20132)`,{path:n,schemaVersion:u});return sn(i)}import xe from"os";function k(n){if(n.length===0)throw Error("computeTimingStats: samples must be non-empty");let s=n.length,i=an(n),u=0;for(let w=0;w<s;w++)u+=n[w];let c=u/s,b=l(i,0.5),I=0;for(let w=0;w<s;w++){let L=n[w]-c;I+=L*L}let C=Math.sqrt(I/s),S=i[0],j=i[s-1],W=l(i,0.25),_=l(i,0.75),H=_-W,ne=W-1.5*H,re=_+1.5*H,V=W-3*H,J=_+3*H,Q=0,te=0;for(let w=0;w<s;w++){let L=n[w];if(L<V||L>J)te++;else if(L<ne||L>re)Q++}let ce=l(i,0.99),ee=new Float64Array(s);for(let w=0;w<s;w++)ee[w]=Math.abs(n[w]-b);ee.sort();let ae=l(ee,0.5);return{unit:"ns",samples:n,mean:c,median:b,stddev:C,min:S,max:j,outliers:{mild:Q,severe:te},p25:W,p75:_,p99:ce,mad:ae}}function an(n){let s=new Float64Array(n.length);return s.set(n),s.sort(),s}function l(n,s){let i=n.length;if(i===1)return n[0];let u=s*(i-1),c=Math.floor(u),b=Math.ceil(u);if(c===b)return n[c];let I=u-c;return n[c]*(1-I)+n[b]*I}var un=5000000,cn=200;function O(n,s,i="subprocess",u=[]){let c=[],b=n.samples[0];if(b!==void 0&&n.p25!==void 0&&n.p75!==void 0){let S=n.p75-n.p25;if(b>n.median+3*S&&S>0)c.push({code:"slow-first-run",message:`First run took ${(b/1e6).toFixed(2)}ms, much slower than the median ${(n.median/1e6).toFixed(2)}ms. Consider more warmup.`,data:{firstNs:b,medianNs:n.median}})}if(n.outliers.mild+n.outliers.severe>0)c.push({code:"outliers-detected",message:`${n.outliers.mild+n.outliers.severe} outlier(s) detected (${n.outliers.severe} severe, ${n.outliers.mild} mild).`,data:n.outliers});if(i==="subprocess"&&n.median<un)c.push({code:"fast-command",message:`Median run time (${(n.median/1e6).toFixed(3)}ms) is very fast; results may be dominated by spawn overhead.`,data:{medianNs:n.median}});if(i==="inprocess"&&n.median<cn)c.push({code:"below-timer-resolution",message:`Median run time (${n.median.toFixed(0)}ns) is close to timer resolution; consider a larger batch size or a coarser operation.`,data:{medianNs:n.median}});let I=new Set(u),C=s.filter((S)=>S!==void 0&&S!==0&&!I.has(S));if(C.length>0)c.push({code:"nonzero-exit",message:`${C.length} of ${s.length} trial(s) exited non-zero.`,data:{exitCodes:C}});return c}var ln=200,Ae=64,mn=(()=>{let n=new Uint8Array(4096);for(let s=0;s<n.length;s++)n[s]=s*2654435761&255;return n})();function dn(n,s){let i=s;for(let u=0;u<n.length;u++)i^=n[u],i=Math.imul(i,16777619);return i>>>0}function pn(n){let s=k(n),i=s.mad??0;return{floorPct:s.median===0?0:i/s.median*100,referenceMedianNs:s.median,samples:n.length}}function Fe(n=ln){let s=n*1e6,i=[],u=0,c=Bun.nanoseconds(),b=0;while(b<s){let I=Bun.nanoseconds();for(let S=0;S<Ae;S++)u^=dn(mn,S);let C=Bun.nanoseconds();i.push((C-I)/Ae),b=Bun.nanoseconds()-c}return pn(i)}var fn=0.75;function g(){let[n=0,s=0]=xe.loadavg();return{cpuModel:xe.cpus()[0]?.model??"unknown",cores:xe.availableParallelism(),loadAvg1:n,loadAvg5:s,noise:Fe()}}function h(n){if(n.loadAvg1<=n.cores*fn)return;return{code:"noisy-machine",message:`Load average ${n.loadAvg1.toFixed(2)} exceeds 75% of ${n.cores} available core(s); timing noise may be elevated.`,data:{loadAvg1:n.loadAvg1,cores:n.cores}}}import{profile as bn}from"bun:jsc";var gn=new Map([["LLInt","llint"],["Baseline","baseline"],["DFG","dfg"],["FTL","ftl"]]),Ce=4294967295;function Ue(n,s){let i=s??n.interval*1e6,u=new Map,c=[];function b(w,L,z,le){let me=u.get(w);if(me===void 0)me=new Map,u.set(w,me);let ue=L??"",de=me.get(ue);if(de===void 0)de=c.length,me.set(ue,de),c.push({key:e("fr",w,ue),name:w,url:L,line:z,col:le});return de}function I(w){let L=w.line===Ce,z=L?void 0:w.line-1,le=L||w.column===Ce?void 0:w.column-1;return b(w.name,w.sourceURL,z,le)}let C=b("(root)",void 0,void 0,void 0),S=1,j={id:0,frameIx:C,children:new Map,selfUs:0,samples:0,totalUs:0},W=new Map([[0,j]]),_={llint:0,baseline:0,dfg:0,ftl:0},H=new Map,ne=[],re=[];for(let w of n.traces){let L=w.frames,z=j;for(let ue=L.length-1;ue>=0;ue--){let de=I(L[ue]),pe=z.children.get(de);if(!pe)pe={id:S++,frameIx:de,children:new Map,selfUs:0,samples:0,totalUs:0},z.children.set(de,pe),W.set(pe.id,pe);z=pe}z.selfUs+=i,z.samples+=1,ne.push(z.id),re.push(i);let le=L[0],me=le&&gn.get(le.category);if(me){_[me]++;let ue=H.get(me)??new Map;ue.set(z.frameIx,(ue.get(z.frameIx)??0)+1),H.set(me,ue)}}function V(w){let L=w.selfUs;for(let z of w.children.values())L+=V(z);return w.totalUs=L,L}V(j);let J=new Map;function Q(w){let L=J.get(w.frameIx);if(L)L.selfUs+=w.selfUs,L.totalUs+=w.totalUs,L.samples+=w.samples;else J.set(w.frameIx,{frameIx:w.frameIx,selfUs:w.selfUs,totalUs:w.totalUs,samples:w.samples});for(let z of w.children.values())Q(z)}Q(j);let te=[...W.values()].map((w)=>({id:w.id,frameIx:w.frameIx,children:[...w.children.values()].map((L)=>L.id)})),ce={origin:"jsc-profile",samplingIntervalUs:i,frames:c,nodes:te,totals:[...J.values()].sort((w,L)=>L.selfUs-w.selfUs),samples:{nodeIds:ne,timeDeltasUs:re}},ee=[...H.entries()].flatMap(([w,L])=>[...L.entries()].sort((z,le)=>le[1]-z[1]).slice(0,3).map(([z,le])=>({tier:w,frameKey:c[z].key,samples:le})));return{cpu:ce,jit:{origin:"jsc-profile",tiers:_,topFramesByTier:ee}}}var hn=1000;async function B(n,s={}){let i=s.intervalUs??hn,u,c=Bun.nanoseconds(),b=await bn(async()=>(u=await n(),u),i),I=Bun.nanoseconds()-c,{cpu:C,jit:S}=Ue(b.stackTraces,i);return{result:u,cpu:C,jit:S,diagnosticWallNs:I}}var wn=500,kn=20,$e=3,yn=10,Tn=2,xn=0.1,Sn=1000,Mn=1e4;function Le(n){let s=Math.log10(Math.max(1,n)/1e6),i=Math.round($e+Tn*s);return Math.min(yn,Math.max($e,i))}function Rn(n,s){let i=Math.floor(s/n);return Math.min(kn,Math.max(i,Le(n)))}var De=0;function U(n){if(typeof n==="number")De+=n;else if(n!==void 0&&n!==null)De+=1}function be(n){return n!==null&&typeof n==="object"&&typeof n.then==="function"}function _e(n,s){return Math.max(1,Math.ceil(Sn/n),Math.ceil(s/(n*Mn)))}async function We(n,s={}){let i=(s.budgetMs??wn)*1e6,u=i*(s.warmup??xn),c=Bun.nanoseconds(),b=0,I=0;while(I<u){let ee=n();U(be(ee)?await ee:ee),b++,I=Bun.nanoseconds()-c}let C;if(b>0)C=Math.max(1,I/b);else{let ee=Bun.nanoseconds(),ae=n();U(be(ae)?await ae:ae),C=Math.max(1,Bun.nanoseconds()-ee)}let S=_e(C,i);if(S>1){let ee=Bun.nanoseconds();for(let ae=0;ae<S;ae++){let w=n();U(be(w)?await w:w)}C=Math.max(1,(Bun.nanoseconds()-ee)/S),S=_e(C,i)}let j=C*S,W=s.samples??s.minSamples??Rn(j,i),_=s.samples!==void 0?0:i,H=[],ne=Bun.nanoseconds(),re=0,V=0;while(V<W||re<_){let ee=Bun.nanoseconds();for(let w=0;w<S;w++){let L=n();U(be(L)?await L:L)}let ae=Bun.nanoseconds();if(H.push({i:V,wallNs:(ae-ee)/S}),V++,re=Bun.nanoseconds()-ne,s.gc)Bun.gc(!0);if(s.samples!==void 0&&V>=s.samples)break}let J=H.map((ee)=>ee.wallNs),Q=k(J);if(S>1)Q.batch=S;let te=O(Q,[],"inprocess"),ce=Le(j);if(H.length<ce)te.push({code:"low-sample-count",message:`Only ${H.length} sample(s) at ~${vn(j)} per trial; ${ce} is the floor for this cost class. Raise minSamples or the time budget for a steadier number.`,data:{samples:H.length,target:ce,trialCostNs:j}});return{trials:H,timing:Q,warnings:te}}function vn(n){if(n>=1e9)return`${(n/1e9).toFixed(2)}s`;if(n>=1e6)return`${(n/1e6).toFixed(1)}ms`;if(n>=1000)return`${(n/1000).toFixed(1)}\xB5s`;return`${n.toFixed(0)}ns`}var Re=[],oe,fe;function Se(n,s,i,u){let c=oe;oe={name:n,description:i?.description,isolate:i?.isolate,gc:i?.gc,cpu:i?.cpu,alloc:i?.alloc,before:i?.before,after:i?.after,skip:u.skip,only:u.only};try{s()}finally{oe=c}}var se=Object.assign((n,s,i)=>Se(n,s,i,{}),{skip:(n,s,i)=>Se(n,s,i,{skip:!0}),only:(n,s,i)=>Se(n,s,i,{only:!0})});function Me(n,s,i,u){let c=fe!==void 0||i?.params!==void 0?{...fe,...i?.params}:void 0;Re.push({groupName:oe?.name,groupDescription:oe?.description,groupIsolate:oe?.isolate,groupGc:oe?.gc,groupCpu:oe?.cpu,groupAlloc:oe?.alloc,groupBefore:oe?.before,groupAfter:oe?.after,name:n,fn:s,baseline:i?.baseline,params:c,skipped:u.skip||oe?.skip,only:u.only||oe?.only,opts:i})}var ie=Object.assign((n,s,i)=>Me(n,s,i,{}),{skip:(n,s,i)=>Me(n,s,i,{skip:!0}),only:(n,s,i)=>Me(n,s,i,{only:!0})});function M(){return Re}function X(){Re.length=0,oe=void 0,fe=void 0}function Z(n,s){let i=fe;fe=n;try{return s()}finally{fe=i}}function v(n){return n.groupName?`${n.groupName}/${n.name}`:n.name}function G(n,s){return n.opts?.isolate??n.groupIsolate??s}function je(n,s){return n.opts?.gc??n.groupGc??s}function Ge(n,s){return n.opts?.cpu??n.groupCpu??s}function He(n,s){return n.opts?.alloc??n.groupAlloc??s}function T(n,s){if(!s)return[...n];let i=new RegExp(s);return n.filter((u)=>i.test(v(u)))}import{heapStats as In}from"bun:jsc";var Nn=100;function Je(){try{return In().heapSize}catch{return process.memoryUsage().heapUsed}}async function Ve(n,s=Nn){let i=Bun.nanoseconds();Bun.gc(!0);let u=Je();for(let I=0;I<s;I++){let C=n();if(C instanceof Promise)await C}Bun.gc(!0);let c=Je(),b=Bun.nanoseconds()-i;return{memory:{origin:"heapStats",bytesPerOp:Math.max(0,(c-u)/s)},diagnosticWallNs:b}}var On=200,Pn=20;async function ze(n,s=On){let i=s*1e6,u=async()=>{let C=Bun.nanoseconds();while(Bun.nanoseconds()-C<i){let S=n();if(S instanceof Promise)await S}},{cpu:c,jit:b,diagnosticWallNs:I}=await B(u);return{cpu:c,jit:b,diagnosticWallNs:I}}function Ke(n){let{llint:s,baseline:i,dfg:u,ftl:c}=n.tiers,b=s+i+u+c;if(b===0)return;let I=s/b*100,C=i/b*100,S=u/b*100,j=c/b*100;if(I+C<=Pn)return;return{code:"jit-cold",message:`${(I+C).toFixed(1)}% of CPU samples were in the llint/baseline tiers: the JIT never warmed this task up.`,data:{llintPct:I,baselinePct:C,dfgPct:S,ftlPct:j}}}async function R(n,s,i){let c=s.some((W)=>!W.skipped)&&i.noiseCheck!==!1?g():void 0,b=c?h(c):void 0,I=new Map,C=new Map;s.forEach((W,_)=>{if(W.groupName===void 0||W.skipped)return;if(!I.has(W.groupName))I.set(W.groupName,_);C.set(W.groupName,_)});let S=[],j=[];for(let W=0;W<s.length;W++){let _=s[W],H=v(_),ne=Be(n,H,{label:H,baseline:_.baseline,group:_.groupName,description:_.opts?.description,groupDescription:_.groupDescription,isolated:i.markIsolated,params:_.params,skipped:_.skipped});if(S.push(ne),_.skipped)continue;let re=_.groupName!==void 0&&I.get(_.groupName)===W,V=_.groupName!==void 0&&C.get(_.groupName)===W;if(re&&_.groupBefore)await _.groupBefore();if(_.opts?.before)await _.opts.before();let J={budgetMs:_.opts?.budgetMs??i.budgetMs,samples:_.opts?.samples??i.samples,minSamples:_.opts?.minSamples??i.minSamples,warmup:i.warmup,gc:je(_,i.gc??!1)},Q=await We(_.fn,J);if(j.push(d({workload:ne,configFingerprint:o({budgetMs:J.budgetMs??null,samples:J.samples??null,minSamples:J.minSamples??null,gc:J.gc??!1}),trials:Q.trials,timing:Q.timing,warnings:b&&j.length===0?[...Q.warnings,b]:Q.warnings})),Ge(_,i.cpu??!1)){let te=await ze(_.fn),ce=Ke(te.jit);j.push(p({workload:ne,phase:"cpu",configFingerprint:o({cpu:!0}),diagnosticWallNs:te.diagnosticWallNs,cpu:te.cpu,jit:te.jit,warnings:ce?[ce]:[],artifacts:[]}))}if(He(_,i.alloc??!1)){let te=await Ve(_.fn);j.push(p({workload:ne,phase:"memstats",configFingerprint:o({alloc:!0}),diagnosticWallNs:te.diagnosticWallNs,memory:te.memory,warnings:[],artifacts:[]}))}if(_.opts?.after)await _.opts.after();if(V&&_.groupAfter)await _.groupAfter()}return t(S,j,c)}
12
+ export{y,e,k,l,O,N,D,q,F,m,x,t,P,K,d,p,Y,o,f,E,a,A,r,g,h,B,U,se,ie,M,X,Z,v,G,T,R};
@@ -0,0 +1,22 @@
1
+ // @bun
2
+ import{y,e,k,l,O,N,D,q,F,m,t,P,K,d,p,Y,o,f,r,g,h,B,M,Z,T,R}from"./chunk-1wydyvyj.js";function _e(a,x,v){let E=a[0];if(E==="bun"||E?.endsWith("/bun"))return{argv:[E,...x,...a.slice(1)],env:v};return{argv:a,env:{...process.env,...v,BUN_OPTIONS:x.join(" ")}}}function Gn(a){return a.startsWith("file://")?a.slice(7):a}function je(a,x,v){let E=a.nodes,U=E.length,ie=new Map,G=[],A=new Map,ae=new Int32Array(U);for(let se=0;se<U;se++){let ge=E[se],ce=ge.callFrame,we=Gn(ce.url),Me=ie.get(ce.functionName);if(Me===void 0)Me=new Map,ie.set(ce.functionName,Me);let Pe=Me.get(we);if(Pe===void 0)Pe=G.length,Me.set(we,Pe),G.push({key:e("fr",ce.functionName,we),name:ce.functionName,url:we||void 0,line:ce.lineNumber>=0?ce.lineNumber:void 0,col:ce.columnNumber>=0?ce.columnNumber:void 0});ae[se]=Pe,A.set(ge.id,se)}let X=Array(U);for(let se=0;se<U;se++){let ge=E[se];X[se]={id:ge.id,frameIx:ae[A.get(ge.id)],children:ge.children??[]}}let oe=new Float64Array(U),ue=new Float64Array(U),{samples:me,timeDeltas:le}=a;for(let se=0;se<me.length;se++){let ge=A.get(me[se]);if(ge===void 0)continue;oe[ge]+=le[se]??0,ue[ge]+=1}let de=new Int32Array(U).fill(-1);for(let se=0;se<U;se++){let ge=E[se].children;if(!ge)continue;for(let ce of ge){let we=A.get(ce);if(we!==void 0)de[we]=se}}let fe=[],pe=[];for(let se=U-1;se>=0;se--)if(de[se]===-1)pe.push(se);while(pe.length>0){let se=pe.pop();fe.push(se);let ge=E[se].children;if(!ge)continue;for(let ce of ge){let we=A.get(ce);if(we!==void 0&&de[we]===se)pe.push(we)}}let he=new Float64Array(U);for(let se=fe.length-1;se>=0;se--){let ge=fe[se];he[ge]+=oe[ge];let ce=de[ge];if(ce>=0)he[ce]+=he[ge]}let ye=Array(G.length),be=[];for(let se=0;se<U;se++){let ge=X[se].frameIx,ce=ye[ge];if(ce)ce.selfUs+=oe[se],ce.totalUs+=he[se],ce.samples+=ue[se];else{let we={frameIx:ge,selfUs:oe[se],totalUs:he[se],samples:ue[se]};ye[ge]=we,be.push(we)}}return{origin:x,samplingIntervalUs:v,frames:G,nodes:X,totals:be.sort((se,ge)=>ge.selfUs-se.selfUs),samples:{nodeIds:a.samples,timeDeltasUs:a.timeDeltas}}}async function on(a){let x=`${a.artifactDir}/${a.fileName}`,{argv:v,env:E}=_e(a.argv,["--cpu-prof","--cpu-prof-dir",a.artifactDir,"--cpu-prof-name",a.fileName,"--cpu-prof-interval",String(a.intervalUs)],a.env),U=Bun.nanoseconds(),G=await Bun.spawn(v,{cwd:a.cwd,env:E,stdout:"ignore",stderr:"ignore",stdin:"ignore"}).exited,A=Bun.nanoseconds()-U,ae=Bun.file(x);if(!await ae.exists())return{diagnosticWallNs:A,exitCode:G,warnings:[{code:"artifact-missing",message:`Expected a .cpuprofile at ${x} after exit ${G}, found nothing. The workload's argv[0] must be a \`bun\` binary for CPU capture.`,data:{artifactPath:x,argv:a.argv}}]};let X=await ae.json(),oe=je(X,"cpu-prof",a.intervalUs),ue=X.samples.length===0?[{code:"empty-profile",message:"CPU capture produced zero samples."}]:[];return{diagnosticWallNs:A,exitCode:G,artifactPath:x,cpu:oe,warnings:ue}}function sn(a,x="heap-prof"){let{node_fields:v,node_types:E}=a.snapshot.meta,U=v.indexOf("type"),ie=v.indexOf("self_size"),G=v.length,A=E[0];if(U===-1||ie===-1||!Array.isArray(A))return{origin:x,typeCounts:[],objectCount:a.snapshot.node_count};let ae=A.length,X=Array(ae),oe=new Map,ue=[],me=0,le=a.nodes,de=le.length;for(let be=0;be<de;be+=G){let se=le[be+U],ge=le[be+ie]??0;me+=ge;let ce;if(se>=0&&se<ae){if(ce=X[se],ce===void 0)ce={type:A[se],count:0,bytes:0},X[se]=ce,ue.push(ce)}else{let we=`unknown(${se})`;if(ce=oe.get(we),ce===void 0)ce={type:we,count:0,bytes:0},oe.set(we,ce),ue.push(ce)}ce.count++,ce.bytes+=ge}let fe=ue.sort((be,se)=>se.count-be.count),pe=fe.slice(0,20),he=fe.slice(20),ye=pe.map(({type:be,count:se,bytes:ge})=>({type:be,count:se,retainedBytes:ge}));if(he.length>0){let be=0,se=0;for(let ge of he)be+=ge.count,se+=ge.bytes;ye.push({type:"other",count:be,retainedBytes:se})}return{origin:x,heapSizeBytes:me,objectCount:a.snapshot.node_count,typeCounts:ye}}async function an(a){let x=`${a.artifactDir}/${a.fileName}`,{argv:v,env:E}=_e(a.argv,["--heap-prof","--heap-prof-dir",a.artifactDir,"--heap-prof-name",a.fileName],a.env),U=Bun.nanoseconds(),G=await Bun.spawn(v,{cwd:a.cwd,env:E,stdout:"ignore",stderr:"ignore",stdin:"ignore"}).exited,A=Bun.nanoseconds()-U,ae=Bun.file(x);if(!await ae.exists())return{diagnosticWallNs:A,exitCode:G,warnings:[{code:"artifact-missing",message:`Expected a heap snapshot at ${x} after exit ${G}, found nothing. The workload's argv[0] must be a \`bun\` binary for heap capture.`,data:{artifactPath:x,argv:a.argv}}]};let X=await ae.json(),oe=sn(X,"heap-prof");return{diagnosticWallNs:A,exitCode:G,artifactPath:x,heap:oe,warnings:[]}}var Kn=1000;async function mn(a,x={}){let v=x.intervalUs??Kn,{Session:E}=await import("inspector/promises"),U=new E;U.connect();let ie=Bun.nanoseconds();try{await U.post("Profiler.enable"),await U.post("Profiler.setSamplingInterval",{interval:v}),await U.post("Profiler.start");let G=await a(),{profile:A}=await U.post("Profiler.stop"),ae=Bun.nanoseconds()-ie,X=je(A,"inspector",v);return{result:G,cpu:X,diagnosticWallNs:ae}}finally{U.disconnect()}}function Jn(a){let x=a>>>0;return()=>{x=x+1831565813|0;let v=Math.imul(x^x>>>15,1|x);return v=v+Math.imul(v^v>>>7,61|v)^v,((v^v>>>14)>>>0)/4294967296}}var Ve=2000,Yn=2000;function qn(a){let x=a.length,v=x>>1;return x%2===0?(a[v-1]+a[v])/2:a[v]}function cn(a,x,v){if(a.length<=v)return a;let E=[...a];for(let U=0;U<v;U++){let ie=U+Math.floor(x()*(E.length-U)),G=E[U];E[U]=E[ie],E[ie]=G}return E.slice(0,v)}class Qe{sorted;rankOf;counts;n;constructor(a){let x=a.length,v=new Uint32Array(x);for(let E=0;E<x;E++)v[E]=E;v.sort((E,U)=>a[E]-a[U]),this.sorted=new Float64Array(x),this.rankOf=new Uint32Array(x);for(let E=0;E<x;E++)this.sorted[E]=a[v[E]],this.rankOf[v[E]]=E;this.n=x,this.counts=new Uint32Array(x)}resampleMedian(a){let{n:x,counts:v,sorted:E,rankOf:U}=this;v.fill(0);for(let X=0;X<x;X++)v[U[Math.floor(a()*x)]]++;let ie=x+1>>1,G=x%2===0?ie+1:ie,A=0,ae=-1;for(let X=0;X<x;X++){if(A+=v[X],ae<0&&A>=ie)ae=X;if(A>=G)return ae===X?E[X]:(E[ae]+E[X])/2}return E[x-1]}}function un(a,x,v={}){let E=v.seed??(Date.now()^Math.imul(a.length,2654435761))>>>0,U=Jn(E),ie=v.iterations??Yn,G=a.length>Ve||x.length>Ve,A=new Qe(cn(a,U,Ve)),ae=new Qe(cn(x,U,Ve)),X=qn(A.sorted),oe=new Float64Array(ie);for(let ue=0;ue<ie;ue++){let me=A.resampleMedian(U),le=ae.resampleMedian(U);oe[ue]=X===0?le-me===0?0:1/0:(le-me)/X*100}return oe.sort(),{ci95:[l(oe,0.025),l(oe,0.975)],seed:E,data:{subsampled:G,iterations:ie}}}function Qn(a){let x=a<0?-1:1,v=Math.abs(a),E=0.254829592,U=-0.284496736,ie=1.421413741,G=-1.453152027,A=1.061405429,ae=0.3275911,X=1/(1+0.3275911*v),oe=1-((((1.061405429*X+-1.453152027)*X+1.421413741)*X+-0.284496736)*X+0.254829592)*X*Math.exp(-v*v);return x*oe}function Xn(a){return 0.5*(1+Qn(a/Math.SQRT2))}function ln(a,x){let v=a.length,E=x.length,U=v+E,ie=new Float64Array(a),G=new Float64Array(x);ie.sort(),G.sort();let A=0,ae=0,X=0,oe=0,ue=0;while(X<v||oe<E){let he=oe>=E||X<v&&ie[X]<=G[oe]?ie[X]:G[oe],ye=0;while(X<v&&ie[X]===he)ye++,X++;let be=0;while(oe<E&&G[oe]===he)be++,oe++;let se=ye+be,ge=ue+(se+1)/2;if(A+=ye*ge,se>1)ae+=se**3-se;ue+=se}let me=A-v*(v+1)/2,le=v*E/2,de=Math.sqrt(v*E*(U+1-ae/(U*(U-1)))/12),fe=de===0?0:(me-le)/de,pe=Math.min(1,Math.max(0,2*(1-Xn(Math.abs(fe)))));return{u:me,z:fe,pValue:pe}}var c={timingPct:5,frameSelfPct:10,heapTypePct:10,minFrameSelfUs:1000,alpha:0.01,bootstrapIterations:2000},Xe=5;function He(a,x){if(a===0)return x===0?0:1/0;return(x-a)/a*100}function dn(a){let x=new Map;for(let v of a.measurements){let E=`${v.workloadId}\x00${v.phase}`;if(!x.has(E))x.set(E,v)}return x}function Zn(a,x,v){return{base:a,cand:x,baseByPhase:dn(a),candByPhase:dn(x),candWorkloads:new Map(x.workloads.map((E)=>[E.id,E])),environmentMismatch:et(a,x),effectiveTimingPct:Math.max(v.timingPct,a.environment?.noise.floorPct??0,x.environment?.noise.floorPct??0)}}function et(a,x){let v=[];if(a.platform.os!==x.platform.os)v.push({field:"platform.os",base:a.platform.os,cand:x.platform.os});if(a.platform.arch!==x.platform.arch)v.push({field:"platform.arch",base:a.platform.arch,cand:x.platform.arch});if(a.bunVersion!==x.bunVersion)v.push({field:"bunVersion",base:a.bunVersion,cand:x.bunVersion});if(a.environment&&x.environment){if(a.environment.cpuModel!==x.environment.cpuModel)v.push({field:"cpuModel",base:a.environment.cpuModel,cand:x.environment.cpuModel});if(a.environment.cores!==x.environment.cores)v.push({field:"cores",base:a.environment.cores,cand:x.environment.cores})}if(v.length===0)return;return{code:"environment-mismatch",message:`Base and candidate were measured on different environments (${v.map((E)=>E.field).join(", ")}); a timing delta may reflect that instead of the code change.`,data:{fields:v}}}function nt(a){let x=[];for(let E of a){if(!E.timing)continue;let U=1+E.timing.medianDeltaPct/100;if(Number.isFinite(U)&&U>0)x.push(Math.log(U))}if(x.length===0)return null;let v=x.reduce((E,U)=>E+U,0)/x.length;return(Math.exp(v)-1)*100}function W(a,x,v=c){let E=Zn(a,x,v);return{effectiveTimingPct:E.effectiveTimingPct,compare:(U)=>tt(E,U,v),unmatched(){let U=new Set(a.workloads.map((ie)=>ie.id));return{baseOnly:a.workloads.filter((ie)=>!E.candWorkloads.has(ie.id)),candOnly:x.workloads.filter((ie)=>!U.has(ie.id))}}}}function j(a,x){let v=0,E=0,U=0;for(let ie of a){if(!ie.timing)continue;if(ie.timing.verdict==="regressed")v++;else if(ie.timing.verdict==="improved")E++;else U++}return{matched:a.length,regressed:v,improved:E,unchanged:U,geomeanPct:nt(a),effectiveTimingPct:x,verdict:a.some((ie)=>ie.verdict==="fail")?"fail":"pass"}}function C(a,x,v=c){let E=W(a,x,v),U=[];for(let ie of a.workloads){let G=E.compare(ie.id);if(G)U.push(G)}return{comparisons:U,unmatched:E.unmatched(),summary:j(U,E.effectiveTimingPct)}}function tt(a,x,v){let{baseByPhase:E,candByPhase:U,effectiveTimingPct:ie}=a,G=E.get(`${x}\x00timing`),A=U.get(`${x}\x00timing`),ae=E.get(`${x}\x00cpu`),X=U.get(`${x}\x00cpu`),oe=E.get(`${x}\x00heap`),ue=U.get(`${x}\x00heap`),me=a.candWorkloads.get(x),le=G?.id??ae?.id??oe?.id,de=A?.id??X?.id??ue?.id??me?.id;if(!le||!de)return;let fe=!1,pe=[];if(a.environmentMismatch)pe.push(a.environmentMismatch);let he;if(G?.timing&&me?.skipped&&!A?.timing)he={medianDeltaPct:0,meanDeltaPct:0,verdict:"unchanged"},pe.push({code:"skipped",message:"Candidate has no timing measurement for this workload (task.skip()); treated as unchanged.",data:{workloadId:x}});else if(G?.timing&&A?.timing){let se=G.timing.samples,ge=A.timing.samples,ce=He(G.timing.median,A.timing.median),we=He(G.timing.mean,A.timing.mean),Me=(Pe,xe)=>{if(Pe>ie)return"regressed";if(xe<-ie)return"improved";return"unchanged"};if(se.length<Xe||ge.length<Xe){let Pe=Me(ce,ce);if(Pe==="regressed")fe=!0;he={medianDeltaPct:ce,meanDeltaPct:we,verdict:Pe},pe.push({code:"thin-comparison",message:`Only ${se.length} baseline / ${ge.length} candidate sample(s); falling back to a point-estimate threshold instead of a bootstrap CI and Mann-Whitney test (needs ${Xe}+ per side).`,data:{baseSamples:se.length,candSamples:ge.length}})}else{let Pe=un(se,ge,{iterations:v.bootstrapIterations}),xe=ln(se,ge),ke=xe.pValue<v.alpha?Me(Pe.ci95[0],Pe.ci95[1]):"unchanged";if(ke==="regressed")fe=!0;he={medianDeltaPct:ce,meanDeltaPct:we,ci95:Pe.ci95,pValue:xe.pValue,seed:Pe.seed,verdict:ke}}}let ye;if(ae?.cpu&&X?.cpu){let se=new Map(ae.cpu.totals.map((Pe)=>[ae.cpu.frames[Pe.frameIx].key,Pe])),ge=new Map(X.cpu.totals.map((Pe)=>[X.cpu.frames[Pe.frameIx].key,Pe])),ce=new Map(ae.cpu.frames.map((Pe)=>[Pe.key,Pe.name])),we=new Map(X.cpu.frames.map((Pe)=>[Pe.key,Pe.name]));ye=[...new Set([...se.keys(),...ge.keys()])].map((Pe)=>{let xe=se.get(Pe)?.selfUs??0,ke=ge.get(Pe)?.selfUs??0;return{frameKey:Pe,name:we.get(Pe)??ce.get(Pe)??Pe,baseSelfUs:xe,candSelfUs:ke,deltaPct:He(xe,ke)}}).sort((Pe,xe)=>Math.abs(xe.deltaPct)-Math.abs(Pe.deltaPct));for(let Pe of ye)if((Pe.baseSelfUs>=v.minFrameSelfUs||Pe.candSelfUs>=v.minFrameSelfUs)&&Pe.deltaPct>v.frameSelfPct)fe=!0}let be;if(oe?.heap&&ue?.heap){let se=new Map(oe.heap.typeCounts.map((we)=>[we.type,we])),ge=new Map(ue.heap.typeCounts.map((we)=>[we.type,we]));be=[...new Set([...se.keys(),...ge.keys()])].map((we)=>{let Me=se.get(we),Pe=ge.get(we);return{type:we,baseCount:Me?.count??0,candCount:Pe?.count??0,baseBytes:Me?.retainedBytes,candBytes:Pe?.retainedBytes,deltaPct:He(Me?.count??0,Pe?.count??0)}}).sort((we,Me)=>Math.abs(Me.deltaPct)-Math.abs(we.deltaPct));for(let we of be)if(we.deltaPct>v.heapTypePct)fe=!0}return{id:e("cmp",le,de),baselineMeasurementId:le,candidateMeasurementId:de,timing:he,...pe.length>0&&{warnings:pe},frames:ye,heapTypes:be,thresholds:{...v,effectiveTimingPct:ie},verdict:fe?"fail":"pass"}}var Be="node_modules/.cache/ostia",rt=".ostia/baselines",it={runs:null,warmup:3,outDir:Be,baselineDir:rt,baseline:"main",cpuIntervalUs:1000,thresholds:c,workloads:[]};function gn(a){return{...it,...a,thresholds:{...c,...a.thresholds??{}}}}async function pn(a){let x=Bun.file(a);if(!await x.exists())return;return gn(await x.json())}async function fn(a){let x=a.startsWith("/")?a:`${process.cwd()}/${a}`;if(!await Bun.file(x).exists())return;let v=await import(x);return gn(v.default??{})}async function S(a){if(a!==void 0)return a.endsWith(".ts")?fn(a):pn(a);return await fn("ostia.config.ts")??pn("ostia.config.json")}function s(a,x){return`${a.baselineDir}/${x??a.baseline}.json`}async function L(){if(await Bun.file("ostia.config.ts").exists())return"ostia.config.ts";if(await Bun.file("ostia.config.json").exists())return"ostia.config.json";return}var ot=10,st=3000000000,at=3;function Ze(a){if(a.timeSource)N(a.timeSource);let x=a.warmup??at,v=a.samples,E=a.minSamples??ot,U=v??E,ie=v!==void 0?0:a.budgetMs!==void 0?a.budgetMs*1e6:st,G=a.timeSource!==void 0,A=a.ignoreExitCodes??[],ae=new Set(A),X=[],oe=0,ue=0,me=!1,le;function de(){if(me)return!0;if(v!==void 0)return ue>=v;return ue>=U&&oe>=ie}async function fe(pe,he){if(a.prepare)await F(a.prepare,{phase:pe,index:he},{cwd:a.cwd,env:a.env,timeoutMs:a.timeoutMs,signal:a.signal});return q(a)}return{async warmup(){for(let pe=0;pe<x;pe++){if(a.signal?.aborted)return;await fe("warmup",pe)}},async step(){if(de()||a.signal?.aborted)return!1;let pe=await fe("timing",ue);if(a.signal?.aborted)return!1;if(pe.timeSourceNoMatch)le??=pe.timeSourceMissOutput;if(X.push({i:ue,wallNs:pe.wallNs,exitCode:pe.exitCode??void 0,userNs:pe.userNs,systemNs:pe.systemNs,maxRssBytes:pe.maxRssBytes,...pe.reportedNs!==void 0&&{reportedNs:pe.reportedNs},...pe.timedOut?{timedOut:!0}:{},...pe.timeSourceNoMatch?{timeSourceNoMatch:!0}:{}}),oe+=pe.wallNs,ue++,a.failOnNonzero&&pe.exitCode!==null&&pe.exitCode!==0&&!ae.has(pe.exitCode))me=!0;return!0},done:de,result(){let pe=X.filter((ce)=>!ce.timedOut&&!ce.timeSourceNoMatch),he=pe.map((ce)=>G?ce.reportedNs:ce.wallNs),ye=[],be=X.filter((ce)=>ce.timedOut).length;if(be>0)ye.push({code:"timeout",message:`${be} of ${X.length} trial(s) timed out after ${a.timeoutMs}ms.`,data:{timeoutMs:a.timeoutMs,trials:be}});let se=X.filter((ce)=>ce.timeSourceNoMatch).length;if(se>0&&a.timeSource){let{pattern:ce}=a.timeSource;ye.push({code:"time-source-no-match",message:`${se} of ${X.length} trial(s) didn't match the timeSource pattern.`,data:{pattern:typeof ce==="string"?ce:ce.source,trials:se,...le!==void 0&&{output:le}}})}if(he.length===0)return{trials:X,warnings:ye};let ge=k(he);return ye.push(...O(ge,pe.map((ce)=>ce.exitCode),G?"reported":"subprocess",A)),{trials:X,timing:ge,warnings:ye}}}}async function en(a){await a.warmup();while(await a.step());}async function z(a){let x=Ze(a);return await en(x),x.result()}async function I(a,x){let v=new Set;for(let E of a)for await(let U of new Bun.Glob(E).scan({cwd:x,absolute:!1}))v.add(U);return[...v].sort()}var hn=new URL("./runner.ts",import.meta.url).pathname;function _(){return Math.max(1,navigator.hardwareConcurrency||1)}async function H(a,x){return I(a,x)}function mt(a){if(a===void 0)return;return a==="auto"?_():a}async function J(a,x,v=process.cwd()){return{suites:a.suites.length>0?a.suites:x?.suites?await H(x.suites,v):[],budgetMs:a.budgetMs??x?.budgetMs,samples:a.samples??x?.samples,minSamples:a.minSamples??x?.minSamples,jobs:a.jobs??mt(x?.jobs),gc:a.gc??x?.gc??!1,cpu:a.cpu??x?.cpu??!1,alloc:a.alloc??x?.alloc??!1,filter:a.filter??x?.filter,isolate:a.isolate??x?.isolate??!1,preload:a.preload.length>0?a.preload:x?.preload??[],bunFlags:a.bunFlags,outDir:a.outDir??x?.outDir,noiseCheck:a.noiseCheck,timeoutMs:a.timeoutMs??x?.timeoutMs,cwd:v}}async function b(a){if(a.samples!==void 0&&(!Number.isFinite(a.samples)||a.samples<1))throw RangeError(`bench: samples must be >= 1, got ${a.samples}`);if(a.minSamples!==void 0&&(!Number.isFinite(a.minSamples)||a.minSamples<1))throw RangeError(`bench: minSamples must be >= 1, got ${a.minSamples}`);if(a.budgetMs!==void 0&&!Number.isFinite(a.budgetMs))throw RangeError(`bench: budgetMs must be finite, got ${a.budgetMs}`);let v=`${a.outDir??Be}/bench-tmp`,E=a.cwd??process.cwd(),U=Math.max(1,Math.floor(a.jobs??1)),ie={budgetMs:a.budgetMs,samples:a.samples,minSamples:a.minSamples,gc:a.gc,cpu:a.cpu,alloc:a.alloc,noiseCheck:a.noiseCheck},G=(ue)=>ue.startsWith("/")?ue:`${E}/${ue}`,A=a.suites.map(G),ae=(a.preload??[]).map(G),X=a.bunFlags??[],oe=async(ue,me)=>{let le=new Set,de=0,fe,pe=async()=>{while(fe===void 0&&!a.signal?.aborted&&de<ue.length){let he=de++;try{let ye=D(a.timeoutMs,a.signal),be=Bun.spawn(ue[he],{cwd:E,stdout:"inherit",stderr:"inherit",stdin:"ignore",...ye.spawn});le.add(be);let se=await be.exited;if(le.delete(be),a.signal?.aborted)return;if(ye.timedOut())throw Error(`Bench suite timed out after ${a.timeoutMs}ms: ${me(he)}`);if(se!==0)throw Error(`Bench suite failed: ${me(he)} (runner exited ${se})`)}catch(ye){fe??=ye instanceof Error?ye:Error(String(ye));for(let be of le)be.kill()}}};if(await Promise.all(Array.from({length:Math.min(U,ue.length)},pe)),fe)throw fe};try{let ue=A.map((ce)=>`${v}/${e("bench-plan",ce)}.json`),me=A.map((ce)=>`${v}/${e("bench-primary",ce)}.json`),le=A.map((ce,we)=>["bun",...X,hn,ce,me[we],JSON.stringify({...ie,filter:a.filter,isolate:a.isolate,preload:ae,planPath:ue[we]})]);await oe(le,(ce)=>a.suites[ce]);let de=await Promise.all(ue.map(async(ce)=>{if(!await Bun.file(ce).exists())return[];let{tasks:we}=await Bun.file(ce).json();return we})),fe=await Promise.all(me.map(async(ce)=>await Bun.file(ce).exists()?r(ce):void 0)),pe=[];for(let ce=0;ce<de.length;ce++)for(let we of de[ce])if(we.isolate)pe.push({suiteIndex:ce,taskIds:[we.id]});let he=pe.map((ce,we)=>`${v}/${e("bench-item",A[ce.suiteIndex],we)}.json`),ye=pe.map((ce,we)=>["bun",...X,hn,A[ce.suiteIndex],he[we],JSON.stringify({...ie,taskIds:ce.taskIds,preload:ae,markIsolated:!0})]);await oe(ye,(ce)=>a.suites[pe[ce].suiteIndex]);let be=await Promise.all(he.map(async(ce)=>await Bun.file(ce).exists()?r(ce):void 0)),se=[],ge=[];for(let ce=0;ce<de.length;ce++){let we=fe[ce];if(!we)continue;let Me=new Map;for(let ke of we.measurements){let $e=Me.get(ke.workloadId)??[];$e.push(ke),Me.set(ke.workloadId,$e)}let Pe=0,xe=new Map;pe.forEach((ke,$e)=>{let Ce=be[$e];if(ke.suiteIndex===ce&&Ce)xe.set(ke.taskIds[0],Ce)});for(let ke of de[ce])if(ke.isolate){let $e=xe.get(ke.id);if(!$e)continue;let Ce=$e.workloads[0];se.push(Ce);for(let Le of $e.measurements)if(Le.workloadId===Ce.id)ge.push(Le)}else{let $e=we.workloads[Pe];se.push($e),Pe++;for(let Ce of Me.get($e.id)??[])ge.push(Ce)}}if(a.signal?.aborted&&ge.length>0){let ce=ge[ge.length-1];ce.warnings=[...ce.warnings,{code:"aborted",message:"Run was cancelled before it finished; this document holds whatever suites/tasks had already completed."}]}return t(se,ge,fe.find((ce)=>ce!==void 0)?.environment)}finally{await Bun.spawn(["rm","-rf",v]).exited}}function Q(a,x,v=8){if(v<=1)throw RangeError(`range: multiplier must be > 1, got ${v}`);if(a<=0)throw RangeError(`range: start must be > 0, got ${a}`);let E=[];for(let U=a;U<=x;U*=v)E.push(U);if(!E.includes(x))E.push(x);return E}function Se(a,x){if(x){let v=a.measurements.find((E)=>E.id===x);return v?.cpu?[v]:[]}return a.measurements.filter((v)=>v.phase==="cpu"&&v.cpu)}function Oe(a){let x=a.nodes,v=x.length,E=ct(a),U=new Int32Array(v).fill(-1);for(let ae=0;ae<v;ae++)for(let X of x[ae].children){let oe=E(X);if(oe!==-1)U[oe]=ae}let ie=[];for(let ae=0;ae<v;ae++)if(U[ae]===-1)ie.push(ae);let G=[],A=[];for(let ae=ie.length-1;ae>=0;ae--)A.push(ie[ae]);while(A.length>0){let ae=A.pop();G.push(ae);for(let X of x[ae].children){let oe=E(X);if(oe!==-1&&U[oe]===ae)A.push(oe)}}return{count:v,indexOf:E,parentIx:U,roots:ie,order:G}}function ct(a){let x=a.nodes,v=x.length,E=1/0,U=-1/0,ie=!0;for(let A=0;A<v;A++){let ae=x[A].id;if(!Number.isInteger(ae)){ie=!1;break}if(ae<E)E=ae;if(ae>U)U=ae}if(ie&&v>0&&U-E<v*4+64){let A=U-E+1,ae=new Int32Array(A).fill(-1);for(let X=0;X<v;X++)ae[x[X].id-E]=X;return(X)=>{let oe=X-E;return oe>=0&&oe<A?ae[oe]:-1}}let G=new Map;for(let A=0;A<v;A++)G.set(x[A].id,A);return(A)=>G.get(A)??-1}function bn(a,x){let{count:v,indexOf:E,parentIx:U,order:ie}=x,G=new Float64Array(v),A=new Float64Array(v),ae=a.samples?.nodeIds??[],X=a.samples?.timeDeltasUs??[];for(let ue=0;ue<ae.length;ue++){let me=E(ae[ue]);if(me===-1)continue;G[me]+=X[ue]??0,A[me]+=1}let oe=new Float64Array(v);for(let ue=ie.length-1;ue>=0;ue--){let me=ie[ue];oe[me]+=G[me];let le=U[me];if(le>=0)oe[le]+=oe[me]}return{selfUs:G,totalUs:oe,samples:A}}var wn={name:"collapsed",async render(a,x={}){return{files:Se(a,x.measurementId).map((U)=>{let ie=U.cpu,{nodes:G,frames:A}=ie,ae=Oe(ie),X=Array(ae.count);for(let de of ae.order){let fe=A[G[de].frameIx].name||"(anonymous)",pe=ae.parentIx[de];X[de]=pe===-1?fe:`${X[pe]};${fe}`}let oe=new Float64Array(ae.count),ue=[],me=ie.samples?.nodeIds??[];for(let de=0;de<me.length;de++){let fe=ae.indexOf(me[de]);if(fe===-1)continue;if(oe[fe]++===0)ue.push(fe)}let le=Array(ue.length);for(let de=0;de<ue.length;de++){let fe=ue[de];le[de]=`${X[fe]} ${oe[fe]}`}return{path:`${U.id}.collapsed.txt`,content:le.join(`
3
+ `)+(le.length>0?`
4
+ `:"")}})}}};var yn={name:"cpuprofile",async render(a,x={}){let v=Se(a,x.measurementId),E=[],U=[];for(let ie of v){if(ie.cpu?.origin!=="cpu-prof"&&ie.cpu?.origin!=="inspector"){U.push(`${ie.id} (origin ${ie.cpu?.origin??"unknown"} has no .cpuprofile artifact to pass through)`);continue}let G=ie.artifacts.find((ae)=>ae.kind==="cpuprofile");if(!G){U.push(`${ie.id} (no cpuprofile artifact recorded on this run)`);continue}let A=Bun.file(G.path);if(!await A.exists()){U.push(`${ie.id} (artifact missing on disk: ${G.path})`);continue}E.push({path:`${ie.id}.cpuprofile`,content:await A.text()})}if(E.length===0&&U.length>0)return{text:`No .cpuprofile artifacts available:
5
+ ${U.map((ie)=>` - ${ie}`).join(`
6
+ `)}
7
+ `};return{files:E}}};var xn={name:"json",async render(a){return{text:f(a)}}};var Pn={name:"jsonl",async render(a){let{measurements:x,...v}=a;return{text:`${[y({kind:"document",...v}),...x.map((U)=>y({kind:"measurement",...U}))].join(`
8
+ `)}
9
+ `}}};var Ne=0.5,ut={ns:1,\u{b5}s:1000,ms:1e6,s:1e9};function Ae(a){let x=Math.abs(a);if(x>=1e9)return"s";if(x>=1e6)return"ms";if(x>=1000)return"\xB5s";return"ns"}function lt(a){let x=Math.floor(Math.log10(Math.max(Math.abs(a),1)))+1;return Math.max(1,3-x)}function ve(a,x=Ae(a)){let v=a/ut[x];return`${v.toFixed(lt(v))} ${x}`}function ze(a){return`${a.cpuModel} \xB7 ${a.cores} cores \xB7 load ${a.loadAvg1.toFixed(1)} \xB7 noise floor ${a.noise.floorPct.toFixed(1)}%`}function w(a){return`${a.sha} (${a.branch}${a.dirty?", dirty":""})`}function n(a){return a?.label??a?.command?.join(" ")??a?.entry?.task??a?.id??"unknown"}function Ge(a,x){if(a===1)return x?"1.00\xD7 (baseline)":"1.00\xD7";if(a>1)return`${a.toFixed(2)}\xD7 slower`;return`${(1/a).toFixed(2)}\xD7 faster`}function kn(a){return a.replace(/\|/g,"\\|").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/`/g,"\\`").replace(/\r\n|\r|\n/g,"<br>")}function Ke(a){if(!a?.entry)return;if(a.entry.group!==void 0)return a.entry.group;let x=a.entry.task,v=x.lastIndexOf("/");return v===-1?void 0:x.slice(0,v)}function Fe(a){let x=Math.min(...a.map((U)=>U.run.timing.median)),v=new Map;for(let U of a){let ie=Ke(U.workload);if(ie===void 0)continue;let G=v.get(ie);if(G)G.push(U);else v.set(ie,[U])}let E=new Map;for(let U of a){let ie=Ke(U.workload);if(ie===void 0){E.set(U,x);continue}let G=v.get(ie)??[U],A=G.find((ae)=>ae.workload?.baseline);E.set(U,A?A.run.timing.median:Math.min(...G.map((ae)=>ae.run.timing.median)))}return E}function We(a){return a.measurements.filter((x)=>x.phase==="timing"&&x.timing!==void 0)}function Ee(a,x){let v=new Set(x.map((E)=>E.workloadId));return a.workloads.filter((E)=>E.skipped&&!v.has(E.id))}function Je(a){for(let x of a.comparisons??[]){let v=x.warnings?.find((E)=>E.code==="environment-mismatch");if(v)return v}return}function Mn(a){return(a/1e6).toFixed(3)}function Rn(a){if(!a?.params)return"";return` (${Object.entries(a.params).map(([v,E])=>`${v}=${E}`).join(", ")})`}function Te(a){return kn(String(a))}function dt(a){let x;for(let v of a){let E=v?.params?Object.keys(v.params):void 0;if(E?.length!==2)return;if(x===void 0)x=E;else if(E.length!==x.length||E.some((U,ie)=>U!==x[ie]))return}return x}var $n=10,vn=10,Cn={name:"markdown",async render(a){let x=new Map(a.workloads.map((A)=>[A.id,A])),v=[];v.push("# Profile Report","");let E=a.git?` \xB7 ${w(a.git)}`:"";if(v.push(`Bun ${a.bunVersion} \xB7 ostia ${a.toolVersion} \xB7 ${a.platform.os}/${a.platform.arch} \xB7 ${a.createdAt}${E}`,""),a.environment)v.push(ze(a.environment),"");let U=Je(a);if(U)v.push(`> \u26A0 ${U.message}`,"");let ie=We(a),G=Ee(a,ie);if(ie.length>0||G.length>0){v.push("## Timing","");let A=new Map,ae=[];for(let ue of ie){let me=x.get(ue.workloadId)?.entry?.group;if(me===void 0){ae.push(ue);continue}let le=A.get(me);if(le)le.push(ue);else A.set(me,[ue])}let X=new Map;for(let[ue,me]of A){let le=dt(me.map((de)=>x.get(de.workloadId)));if(le)X.set(ue,{keys:le,runs:me});else ae.push(...me)}if(ae.length>0||G.length>0){let ue=ie.map((he)=>({run:he,workload:x.get(he.workloadId)})),me=ue.length>1,le=me?Fe(ue):void 0,de=new Map(ue.map((he)=>[he.run.id,le?.get(he)??he.run.timing.median])),fe=me?" Relative |":"",pe=me?"---|":"";v.push(`| Task | Median | Spread (p75\u2026p99) | Mean \xB1 SD | Range | MAD |${fe}`,`|---|---|---|---|---|---|${pe}`);for(let he of ae){let ye=x.get(he.workloadId),be=Te(n(ye)+Rn(ye)),se=he.timing,ge=Ae(se.median),ce=se.p75??se.median,we=se.p99??se.max,Me=se.mad!==void 0?ve(se.mad,ge):"-",Pe=me?` ${Ge(se.median/(de.get(he.id)??se.median),!!ye?.baseline)} |`:"";v.push(`| ${be} | ${ve(se.median,ge)} | ${ve(ce,ge)}\u2026${ve(we,ge)} | ${ve(se.mean,ge)} \xB1 ${ve(se.stddev,ge)} | ${ve(se.min,ge)}\u2026${ve(se.max,ge)} | ${Me} |${Pe}`)}for(let he of G){let ye=Te(n(he)+Rn(he)),be=me?" - |":"";v.push(`| ${ye} | - skipped | - | - | - | - |${be}`)}v.push("")}for(let[ue,{keys:me,runs:le}]of X){let[de,fe]=me,pe=[],he=[],ye=new Map;for(let be of le){let se=x.get(be.workloadId).params,ge=se[de],ce=se[fe];if(!pe.includes(ge))pe.push(ge);if(!he.includes(ce))he.push(ce);ye.set(`${ge}\x00${ce}`,be)}v.push(`### ${Te(ue)} (${Te(de)} \xD7 ${Te(fe)})`,""),v.push(`| ${Te(de)} \\ ${Te(fe)} | ${he.map(Te).join(" | ")} |`,`|---|${he.map(()=>"---").join("|")}|`);for(let be of pe){let se=he.map((ge)=>{let ce=ye.get(`${be}\x00${ge}`);return ce?ve(ce.timing.median):"-"});v.push(`| ${Te(be)} | ${se.join(" | ")} |`)}v.push("")}let oe=ie.filter((ue)=>ue.warnings.length>0);if(oe.length>0){v.push("### Warnings","");for(let ue of oe){let me=n(x.get(ue.workloadId));for(let le of ue.warnings)v.push(`- **${me}**: ${le.message} (\`${le.code}\`)`)}v.push("")}}for(let A of a.measurements){if(A.phase!=="cpu"&&A.phase!=="heap")continue;let ae=n(x.get(A.workloadId));if(A.phase==="cpu"){if(v.push(`## CPU capture - ${ae}`,""),v.push(`instrumented, diagnostic wall ${Mn(A.diagnosticWallNs??0)}ms`,""),A.cpu){v.push(`origin: \`${A.cpu.origin}\`, interval: ${A.cpu.samplingIntervalUs}\xB5s`,""),v.push("| Self % | Self (ms) | Total (ms) | Frame |","|---|---|---|---|");let X=A.cpu.totals.reduce((oe,ue)=>oe+ue.selfUs,0)||1;for(let oe of A.cpu.totals.slice(0,$n)){let ue=A.cpu.frames[oe.frameIx],me=(oe.selfUs/X*100).toFixed(1);v.push(`| ${me}% | ${(oe.selfUs/1000).toFixed(2)} | ${(oe.totalUs/1000).toFixed(2)} | ${Te(ue?.name||"(anonymous)")} |`)}if(v.push(""),A.jit){let oe=A.jit.tiers;v.push(`JIT tiers: LLInt ${oe.llint} \xB7 Baseline ${oe.baseline} \xB7 DFG ${oe.dfg} \xB7 FTL ${oe.ftl}`,"")}}}else if(v.push(`## Heap snapshot - ${ae}`,""),v.push(`instrumented, diagnostic wall ${Mn(A.diagnosticWallNs??0)}ms`,""),A.heap){v.push(`${A.heap.objectCount??"?"} objects, ${((A.heap.heapSizeBytes??0)/1e6).toFixed(2)}MB`,""),v.push("| Count | Type |","|---|---|");for(let X of A.heap.typeCounts.slice(0,vn))v.push(`| ${X.count} | ${Te(X.type)} |`);v.push("")}for(let X of A.artifacts)v.push(`- artifact: \`${X.path}\``);for(let X of A.warnings)v.push(`- ! ${X.message} (\`${X.code}\`)`);if(A.artifacts.length>0||A.warnings.length>0)v.push("")}if(a.comparisons&&a.comparisons.length>0){v.push("## Comparisons","");for(let A of a.comparisons){let ae=a.measurements.find((oe)=>oe.id===A.candidateMeasurementId),X=n(ae?x.get(ae.workloadId):x.get(A.candidateMeasurementId));if(v.push(`### ${A.verdict==="pass"?"\u2713":"\u2717"} ${X}`,""),A.timing){let oe=A.timing.medianDeltaPct>0?"+":"",ue=A.timing.verdict==="unchanged"&&A.timing.pValue!==void 0&&A.timing.pValue>=A.thresholds.alpha?"~":"",me=[];if(ae?.timing)me.push(`n=${ae.timing.samples.length}`);if(A.timing.ci95)me.push(`95% CI [${A.timing.ci95[0]>0?"+":""}${A.timing.ci95[0].toFixed(1)}%, ${A.timing.ci95[1]>0?"+":""}${A.timing.ci95[1].toFixed(1)}%]`);if(A.timing.pValue!==void 0)me.push(`p=${A.timing.pValue.toFixed(4)}`);me.push(`threshold ${A.thresholds.effectiveTimingPct.toFixed(1)}%`),v.push(`- timing: ${ue}${oe}${A.timing.medianDeltaPct.toFixed(1)}% median, ${me.join(", ")} (**${A.timing.verdict}**)`)}for(let oe of A.frames?.slice(0,$n)??[]){if(Math.abs(oe.deltaPct)<Ne)continue;let ue=oe.deltaPct>0?"+":"";v.push(`- frame \`${Te(oe.name)}\`: ${ue}${oe.deltaPct.toFixed(1)}% self-time (${(oe.baseSelfUs/1000).toFixed(2)}ms \u2192 ${(oe.candSelfUs/1000).toFixed(2)}ms)`)}for(let oe of A.heapTypes?.slice(0,vn)??[]){if(Math.abs(oe.deltaPct)<Ne)continue;let ue=oe.deltaPct>0?"+":"";v.push(`- heap \`${Te(oe.type)}\`: ${ue}${oe.deltaPct.toFixed(1)}% count (${oe.baseCount} \u2192 ${oe.candCount})`)}for(let oe of A.warnings??[]){if(oe.code==="environment-mismatch")continue;v.push(`- ! ${oe.message} (\`${oe.code}\`)`)}v.push("")}}return{text:v.join(`
10
+ `)}}};var pt=15;function nn(a){return`n${a}`}function ft(a,x,v){return`${(a||"(anonymous)").replace(/"/g,"'")} (self ${(x/1000).toFixed(2)}ms, total ${(v/1000).toFixed(2)}ms)`}function gt(a,x,v,E){let U=[];if(E<=0)return U;for(let ie=0;ie<x;ie++){if(ie===v)continue;let G=a[ie];if(U.length===E&&G<=a[U[E-1]])continue;let A=U.length;while(A>0&&a[U[A-1]]<G)A--;if(U.splice(A,0,ie),U.length>E)U.pop()}return U}var Tn={name:"mermaid",async render(a,x={}){let v=x.topN??pt;return{files:Se(a,x.measurementId).map((ie)=>{let G=ie.cpu,{nodes:A,frames:ae}=G,X=Oe(G),{selfUs:oe,totalUs:ue}=bn(G,X),{parentIx:me}=X,le=X.roots[0]??-1,de=gt(oe,X.count,le,v),fe=new Set(le!==-1?[le]:[]),pe=[];for(let ye of de){pe.length=0;for(let be=ye;be!==-1;be=me[be])pe.push(be);for(let be=pe.length-1;be>=0;be--)fe.add(pe[be])}let he=["graph TD"];for(let ye of fe){let be=A[ye].id;he.push(` ${nn(be)}["${ft(ae[A[ye].frameIx].name,oe[ye],ue[ye])}"]`)}for(let ye of fe){let be=me[ye];if(be!==-1&&fe.has(be))he.push(` ${nn(A[be].id)} --> ${nn(A[ye].id)}`)}return{path:`${ie.id}.mermaid.md`,content:`${he.join(`
11
+ `)}
12
+ `}})}}};var u=1;function Re(a){return Number.isFinite(a)?Number(a.toPrecision(6)):a}function tn(a,x){return a?.entry?.task??a?.label??a?.command?.join(" ")??x}function In(a,x){if(x?.entry?.group!==void 0)a.group=x.entry.group;if(x?.description!==void 0)a.description=x.description;if(x?.groupDescription!==void 0)a.groupDescription=x.groupDescription;if(x?.params!==void 0)a.params=x.params}function Sn(a){if(!a?.timing)return;let x={medianPct:Re(a.timing.medianDeltaPct),meanPct:Re(a.timing.meanDeltaPct),verdict:a.timing.verdict,pass:a.verdict==="pass",effectiveTimingPct:Re(a.thresholds.effectiveTimingPct),matched:!0};if(a.timing.ci95)x.ci95=[Re(a.timing.ci95[0]),Re(a.timing.ci95[1])];if(a.timing.pValue!==void 0)x.pValue=Re(a.timing.pValue);return x}function ht(a,x,v,E){let U={event:"run",protocolVersion:u,schemaVersion:a.schemaVersion,workloadId:x.id,task:tn(x,x.id),skipped:!0,batch:1,warnings:(v?.warnings??[]).map((G)=>G.data?{code:G.code,data:G.data}:{code:G.code})};if(In(U,x),E!==void 0)U.noiseFloorPct=Re(E);let ie=Sn(v);if(ie)U.delta=ie;return U}function bt(a){let x=new Map(a.workloads.map((X)=>[X.id,X])),v=a.environment?.noise.floorPct,E=We(a).map((X)=>({run:X,workload:x.get(X.workloadId)})),U=E.length>1?Fe(E):void 0,ie=new Map((a.comparisons??[]).map((X)=>[X.candidateMeasurementId,X])),G=new Map;for(let X of a.measurements){if(X.phase!=="cpu"||X.warnings.length===0)continue;let oe=G.get(X.workloadId)??[];G.set(X.workloadId,[...oe,...X.warnings])}let A=Ee(a,E.map((X)=>X.run)).map((X)=>ht(a,X,ie.get(X.id),v));return[...E.map((X)=>{let{run:oe,workload:ue}=X,me=oe.timing,le=ie.get(oe.id),de={event:"run",protocolVersion:u,schemaVersion:a.schemaVersion,workloadId:oe.workloadId,task:tn(ue,oe.workloadId),unit:"ns",samples:me.samples.length,batch:me.batch??1,mean:Re(me.mean),median:Re(me.median),stddev:Re(me.stddev),stddevPct:Re(me.mean===0?0:me.stddev/me.mean*100),min:Re(me.min),max:Re(me.max),warnings:[...oe.warnings,...G.get(oe.workloadId)??[],...le?.warnings??[]].map((pe)=>pe.data?{code:pe.code,data:pe.data}:{code:pe.code})};if(me.p75!==void 0)de.p75=Re(me.p75);if(me.p99!==void 0)de.p99=Re(me.p99);if(me.mad!==void 0)de.mad=Re(me.mad);if(In(de,ue),U)de.relative=Re(me.median/(U.get(X)??me.median));if(ue?.baseline)de.baseline=!0;if(v!==void 0)de.noiseFloorPct=Re(v);let fe=Sn(le);if(fe)de.delta=fe;return de}),...A]}function wt(a){if(!a.unmatched)return[];let x=(v,E)=>({event:"unmatched",protocolVersion:u,workloadId:v.id,task:tn(v,v.id),side:E});return[...a.unmatched.baseOnly.map((v)=>x(v,"base")),...a.unmatched.candOnly.map((v)=>x(v,"cand"))]}function yt(a,x){let v=a.comparisonSummary,E=(x.unmatched?.baseOnly.length??0)+(x.unmatched?.candOnly.length??0),U={event:"summary",protocolVersion:u,command:x.command,matched:v?.matched??0,regressed:v?.regressed??0,improved:v?.improved??0,unchanged:v?.unchanged??0,unmatched:E,geomeanPct:v?.geomeanPct!==void 0?v.geomeanPct:null,effectiveTimingPct:Re(v?.effectiveTimingPct??0),verdict:x.exitCode===0?"pass":"fail",exitCode:x.exitCode};if(x.command==="ci"){if(U.cached=x.cached??0,U.executed=x.executed??0,U.failed=x.failed??0,U.missingBaseline=x.missingBaseline??0,x.baseline)U.baseline=x.baseline}if(a.environment)U.noiseFloorPct=Re(a.environment.noise.floorPct);if(x.baseGit||x.candGit)U.git={...x.baseGit&&{base:x.baseGit},...x.candGit&&{cand:x.candGit}};if(x.exportedTo)U.exportedTo=x.exportedTo;return U}var Dn={name:"minimal",async render(a,x={}){let v=[...bt(a)];if(x.protocol)v.push(...wt(x.protocol)),v.push(yt(a,x.protocol));let E=v.map((U)=>JSON.stringify(U));return{text:E.length>0?`${E.join(`
13
+ `)}
14
+ `:""}}};var xt="https://www.speedscope.app/file-format-schema.json";function On(a){return a?.label??a?.command?.join(" ")??a?.entry?.task??"profile"}var Nn={name:"speedscope",async render(a,x={}){let v=Se(a,x.measurementId),E=new Map(a.workloads.map((ie)=>[ie.id,ie]));return{files:v.map((ie)=>{let G=ie.cpu,{nodes:A}=G,ae=Oe(G),X=G.samples?.nodeIds??[],oe=G.samples?.timeDeltasUs??[],ue=Array(ae.count);for(let fe of ae.order){let pe=ae.parentIx[fe],he=A[fe].frameIx;ue[fe]=pe===-1?[he]:[...ue[pe],he]}let me=Array(X.length);for(let fe=0;fe<X.length;fe++){let pe=ae.indexOf(X[fe]);me[fe]=pe===-1?[]:ue[pe]}let le=0;for(let fe=0;fe<oe.length;fe++)le+=oe[fe];let de={$schema:xt,exporter:"ostia",name:On(E.get(ie.workloadId)),activeProfileIndex:0,shared:{frames:G.frames.map((fe)=>({name:fe.name||"(anonymous)",file:fe.url,line:fe.line!==void 0?fe.line+1:void 0}))},profiles:[{type:"sampled",name:On(E.get(ie.workloadId)),unit:"microseconds",startValue:0,endValue:le,samples:me,weights:oe}]};return{path:`${ie.id}.speedscope.json`,content:`${JSON.stringify(de,null,2)}
15
+ `}})}}};function Pt(a){return(a/1e6).toFixed(3)}function kt(a){if(a<1024)return`${a.toFixed(0)}B`;if(a<1048576)return`${(a/1024).toFixed(2)}KB`;return`${(a/1048576).toFixed(2)}MB`}var Wn={name:"table",async render(a){let x=We(a),v=new Map(a.workloads.map((xe)=>[xe.id,xe])),E=a.environment?[ze(a.environment),""]:[],U=Ee(a,x);if(x.length===0&&U.length===0){let xe=Fn(a,v);return{text:xe.length>0?`${[...E,...xe].join(`
16
+ `)}
17
+ `:`(no timing runs)
18
+ `}}let ie=new Map(x.map((xe)=>[xe.workloadId,xe])),G=[],A=[];for(let xe of a.workloads){let ke=ie.get(xe.id),$e=n(xe);if(ke){let Ce={kind:"measured",run:ke,workload:xe,label:$e};G.push(Ce),A.push(Ce)}else if(xe.skipped)G.push({kind:"skipped",workload:xe,label:$e})}let ae=new Map(a.measurements.filter((xe)=>xe.phase==="memstats"&&xe.memory?.bytesPerOp!==void 0).map((xe)=>[xe.workloadId,xe.memory.bytesPerOp])),X=ae.size>0,oe=A.length>1,ue=Fe(A),me=new Map,le=new Map,de;for(let xe of G){let ke=Ke(xe.workload);if(ke!==de){if(ke!==void 0)le.set(xe,ke);de=ke}me.set(xe,ke!==void 0?" ":"")}let fe=Math.max(4,...G.map((xe)=>me.get(xe).length+xe.label.length)),pe=10,he=18,ye=18,be=10,se=[...E],ge=X?` ${"Alloc/op".padEnd(be)}`:"",ce=`${"Task".padEnd(fe)} ${"Median".padEnd(pe)} ${"Spread".padEnd(he)} ${"Range".padEnd(ye)}${ge}${oe?" Relative":""}`;se.push(ce),se.push("-".repeat(ce.length));let we=[];for(let xe of G){let ke=le.get(xe);if(ke!==void 0)se.push(`${ke}:`);let $e=me.get(xe);if(xe.kind==="skipped"){se.push(`${($e+xe.label).padEnd(fe)} - skipped`);continue}let{run:Ce,label:Le,workload:Ye}=xe,Ie=Ce.timing,Ue=Ae(Ie.median),Ln=Ie.p75??Ie.median,_n=Ie.p99??Ie.max,jn=ve(Ie.median,Ue),Vn=`${ve(Ln,Ue)}\u2026${ve(_n,Ue)}`,Hn=`${ve(Ie.min,Ue)}\u2026${ve(Ie.max,Ue)}`,qe=`${($e+Le).padEnd(fe)} ${jn.padEnd(pe)} ${Vn.padEnd(he)} ${Hn.padEnd(ye)}`;if(X){let De=Ye?ae.get(Ye.id):void 0,zn=De!==void 0?kt(De):"";qe+=` ${zn.padEnd(be)}`}if(oe){let De=Ie.median/(ue.get(xe)??Ie.median);qe+=` ${Ge(De,!!Ye?.baseline)}`}if(se.push(qe),Ce.warnings.length>0)se.push(`${" ".repeat($e.length)} ! ${Ce.warnings.map((De)=>De.code).join(", ")}`),we.push(xe)}if(we.length>0){se.push(""),se.push("Warnings:");for(let xe of we)for(let ke of xe.run.warnings)se.push(` ${xe.label}: ${ke.message}`)}let Me=Mt(a,v);if(Me.length>0)se.push(""),se.push(...Me);let Pe=Fn(a,v);if(Pe.length>0)se.push(""),se.push(...Pe);return{text:`${se.map((xe)=>xe.trimEnd()).join(`
19
+ `)}
20
+ `}}};function Fn(a,x){if(!a.comparisons||a.comparisons.length===0)return[];let v=[],E=new Map(a.measurements.map((G)=>[G.id,G])),U=Je(a);if(U)v.push(`\u26A0 ${U.message}`,"");let ie=[];for(let G of a.comparisons){let A=E.get(G.candidateMeasurementId),ae=x.get(A?.workloadId??G.candidateMeasurementId),X=ae?n(ae):G.candidateMeasurementId,oe=G.verdict==="pass"?"\u2713":"\u2717";if(v.push(`${oe} ${X}`),G.timing){let me=(le)=>`${le>=0?"+":""}${le.toFixed(1)}%`;if(G.timing.ci95&&G.timing.pValue!==void 0){let le=G.timing.pValue<0.001?"p<0.001":`p=${G.timing.pValue.toFixed(3)}`;v.push(` timing: ${me(G.timing.medianDeltaPct)} median, 95% CI [${me(G.timing.ci95[0])}, ${me(G.timing.ci95[1])}], ${le} (${G.timing.verdict})`)}else v.push(` timing: ${me(G.timing.medianDeltaPct)} median (${G.timing.verdict})`)}if(G.frames)for(let me of G.frames.slice(0,En)){if(Math.abs(me.deltaPct)<Ne)continue;let le=me.deltaPct>0?"+":"";v.push(` frame ${me.name}: ${le}${me.deltaPct.toFixed(1)}% self-time (${(me.baseSelfUs/1000).toFixed(2)}ms -> ${(me.candSelfUs/1000).toFixed(2)}ms)`)}if(G.heapTypes)for(let me of G.heapTypes.slice(0,Un)){if(Math.abs(me.deltaPct)<Ne)continue;let le=me.deltaPct>0?"+":"";v.push(` heap ${me.type}: ${le}${me.deltaPct.toFixed(1)}% count (${me.baseCount} -> ${me.candCount})`)}let ue=(G.warnings??[]).filter((me)=>me.code!=="environment-mismatch");if(ue.length>0){v.push(` ! ${ue.map((me)=>me.code).join(", ")}`);for(let me of ue)ie.push({label:X,message:me.message})}}if(ie.length>0){v.push("","Comparison warnings:");for(let G of ie)v.push(` ${G.label}: ${G.message}`)}return v}var En=5,Un=5;function Mt(a,x){let v=[];for(let E of a.measurements){if(E.phase!=="cpu"&&E.phase!=="heap")continue;let U=x.get(E.workloadId),ie=U?n(U):E.workloadId;if(E.phase==="cpu")if(E.cpu){v.push(`CPU capture - ${ie} (instrumented, ${E.cpu.samplingIntervalUs}\xB5s interval, diagnostic wall ${Pt(E.diagnosticWallNs??0)}ms)`);let G=E.cpu.totals.reduce((A,ae)=>A+ae.selfUs,0)||1;for(let A of E.cpu.totals.slice(0,En)){let ae=E.cpu.frames[A.frameIx],X=(A.selfUs/G*100).toFixed(1);v.push(` ${X.padStart(5)}% ${(A.selfUs/1000).toFixed(2).padStart(8)}ms self ${ae?.name??"?"}`)}}else v.push(`CPU capture - ${ie} (instrumented, no evidence captured)`);else if(E.heap){let G=((E.heap.heapSizeBytes??0)/1e6).toFixed(2);v.push(`Heap snapshot - ${ie} (instrumented, ${E.heap.objectCount??"?"} objects, ${G}MB)`);for(let A of E.heap.typeCounts.slice(0,Un))v.push(` ${String(A.count).padStart(6)} ${A.type}`)}else v.push(`Heap snapshot - ${ie} (instrumented, no evidence captured)`);for(let G of E.artifacts)v.push(` artifact: ${G.path}`);for(let G of E.warnings)v.push(` ! ${G.message}`)}return v}var i={table:Wn,json:xn,markdown:Cn,jsonl:Pn,minimal:Dn,collapsed:wn,mermaid:Tn,speedscope:Nn,cpuprofile:yn};async function ee(a={}){let x=M();if(x.length===0)throw Error("run(): no tasks registered - call group()/task() before run() in the same file.");let v=x.filter((A)=>A.only),E=v.length>0?v:x;if(v.length>0)process.stderr.write(`bench: ${v.length} task(s) selected by .only
21
+ `);let U=T(E,a.filter);if(U.length===0)throw Error(`run(): filter ${JSON.stringify(a.filter)} matched zero of ${E.length} registered task(s).`);let ie=Bun.main,G=await R(ie,U,a);if(!a.quiet){let A=a.format??"table",{text:ae}=await i[A].render(G,{});if(ae)process.stdout.write(ae)}return G}function ne(a,x){let v=Object.keys(a),E=(U,ie)=>{if(U===v.length){Z(ie,()=>x(ie));return}let G=v[U];for(let A of a[G])E(U+1,{...ie,[G]:A})};E(0,{})}function te(a){return a}var rn=1000;async function V(a){if(a.samples!==void 0&&(!Number.isFinite(a.samples)||a.samples<1))throw RangeError(`time: samples must be >= 1, got ${a.samples}`);if(a.minSamples!==void 0&&(!Number.isFinite(a.minSamples)||a.minSamples<1))throw RangeError(`time: minSamples must be >= 1, got ${a.minSamples}`);if(a.warmup!==void 0&&(!Number.isFinite(a.warmup)||a.warmup<0))throw RangeError(`time: warmup must be >= 0, got ${a.warmup}`);if(a.budgetMs!==void 0&&!Number.isFinite(a.budgetMs))throw RangeError(`time: budgetMs must be finite, got ${a.budgetMs}`);let x=o({samples:a.samples??null,budgetMs:a.budgetMs??null,minSamples:a.minSamples??null,warmup:a.warmup??null,cpu:a.cpu??!1,heap:a.heap??!1,cpuIntervalUs:a.cpuIntervalUs??rn}),E=`${a.outDir??Be}/artifacts`,U=a.noiseCheck===!1?void 0:g(),ie=U?h(U):void 0,G=[],A=[],ae=a.commands.map((le)=>{let de=typeof le==="string"||Array.isArray(le)?{command:le}:le,fe=Array.isArray(de.command)?de.command:m(de.command),pe=de.prepare??a.prepare,he=de.timeSource??a.timeSource,ye=de.timeoutMs??a.timeoutMs,be=de.ignoreExitCodes??a.ignoreExitCodes,se=de.failOnNonzero??a.failOnNonzero,ge=P(fe,de.label??(Array.isArray(de.command)?void 0:de.command),{prepare:pe,timeSource:he});return{argv:fe,workload:ge,prepare:pe,timeSource:he,timeoutMs:ye,ignoreExitCodes:be,failOnNonzero:se}}),X=(a.interleave??!0)&&ae.length>1,oe=(le)=>({argv:le.argv,cwd:a.cwd,env:a.env,samples:a.samples,budgetMs:a.budgetMs,minSamples:a.minSamples,warmup:a.warmup,prepare:le.prepare,timeSource:le.timeSource,timeoutMs:le.timeoutMs,ignoreExitCodes:le.ignoreExitCodes,failOnNonzero:le.failOnNonzero,signal:a.signal}),ue=ae.map((le)=>Ze(oe(le))),me=async(le)=>{let{argv:de,workload:fe,prepare:pe}=ae[le];G.push(fe);let he=ue[le].result(),ye=d({workload:fe,configFingerprint:x,trials:he.trials,timing:he.timing,warnings:ie&&A.length===0?[...he.warnings,ie]:he.warnings,interleaved:X?!0:void 0});if(A.push(ye),!a.signal?.aborted)A.push(...await Rt({workload:fe,argv:de,timingMeasurementId:ye.id,cfgFp:x,opts:a,artifactDir:E,prepare:pe}))};if(X){for(let de of ue)await de.warmup();let le=!0;while(le){le=!1;for(let de of ue)if(await de.step())le=!0}for(let de=0;de<ae.length;de++)await me(de)}else for(let le=0;le<ae.length;le++)await en(ue[le]),await me(le);if(a.signal?.aborted&&A.length>0){let le=A[A.length-1];le.warnings=[...le.warnings,An()]}return t(G,A,U)}function An(){return{code:"aborted",message:"Run was cancelled before it finished; this document holds whatever measurements had already completed."}}async function Rt({workload:a,argv:x,timingMeasurementId:v,cfgFp:E,opts:U,artifactDir:ie,prepare:G}){let A=[],ae=async(X)=>{if(G)await F(G,{phase:X,index:0},{cwd:U.cwd,env:U.env})};if(U.cpu){await ae("cpu");let X=`${v}-cpu.cpuprofile`,oe=await on({argv:x,cwd:U.cwd,env:U.env,artifactDir:ie,fileName:X,intervalUs:U.cpuIntervalUs??rn});A.push(await Bn({workload:a,phase:"cpu",configFingerprint:E,diagnosticWallNs:oe.diagnosticWallNs,exitCode:oe.exitCode,cpu:oe.cpu,artifactPath:oe.artifactPath,artifactKind:"cpuprofile",warnings:oe.warnings}))}if(U.heap){await ae("heap");let X=`${v}-heap.heapsnapshot`,oe=await an({argv:x,cwd:U.cwd,env:U.env,artifactDir:ie,fileName:X});A.push(await Bn({workload:a,phase:"heap",configFingerprint:E,diagnosticWallNs:oe.diagnosticWallNs,exitCode:oe.exitCode,heap:oe.heap,artifactPath:oe.artifactPath,artifactKind:"heapsnapshot",warnings:oe.warnings}))}return A}async function Bn(a){let x=`${a.workload.id}-${a.phase}-${a.configFingerprint}`,v=a.artifactPath?[await Y(x,a.artifactKind,a.artifactPath)]:[];return p({workload:a.workload,phase:a.phase,configFingerprint:a.configFingerprint,diagnosticWallNs:a.diagnosticWallNs,exitCode:a.exitCode,cpu:a.cpu,heap:a.heap,warnings:a.warnings,artifacts:v})}async function re(a,x={}){let v=K(a),E=o({intervalUs:x.intervalUs??rn,origin:x.origin??"inspector"}),U=(A)=>A.samples?.nodeIds.length===0?[{code:"empty-profile",message:"In-process capture produced zero samples."}]:[];if(x.signal?.aborted){let A=Bun.nanoseconds(),ae=await a(),X=p({workload:v,phase:"cpu",configFingerprint:E,diagnosticWallNs:Bun.nanoseconds()-A,warnings:[An()],artifacts:[]});return{result:ae,measurement:X,document:t([v],[X])}}let ie=x.origin==="jsc"?await B(a,x):{...await mn(a,x),jit:void 0},G=p({workload:v,phase:"cpu",configFingerprint:E,diagnosticWallNs:ie.diagnosticWallNs,cpu:ie.cpu,jit:ie.jit,warnings:U(ie.cpu),artifacts:[]});return{result:ie.result,measurement:G,document:t([v],[G])}}
22
+ export{c,W,j,C,S,s,L,I,_,H,J,b,z,w,n,Q,u,i,ee,ne,te,V,re};
package/cli.js CHANGED
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import{e,b,w,t,k,m,a,c,r,p}from"./chunk-2s4xk1mg.js";import{u,B,M,U,T,s,W,C,j,L,G,f,J,g,n,l,o,_}from"./chunk-dpxy38mq.js";function he(d){return e("cache",d.workloadId,d.phase,d.configFingerprint,d.bunVersion,d.toolVersion,d.instrumented,d.inputsDigest??null)}async function ge(d,i=process.cwd()){if(d.length===0)return;let h=await C(d,i),v=await Promise.all(h.map(async(y)=>{let x=await Bun.file(`${i}/${y}`).arrayBuffer();return{path:y,sha256:Bun.CryptoHasher.hash("sha256",x,"hex")}}));return e("inputs",v)}function be(d,i){return`${d}/cache/${i}.json`}async function we(d,i){let h=Bun.file(be(d,i));if(!await h.exists())return;return await h.json()}async function ke(d,i,h){await Bun.write(be(d,i),`${JSON.stringify(h,null,2)}
4
- `)}var ye=600000;class ne extends Error{path;constructor(d){super(`No baseline document at ${d}. Create one with: ostia time --export-json ${d} <command...>`);this.path=d}}class se extends Error{path;missing;total;constructor(d,i,h){super(`${i} of ${h} configured workload(s) have no matching row in baseline ${d} (by workload id). Re-seed with: ostia baseline save`);this.path=d;this.missing=i;this.total=h}}function Re(d,i,h){if(d)return d;return i===h?"fail":"warn"}function De(d,i=[]){let h=new Set(i),v=d.filter((y)=>!y.timedOut&&!y.timeSourceNoMatch).map((y)=>y.exitCode).filter((y)=>y!==void 0);return v.length>0&&v.every((y)=>y!==0&&!h.has(y))}async function le(d,i){let h=d.noiseCheck===!1?void 0:p(),v=[];for(let y of d.workloads){if(y.suites){let S=await L(y.suites,process.cwd()),I=await f({suites:S,outDir:d.outDir,noiseCheck:!1,budgetMs:d.bench?.budgetMs,samples:d.bench?.samples,minSamples:d.bench?.minSamples,gc:d.bench?.gc,cpu:d.bench?.cpu,alloc:d.bench?.alloc,filter:d.bench?.filter,isolate:d.bench?.isolate,preload:d.bench?.preload,jobs:typeof d.bench?.jobs==="number"?d.bench.jobs:void 0,timeoutMs:d.bench?.timeoutMs??ye});for(let H of I.workloads){let K=I.measurements.find((X)=>X.workloadId===H.id&&X.phase==="timing");if(!K)continue;v.push({workload:H,status:"executed",run:K,harnessFailed:!1})}continue}let x=k(y.command,y.label,{prepare:y.prepare,timeSource:y.timeSource}),A=await ge(y.inputs??[]),N=a({runs:d.runs,warmup:d.warmup}),E=typeof y.prepare!=="function",q=he({workloadId:x.id,phase:"timing",configFingerprint:N,bunVersion:Bun.version,toolVersion:w,instrumented:!1,inputsDigest:A}),V=i||!E?void 0:await we(d.outDir,q),R,D;if(V)R=V,D="cached";else{let S=await J({argv:y.command,samples:d.runs??void 0,warmup:d.warmup,prepare:y.prepare,timeSource:y.timeSource,timeoutMs:y.timeoutMs??ye,ignoreExitCodes:y.ignoreExitCodes,failOnNonzero:y.failOnNonzero});if(R=m({workload:x,configFingerprint:N,trials:S.trials,timing:S.timing,warnings:S.warnings}),E)await ke(d.outDir,q,R);D="executed"}v.push({workload:x,status:D,run:R,harnessFailed:De(R.trials,y.ignoreExitCodes)})}return{results:v,environment:h}}async function ve(d){let{config:i}=d,h=s(i,d.baselineName);if(!await Bun.file(h).exists())throw new ne(h);let y=await r(h),{results:x,environment:A}=await le(i,d.full),N=x.map((P)=>({...P})),E=N.filter((P)=>P.status==="executed").length,q=N.length-E,V=N.filter((P)=>P.harnessFailed).length,R=t(N.map((P)=>P.workload),N.map((P)=>P.run),A),D=0,S=0,I=0;for(let P of N){let ie=U(y,R,P.workload.id,i.thresholds);if(!ie){I++;continue}if(P.comparison=ie,ie.verdict==="pass")D++;else S++}if(I>0){if(Re(i.onMissingBaseline,I,N.length)==="fail")throw new se(h,I,N.length)}let H=N.map((P)=>P.comparison).filter((P)=>P!==void 0);R.comparisons=H;let K=new Set(y.workloads.map((P)=>P.id)),X=new Set(R.workloads.map((P)=>P.id)),re={baseOnly:y.workloads.filter((P)=>!X.has(P.id)),candOnly:R.workloads.filter((P)=>!K.has(P.id))};R.unmatched={baseOnly:re.baseOnly.map((P)=>P.id),candOnly:re.candOnly.map((P)=>P.id)};let de=0,pe=0,fe=0;for(let P of H){if(!P.timing)continue;if(P.timing.verdict==="regressed")de++;else if(P.timing.verdict==="improved")pe++;else fe++}let Ie=Math.max(i.thresholds.timingPct,y.environment?.noise.floorPct??0,A?.noise.floorPct??0);return R.comparisonSummary={matched:H.length,regressed:de,improved:pe,unchanged:fe,geomeanPct:B(H),effectiveTimingPct:Ie,verdict:H.some((P)=>P.verdict==="fail")?"fail":"pass"},{document:R,summary:{total:N.length,cached:q,executed:E,passed:D,regressed:S,missingBaseline:I,failed:V,results:N,unmatched:re},baseline:y}}function Ce(d){let i=[];if(i.push(`${d.total} workloads`),i.push(`${d.cached} cached`),i.push(`${d.executed} executed`),d.missingBaseline>0)i.push(`${d.missingBaseline} skipped (no matching baseline workload)`);if(d.failed>0){let v=d.results.filter((y)=>y.harnessFailed).map((y)=>n(y.workload));i.push(`${d.failed} failed (harness error, every trial exited non-zero: ${v.join(", ")})`)}let h=d.results.filter((v)=>v.comparison?.verdict==="fail").map((v)=>{let y=v.comparison.timing,x=n(v.workload);return y?`${y.medianDeltaPct>0?"+":""}${y.medianDeltaPct.toFixed(1)}% median on ${x}`:x});return i.push(`${d.passed} passed ${d.regressed} regressed${h.length>0?` (${h.join(", ")})`:""}`),i.push(""),i.push(`Profile CI: ${d.regressed>0||d.failed>0?"\u2717":"\u2713"}`),`${i.join(`
3
+ import{e,m,x,t,P,d,o,f,E,a,r,g,h}from"./chunk-1wydyvyj.js";import{c,W,j,C,S,s,L,I,_,H,J,b,z,w,n,u,i,V}from"./chunk-cf9hya3b.js";function he(p){return e("cache",p.workloadId,p.phase,p.configFingerprint,p.bunVersion,p.toolVersion,p.instrumented,p.inputsDigest??null)}async function ge(p,l=process.cwd()){if(p.length===0)return;let k=await I(p,l),y=await Promise.all(k.map(async(v)=>{let M=await Bun.file(`${l}/${v}`).arrayBuffer();return{path:v,sha256:Bun.CryptoHasher.hash("sha256",M,"hex")}}));return e("inputs",y)}function be(p,l){return`${p}/cache/${l}.json`}async function we(p,l){let k=Bun.file(be(p,l));if(!await k.exists())return;return await k.json()}async function ke(p,l,k){await Bun.write(be(p,l),`${JSON.stringify(k,null,2)}
4
+ `)}var ve=600000;class ie extends Error{path;constructor(p){super(`No baseline document at ${p}. Create one with: ostia time --export-json ${p} <command...>`);this.path=p}}class re extends Error{path;missing;total;constructor(p,l,k){super(`${l} of ${k} configured workload(s) have no matching row in baseline ${p} (by workload id). Re-seed with: ostia baseline save`);this.path=p;this.missing=l;this.total=k}}function De(p,l,k){if(p)return p;return l===k?"fail":"warn"}function Ie(p,l=[]){let k=new Set(l),y=p.filter((v)=>!v.timedOut&&!v.timeSourceNoMatch).map((v)=>v.exitCode).filter((v)=>v!==void 0);return y.length>0&&y.every((v)=>v!==0&&!k.has(v))}async function me(p,l){let k=p.noiseCheck===!1?void 0:g(),y=k?h(k):void 0,v=[];for(let M of p.workloads){if(M.suites){let D=await H(M.suites,process.cwd()),ee=await b({suites:D,outDir:p.outDir,noiseCheck:!1,budgetMs:p.bench?.budgetMs,samples:p.bench?.samples,minSamples:p.bench?.minSamples,gc:p.bench?.gc,cpu:p.bench?.cpu,alloc:p.bench?.alloc,filter:p.bench?.filter,isolate:p.bench?.isolate,preload:p.bench?.preload,jobs:typeof p.bench?.jobs==="number"?p.bench.jobs:void 0,timeoutMs:p.bench?.timeoutMs??ve});for(let Y of ee.workloads){let X=ee.measurements.find((N)=>N.workloadId===Y.id&&N.phase==="timing");if(!X)continue;if(y)X.warnings.push(y);v.push({workload:Y,status:"executed",run:X,harnessFailed:!1})}continue}let R=P(M.command,M.label,{prepare:M.prepare,timeSource:M.timeSource}),A=await ge(M.inputs??[]),T=o({runs:p.runs,warmup:p.warmup}),K=typeof M.prepare!=="function",B=he({workloadId:R.id,phase:"timing",configFingerprint:T,bunVersion:Bun.version,toolVersion:x,instrumented:!1,inputsDigest:A}),U=l||!K?void 0:await we(p.outDir,B),G,O;if(U)G=U,O="cached";else{let D=await z({argv:M.command,samples:p.runs??void 0,warmup:p.warmup,prepare:M.prepare,timeSource:M.timeSource,timeoutMs:M.timeoutMs??ve,ignoreExitCodes:M.ignoreExitCodes,failOnNonzero:M.failOnNonzero});if(G=d({workload:R,configFingerprint:T,trials:D.trials,timing:D.timing,warnings:y?[...D.warnings,y]:D.warnings}),K)await ke(p.outDir,B,G);O="executed"}v.push({workload:R,status:O,run:G,harnessFailed:Ie(G.trials,M.ignoreExitCodes)})}return{results:v,environment:k}}async function ye(p){let{config:l}=p,k=s(l,p.baselineName);if(!await Bun.file(k).exists())throw new ie(k);let v=await r(k),{results:M,environment:R}=await me(l,p.full),A=M.map((N)=>({...N})),T=A.filter((N)=>N.status==="executed").length,K=A.length-T,B=A.filter((N)=>N.harnessFailed).length,U=t(A.map((N)=>N.workload),A.map((N)=>N.run),R),G=0,O=0,D=0,ee=W(v,U,l.thresholds);for(let N of A){let de=ee.compare(N.workload.id);if(!de){D++;continue}if(N.comparison=de,de.verdict==="pass")G++;else O++}if(D>0){if(De(l.onMissingBaseline,D,A.length)==="fail")throw new re(k,D,A.length)}let Y=A.map((N)=>N.comparison).filter((N)=>N!==void 0);U.comparisons=Y;let X=ee.unmatched();return U.unmatched={baseOnly:X.baseOnly.map((N)=>N.id),candOnly:X.candOnly.map((N)=>N.id)},U.comparisonSummary=j(Y,ee.effectiveTimingPct),{document:U,summary:{total:A.length,cached:K,executed:T,passed:G,regressed:O,missingBaseline:D,failed:B,results:A,unmatched:X},baseline:v}}function Ce(p){let l=[];if(l.push(`${p.total} workloads`),l.push(`${p.cached} cached`),l.push(`${p.executed} executed`),p.missingBaseline>0)l.push(`${p.missingBaseline} skipped (no matching baseline workload)`);if(p.failed>0){let y=p.results.filter((v)=>v.harnessFailed).map((v)=>n(v.workload));l.push(`${p.failed} failed (harness error, every trial exited non-zero: ${y.join(", ")})`)}let k=p.results.filter((y)=>y.comparison?.verdict==="fail").map((y)=>{let v=y.comparison.timing,M=n(y.workload);return v?`${v.medianDeltaPct>0?"+":""}${v.medianDeltaPct.toFixed(1)}% median on ${M}`:M});return l.push(`${p.passed} passed ${p.regressed} regressed${k.length>0?` (${k.join(", ")})`:""}`),l.push(""),l.push(`Profile CI: ${p.regressed>0||p.failed>0?"\u2717":"\u2713"}`),`${l.join(`
5
5
  `)}
6
- `}async function xe(d,i){let{results:h,environment:v}=await le(d,!1),y=t(h.map((A)=>A.workload),h.map((A)=>A.run),v),x=s(d,i);return await c(y,x),x}async function Pe(d){let i=[];try{let v=new Bun.Glob("*.json");for await(let y of v.scan({cwd:d.baselineDir,absolute:!1}))i.push(y.replace(/\.json$/,""))}catch{return[]}return i.sort(),(await Promise.all(i.map(async(v)=>{let y=s(d,v);try{let x=await r(y);return{name:v,path:y,createdAt:x.createdAt,toolVersion:x.toolVersion,bunVersion:x.bunVersion,workloads:x.workloads.length,...x.git!==void 0&&{git:x.git}}}catch{return}}))).filter((v)=>v!==void 0)}function Z(d){return d instanceof Error?d.message:String(d)}class F extends Error{}function O(d,i,h){process.stderr.write(i.endsWith(`
7
- `)?i:`${i}
8
- `),process.stderr.write(`${JSON.stringify({event:"error",protocolVersion:l,code:d,message:i.split(`
9
- `)[0],...h&&{data:h}})}
10
- `)}function Q(d,i){if(!(d instanceof F))throw d;return O("invalid-flag",`${d.message}
11
- Run 'ostia ${i} --help'.`),2}function z(d,i,h={}){if(h.allowAuto&&i==="auto")return j();let v=h.min??1,y=Number(i);if(!Number.isInteger(y)||y<v)throw new F(`Invalid ${d} "${i}": expected an integer \u2265 ${v}${h.allowAuto?' (or "auto")':""}`);return y}function $e(d,i,h={}){let v=h.min??0,y=Number(i);if(!Number.isFinite(y)||y<v)throw new F(`Invalid ${d} "${i}": expected a number \u2265 ${v}`);return y}var ee=["table","json","jsonl","markdown","minimal"],me=["collapsed","mermaid","speedscope","cpuprofile"],Fe=[...ee,...me];function te(d,i){if(i.includes(d))return!0;return O("invalid-flag",`Unknown --format "${d}". Expected one of: ${i.join(", ")}`),!1}var ce=`No CPU evidence in this document; rerun with --cpu (ostia time) or --cpu (ostia bench)
12
- `;function Ae(d){return d.measurements.some((i)=>i.phase==="cpu")}async function ue(d,i,h={}){if(i.exportJson)await c(d,i.exportJson);if(i.quiet)return 0;if(me.includes(i.format)&&!Ae(d))return O("no-cpu-evidence",ce),2;return await Y(await o[i.format].render(d,h)),0}async function ae(d){let i=await T();if(!i){O("config-missing",d?`No ostia.config.json found. "${d}" needs configured workloads.`:"No ostia.config.json found.");return}if(d&&i.workloads.length===0){let h=await W()??"ostia.config.json";O("config-missing",`${h} has no "workloads" configured.`);return}return i}async function Y(d,i){if(d.text)process.stdout.write(d.text);if(!d.files||d.files.length===0)return;if(i)for(let h of d.files){let v=h.path?`${i}/${h.path}`:i;await Bun.write(v,h.content),process.stdout.write(`wrote ${v}
13
- `)}else if(d.files.length===1)process.stdout.write(d.files[0].content);else for(let h of d.files)process.stdout.write(`--- ${h.path??"(unnamed)"} ---
14
- ${h.content}
15
- `)}var Be=`ostia time [flags] <command...>
6
+ `}async function xe(p,l){let{results:k,environment:y}=await me(p,!1),v=t(k.map((R)=>R.workload),k.map((R)=>R.run),y),M=s(p,l);return await a(v,M),M}async function Pe(p){let l=[];try{let y=new Bun.Glob("*.json");for await(let v of y.scan({cwd:p.baselineDir,absolute:!1}))l.push(v.replace(/\.json$/,""))}catch{return[]}return l.sort(),(await Promise.all(l.map(async(y)=>{let v=s(p,y);try{let M=await r(v);return{name:y,path:v,createdAt:M.createdAt,toolVersion:M.toolVersion,bunVersion:M.bunVersion,workloads:M.workloads.length,...M.git!==void 0&&{git:M.git}}}catch{return}}))).filter((y)=>y!==void 0)}function te(p){return p instanceof Error?p.message:String(p)}var q=(p)=>Bun.write(Bun.stdout,p),$e=(p)=>Bun.write(Bun.stderr,p);class Q extends Error{}async function F(p,l,k){await $e(l.endsWith(`
7
+ `)?l:`${l}
8
+ `),await $e(`${JSON.stringify({event:"error",protocolVersion:u,code:p,message:l.split(`
9
+ `)[0],...k&&{data:k}})}
10
+ `)}async function Z(p,l){return await q(p),l?0:2}async function Fe(p,l){if(!(p instanceof Q))throw p;return await F("invalid-flag",`${p.message}
11
+ Run 'ostia ${l} --help'.`),2}function Be(p,l,k={}){if(k.allowAuto&&l==="auto")return _();let y=k.min??1,v=Number(l);if(!Number.isInteger(v)||v<y)throw new Q(`Invalid ${p} "${l}": expected an integer \u2265 ${y}${k.allowAuto?' (or "auto")':""}`);return v}function Le(p,l,k={}){let y=k.min??0,v=Number(l);if(!Number.isFinite(v)||v<y)throw new Q(`Invalid ${p} "${l}": expected a number \u2265 ${y}`);return v}var se=["table","json","jsonl","markdown","minimal"],pe=["collapsed","mermaid","speedscope","cpuprofile"],Ue=[...se,...pe];function oe(p,l){if(l.includes(p))return;throw new Q(`Unknown --format "${p}". Expected one of: ${l.join(", ")}`)}var ue=`No CPU evidence in this document; rerun with --cpu (ostia time) or --cpu (ostia bench)
12
+ `;function Ee(p){return p.measurements.some((l)=>l.phase==="cpu")}async function fe(p,l,k={}){if(l.format==="json"&&l.exportJson){let y=f(p);if(await E(y,l.exportJson),!l.quiet)await q(y);return 0}if(l.exportJson)await a(p,l.exportJson);if(l.quiet)return 0;if(pe.includes(l.format)&&!Ee(p))return await F("no-cpu-evidence",ue),2;return await ne(await i[l.format].render(p,k)),0}async function le(p){let l=await S();if(!l){await F("config-missing",p?`No ostia.config.json found. "${p}" needs configured workloads.`:"No ostia.config.json found.");return}if(p&&l.workloads.length===0){let k=await L()??"ostia.config.json";await F("config-missing",`${k} has no "workloads" configured.`);return}return l}async function ne(p,l){if(p.text)await q(p.text);if(!p.files||p.files.length===0)return;if(l)for(let k of p.files){let y=k.path?`${l}/${k.path}`:l;await Bun.write(y,k.content),await q(`wrote ${y}
13
+ `)}else if(p.files.length===1)await q(p.files[0].content);else for(let k of p.files)await q(`--- ${k.path??"(unnamed)"} ---
14
+ ${k.content}
15
+ `)}var _e=`ostia time [flags] <command...>
16
16
  ostia time [flags] -- <argv...>
17
17
 
18
18
  Time one or more commands N times with warmup and report timing statistics. Each
@@ -95,7 +95,7 @@ Examples:
95
95
  ostia time --ignore-failure=3 "bun flaky.ts"
96
96
  ostia time --fail-on-nonzero "bun might-hang-if-broken.ts"
97
97
  ostia time -- bun -e "console.log('a b')" # argument with a space, unsplit
98
- `,Ue=Array.from({length:255},(d,i)=>i+1),je=`ostia bench [flags] <suite.ts...>
98
+ `,We=Array.from({length:255},(p,l)=>l+1),je=`ostia bench [flags] <suite.ts...>
99
99
 
100
100
  Run in-process benchmark suites (registered via group()/task()). Each suite file runs
101
101
  in its own spawned child process (isolated from CLI startup state).
@@ -211,7 +211,7 @@ Examples:
211
211
  ostia bench --preload ./bench/jsdom-setup.ts benches/*.dom.bench.ts
212
212
  ostia bench --bun-flags="--conditions=browser" bench/*.dom.bench.ts
213
213
  ostia bench # picks up suites/preload/jobs from ostia.config.json
214
- `,Me=`ostia compare <base.json> <candidate.json>
214
+ `,Se=`ostia compare <base.json> <candidate.json>
215
215
  ostia compare <candidate.json> --baseline <path.json>
216
216
 
217
217
  Compare two ProfileDocuments (matched by workload id) and rank timing/frame/heap deltas.
@@ -239,7 +239,7 @@ matched workloads) or a harness error (documents failed to load, or a bad flag).
239
239
  Examples:
240
240
  ostia compare before.json after.json
241
241
  ostia compare after.json --baseline .ostia/baselines/main.json
242
- `,We=`ostia report <document.json> [flags]
242
+ `,qe=`ostia report <document.json> [flags]
243
243
 
244
244
  Render a saved ProfileDocument. Files, not a GUI for the visualization formats -
245
245
  hand the output to speedscope.app, flamegraph.pl, or a Mermaid renderer.
@@ -267,7 +267,7 @@ Examples:
267
267
  ostia report doc.json --format markdown
268
268
  ostia report doc.json --format speedscope --out-dir node_modules/.cache/ostia/viz
269
269
  ostia report doc.json --format collapsed | flamegraph.pl > flame.svg
270
- `,Le=`ostia ci [--full] [--baseline NAME] [--save-baseline]
270
+ `,He=`ostia ci [--full] [--baseline NAME] [--save-baseline]
271
271
 
272
272
  Load ostia.config.json, run configured workloads (reusing cached results when their
273
273
  fingerprint is unchanged), compare against the named baseline, and gate on regressions.
@@ -291,7 +291,7 @@ Flags:
291
291
 
292
292
  Exit codes: 0 pass, 1 regression, 2 harness error (missing config/baseline, every trial of
293
293
  a workload exited non-zero, an "onMissingBaseline: fail" mismatch, or a spawn failure).
294
- `,oe=`ostia baseline <save|list|show> [args]
294
+ `,ce=`ostia baseline <save|list|show> [args]
295
295
 
296
296
  Manage the baseline ProfileDocuments "ostia ci" gates against and "ostia compare --baseline"
297
297
  reads.
@@ -310,24 +310,24 @@ Examples:
310
310
  ostia baseline list
311
311
  ostia baseline show main
312
312
  ostia baseline show main --format markdown
313
- `;function _e(d){let i={commands:[],prepare:[],interleave:!0,cpu:!1,heap:!1,ignoreExitCodes:[],failOnNonzero:!1,noiseCheck:!0,format:"table",quiet:!1,help:!1};for(let h=0;h<d.length;h++){let v=d[h];if(v==="--"){i.argvCommand=d.slice(h+1);break}if(v==="--ignore-failure"||v.startsWith("--ignore-failure=")){let y=v.startsWith("--ignore-failure=")?v.slice(17):void 0;i.ignoreExitCodes.push(...y===void 0?Ue:y.split(",").map(Number));continue}switch(v){case"--samples":i.samples=z("--samples",d[++h],{min:1});break;case"--budget":i.budgetMs=z("--budget",d[++h],{min:1});break;case"--min-samples":i.minSamples=z("--min-samples",d[++h],{min:1});break;case"--warmup":i.warmup=z("--warmup",d[++h],{min:0});break;case"--no-interleave":i.interleave=!1;break;case"--prepare":i.prepare.push(d[++h]??"");break;case"--time-source":i.timeSource=d[++h];break;case"--time-unit":i.timeUnit=d[++h];break;case"--cpu":i.cpu=!0;break;case"--heap":i.heap=!0;break;case"--cpu-interval":i.cpuIntervalUs=z("--cpu-interval",d[++h],{min:1});break;case"--timeout":i.timeoutMs=Number(d[++h]);break;case"--fail-on-nonzero":i.failOnNonzero=!0;break;case"--out-dir":i.outDir=d[++h];break;case"--no-noise-check":i.noiseCheck=!1;break;case"--export-json":i.exportJson=d[++h];break;case"--format":i.format=d[++h];break;case"--quiet":i.quiet=!0;break;case"--help":case"-h":i.help=!0;break;default:if(v.startsWith("-"))throw new F(`Unknown flag "${v}" for "ostia time".`);i.commands.push(v)}}return i}async function Oe(d){let i=new AbortController,h=()=>i.abort();process.on("SIGINT",h);try{return{result:await d(i.signal),aborted:i.signal.aborted}}finally{process.off("SIGINT",h)}}var Ne=["ns","us","ms","s"];async function qe(d){let i;try{i=_e(d)}catch(S){return Q(S,"time")}let h=(i.argvCommand?.length??0)>0;if(i.help||i.commands.length===0&&!h)return process.stdout.write(Be),i.help?0:2;if(!te(i.format,ee))return 2;let v=i.commands.length+(h?1:0);if(i.prepare.length>1&&i.prepare.length!==v)return O("invalid-flag",`--prepare given ${i.prepare.length} times for ${v} command(s): give it once (applies to all) or once per command.`),2;if(i.timeUnit!==void 0&&!Ne.includes(i.timeUnit))return O("invalid-flag",`Unknown --time-unit "${i.timeUnit}". Expected one of: ${Ne.join(", ")}`),2;if(i.timeSource!==void 0)try{new RegExp(i.timeSource)}catch(S){return O("invalid-flag",`Invalid --time-source regex: ${Z(S)}`),2}let y=i.timeSource!==void 0?{pattern:i.timeSource,unit:i.timeUnit}:void 0,x=(S)=>i.prepare.length===1?i.prepare[0]:i.prepare[S],A=i.commands.map((S,I)=>({command:S,prepare:x(I)}));if(h)A.push({command:i.argvCommand,prepare:x(i.commands.length)});let N,E;try{({result:N,aborted:E}=await Oe((S)=>_({commands:A,timeSource:y,samples:i.samples,budgetMs:i.budgetMs,minSamples:i.minSamples,warmup:i.warmup,interleave:i.interleave,cpu:i.cpu,heap:i.heap,cpuIntervalUs:i.cpuIntervalUs,timeoutMs:i.timeoutMs,ignoreExitCodes:i.ignoreExitCodes,failOnNonzero:i.failOnNonzero,outDir:i.outDir,noiseCheck:i.noiseCheck,signal:S})))}catch(S){return O("spawn-failed",`Run failed: ${Z(S)}`),2}let q=await ue(N,i);if(q!==0)return q;if(E)return 130;let V=new Set(i.ignoreExitCodes),R=N.workloads.some((S)=>!N.measurements.some((I)=>I.workloadId===S.id&&I.timing)),D=N.measurements.some((S)=>S.trials.some((I)=>I.exitCode!==void 0&&I.exitCode!==0&&!V.has(I.exitCode)));if(D||R){let S=N.measurements.some((K)=>K.warnings.some((X)=>X.code==="timeout")),I=N.measurements.some((K)=>K.warnings.some((X)=>X.code==="time-source-no-match"));return O(D?"command-failed":S?"timeout":I?"time-source-no-match":"command-failed","One or more commands failed to produce a clean measurement; see the report above for details."),2}return 0}function He(d){let i={suites:[],preload:[],bunFlags:[],noiseCheck:!0,format:"table",quiet:!1,help:!1};for(let h=0;h<d.length;h++){let v=d[h];if(v==="--bun-flags"||v.startsWith("--bun-flags=")){let y=v.startsWith("--bun-flags=")?v.slice(12):d[++h]??"";i.bunFlags.push(...b(y));continue}switch(v){case"--budget":i.budgetMs=z("--budget",d[++h],{min:1});break;case"--samples":i.samples=z("--samples",d[++h],{min:1});break;case"--min-samples":i.minSamples=z("--min-samples",d[++h],{min:1});break;case"--jobs":i.jobs=z("--jobs",d[++h],{min:1,allowAuto:!0});break;case"--gc":i.gc=!0;break;case"--no-gc":i.gc=!1;break;case"--cpu":i.cpu=!0;break;case"--no-cpu":i.cpu=!1;break;case"--alloc":i.alloc=!0;break;case"--no-alloc":i.alloc=!1;break;case"--filter":i.filter=d[++h];break;case"--isolate":i.isolate=!0;break;case"--no-isolate":i.isolate=!1;break;case"--preload":i.preload.push(d[++h]);break;case"--timeout":i.timeoutMs=Number(d[++h]);break;case"--out-dir":i.outDir=d[++h];break;case"--no-noise-check":i.noiseCheck=!1;break;case"--export-json":i.exportJson=d[++h];break;case"--format":i.format=d[++h];break;case"--quiet":i.quiet=!0;break;case"--help":case"-h":i.help=!0;break;default:if(v.startsWith("-"))throw new F(`Unknown flag "${v}" for "ostia bench".`);i.suites.push(v)}}return i}async function Je(d){let i;try{i=He(d)}catch(N){return Q(N,"bench")}if(i.help)return process.stdout.write(je),0;if(!te(i.format,ee))return 2;let h=await T(),v=await G(i,h?.bench);if(v.suites.length===0)return process.stdout.write(je),2;if(v.jobs!==void 0&&!(v.jobs>=1))return O("invalid-flag",'--jobs expects a positive integer or "auto".'),2;let y,x;try{({result:y,aborted:x}=await Oe((N)=>f({...v,signal:N})))}catch(N){return O("spawn-failed",`Bench failed: ${Z(N)}`),2}let A=await ue(y,i);if(A!==0)return A;return x?130:0}function ze(d){let i={paths:[],format:"table",quiet:!1,help:!1,noConfig:!1};for(let h=0;h<d.length;h++){let v=d[h];switch(v){case"--baseline":i.baseline=d[++h];break;case"--export-json":i.exportJson=d[++h];break;case"--format":i.format=d[++h];break;case"--timing-pct":i.timingPct=$e("--timing-pct",d[++h]);break;case"--alpha":i.alpha=$e("--alpha",d[++h]);break;case"--no-config":i.noConfig=!0;break;case"--quiet":i.quiet=!0;break;case"--help":case"-h":i.help=!0;break;default:if(v.startsWith("-"))throw new F(`Unknown flag "${v}" for "ostia compare".`);i.paths.push(v)}}return i}async function Ve(d){let i=u,h="defaults";if(!d.noConfig){let v=await T();if(v)i=v.thresholds,h=await W()??"ostia.config.json"}if(d.timingPct!==void 0||d.alpha!==void 0)i={...i,...d.timingPct!==void 0&&{timingPct:d.timingPct},...d.alpha!==void 0&&{alpha:d.alpha}};return{thresholds:i,source:h}}async function Ge(d){let i;try{i=ze(d)}catch(S){return Q(S,"compare")}if(i.help)return process.stdout.write(Me),0;if(!te(i.format,ee))return 2;let h,v;if(i.baseline)h=i.baseline,v=i.paths[0];else h=i.paths[0],v=i.paths[1];if(!h||!v)return process.stdout.write(Me),2;let y,x;try{[y,x]=await Promise.all([r(h),r(v)])}catch(S){return O("document-load-failed",`Failed to load documents: ${Z(S)}`),2}let{thresholds:A,source:N}=await Ve(i),E=M(y,x,A),q={...x,comparisons:E.comparisons,comparisonSummary:E.summary,unmatched:{baseOnly:E.unmatched.baseOnly.map((S)=>S.id),candOnly:E.unmatched.candOnly.map((S)=>S.id)}},V=i.format==="table"||i.format==="markdown";if(!i.quiet&&V){if(process.stdout.write(`thresholds: ${N}
314
- `),y.git&&x.git)process.stdout.write(`base ${g(y.git)} \u2192 cand ${g(x.git)}
315
- `);if(i.format==="table"&&E.summary.effectiveTimingPct>A.timingPct)process.stdout.write(`threshold ${A.timingPct}% (widened to ${E.summary.effectiveTimingPct.toFixed(1)}% by noise floor)
316
- `)}let R=E.summary.matched===0?2:E.summary.verdict==="fail"?1:0,D=await ue(q,i,{protocol:{command:"compare",exitCode:R,unmatched:E.unmatched,baseGit:y.git,candGit:x.git,...i.exportJson&&{exportedTo:i.exportJson}}});if(D!==0)return D;if(!i.quiet&&(i.format==="table"||i.format==="markdown")&&(E.unmatched.baseOnly.length>0||E.unmatched.candOnly.length>0))process.stdout.write(Ke(E.unmatched,i.format));if(E.summary.matched===0)O("no-matches","No workload matched between base and candidate; nothing was compared.");return R}function Ke(d,i){let h=(y)=>y.map((x)=>n(x)).join(", ");if(i==="markdown"){let y=["### Unmatched",""];if(d.baseOnly.length>0)y.push(`- baseline only: ${h(d.baseOnly)}`);if(d.candOnly.length>0)y.push(`- candidate only: ${h(d.candOnly)}`);return y.push(""),`${y.join(`
313
+ `;function ae(p,l,k,y,v,M){let R=y;for(let A=0;A<p.length;A++){let T=p[A],K=M?.(T,A,y);if(K!==void 0){A=K;continue}let B=k[T];if(!B){if(T.startsWith("-"))throw new Q(`Unknown flag "${T}" for "ostia ${l}".`);v(T,y);continue}switch(B.spec.kind){case"string":R[B.dest]=p[++A];break;case"int":R[B.dest]=Be(T,p[++A],B.spec);break;case"float":R[B.dest]=Le(T,p[++A],B.spec);break;case"bool":R[B.dest]=B.spec.value;break;case"list":R[B.dest].push(p[++A]??"");break;case"enum":{let U=p[++A];if(!B.spec.values.includes(U))throw new Q(`Invalid ${T} "${U}": expected one of: ${B.spec.values.join(", ")}`);R[B.dest]=U;break}}}return y}var Je={"--samples":{dest:"samples",spec:{kind:"int",min:1}},"--budget":{dest:"budgetMs",spec:{kind:"int",min:1}},"--min-samples":{dest:"minSamples",spec:{kind:"int",min:1}},"--warmup":{dest:"warmup",spec:{kind:"int",min:0}},"--no-interleave":{dest:"interleave",spec:{kind:"bool",value:!1}},"--prepare":{dest:"prepare",spec:{kind:"list"}},"--time-source":{dest:"timeSource",spec:{kind:"string"}},"--time-unit":{dest:"timeUnit",spec:{kind:"string"}},"--cpu":{dest:"cpu",spec:{kind:"bool",value:!0}},"--heap":{dest:"heap",spec:{kind:"bool",value:!0}},"--cpu-interval":{dest:"cpuIntervalUs",spec:{kind:"int",min:1}},"--timeout":{dest:"timeoutMs",spec:{kind:"int",min:1}},"--fail-on-nonzero":{dest:"failOnNonzero",spec:{kind:"bool",value:!0}},"--out-dir":{dest:"outDir",spec:{kind:"string"}},"--no-noise-check":{dest:"noiseCheck",spec:{kind:"bool",value:!1}},"--export-json":{dest:"exportJson",spec:{kind:"string"}},"--format":{dest:"format",spec:{kind:"string"}},"--quiet":{dest:"quiet",spec:{kind:"bool",value:!0}},"--help":{dest:"help",spec:{kind:"bool",value:!0}},"-h":{dest:"help",spec:{kind:"bool",value:!0}}};function ze(p){return ae(p,"time",Je,{commands:[],prepare:[],interleave:!0,cpu:!1,heap:!1,ignoreExitCodes:[],failOnNonzero:!1,noiseCheck:!0,format:"table",quiet:!1,help:!1},(k,y)=>y.commands.push(k),(k,y,v)=>{if(k==="--")return v.argvCommand=p.slice(y+1),p.length;if(k==="--ignore-failure"||k.startsWith("--ignore-failure=")){let M=k.startsWith("--ignore-failure=")?k.slice(17):void 0;return v.ignoreExitCodes.push(...M===void 0?We:M.split(",").map(Number)),y}return})}async function Te(p){let l=new AbortController,k=()=>l.abort();process.on("SIGINT",k);try{return{result:await p(l.signal),aborted:l.signal.aborted}}finally{process.off("SIGINT",k)}}var Me=["ns","us","ms","s"];async function Ge(p){let l=ze(p),k=(l.argvCommand?.length??0)>0;if(l.help||l.commands.length===0&&!k)return Z(_e,l.help);oe(l.format,se);let y=l.commands.length+(k?1:0);if(l.prepare.length>1&&l.prepare.length!==y)return await F("invalid-flag",`--prepare given ${l.prepare.length} times for ${y} command(s): give it once (applies to all) or once per command.`),2;if(l.timeUnit!==void 0&&!Me.includes(l.timeUnit))return await F("invalid-flag",`Unknown --time-unit "${l.timeUnit}". Expected one of: ${Me.join(", ")}`),2;if(l.timeSource!==void 0)try{new RegExp(l.timeSource)}catch(O){return await F("invalid-flag",`Invalid --time-source regex: ${te(O)}`),2}let v=l.timeSource!==void 0?{pattern:l.timeSource,unit:l.timeUnit}:void 0,M=(O)=>l.prepare.length===1?l.prepare[0]:l.prepare[O],R=l.commands.map((O,D)=>({command:O,prepare:M(D)}));if(k)R.push({command:l.argvCommand,prepare:M(l.commands.length)});let A,T;try{({result:A,aborted:T}=await Te((O)=>V({commands:R,timeSource:v,samples:l.samples,budgetMs:l.budgetMs,minSamples:l.minSamples,warmup:l.warmup,interleave:l.interleave,cpu:l.cpu,heap:l.heap,cpuIntervalUs:l.cpuIntervalUs,timeoutMs:l.timeoutMs,ignoreExitCodes:l.ignoreExitCodes,failOnNonzero:l.failOnNonzero,outDir:l.outDir,noiseCheck:l.noiseCheck,signal:O})))}catch(O){return await F("spawn-failed",`Run failed: ${te(O)}`),2}let K=await fe(A,l);if(K!==0)return K;if(T)return 130;let B=new Set(l.ignoreExitCodes),U=A.workloads.some((O)=>!A.measurements.some((D)=>D.workloadId===O.id&&D.timing)),G=A.measurements.some((O)=>O.trials.some((D)=>D.exitCode!==void 0&&D.exitCode!==0&&!B.has(D.exitCode)));if(G||U){let O=A.measurements.some((Y)=>Y.warnings.some((X)=>X.code==="timeout")),D=A.measurements.some((Y)=>Y.warnings.some((X)=>X.code==="time-source-no-match"));return await F(G?"command-failed":O?"timeout":D?"time-source-no-match":"command-failed","One or more commands failed to produce a clean measurement; see the report above for details."),2}return 0}var Ve={"--budget":{dest:"budgetMs",spec:{kind:"int",min:1}},"--samples":{dest:"samples",spec:{kind:"int",min:1}},"--min-samples":{dest:"minSamples",spec:{kind:"int",min:1}},"--jobs":{dest:"jobs",spec:{kind:"int",min:1,allowAuto:!0}},"--gc":{dest:"gc",spec:{kind:"bool",value:!0}},"--no-gc":{dest:"gc",spec:{kind:"bool",value:!1}},"--cpu":{dest:"cpu",spec:{kind:"bool",value:!0}},"--no-cpu":{dest:"cpu",spec:{kind:"bool",value:!1}},"--alloc":{dest:"alloc",spec:{kind:"bool",value:!0}},"--no-alloc":{dest:"alloc",spec:{kind:"bool",value:!1}},"--filter":{dest:"filter",spec:{kind:"string"}},"--isolate":{dest:"isolate",spec:{kind:"bool",value:!0}},"--no-isolate":{dest:"isolate",spec:{kind:"bool",value:!1}},"--preload":{dest:"preload",spec:{kind:"list"}},"--timeout":{dest:"timeoutMs",spec:{kind:"int",min:1}},"--out-dir":{dest:"outDir",spec:{kind:"string"}},"--no-noise-check":{dest:"noiseCheck",spec:{kind:"bool",value:!1}},"--export-json":{dest:"exportJson",spec:{kind:"string"}},"--format":{dest:"format",spec:{kind:"string"}},"--quiet":{dest:"quiet",spec:{kind:"bool",value:!0}},"--help":{dest:"help",spec:{kind:"bool",value:!0}},"-h":{dest:"help",spec:{kind:"bool",value:!0}}};function Ke(p){return ae(p,"bench",Ve,{suites:[],preload:[],bunFlags:[],noiseCheck:!0,format:"table",quiet:!1,help:!1},(k,y)=>y.suites.push(k),(k,y,v)=>{if(k==="--bun-flags")return v.bunFlags.push(...m(p[y+1]??"")),y+1;if(k.startsWith("--bun-flags="))return v.bunFlags.push(...m(k.slice(12))),y;return})}async function Xe(p){let l=Ke(p);if(l.help)return Z(je,!0);oe(l.format,se);let k=await S(),y=await J(l,k?.bench);if(y.suites.length===0)return Z(je,!1);if(y.jobs!==void 0&&!(y.jobs>=1))return await F("invalid-flag",'--jobs expects a positive integer or "auto".'),2;let v,M;try{({result:v,aborted:M}=await Te((A)=>b({...y,signal:A})))}catch(A){return await F("spawn-failed",`Bench failed: ${te(A)}`),2}let R=await fe(v,l);if(R!==0)return R;return M?130:0}var Ze={"--baseline":{dest:"baseline",spec:{kind:"string"}},"--export-json":{dest:"exportJson",spec:{kind:"string"}},"--format":{dest:"format",spec:{kind:"string"}},"--timing-pct":{dest:"timingPct",spec:{kind:"float"}},"--alpha":{dest:"alpha",spec:{kind:"float"}},"--no-config":{dest:"noConfig",spec:{kind:"bool",value:!0}},"--quiet":{dest:"quiet",spec:{kind:"bool",value:!0}},"--help":{dest:"help",spec:{kind:"bool",value:!0}},"-h":{dest:"help",spec:{kind:"bool",value:!0}}};function Ye(p){return ae(p,"compare",Ze,{paths:[],format:"table",quiet:!1,help:!1,noConfig:!1},(k,y)=>y.paths.push(k))}async function Qe(p){let l=c,k="defaults";if(!p.noConfig){let y=await S();if(y)l=y.thresholds,k=await L()??"ostia.config.json"}if(p.timingPct!==void 0||p.alpha!==void 0)l={...l,...p.timingPct!==void 0&&{timingPct:p.timingPct},...p.alpha!==void 0&&{alpha:p.alpha}};return{thresholds:l,source:k}}async function et(p){let l=Ye(p);if(l.help)return Z(Se,!0);oe(l.format,se);let k,y;if(l.baseline)k=l.baseline,y=l.paths[0];else k=l.paths[0],y=l.paths[1];if(!k||!y)return Z(Se,!1);let v,M;try{[v,M]=await Promise.all([r(k),r(y)])}catch(O){return await F("document-load-failed",`Failed to load documents: ${te(O)}`),2}let{thresholds:R,source:A}=await Qe(l),T=C(v,M,R),K={...M,comparisons:T.comparisons,comparisonSummary:T.summary,unmatched:{baseOnly:T.unmatched.baseOnly.map((O)=>O.id),candOnly:T.unmatched.candOnly.map((O)=>O.id)}},B=l.format==="table"||l.format==="markdown";if(!l.quiet&&B){if(await q(`thresholds: ${A}
314
+ `),v.git&&M.git)await q(`base ${w(v.git)} \u2192 cand ${w(M.git)}
315
+ `);if(l.format==="table"&&T.summary.effectiveTimingPct>R.timingPct)await q(`threshold ${R.timingPct}% (widened to ${T.summary.effectiveTimingPct.toFixed(1)}% by noise floor)
316
+ `)}let U=T.summary.matched===0?2:T.summary.verdict==="fail"?1:0,G=await fe(K,l,{protocol:{command:"compare",exitCode:U,unmatched:T.unmatched,baseGit:v.git,candGit:M.git,...l.exportJson&&{exportedTo:l.exportJson}}});if(G!==0)return G;if(!l.quiet&&(l.format==="table"||l.format==="markdown")&&(T.unmatched.baseOnly.length>0||T.unmatched.candOnly.length>0))await q(tt(T.unmatched,l.format));if(T.summary.matched===0)await F("no-matches","No workload matched between base and candidate; nothing was compared.");return U}function tt(p,l){let k=(v)=>v.map((M)=>n(M)).join(", ");if(l==="markdown"){let v=["### Unmatched",""];if(p.baseOnly.length>0)v.push(`- baseline only: ${k(p.baseOnly)}`);if(p.candOnly.length>0)v.push(`- candidate only: ${k(p.candOnly)}`);return v.push(""),`${v.join(`
317
317
  `)}
318
- `}let v=["","Unmatched:"];if(d.baseOnly.length>0)v.push(` baseline only: ${h(d.baseOnly)}`);if(d.candOnly.length>0)v.push(` candidate only: ${h(d.candOnly)}`);return`${v.join(`
318
+ `}let y=["","Unmatched:"];if(p.baseOnly.length>0)y.push(` baseline only: ${k(p.baseOnly)}`);if(p.candOnly.length>0)y.push(` candidate only: ${k(p.candOnly)}`);return`${y.join(`
319
319
  `)}
320
- `}function Xe(d){let i={format:"table",help:!1};for(let h=0;h<d.length;h++){let v=d[h];switch(v){case"--format":i.format=d[++h]??"";break;case"--measurement":i.measurementId=d[++h];break;case"--out-dir":i.outDir=d[++h];break;case"--help":case"-h":i.help=!0;break;default:if(v.startsWith("-"))throw new F(`Unknown flag "${v}" for "ostia report".`);if(i.path!==void 0)throw new F(`"ostia report" takes exactly one document path, got "${i.path}" and "${v}".`);i.path=v}}return i}async function Te(d){let i;try{i=Xe(d)}catch(x){return Q(x,"report")}if(i.help||!i.path)return process.stdout.write(We),i.help?0:2;if(!te(i.format,Fe))return 2;let h;try{h=await r(i.path)}catch(x){return O("document-load-failed",`Failed to load ${i.path}: ${Z(x)}`),2}if(me.includes(i.format)&&!i.measurementId&&!Ae(h))return O("no-cpu-evidence",ce),2;let y=await o[i.format].render(h,{measurementId:i.measurementId});if(!y.text&&(!y.files||y.files.length===0))return O("no-cpu-evidence",i.measurementId?`No CPU evidence found for measurement "${i.measurementId}".`:ce),2;return await Y(y,i.outDir),0}function Ze(d){let i={full:!1,saveBaseline:!1,format:"table",quiet:!1,help:!1,noNoiseCheck:!1};for(let h=0;h<d.length;h++){let v=d[h];switch(v){case"--full":i.full=!0;break;case"--baseline":i.baseline=d[++h];break;case"--save-baseline":i.saveBaseline=!0;break;case"--export-json":i.exportJson=d[++h];break;case"--format":i.format=d[++h];break;case"--on-missing-baseline":{let y=d[++h];if(y!=="warn"&&y!=="fail")throw new F(`Invalid --on-missing-baseline "${y}": expected "warn" or "fail".`);i.onMissingBaseline=y;break}case"--no-noise-check":i.noNoiseCheck=!0;break;case"--quiet":i.quiet=!0;break;case"--help":case"-h":i.help=!0;break;default:throw new F(`Unknown flag "${v}" for "ostia ci".`)}}return i}async function Ye(d){let i;try{i=Ze(d)}catch(A){return Q(A,"ci")}if(i.help)return process.stdout.write(Le),0;if(!te(i.format,ee))return 2;let h=await ae("ostia ci");if(!h)return 2;let v={...h,...i.onMissingBaseline!==void 0&&{onMissingBaseline:i.onMissingBaseline},...i.noNoiseCheck&&{noiseCheck:!1}},y;try{y=await ve({config:v,full:i.full,baselineName:i.baseline})}catch(A){if(A instanceof ne||A instanceof se)return O("baseline-missing",A.message),2;return O("spawn-failed",`CI run failed: ${Z(A)}`),2}if(i.exportJson)await c(y.document,i.exportJson);if(i.saveBaseline&&y.summary.regressed===0&&y.summary.failed===0)await c(y.document,s(v,i.baseline));let x=y.summary.failed>0?2:y.summary.regressed>0?1:0;if(y.summary.failed>0){let A=y.summary.results.filter((N)=>N.harnessFailed).map((N)=>n(N.workload));O("command-failed",`${y.summary.failed} workload(s) failed (harness error, every trial exited non-zero): ${A.join(", ")}`)}if(!i.quiet){let A=i.baseline??v.baseline;if(i.format==="table"){if(process.stdout.write(Ce(y.summary)),y.document.comparisons&&y.document.comparisons.length>0)await Y(await o.table.render(y.document,{}))}else if(i.format==="markdown")process.stdout.write(`## ostia ci
320
+ `}var nt={"--format":{dest:"format",spec:{kind:"string"}},"--measurement":{dest:"measurementId",spec:{kind:"string"}},"--out-dir":{dest:"outDir",spec:{kind:"string"}},"--help":{dest:"help",spec:{kind:"bool",value:!0}},"-h":{dest:"help",spec:{kind:"bool",value:!0}}};function st(p){return ae(p,"report",nt,{format:"table",help:!1},(k,y)=>{if(y.path!==void 0)throw new Q(`"ostia report" takes exactly one document path, got "${y.path}" and "${k}".`);y.path=k})}async function Re(p){let l=st(p);if(l.help||!l.path)return Z(qe,l.help);oe(l.format,Ue);let k;try{k=await r(l.path)}catch(M){return await F("document-load-failed",`Failed to load ${l.path}: ${te(M)}`),2}if(pe.includes(l.format)&&!l.measurementId&&!Ee(k))return await F("no-cpu-evidence",ue),2;let v=await i[l.format].render(k,{measurementId:l.measurementId});if(!v.text&&(!v.files||v.files.length===0))return await F("no-cpu-evidence",l.measurementId?`No CPU evidence found for measurement "${l.measurementId}".`:ue),2;return await ne(v,l.outDir),0}var ot={"--full":{dest:"full",spec:{kind:"bool",value:!0}},"--baseline":{dest:"baseline",spec:{kind:"string"}},"--save-baseline":{dest:"saveBaseline",spec:{kind:"bool",value:!0}},"--export-json":{dest:"exportJson",spec:{kind:"string"}},"--format":{dest:"format",spec:{kind:"string"}},"--on-missing-baseline":{dest:"onMissingBaseline",spec:{kind:"enum",values:["warn","fail"]}},"--no-noise-check":{dest:"noNoiseCheck",spec:{kind:"bool",value:!0}},"--quiet":{dest:"quiet",spec:{kind:"bool",value:!0}},"--help":{dest:"help",spec:{kind:"bool",value:!0}},"-h":{dest:"help",spec:{kind:"bool",value:!0}}};function at(p){return ae(p,"ci",ot,{full:!1,saveBaseline:!1,format:"table",quiet:!1,help:!1,noNoiseCheck:!1},(k)=>{throw new Q(`Unknown flag "${k}" for "ostia ci".`)})}async function it(p){let l=at(p);if(l.help)return Z(He,!0);oe(l.format,se);let k=await le("ostia ci");if(!k)return 2;let y={...k,...l.onMissingBaseline!==void 0&&{onMissingBaseline:l.onMissingBaseline},...l.noNoiseCheck&&{noiseCheck:!1}},v;try{v=await ye({config:y,full:l.full,baselineName:l.baseline})}catch(A){if(A instanceof ie||A instanceof re)return await F("baseline-missing",A.message),2;return await F("spawn-failed",`CI run failed: ${te(A)}`),2}let M=l.format==="json"&&!l.quiet?f(v.document):void 0;if(l.exportJson)if(M)await E(M,l.exportJson);else await a(v.document,l.exportJson);if(l.saveBaseline&&v.summary.regressed===0&&v.summary.failed===0)await a(v.document,s(y,l.baseline));let R=v.summary.failed>0?2:v.summary.regressed>0?1:0;if(v.summary.failed>0){let A=v.summary.results.filter((T)=>T.harnessFailed).map((T)=>n(T.workload));await F("command-failed",`${v.summary.failed} workload(s) failed (harness error, every trial exited non-zero): ${A.join(", ")}`)}if(!l.quiet){let A=l.baseline??y.baseline;if(l.format==="table"){if(await q(Ce(v.summary)),v.document.comparisons&&v.document.comparisons.length>0)await ne(await i.table.render(v.document,{}))}else if(M!==void 0)await q(M);else if(l.format==="markdown")await q(`## ostia ci
321
321
 
322
- Baseline: \`${A}\` (\`${s(v,i.baseline)}\`) \xB7 ${y.summary.cached} cached, ${y.summary.executed} executed
322
+ Baseline: \`${A}\` (\`${s(y,l.baseline)}\`) \xB7 ${v.summary.cached} cached, ${v.summary.executed} executed
323
323
 
324
- `),await Y(await o.markdown.render(y.document,{}));else await Y(await o[i.format].render(y.document,{protocol:{command:"ci",exitCode:x,unmatched:y.summary.unmatched,baseGit:y.baseline.git,candGit:y.document.git,baseline:{name:A,path:s(v,i.baseline)},cached:y.summary.cached,executed:y.summary.executed,failed:y.summary.failed,missingBaseline:y.summary.missingBaseline,...i.exportJson&&{exportedTo:i.exportJson}}}))}return x}var Se=/^[A-Za-z0-9._-]+$/;function Ee(d){if(d.startsWith("-"))return`Invalid baseline name "${d}": names can't start with "-".`;if(!Se.test(d))return`Invalid baseline name "${d}": expected to match ${Se}.`;return}async function Qe(d){if(d.includes("--help")||d.includes("-h"))return process.stdout.write(oe),0;if(d.length>1)return O("invalid-flag",`"ostia baseline save" takes at most one name argument, got ${d.length}.
325
- Run 'ostia baseline --help'.`),2;let i=d[0];if(i!==void 0){let y=Ee(i);if(y)return O("invalid-flag",`${y}
326
- Run 'ostia baseline --help'.`),2}let h=await ae("ostia baseline save");if(!h)return 2;let v=await xe(h,i);return process.stdout.write(`Wrote ${v}
327
- `),0}async function et(d){if(d.includes("--help")||d.includes("-h"))return process.stdout.write(oe),0;let i=await ae();if(!i)return 2;let h=await Pe(i);if(h.length===0)return process.stdout.write(`No baselines found in ${i.baselineDir}.
328
- `),0;for(let v of h){let y=v.git?` ${g(v.git)}`:"";process.stdout.write(`${v.name} ${v.workloads} workloads created ${v.createdAt} toolVersion ${v.toolVersion}${y}
329
- `)}return 0}async function tt(d){let[i,...h]=d;if(!i||i==="--help"||i==="-h")return process.stdout.write(oe),i?0:2;let v=Ee(i);if(v)return O("invalid-flag",`${v}
330
- Run 'ostia baseline --help'.`),2;let y=await ae();if(!y)return 2;return Te([s(y,i),...h])}async function nt(d){let[i,...h]=d;switch(i){case"save":return Qe(h);case"list":return et(h);case"show":return tt(h);case void 0:case"--help":case"-h":return process.stdout.write(oe),i===void 0?2:0;default:return O("invalid-flag",`Unknown "ostia baseline ${i}". Run "ostia baseline --help".`),2}}async function st(){let[d,...i]=process.argv.slice(2);switch(d){case"time":return qe(i);case"bench":return Je(i);case"compare":return Ge(i);case"report":return Te(i);case"ci":return Ye(i);case"baseline":return nt(i);case void 0:case"--help":case"-h":return process.stdout.write(`ostia - Bun-native profile IR engine
324
+ `),await ne(await i.markdown.render(v.document,{}));else await ne(await i[l.format].render(v.document,{protocol:{command:"ci",exitCode:R,unmatched:v.summary.unmatched,baseGit:v.baseline.git,candGit:v.document.git,baseline:{name:A,path:s(y,l.baseline)},cached:v.summary.cached,executed:v.summary.executed,failed:v.summary.failed,missingBaseline:v.summary.missingBaseline,...l.exportJson&&{exportedTo:l.exportJson}}}))}return R}var Ae=/^[A-Za-z0-9._-]+$/;function Oe(p){if(p.startsWith("-"))return`Invalid baseline name "${p}": names can't start with "-".`;if(!Ae.test(p))return`Invalid baseline name "${p}": expected to match ${Ae}.`;return}async function rt(p){if(p.includes("--help")||p.includes("-h"))return Z(ce,!0);if(p.length>1)return await F("invalid-flag",`"ostia baseline save" takes at most one name argument, got ${p.length}.
325
+ Run 'ostia baseline --help'.`),2;let l=p[0];if(l!==void 0){let v=Oe(l);if(v)return await F("invalid-flag",`${v}
326
+ Run 'ostia baseline --help'.`),2}let k=await le("ostia baseline save");if(!k)return 2;let y=await xe(k,l);return await q(`Wrote ${y}
327
+ `),0}async function lt(p){if(p.includes("--help")||p.includes("-h"))return Z(ce,!0);let l=await le();if(!l)return 2;let k=await Pe(l);if(k.length===0)return await q(`No baselines found in ${l.baselineDir}.
328
+ `),0;for(let y of k){let v=y.git?` ${w(y.git)}`:"";await q(`${y.name} ${y.workloads} workloads created ${y.createdAt} toolVersion ${y.toolVersion}${v}
329
+ `)}return 0}async function ct(p){let[l,...k]=p;if(!l||l==="--help"||l==="-h")return Z(ce,!!l);let y=Oe(l);if(y)return await F("invalid-flag",`${y}
330
+ Run 'ostia baseline --help'.`),2;let v=await le();if(!v)return 2;return Re([s(v,l),...k])}async function Ne(p,l,k,y,v,M=""){if(p===void 0||p==="--help"||p==="-h")return Z(y,p!==void 0);let R=k[p];if(!R)return await F("invalid-flag",v(p)),2;try{return await R(l)}catch(A){return Fe(A,`${M}${p}`)}}async function dt(p){let[l,...k]=p;return Ne(l,k,{save:rt,list:lt,show:ct},ce,(y)=>`Unknown "ostia baseline ${y}". Run "ostia baseline --help".`,"baseline ")}var mt=`ostia - Bun-native profile IR engine
331
331
 
332
332
  Commands:
333
333
  time Time commands N times and report timing/CPU/heap
@@ -338,4 +338,4 @@ Commands:
338
338
  baseline Manage baseline ProfileDocuments (save/list/show)
339
339
 
340
340
  Run "ostia <command> --help" for details.
341
- `),d===void 0?2:0;default:return O("invalid-flag",`Unknown subcommand "${d}". Run "ostia --help".`),2}}if(import.meta.main)st().then((d)=>process.exit(d));export{F as CliUsageError,z as parseIntFlag};
341
+ `;async function ut(){let[p,...l]=process.argv.slice(2);return Ne(p,l,{time:Ge,bench:Xe,compare:et,report:Re,ci:it,baseline:dt},mt,(k)=>`Unknown subcommand "${k}". Run "ostia --help".`)}if(import.meta.main)ut().then((p)=>process.exit(p));export{Q as CliUsageError,Be as parseIntFlag};
package/index.d.ts CHANGED
@@ -391,8 +391,10 @@ interface TimingStats {
391
391
  mild: number;
392
392
  severe: number;
393
393
  };
394
- /** 75th percentile, ns. Optional: absent on documents saved before this
394
+ /** 25th percentile, ns. Optional: absent on documents saved before this
395
395
  * field existed (`loadDocument` never backfills it). */
396
+ p25?: number;
397
+ /** 75th percentile, ns. Same caveat as `p25`. */
396
398
  p75?: number;
397
399
  /** 99th percentile, ns. Same caveat as `p75`. */
398
400
  p99?: number;
@@ -459,8 +461,6 @@ interface MemoryEvidence {
459
461
  heapSizeBytes?: number;
460
462
  }[];
461
463
  maxRssBytes?: number;
462
- peakCommitBytes?: number;
463
- pageFaults?: number;
464
464
  /** Bytes allocated per call, from `ostia bench --alloc`: heap size delta
465
465
  * (`bun:jsc`'s `heapStats().heapSize`, falling back to
466
466
  * `process.memoryUsage().heapUsed`) around one `Bun.gc(true)`-bracketed
@@ -508,9 +508,6 @@ export interface Comparison {
508
508
  timing?: {
509
509
  medianDeltaPct: number;
510
510
  meanDeltaPct: number;
511
- /** Same value as `medianDeltaPct`, named for what it is used for: the
512
- * effect size the verdict rule tests against `thresholds.timingPct`. */
513
- effectPct: number;
514
511
  /** 95% bootstrap confidence interval on the difference of medians,
515
512
  * percent of the baseline median. Absent when either side had fewer
516
513
  * than 5 samples (see the `thin-comparison` warning). */
package/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{u,M,f,Z,l,o,Q,ee,ne,_,te}from"./chunk-dpxy38mq.js";import{t,c,D,r,A,re,se}from"./chunk-2s4xk1mg.js";export{u as DEFAULT_THRESHOLDS,l as MINIMAL_PROTOCOL_VERSION,D as OstiaDocumentError,f as bench,M as compareDocuments,t as createDocument,ne as defineConfig,re as group,A as keep,r as loadDocument,te as profile,Z as range,o as renderers,Q as run,c as saveDocument,ee as sweep,se as task,_ as time};
2
+ import{c,C,b,Q,u,i,ee,ne,te,V,re}from"./chunk-cf9hya3b.js";import{t,a,A,r,U,se,ie}from"./chunk-1wydyvyj.js";export{c as DEFAULT_THRESHOLDS,u as MINIMAL_PROTOCOL_VERSION,A as OstiaDocumentError,b as bench,C as compareDocuments,t as createDocument,te as defineConfig,se as group,U as keep,r as loadDocument,re as profile,Q as range,i as renderers,ee as run,a as saveDocument,ne as sweep,ie as task,V as time};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ostia",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "Fast profiling and benchmarking for Bun.",
5
5
  "type": "module",
6
6
  "engines": {
package/runner.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import{c,x,Y,y,H,v,P}from"./chunk-2s4xk1mg.js";async function d(){let[s,i,l]=process.argv.slice(2);if(!s||!i)return process.stderr.write(`bench runner: usage: runner.ts <suiteFile> <outputPath> [optsJson]
4
- `),2;let e=l?JSON.parse(l):{};for(let t of e.preload??[])await import(t);Y(),await import(s);let a=x();if(a.length===0)return process.stderr.write(`bench runner: ${s} registered no tasks (no task() calls found).
5
- `),2;let r=a.filter((t)=>t.only),p=r.length>0?r:a;if(r.length>0)process.stderr.write(`bench: ${r.length} task(s) selected by .only
6
- `);let n=v(p,e.filter);if(e.taskIds){let t=new Set(e.taskIds);n=n.filter((o)=>t.has(y(o)))}if(n.length===0)return process.stderr.write(`bench runner: --filter ${JSON.stringify(e.filter)} matched zero of ${p.length} registered task(s) in ${s}.
7
- `),2;if(e.planPath){let t=n.map((o)=>({id:y(o),isolate:H(o,e.isolate??!1)}));await Bun.write(e.planPath,JSON.stringify({tasks:t}))}let f=e.taskIds?n:n.filter((t)=>!H(t,e.isolate??!1)),u=await P(s,f,e);return await c(u,i),0}d().then((s)=>process.exit(s));
3
+ import{a,M,X,v,G,T,R}from"./chunk-1wydyvyj.js";async function d(){let[s,l,c]=process.argv.slice(2);if(!s||!l)return process.stderr.write(`bench runner: usage: runner.ts <suiteFile> <outputPath> [optsJson]
4
+ `),2;let e=c?JSON.parse(c):{};for(let t of e.preload??[])await import(t);X(),await import(s);let i=M();if(i.length===0)return process.stderr.write(`bench runner: ${s} registered no tasks (no task() calls found).
5
+ `),2;let r=i.filter((t)=>t.only),p=r.length>0?r:i;if(r.length>0)process.stderr.write(`bench: ${r.length} task(s) selected by .only
6
+ `);let n=T(p,e.filter);if(e.taskIds){let t=new Set(e.taskIds);n=n.filter((o)=>t.has(v(o)))}if(n.length===0)return process.stderr.write(`bench runner: --filter ${JSON.stringify(e.filter)} matched zero of ${p.length} registered task(s) in ${s}.
7
+ `),2;if(e.planPath){let t=n.map((o)=>({id:v(o),isolate:G(o,e.isolate??!1)}));await Bun.write(e.planPath,JSON.stringify({tasks:t}))}let f=e.taskIds?n:n.filter((t)=>!G(t,e.isolate??!1)),u=await R(s,f,e);return await a(u,l),0}d().then((s)=>process.exit(s));
package/chunk-2s4xk1mg.js DELETED
@@ -1,12 +0,0 @@
1
- // @bun
2
- class we extends Error{}function I(n){if(typeof n.pattern==="string")return;let{flags:s}=n.pattern;if(s.includes("g")||s.includes("y")||s.includes("d"))throw RangeError("timeSource pattern must not use the g or y flag")}function O(...n){let s=n.filter((o)=>o!==void 0);if(s.length===0)return;if(s.length===1)return s[0];return AbortSignal.any(s)}var Ke={ns:1,us:1000,ms:1e6,s:1e9};async function z(n){let s=n.timeSource!==void 0,o=Bun.nanoseconds(),u=!1,l=n.timeoutMs!==void 0?AbortSignal.timeout(n.timeoutMs):void 0;l?.addEventListener("abort",()=>{u=!0},{once:!0});let f=O(l,n.signal),T=Bun.spawn(n.argv,{cwd:n.cwd,env:n.env,stdout:s?"pipe":"ignore",stderr:s?"pipe":"ignore",stdin:"ignore",...f&&{signal:f,killSignal:"SIGKILL"}}),B=s?Promise.all([new Response(T.stdout).text(),new Response(T.stderr).text()]):void 0,C=await T.exited,_=Bun.nanoseconds(),U=T.resourceUsage?.(),M={wallNs:_-o,exitCode:u?null:C,userNs:U?Number(U.cpuTime.user)*1000:void 0,systemNs:U?Number(U.cpuTime.system)*1000:void 0,maxRssBytes:U?.maxRSS,...u?{timedOut:!0}:{}};if(B){let[W,ne]=await B;if(n.timeSource&&!u)try{M.reportedNs=Ye(n.timeSource,W,ne,n.argv)}catch(Q){if(!(Q instanceof we))throw Q;M.timeSourceNoMatch=!0,M.timeSourceMissOutput=Ze(W,ne)}}return M}function Ye(n,s,o,u=[]){let l=typeof n.pattern==="string"?new RegExp(n.pattern):n.pattern,f=n.group??1,T=l.exec(s)??l.exec(o),B=u.length>0?` for "${u.join(" ")}"`:"";if(!T)throw new we(`timeSource pattern ${l} did not match the output${B}. Output was:
3
- ${ve(s,o)}`);let C=T[f];if(C===void 0)throw Error(`timeSource pattern ${l} matched${B} but has no capture group ${f} (matched text: "${T[0]}").`);let _=Number(C);if(!Number.isFinite(_))throw Error(`timeSource pattern ${l} group ${f} captured "${C}"${B}, which is not a number.`);return _*Ke[n.unit??"ms"]}function ve(n,s){let u=(f)=>f.length>800?`${f.slice(0,800)}\u2026(${f.length-800} more)`:f,l=[];if(n.trim())l.push(`--- stdout ---
4
- ${u(n.trimEnd())}`);if(s.trim())l.push(`--- stderr ---
5
- ${u(s.trimEnd())}`);return l.length>0?l.join(`
6
- `):"(empty)"}var he=2048;function Ze(n,s){let o=ve(n,s);if(Buffer.byteLength(o,"utf8")<=he)return o;let u=o.slice(0,he);while(Buffer.byteLength(u,"utf8")>he)u=u.slice(0,-1);return`${u}\u2026`}var Xe=1048576,Qe=(n)=>`
7
- \u2026(${n} bytes elided)\u2026
8
- `;async function en(n,s=Xe){let o=Math.floor(s/2),u=n.getReader(),l=[],f=0,T=[],B=0,C=0;try{for(;;){let{done:ne,value:Q}=await u.read();if(ne)break;if(!Q||Q.byteLength===0)continue;C+=Q.byteLength;let j=Q;if(f<o){let G=o-f;if(j.byteLength<=G){l.push(j),f+=j.byteLength;continue}l.push(j.subarray(0,G)),f+=G,j=j.subarray(G)}T.push(j),B+=j.byteLength;while(B>o&&T.length>0){let G=T[0],Z=B-o;if(G.byteLength<=Z)T.shift(),B-=G.byteLength;else T[0]=G.subarray(Z),B-=Z}}}finally{u.releaseLock()}let _=new TextDecoder,U=_.decode(Re(l));if(C<=f+B)return U;let M=_.decode(Re(T)),W=C-f-B;return`${U}${Qe(W)}${M}`}function Re(n){let s=n.reduce((l,f)=>l+f.byteLength,0),o=new Uint8Array(s),u=0;for(let l of n)o.set(l,u),u+=l.byteLength;return o}async function N(n,s,o){if(typeof n==="function"){await n(s);return}let u=ke(n),l=!1,f=o.timeoutMs!==void 0?AbortSignal.timeout(o.timeoutMs):void 0;f?.addEventListener("abort",()=>{l=!0},{once:!0});let T=O(f,o.signal),B=Bun.spawn(u,{cwd:o.cwd,env:o.env,stdout:"ignore",stderr:"pipe",stdin:"ignore",...T&&{signal:T,killSignal:"SIGKILL"}}),C=en(B.stderr).catch(()=>""),_=await B.exited;if(l){let U=(await C).trim();throw Error(`prepare command "${u.join(" ")}" timed out after ${o.timeoutMs}ms before ${s.phase} trial ${s.index}.${U?`
9
- ${U}`:""}`)}if(o.signal?.aborted)return;if(_!==0){let U=(await C).trim();throw Error(`prepare command "${u.join(" ")}" exited with code ${_} before ${s.phase} trial ${s.index}.${U?`
10
- ${U}`:""}`)}}function ke(n){if(n===void 0||typeof n==="function")return;return Array.isArray(n)?n:b(n)}function Ie(n){if(n===void 0)return;return{pattern:typeof n.pattern==="string"?n.pattern:n.pattern.source,...n.group!==void 0&&{group:n.group},...n.unit!==void 0&&{unit:n.unit}}}function b(n){return n.trim().split(/\s+/).filter(Boolean)}import{renameSync as tn}from"fs";var Ne={name:"ostia",version:"0.2.3",description:"Fast profiling and benchmarking for Bun.",type:"module",engines:{bun:">=1.4.0"},exports:{".":"./src/index.ts"},bin:{ostia:"./src/cli/main.ts"},scripts:{build:"bun scripts/build.ts",test:"bun test",typecheck:"tsc6",lint:"biome check .","lint:fix":"biome check --write . --unsafe","lint:changed":"biome check --changed --no-errors-on-unmatched .","lint:fix:changed":"biome check --write --unsafe --changed --no-errors-on-unmatched .",knip:"knip-bun",bench:"bun src/cli/main.ts bench bench/*.ts","bench:baseline":"bun src/cli/main.ts bench bench/*.ts --budget 3000 --min-samples 30 --export-json .ostia/baselines/bench-main.json",baseline:"bun src/cli/main.ts baseline save",dogfood:"bun test && bun src/cli/main.ts ci",examples:"bun scripts/run-examples.ts"},devDependencies:{"@biomejs/biome":"2.5.12","@types/bun":"^1.4.0",knip:"^6.34.0",typescript:"npm:@typescript/typescript6@^6.0.2"}};var w=Ne.version;function R(n){return JSON.stringify(fe(n))}function fe(n){if(Array.isArray(n))return n.map(fe);if(n!==null&&typeof n==="object"){let s={};for(let o of Object.keys(n).sort())s[o]=fe(n[o]);return s}return n}function e(n,...s){let o=Bun.CryptoHasher.hash("sha256",R(s),"hex");return`${n}_${o.slice(0,16)}`}var ge,Ee=!1;function ye(n){let s=Bun.spawnSync(["git",...n],{timeout:200,stdout:"pipe",stderr:"ignore"});return s.success?s.stdout.toString().trim():void 0}function Pe(){if(Ee)return ge;Ee=!0;try{let n=ye(["rev-parse","--short","HEAD"]);if(n===void 0)ge=void 0;else{let s=ye(["rev-parse","--abbrev-ref","HEAD"]),o=ye(["status","--porcelain"]);ge={sha:n,branch:s??"HEAD",dirty:(o?.length??0)>0}}}catch{ge=void 0}return ge}function t(n,s,o){let u=Pe();return{schemaVersion:2,toolVersion:w,bunVersion:Bun.version,platform:{os:process.platform,arch:process.arch},createdAt:new Date().toISOString(),workloads:n,measurements:s,...o!==void 0&&{environment:o},...u!==void 0&&{git:u}}}function k(n,s,o={}){if(o.timeSource)I(o.timeSource);let u=ke(o.prepare),l=Ie(o.timeSource),f=typeof o.prepare==="function"?o.prepare.toString():u;return{id:e("wl","subprocess",n,...f!==void 0||l!==void 0?[f??null,l??null]:[]),kind:"subprocess",command:n,label:s,...u!==void 0&&{prepare:u},...l!==void 0&&{timeSource:l}}}function q(n,s){return{id:e("wl","inprocess",n.name,n.toString()),kind:"inprocess",label:s}}function Be(n,s,o={}){return{id:o.params!==void 0?e("wl","inprocess-entry",n,s,o.params):e("wl","inprocess-entry",n,s),kind:"inprocess",entry:{file:n,task:s,...o.group!==void 0&&{group:o.group}},...o.label!==void 0&&{label:o.label},...o.baseline!==void 0&&{baseline:o.baseline},...o.description!==void 0&&{description:o.description},...o.groupDescription!==void 0&&{groupDescription:o.groupDescription},...o.isolated!==void 0&&{isolated:o.isolated},...o.params!==void 0&&{params:o.params},...o.skipped!==void 0&&{skipped:o.skipped}}}function m(n){return{id:e("run",n.workload.id,"timing",n.configFingerprint,Bun.version,w),workloadId:n.workload.id,phase:"timing",instrumented:!1,configFingerprint:n.configFingerprint,trials:n.trials,timing:n.timing,warnings:n.warnings,artifacts:[],memory:rn(n.trials),...n.interleaved!==void 0&&{interleaved:n.interleaved}}}function rn(n){let s=n.map((o)=>o.maxRssBytes).filter((o)=>o!==void 0);if(s.length===0)return;return{origin:"resourceUsage",perTrial:n.map((o)=>({rssBytes:o.maxRssBytes})),maxRssBytes:Math.max(...s)}}function d(n){return{id:e("run",n.workload.id,n.phase,n.configFingerprint,Bun.version,w),workloadId:n.workload.id,phase:n.phase,instrumented:!0,configFingerprint:n.configFingerprint,trials:[{i:0,wallNs:n.diagnosticWallNs,exitCode:n.exitCode}],diagnosticWallNs:n.diagnosticWallNs,cpu:n.cpu,heap:n.heap,memory:n.memory,jit:n.jit,warnings:n.warnings,artifacts:n.artifacts}}async function K(n,s,o){let l=await Bun.file(o).arrayBuffer(),f=new Bun.CryptoHasher("sha256");return f.update(l),{id:e("art",n,s,o),kind:s,path:o,sha256:f.digest("hex"),bytes:l.byteLength}}function a(n){return e("cfg",n)}function V(n){return`${JSON.stringify(fe(n),null,2)}
11
- `}async function c(n,s){let o=V(n),u=`${s}.tmp-${process.pid}`;await Bun.write(u,o),tn(u,s)}function on(n){if(n.schemaVersion===2)return n;let{runs:s,comparisons:o,...u}=n;return{...u,schemaVersion:2,measurements:s.map(({baselineRunId:l,...f})=>f),...o!==void 0&&{comparisons:o.map(({baselineRunId:l,candidateRunId:f,...T})=>({...T,baselineMeasurementId:l,candidateMeasurementId:f}))}}}class D extends Error{code;path;schemaVersion;constructor(n,s,o={}){super(s);this.name="OstiaDocumentError",this.code=n,this.path=o.path,this.schemaVersion=o.schemaVersion}}async function r(n){let s=await Bun.file(n).text(),o;try{o=JSON.parse(s)}catch(l){let f=l instanceof Error?l.message:String(l);throw new D("invalid-json",`${n}: invalid JSON (${f})`,{path:n})}let u=o!==null&&typeof o==="object"?o.schemaVersion:void 0;if(typeof u!=="number")throw new D("not-a-document",`${n}: not a ProfileDocument (missing schemaVersion)`,{path:n});if(u!==1&&u!==2)throw new D("unsupported-schema",`${n}: unsupported ProfileDocument schemaVersion ${u} (this ostia reads 1\u20132)`,{path:n,schemaVersion:u});return on(o)}import Te from"os";function h(n){if(n.length===0)throw Error("computeTimingStats: samples must be non-empty");let s=n.length,o=Oe(n),u=0;for(let g=0;g<s;g++)u+=n[g];let l=u/s,f=i(o,0.5),T=0;for(let g=0;g<s;g++){let L=n[g]-l;T+=L*L}let B=Math.sqrt(T/s),C=o[0],_=o[s-1],U=i(o,0.25),M=i(o,0.75),W=M-U,ne=U-1.5*W,Q=M+1.5*W,j=U-3*W,G=M+3*W,Z=0,te=0;for(let g=0;g<s;g++){let L=n[g];if(L<j||L>G)te++;else if(L<ne||L>Q)Z++}let ue=i(o,0.99),ee=new Float64Array(s);for(let g=0;g<s;g++)ee[g]=Math.abs(n[g]-f);ee.sort();let ie=i(ee,0.5);return{unit:"ns",samples:n,mean:l,median:f,stddev:B,min:C,max:_,outliers:{mild:Z,severe:te},p75:M,p99:ue,mad:ie}}function Oe(n){let s=new Float64Array(n.length);return s.set(n),s.sort(),s}function i(n,s){let o=n.length;if(o===1)return n[0];let u=s*(o-1),l=Math.floor(u),f=Math.ceil(u);if(l===f)return n[l];let T=u-l;return n[l]*(1-T)+n[f]*T}var sn=5000000,an=200;function S(n,s,o="subprocess",u=[]){let l=[],f=n.samples[0];if(f!==void 0){let C=Oe(n.samples),_=i(C,0.25),M=i(C,0.75)-_;if(f>n.median+3*M&&M>0)l.push({code:"slow-first-run",message:`First run took ${(f/1e6).toFixed(2)}ms, much slower than the median ${(n.median/1e6).toFixed(2)}ms. Consider more warmup.`,data:{firstNs:f,medianNs:n.median}})}if(n.outliers.mild+n.outliers.severe>0)l.push({code:"outliers-detected",message:`${n.outliers.mild+n.outliers.severe} outlier(s) detected (${n.outliers.severe} severe, ${n.outliers.mild} mild).`,data:n.outliers});if(o==="subprocess"&&n.median<sn)l.push({code:"fast-command",message:`Median run time (${(n.median/1e6).toFixed(3)}ms) is very fast; results may be dominated by spawn overhead.`,data:{medianNs:n.median}});if(o==="inprocess"&&n.median<an)l.push({code:"below-timer-resolution",message:`Median run time (${n.median.toFixed(0)}ns) is close to timer resolution; consider a larger batch size or a coarser operation.`,data:{medianNs:n.median}});let T=new Set(u),B=s.filter((C)=>C!==void 0&&C!==0&&!T.has(C));if(B.length>0)l.push({code:"nonzero-exit",message:`${B.length} of ${s.length} trial(s) exited non-zero.`,data:{exitCodes:B}});return l}var un=200,Ae=64,cn=(()=>{let n=new Uint8Array(4096);for(let s=0;s<n.length;s++)n[s]=s*2654435761&255;return n})();function ln(n,s){let o=s;for(let u=0;u<n.length;u++)o^=n[u],o=Math.imul(o,16777619);return o>>>0}function mn(n){let s=h(n),o=s.mad??0;return{floorPct:s.median===0?0:o/s.median*100,referenceMedianNs:s.median,samples:n.length}}function Fe(n=un){let s=n*1e6,o=[],u=0,l=Bun.nanoseconds(),f=0;while(f<s){let T=Bun.nanoseconds();for(let C=0;C<Ae;C++)u^=ln(cn,C);let B=Bun.nanoseconds();o.push((B-T)/Ae),f=Bun.nanoseconds()-l}return mn(o)}var dn=0.75;function p(){let[n=0,s=0]=Te.loadavg();return{cpuModel:Te.cpus()[0]?.model??"unknown",cores:Te.availableParallelism(),loadAvg1:n,loadAvg5:s,noise:Fe()}}function F(n){if(n.loadAvg1<=n.cores*dn)return;return{code:"noisy-machine",message:`Load average ${n.loadAvg1.toFixed(2)} exceeds 75% of ${n.cores} available core(s); timing noise may be elevated.`,data:{loadAvg1:n.loadAvg1,cores:n.cores}}}import{profile as fn}from"bun:jsc";var pn=new Map([["LLInt","llint"],["Baseline","baseline"],["DFG","dfg"],["FTL","ftl"]]),Ce=4294967295;function Ue(n,s){let o=s??n.interval*1e6,u=new Map,l=[];function f(g,L,J,ce){let le=u.get(g);if(le===void 0)le=new Map,u.set(g,le);let ae=L??"",me=le.get(ae);if(me===void 0)me=l.length,le.set(ae,me),l.push({key:e("fr",g,ae),name:g,url:L,line:J,col:ce});return me}function T(g){let L=g.line===Ce,J=L?void 0:g.line-1,ce=L||g.column===Ce?void 0:g.column-1;return f(g.name,g.sourceURL,J,ce)}let B=f("(root)",void 0,void 0,void 0),C=1,_={id:0,frameIx:B,children:new Map,selfUs:0,samples:0,totalUs:0},U=new Map([[0,_]]),M={llint:0,baseline:0,dfg:0,ftl:0},W=new Map,ne=[],Q=[];for(let g of n.traces){let L=g.frames,J=_;for(let ae=L.length-1;ae>=0;ae--){let me=T(L[ae]),de=J.children.get(me);if(!de)de={id:C++,frameIx:me,children:new Map,selfUs:0,samples:0,totalUs:0},J.children.set(me,de),U.set(de.id,de);J=de}J.selfUs+=o,J.samples+=1,ne.push(J.id),Q.push(o);let ce=L[0],le=ce&&pn.get(ce.category);if(le){M[le]++;let ae=W.get(le)??new Map;ae.set(J.frameIx,(ae.get(J.frameIx)??0)+1),W.set(le,ae)}}function j(g){let L=g.selfUs;for(let J of g.children.values())L+=j(J);return g.totalUs=L,L}j(_);let G=new Map;function Z(g){let L=G.get(g.frameIx);if(L)L.selfUs+=g.selfUs,L.totalUs+=g.totalUs,L.samples+=g.samples;else G.set(g.frameIx,{frameIx:g.frameIx,selfUs:g.selfUs,totalUs:g.totalUs,samples:g.samples});for(let J of g.children.values())Z(J)}Z(_);let te=[...U.values()].map((g)=>({id:g.id,frameIx:g.frameIx,children:[...g.children.values()].map((L)=>L.id)})),ue={origin:"jsc-profile",samplingIntervalUs:o,frames:l,nodes:te,totals:[...G.values()].sort((g,L)=>L.selfUs-g.selfUs),samples:{nodeIds:ne,timeDeltasUs:Q}},ee=[...W.entries()].flatMap(([g,L])=>[...L.entries()].sort((J,ce)=>ce[1]-J[1]).slice(0,3).map(([J,ce])=>({tier:g,frameKey:l[J].key,samples:ce})));return{cpu:ue,jit:{origin:"jsc-profile",tiers:M,topFramesByTier:ee}}}var gn=1000;async function E(n,s={}){let o=s.intervalUs??gn,u,l=Bun.nanoseconds(),f=await fn(async()=>(u=await n(),u),o),T=Bun.nanoseconds()-l,{cpu:B,jit:C}=Ue(f.stackTraces,o);return{result:u,cpu:B,jit:C,diagnosticWallNs:T}}var bn=500,hn=20,$e=3,wn=10,kn=2,yn=0.1,Tn=1000,xn=1e4;function _e(n){let s=Math.log10(Math.max(1,n)/1e6),o=Math.round($e+kn*s);return Math.min(wn,Math.max($e,o))}function Sn(n,s){let o=Math.floor(s/n);return Math.min(hn,Math.max(o,_e(n)))}var De=0;function A(n){if(typeof n==="number")De+=n;else if(n!==void 0&&n!==null)De+=1}function be(n){return n!==null&&typeof n==="object"&&typeof n.then==="function"}function Le(n,s){return Math.max(1,Math.ceil(Tn/n),Math.ceil(s/(n*xn)))}async function We(n,s={}){let o=(s.budgetMs??bn)*1e6,u=o*(s.warmup??yn),l=Bun.nanoseconds(),f=0,T=0;while(T<u){let ee=n();A(be(ee)?await ee:ee),f++,T=Bun.nanoseconds()-l}let B;if(f>0)B=Math.max(1,T/f);else{let ee=Bun.nanoseconds(),ie=n();A(be(ie)?await ie:ie),B=Math.max(1,Bun.nanoseconds()-ee)}let C=Le(B,o);if(C>1){let ee=Bun.nanoseconds();for(let ie=0;ie<C;ie++){let g=n();A(be(g)?await g:g)}B=Math.max(1,(Bun.nanoseconds()-ee)/C),C=Le(B,o)}let _=B*C,U=s.samples??s.minSamples??Sn(_,o),M=s.samples!==void 0?0:o,W=[],ne=Bun.nanoseconds(),Q=0,j=0;while(j<U||Q<M){let ee=Bun.nanoseconds();for(let g=0;g<C;g++){let L=n();A(be(L)?await L:L)}let ie=Bun.nanoseconds();if(W.push({i:j,wallNs:(ie-ee)/C}),j++,Q=Bun.nanoseconds()-ne,s.gc)Bun.gc(!0);if(s.samples!==void 0&&j>=s.samples)break}let G=W.map((ee)=>ee.wallNs),Z=h(G);if(C>1)Z.batch=C;let te=S(Z,[],"inprocess"),ue=_e(_);if(W.length<ue)te.push({code:"low-sample-count",message:`Only ${W.length} sample(s) at ~${Mn(_)} per trial; ${ue} is the floor for this cost class. Raise minSamples or the time budget for a steadier number.`,data:{samples:W.length,target:ue,trialCostNs:_}});return{trials:W,timing:Z,warnings:te}}function Mn(n){if(n>=1e9)return`${(n/1e9).toFixed(2)}s`;if(n>=1e6)return`${(n/1e6).toFixed(1)}ms`;if(n>=1000)return`${(n/1000).toFixed(1)}\xB5s`;return`${n.toFixed(0)}ns`}var Me=[],oe,pe;function xe(n,s,o,u){let l=oe;oe={name:n,description:o?.description,isolate:o?.isolate,gc:o?.gc,cpu:o?.cpu,alloc:o?.alloc,before:o?.before,after:o?.after,skip:u.skip,only:u.only};try{s()}finally{oe=l}}var re=Object.assign((n,s,o)=>xe(n,s,o,{}),{skip:(n,s,o)=>xe(n,s,o,{skip:!0}),only:(n,s,o)=>xe(n,s,o,{only:!0})});function Se(n,s,o,u){let l=pe!==void 0||o?.params!==void 0?{...pe,...o?.params}:void 0;Me.push({groupName:oe?.name,groupDescription:oe?.description,groupIsolate:oe?.isolate,groupGc:oe?.gc,groupCpu:oe?.cpu,groupAlloc:oe?.alloc,groupBefore:oe?.before,groupAfter:oe?.after,name:n,fn:s,baseline:o?.baseline,params:l,skipped:u.skip||oe?.skip,only:u.only||oe?.only,opts:o})}var se=Object.assign((n,s,o)=>Se(n,s,o,{}),{skip:(n,s,o)=>Se(n,s,o,{skip:!0}),only:(n,s,o)=>Se(n,s,o,{only:!0})});function x(){return Me}function Y(){Me.length=0,oe=void 0,pe=void 0}function X(n,s){let o=pe;pe=n;try{return s()}finally{pe=o}}function y(n){return n.groupName?`${n.groupName}/${n.name}`:n.name}function H(n,s){return n.opts?.isolate??n.groupIsolate??s}function Ge(n,s){return n.opts?.gc??n.groupGc??s}function je(n,s){return n.opts?.cpu??n.groupCpu??s}function He(n,s){return n.opts?.alloc??n.groupAlloc??s}function v(n,s){if(!s)return[...n];let o=new RegExp(s);return n.filter((u)=>o.test(y(u)))}import{heapStats as Rn}from"bun:jsc";var vn=100;function Je(){try{return Rn().heapSize}catch{return process.memoryUsage().heapUsed}}async function Ve(n,s=vn){let o=Bun.nanoseconds();Bun.gc(!0);let u=Je();for(let T=0;T<s;T++){let B=n();if(B instanceof Promise)await B}Bun.gc(!0);let l=Je(),f=Bun.nanoseconds()-o;return{memory:{origin:"heapStats",bytesPerOp:Math.max(0,(l-u)/s)},diagnosticWallNs:f}}var In=200,Nn=20;async function qe(n,s=In){let o=s*1e6,u=async()=>{let B=Bun.nanoseconds();while(Bun.nanoseconds()-B<o){let C=n();if(C instanceof Promise)await C}},{cpu:l,jit:f,diagnosticWallNs:T}=await E(u);return{cpu:l,jit:f,diagnosticWallNs:T}}function ze(n){let{llint:s,baseline:o,dfg:u,ftl:l}=n.tiers,f=s+o+u+l;if(f===0)return;let T=s/f*100,B=o/f*100,C=u/f*100,_=l/f*100;if(T+B<=Nn)return;return{code:"jit-cold",message:`${(T+B).toFixed(1)}% of CPU samples were in the llint/baseline tiers: the JIT never warmed this task up.`,data:{llintPct:T,baselinePct:B,dfgPct:C,ftlPct:_}}}async function P(n,s,o){let l=s.some((U)=>!U.skipped)&&o.noiseCheck!==!1?p():void 0,f=l?F(l):void 0,T=new Map,B=new Map;s.forEach((U,M)=>{if(U.groupName===void 0||U.skipped)return;if(!T.has(U.groupName))T.set(U.groupName,M);B.set(U.groupName,M)});let C=[],_=[];for(let U=0;U<s.length;U++){let M=s[U],W=y(M),ne=Be(n,W,{label:W,baseline:M.baseline,group:M.groupName,description:M.opts?.description,groupDescription:M.groupDescription,isolated:o.markIsolated,params:M.params,skipped:M.skipped});if(C.push(ne),M.skipped)continue;let Q=M.groupName!==void 0&&T.get(M.groupName)===U,j=M.groupName!==void 0&&B.get(M.groupName)===U;if(Q&&M.groupBefore)await M.groupBefore();if(M.opts?.before)await M.opts.before();let G={budgetMs:M.opts?.budgetMs??o.budgetMs,samples:M.opts?.samples??o.samples,minSamples:M.opts?.minSamples??o.minSamples,warmup:o.warmup,gc:Ge(M,o.gc??!1)},Z=await We(M.fn,G);if(_.push(m({workload:ne,configFingerprint:a({budgetMs:G.budgetMs??null,samples:G.samples??null,minSamples:G.minSamples??null,gc:G.gc??!1}),trials:Z.trials,timing:Z.timing,warnings:f&&_.length===0?[...Z.warnings,f]:Z.warnings})),je(M,o.cpu??!1)){let te=await qe(M.fn),ue=ze(te.jit);_.push(d({workload:ne,phase:"cpu",configFingerprint:a({cpu:!0}),diagnosticWallNs:te.diagnosticWallNs,cpu:te.cpu,jit:te.jit,warnings:ue?[ue]:[],artifacts:[]}))}if(He(M,o.alloc??!1)){let te=await Ve(M.fn);_.push(d({workload:ne,phase:"memstats",configFingerprint:a({alloc:!0}),diagnosticWallNs:te.diagnosticWallNs,memory:te.memory,warnings:[],artifacts:[]}))}if(M.opts?.after)await M.opts.after();if(j&&M.groupAfter)await M.groupAfter()}return t(C,_,l)}
12
- export{R,e,h,i,S,I,O,z,N,b,w,t,k,q,m,d,K,a,V,c,D,r,p,F,E,A,re,se,x,Y,X,y,H,v,P};
package/chunk-dpxy38mq.js DELETED
@@ -1,22 +0,0 @@
1
- // @bun
2
- import{R,e,h,i,S,I,O,z,N,b,t,k,q,m,d,K,a,V,r,p,F,E,x,X,v,P}from"./chunk-2s4xk1mg.js";function Le(c,y,w){let H=c[0];if(H==="bun"||H?.endsWith("/bun"))return{argv:[H,...y,...c.slice(1)],env:w};return{argv:c,env:{...process.env,...w,BUN_OPTIONS:y.join(" ")}}}function Hn(c){return c.startsWith("file://")?c.slice(7):c}function _e(c,y,w){let H=c.nodes,A=H.length,ie=new Map,Y=[],D=new Map,se=new Int32Array(A);for(let ae=0;ae<A;ae++){let fe=H[ae],ce=fe.callFrame,ye=Hn(ce.url),ke=ie.get(ce.functionName);if(ke===void 0)ke=new Map,ie.set(ce.functionName,ke);let Pe=ke.get(ye);if(Pe===void 0)Pe=Y.length,ke.set(ye,Pe),Y.push({key:e("fr",ce.functionName,ye),name:ce.functionName,url:ye||void 0,line:ce.lineNumber>=0?ce.lineNumber:void 0,col:ce.columnNumber>=0?ce.columnNumber:void 0});se[ae]=Pe,D.set(fe.id,ae)}let le=Array(A);for(let ae=0;ae<A;ae++){let fe=H[ae];le[ae]={id:fe.id,frameIx:se[D.get(fe.id)],children:fe.children??[]}}let re=new Float64Array(A),ue=new Float64Array(A),{samples:oe,timeDeltas:me}=c;for(let ae=0;ae<oe.length;ae++){let fe=D.get(oe[ae]);if(fe===void 0)continue;re[fe]+=me[ae]??0,ue[fe]+=1}let pe=new Int32Array(A).fill(-1);for(let ae=0;ae<A;ae++){let fe=H[ae].children;if(!fe)continue;for(let ce of fe){let ye=D.get(ce);if(ye!==void 0)pe[ye]=ae}}let de=[],ge=[];for(let ae=A-1;ae>=0;ae--)if(pe[ae]===-1)ge.push(ae);while(ge.length>0){let ae=ge.pop();de.push(ae);let fe=H[ae].children;if(!fe)continue;for(let ce of fe){let ye=D.get(ce);if(ye!==void 0&&pe[ye]===ae)ge.push(ye)}}let he=new Float64Array(A);for(let ae=de.length-1;ae>=0;ae--){let fe=de[ae];he[fe]+=re[fe];let ce=pe[fe];if(ce>=0)he[ce]+=he[fe]}let xe=Array(Y.length),we=[];for(let ae=0;ae<A;ae++){let fe=le[ae].frameIx,ce=xe[fe];if(ce)ce.selfUs+=re[ae],ce.totalUs+=he[ae],ce.samples+=ue[ae];else{let ye={frameIx:fe,selfUs:re[ae],totalUs:he[ae],samples:ue[ae]};xe[fe]=ye,we.push(ye)}}return{origin:y,samplingIntervalUs:w,frames:Y,nodes:le,totals:we.sort((ae,fe)=>fe.selfUs-ae.selfUs),samples:{nodeIds:c.samples,timeDeltasUs:c.timeDeltas}}}async function nn(c){let y=`${c.artifactDir}/${c.fileName}`,{argv:w,env:H}=Le(c.argv,["--cpu-prof","--cpu-prof-dir",c.artifactDir,"--cpu-prof-name",c.fileName,"--cpu-prof-interval",String(c.intervalUs)],c.env),A=Bun.nanoseconds(),Y=await Bun.spawn(w,{cwd:c.cwd,env:H,stdout:"ignore",stderr:"ignore",stdin:"ignore"}).exited,D=Bun.nanoseconds()-A,se=Bun.file(y);if(!await se.exists())return{diagnosticWallNs:D,exitCode:Y,warnings:[{code:"artifact-missing",message:`Expected a .cpuprofile at ${y} after exit ${Y}, found nothing. The workload's argv[0] must be a \`bun\` binary for CPU capture.`,data:{artifactPath:y,argv:c.argv}}]};let le=await se.json(),re=_e(le,"cpu-prof",c.intervalUs),ue=le.samples.length===0?[{code:"empty-profile",message:"CPU capture produced zero samples."}]:[];return{diagnosticWallNs:D,exitCode:Y,artifactPath:y,cpu:re,warnings:ue}}function tn(c,y="heap-prof"){let{node_fields:w,node_types:H}=c.snapshot.meta,A=w.indexOf("type"),ie=w.indexOf("self_size"),Y=w.length,D=H[0];if(A===-1||ie===-1||!Array.isArray(D))return{origin:y,typeCounts:[],objectCount:c.snapshot.node_count};let se=D.length,le=Array(se),re=new Map,ue=[],oe=0,me=c.nodes,pe=me.length;for(let we=0;we<pe;we+=Y){let ae=me[we+A],fe=me[we+ie]??0;oe+=fe;let ce;if(ae>=0&&ae<se){if(ce=le[ae],ce===void 0)ce={type:D[ae],count:0,bytes:0},le[ae]=ce,ue.push(ce)}else{let ye=`unknown(${ae})`;if(ce=re.get(ye),ce===void 0)ce={type:ye,count:0,bytes:0},re.set(ye,ce),ue.push(ce)}ce.count++,ce.bytes+=fe}let de=ue.sort((we,ae)=>ae.count-we.count),ge=de.slice(0,20),he=de.slice(20),xe=ge.map(({type:we,count:ae,bytes:fe})=>({type:we,count:ae,retainedBytes:fe}));if(he.length>0){let we=0,ae=0;for(let fe of he)we+=fe.count,ae+=fe.bytes;xe.push({type:"other",count:we,retainedBytes:ae})}return{origin:y,heapSizeBytes:oe,objectCount:c.snapshot.node_count,typeCounts:xe}}async function rn(c){let y=`${c.artifactDir}/${c.fileName}`,{argv:w,env:H}=Le(c.argv,["--heap-prof","--heap-prof-dir",c.artifactDir,"--heap-prof-name",c.fileName],c.env),A=Bun.nanoseconds(),Y=await Bun.spawn(w,{cwd:c.cwd,env:H,stdout:"ignore",stderr:"ignore",stdin:"ignore"}).exited,D=Bun.nanoseconds()-A,se=Bun.file(y);if(!await se.exists())return{diagnosticWallNs:D,exitCode:Y,warnings:[{code:"artifact-missing",message:`Expected a heap snapshot at ${y} after exit ${Y}, found nothing. The workload's argv[0] must be a \`bun\` binary for heap capture.`,data:{artifactPath:y,argv:c.argv}}]};let le=await se.json(),re=tn(le,"heap-prof");return{diagnosticWallNs:D,exitCode:Y,artifactPath:y,heap:re,warnings:[]}}import{Session as zn}from"inspector/promises";var Gn=1000;async function sn(c,y={}){let w=y.intervalUs??Gn,H=new zn;H.connect();let A=Bun.nanoseconds();try{await H.post("Profiler.enable"),await H.post("Profiler.setSamplingInterval",{interval:w}),await H.post("Profiler.start");let ie=await c(),{profile:Y}=await H.post("Profiler.stop"),D=Bun.nanoseconds()-A,se=_e(Y,"inspector",w);return{result:ie,cpu:se,diagnosticWallNs:D}}finally{H.disconnect()}}function Kn(c){let y=c>>>0;return()=>{y=y+1831565813|0;let w=Math.imul(y^y>>>15,1|y);return w=w+Math.imul(w^w>>>7,61|w)^w,((w^w>>>14)>>>0)/4294967296}}var je=2000,Jn=2000;function mn(c){let y=c.length,w=y>>1;return y%2===0?(c[w-1]+c[w])/2:c[w]}function on(c,y,w){if(c.length<=w)return c;let H=[...c];for(let A=0;A<w;A++){let ie=A+Math.floor(y()*(H.length-A)),Y=H[A];H[A]=H[ie],H[ie]=Y}return H.slice(0,w)}function an(c,y){let w=c.length,H=new Float64Array(w);for(let A=0;A<w;A++)H[A]=c[Math.floor(y()*w)];return H.sort(),mn(H)}function cn(c,y,w={}){let H=w.seed??(Date.now()^Math.imul(c.length,2654435761))>>>0,A=Kn(H),ie=w.iterations??Jn,Y=c.length>je||y.length>je,D=on(c,A,je),se=on(y,A,je),le=new Float64Array(D);le.sort();let re=mn(le),ue=new Float64Array(ie);for(let oe=0;oe<ie;oe++){let me=an(D,A),pe=an(se,A);ue[oe]=re===0?pe-me===0?0:1/0:(pe-me)/re*100}return ue.sort(),{ci95:[i(ue,0.025),i(ue,0.975)],seed:H,data:{subsampled:Y,iterations:ie}}}function Yn(c){let y=c<0?-1:1,w=Math.abs(c),H=0.254829592,A=-0.284496736,ie=1.421413741,Y=-1.453152027,D=1.061405429,se=0.3275911,le=1/(1+0.3275911*w),re=1-((((1.061405429*le+-1.453152027)*le+1.421413741)*le+-0.284496736)*le+0.254829592)*le*Math.exp(-w*w);return y*re}function qn(c){return 0.5*(1+Yn(c/Math.SQRT2))}function un(c,y){let w=c.length,H=y.length,A=w+H,ie=[...c.map((de)=>({v:de,group:0})),...y.map((de)=>({v:de,group:1}))].sort((de,ge)=>de.v-ge.v),Y=new Float64Array(A),D=0,se=0;while(se<A){let de=se;while(de+1<A&&ie[de+1].v===ie[se].v)de++;let ge=(se+de)/2+1;for(let xe=se;xe<=de;xe++)Y[xe]=ge;let he=de-se+1;if(he>1)D+=he**3-he;se=de+1}let le=0;for(let de=0;de<A;de++)if(ie[de].group===0)le+=Y[de];let re=le-w*(w+1)/2,ue=w*H/2,oe=Math.sqrt(w*H*(A+1-D/(A*(A-1)))/12),me=oe===0?0:(re-ue)/oe,pe=Math.min(1,Math.max(0,2*(1-qn(Math.abs(me)))));return{u:re,z:me,pValue:pe}}var u={timingPct:5,frameSelfPct:10,heapTypePct:10,minFrameSelfUs:1000,alpha:0.01,bootstrapIterations:2000},Ye=5;function Ve(c,y){if(c===0)return y===0?0:1/0;return(y-c)/c*100}function Oe(c,y,w){return c.measurements.find((H)=>H.workloadId===y&&H.phase===w)}function Qn(c,y){let w=[];if(c.platform.os!==y.platform.os)w.push({field:"platform.os",base:c.platform.os,cand:y.platform.os});if(c.platform.arch!==y.platform.arch)w.push({field:"platform.arch",base:c.platform.arch,cand:y.platform.arch});if(c.bunVersion!==y.bunVersion)w.push({field:"bunVersion",base:c.bunVersion,cand:y.bunVersion});if(c.environment&&y.environment){if(c.environment.cpuModel!==y.environment.cpuModel)w.push({field:"cpuModel",base:c.environment.cpuModel,cand:y.environment.cpuModel});if(c.environment.cores!==y.environment.cores)w.push({field:"cores",base:c.environment.cores,cand:y.environment.cores})}if(w.length===0)return;return{code:"environment-mismatch",message:`Base and candidate were measured on different environments (${w.map((H)=>H.field).join(", ")}); a timing delta may reflect that instead of the code change.`,data:{fields:w}}}function B(c){let y=[];for(let H of c){if(!H.timing)continue;let A=1+H.timing.medianDeltaPct/100;if(Number.isFinite(A)&&A>0)y.push(Math.log(A))}if(y.length===0)return null;let w=y.reduce((H,A)=>H+A,0)/y.length;return(Math.exp(w)-1)*100}function M(c,y,w=u){let H=new Set(c.workloads.map((oe)=>oe.id)),A=new Set(y.workloads.map((oe)=>oe.id)),ie=[];for(let oe of c.workloads){if(!A.has(oe.id))continue;let me=U(c,y,oe.id,w);if(me)ie.push(me)}let Y=c.workloads.filter((oe)=>!A.has(oe.id)),D=y.workloads.filter((oe)=>!H.has(oe.id)),se=0,le=0,re=0;for(let oe of ie){if(!oe.timing)continue;if(oe.timing.verdict==="regressed")se++;else if(oe.timing.verdict==="improved")le++;else re++}let ue=Math.max(w.timingPct,c.environment?.noise.floorPct??0,y.environment?.noise.floorPct??0);return{comparisons:ie,unmatched:{baseOnly:Y,candOnly:D},summary:{matched:ie.length,regressed:se,improved:le,unchanged:re,geomeanPct:B(ie),effectiveTimingPct:ue,verdict:ie.some((oe)=>oe.verdict==="fail")?"fail":"pass"}}}function U(c,y,w,H=u){let A=Oe(c,w,"timing"),ie=Oe(y,w,"timing"),Y=Oe(c,w,"cpu"),D=Oe(y,w,"cpu"),se=Oe(c,w,"heap"),le=Oe(y,w,"heap"),re=y.workloads.find((ae)=>ae.id===w),ue=A?.id??Y?.id??se?.id,oe=ie?.id??D?.id??le?.id??re?.id;if(!ue||!oe)return;let me=!1,pe=[],de=Qn(c,y);if(de)pe.push(de);let ge=Math.max(H.timingPct,c.environment?.noise.floorPct??0,y.environment?.noise.floorPct??0),he;if(A?.timing&&re?.skipped&&!ie?.timing)he={medianDeltaPct:0,meanDeltaPct:0,effectPct:0,verdict:"unchanged"},pe.push({code:"skipped",message:"Candidate has no timing measurement for this workload (task.skip()); treated as unchanged.",data:{workloadId:w}});else if(A?.timing&&ie?.timing){let ae=A.timing.samples,fe=ie.timing.samples,ce=Ve(A.timing.median,ie.timing.median),ye=Ve(A.timing.mean,ie.timing.mean),ke=(Pe,be)=>{if(Pe>ge)return"regressed";if(be<-ge)return"improved";return"unchanged"};if(ae.length<Ye||fe.length<Ye){let Pe=ke(ce,ce);if(Pe==="regressed")me=!0;he={medianDeltaPct:ce,meanDeltaPct:ye,effectPct:ce,verdict:Pe},pe.push({code:"thin-comparison",message:`Only ${ae.length} baseline / ${fe.length} candidate sample(s); falling back to a point-estimate threshold instead of a bootstrap CI and Mann-Whitney test (needs ${Ye}+ per side).`,data:{baseSamples:ae.length,candSamples:fe.length}})}else{let Pe=cn(ae,fe,{iterations:H.bootstrapIterations}),be=un(ae,fe),Me=be.pValue<H.alpha?ke(Pe.ci95[0],Pe.ci95[1]):"unchanged";if(Me==="regressed")me=!0;he={medianDeltaPct:ce,meanDeltaPct:ye,effectPct:ce,ci95:Pe.ci95,pValue:be.pValue,seed:Pe.seed,verdict:Me}}}let xe;if(Y?.cpu&&D?.cpu){let ae=new Map(Y.cpu.totals.map((Pe)=>[Y.cpu.frames[Pe.frameIx].key,Pe])),fe=new Map(D.cpu.totals.map((Pe)=>[D.cpu.frames[Pe.frameIx].key,Pe])),ce=new Map(Y.cpu.frames.map((Pe)=>[Pe.key,Pe.name])),ye=new Map(D.cpu.frames.map((Pe)=>[Pe.key,Pe.name]));xe=[...new Set([...ae.keys(),...fe.keys()])].map((Pe)=>{let be=ae.get(Pe)?.selfUs??0,Me=fe.get(Pe)?.selfUs??0;return{frameKey:Pe,name:ye.get(Pe)??ce.get(Pe)??Pe,baseSelfUs:be,candSelfUs:Me,deltaPct:Ve(be,Me)}}).sort((Pe,be)=>Math.abs(be.deltaPct)-Math.abs(Pe.deltaPct));for(let Pe of xe)if((Pe.baseSelfUs>=H.minFrameSelfUs||Pe.candSelfUs>=H.minFrameSelfUs)&&Pe.deltaPct>H.frameSelfPct)me=!0}let we;if(se?.heap&&le?.heap){let ae=new Map(se.heap.typeCounts.map((ye)=>[ye.type,ye])),fe=new Map(le.heap.typeCounts.map((ye)=>[ye.type,ye]));we=[...new Set([...ae.keys(),...fe.keys()])].map((ye)=>{let ke=ae.get(ye),Pe=fe.get(ye);return{type:ye,baseCount:ke?.count??0,candCount:Pe?.count??0,baseBytes:ke?.retainedBytes,candBytes:Pe?.retainedBytes,deltaPct:Ve(ke?.count??0,Pe?.count??0)}}).sort((ye,ke)=>Math.abs(ke.deltaPct)-Math.abs(ye.deltaPct));for(let ye of we)if(ye.deltaPct>H.heapTypePct)me=!0}return{id:e("cmp",ue,oe),baselineMeasurementId:ue,candidateMeasurementId:oe,timing:he,...pe.length>0&&{warnings:pe},frames:xe,heapTypes:we,thresholds:{...H,effectiveTimingPct:ge},verdict:me?"fail":"pass"}}var Ue="node_modules/.cache/ostia",Xn=".ostia/baselines",Zn={runs:null,warmup:3,outDir:Ue,baselineDir:Xn,baseline:"main",cpuIntervalUs:1000,thresholds:u,workloads:[]};function pn(c){return{...Zn,...c,thresholds:{...u,...c.thresholds??{}}}}async function ln(c){let y=Bun.file(c);if(!await y.exists())return;return pn(await y.json())}async function dn(c){let y=c.startsWith("/")?c:`${process.cwd()}/${c}`;if(!await Bun.file(y).exists())return;let w=await import(y);return pn(w.default??{})}async function T(c){if(c!==void 0)return c.endsWith(".ts")?dn(c):ln(c);return await dn("ostia.config.ts")??ln("ostia.config.json")}function s(c,y){return`${c.baselineDir}/${y??c.baseline}.json`}async function W(){if(await Bun.file("ostia.config.ts").exists())return"ostia.config.ts";if(await Bun.file("ostia.config.json").exists())return"ostia.config.json";return}var et=10,nt=3000000000,tt=3;function qe(c){if(c.timeSource)I(c.timeSource);let y=c.warmup??tt,w=c.samples,H=c.minSamples??et,A=w??H,ie=w!==void 0?0:c.budgetMs!==void 0?c.budgetMs*1e6:nt,Y=c.timeSource!==void 0,D=c.ignoreExitCodes??[],se=new Set(D),le=[],re=0,ue=0,oe=!1,me;function pe(){if(oe)return!0;if(w!==void 0)return ue>=w;return ue>=A&&re>=ie}async function de(ge,he){if(c.prepare)await N(c.prepare,{phase:ge,index:he},{cwd:c.cwd,env:c.env,timeoutMs:c.timeoutMs,signal:c.signal});return z(c)}return{async warmup(){for(let ge=0;ge<y;ge++){if(c.signal?.aborted)return;await de("warmup",ge)}},async step(){if(pe()||c.signal?.aborted)return!1;let ge=await de("timing",ue);if(c.signal?.aborted)return!1;if(ge.timeSourceNoMatch)me??=ge.timeSourceMissOutput;if(le.push({i:ue,wallNs:ge.wallNs,exitCode:ge.exitCode??void 0,userNs:ge.userNs,systemNs:ge.systemNs,maxRssBytes:ge.maxRssBytes,...ge.reportedNs!==void 0&&{reportedNs:ge.reportedNs},...ge.timedOut?{timedOut:!0}:{},...ge.timeSourceNoMatch?{timeSourceNoMatch:!0}:{}}),re+=ge.wallNs,ue++,c.failOnNonzero&&ge.exitCode!==null&&ge.exitCode!==0&&!se.has(ge.exitCode))oe=!0;return!0},done:pe,result(){let ge=le.filter((ce)=>!ce.timedOut&&!ce.timeSourceNoMatch),he=ge.map((ce)=>Y?ce.reportedNs:ce.wallNs),xe=[],we=le.filter((ce)=>ce.timedOut).length;if(we>0)xe.push({code:"timeout",message:`${we} of ${le.length} trial(s) timed out after ${c.timeoutMs}ms.`,data:{timeoutMs:c.timeoutMs,trials:we}});let ae=le.filter((ce)=>ce.timeSourceNoMatch).length;if(ae>0&&c.timeSource){let{pattern:ce}=c.timeSource;xe.push({code:"time-source-no-match",message:`${ae} of ${le.length} trial(s) didn't match the timeSource pattern.`,data:{pattern:typeof ce==="string"?ce:ce.source,trials:ae,...me!==void 0&&{output:me}}})}if(he.length===0)return{trials:le,warnings:xe};let fe=h(he);return xe.push(...S(fe,ge.map((ce)=>ce.exitCode),Y?"reported":"subprocess",D)),{trials:le,timing:fe,warnings:xe}}}}async function Qe(c){await c.warmup();while(await c.step());}async function J(c){let y=qe(c);return await Qe(y),y.result()}async function C(c,y){let w=new Set;for(let H of c)for await(let A of new Bun.Glob(H).scan({cwd:y,absolute:!1}))w.add(A);return[...w].sort()}var fn=new URL("./runner.ts",import.meta.url).pathname;function j(){return Math.max(1,navigator.hardwareConcurrency||1)}async function L(c,y){return C(c,y)}function rt(c){if(c===void 0)return;return c==="auto"?j():c}async function G(c,y,w=process.cwd()){return{suites:c.suites.length>0?c.suites:y?.suites?await L(y.suites,w):[],budgetMs:c.budgetMs??y?.budgetMs,samples:c.samples??y?.samples,minSamples:c.minSamples??y?.minSamples,jobs:c.jobs??rt(y?.jobs),gc:c.gc??y?.gc??!1,cpu:c.cpu??y?.cpu??!1,alloc:c.alloc??y?.alloc??!1,filter:c.filter??y?.filter,isolate:c.isolate??y?.isolate??!1,preload:c.preload.length>0?c.preload:y?.preload??[],bunFlags:c.bunFlags,outDir:c.outDir??y?.outDir,noiseCheck:c.noiseCheck,timeoutMs:c.timeoutMs??y?.timeoutMs,cwd:w}}async function f(c){if(c.samples!==void 0&&(!Number.isFinite(c.samples)||c.samples<1))throw RangeError(`bench: samples must be >= 1, got ${c.samples}`);if(c.minSamples!==void 0&&(!Number.isFinite(c.minSamples)||c.minSamples<1))throw RangeError(`bench: minSamples must be >= 1, got ${c.minSamples}`);if(c.budgetMs!==void 0&&!Number.isFinite(c.budgetMs))throw RangeError(`bench: budgetMs must be finite, got ${c.budgetMs}`);let w=`${c.outDir??Ue}/bench-tmp`,H=c.cwd??process.cwd(),A=Math.max(1,Math.floor(c.jobs??1)),ie={budgetMs:c.budgetMs,samples:c.samples,minSamples:c.minSamples,gc:c.gc,cpu:c.cpu,alloc:c.alloc,noiseCheck:c.noiseCheck},Y=(ue)=>ue.startsWith("/")?ue:`${H}/${ue}`,D=c.suites.map(Y),se=(c.preload??[]).map(Y),le=c.bunFlags??[],re=async(ue,oe)=>{let me=new Set,pe=0,de,ge=async()=>{while(de===void 0&&!c.signal?.aborted&&pe<ue.length){let he=pe++;try{let xe=!1,we=c.timeoutMs!==void 0?AbortSignal.timeout(c.timeoutMs):void 0;we?.addEventListener("abort",()=>{xe=!0},{once:!0});let ae=O(we,c.signal),fe=Bun.spawn(ue[he],{cwd:H,stdout:"inherit",stderr:"inherit",stdin:"ignore",...ae&&{signal:ae,killSignal:"SIGKILL"}});me.add(fe);let ce=await fe.exited;if(me.delete(fe),c.signal?.aborted)return;if(xe)throw Error(`Bench suite timed out after ${c.timeoutMs}ms: ${oe(he)}`);if(ce!==0)throw Error(`Bench suite failed: ${oe(he)} (runner exited ${ce})`)}catch(xe){de??=xe instanceof Error?xe:Error(String(xe));for(let we of me)we.kill()}}};if(await Promise.all(Array.from({length:Math.min(A,ue.length)},ge)),de)throw de};try{let ue=D.map((ce)=>`${w}/${e("bench-plan",ce)}.json`),oe=D.map((ce)=>`${w}/${e("bench-primary",ce)}.json`),me=D.map((ce,ye)=>["bun",...le,fn,ce,oe[ye],JSON.stringify({...ie,filter:c.filter,isolate:c.isolate,preload:se,planPath:ue[ye]})]);await re(me,(ce)=>c.suites[ce]);let pe=await Promise.all(ue.map(async(ce)=>{if(!await Bun.file(ce).exists())return[];let{tasks:ye}=await Bun.file(ce).json();return ye})),de=await Promise.all(oe.map(async(ce)=>await Bun.file(ce).exists()?r(ce):void 0)),ge=[];for(let ce=0;ce<pe.length;ce++)for(let ye of pe[ce])if(ye.isolate)ge.push({suiteIndex:ce,taskIds:[ye.id]});let he=ge.map((ce,ye)=>`${w}/${e("bench-item",D[ce.suiteIndex],ye)}.json`),xe=ge.map((ce,ye)=>["bun",...le,fn,D[ce.suiteIndex],he[ye],JSON.stringify({...ie,taskIds:ce.taskIds,preload:se,markIsolated:!0})]);await re(xe,(ce)=>c.suites[ge[ce].suiteIndex]);let we=await Promise.all(he.map(async(ce)=>await Bun.file(ce).exists()?r(ce):void 0)),ae=[],fe=[];for(let ce=0;ce<pe.length;ce++){let ye=de[ce];if(!ye)continue;let ke=new Map;for(let Me of ye.measurements){let $e=ke.get(Me.workloadId)??[];$e.push(Me),ke.set(Me.workloadId,$e)}let Pe=0,be=new Map;ge.forEach((Me,$e)=>{let Ce=we[$e];if(Me.suiteIndex===ce&&Ce)be.set(Me.taskIds[0],Ce)});for(let Me of pe[ce])if(Me.isolate){let $e=be.get(Me.id);if(!$e)continue;let Ce=$e.workloads[0];ae.push(Ce);for(let Ae of $e.measurements)if(Ae.workloadId===Ce.id)fe.push(Ae)}else{let $e=ye.workloads[Pe];ae.push($e),Pe++;for(let Ce of ke.get($e.id)??[])fe.push(Ce)}}if(c.signal?.aborted&&fe.length>0){let ce=fe[fe.length-1];ce.warnings=[...ce.warnings,{code:"aborted",message:"Run was cancelled before it finished; this document holds whatever suites/tasks had already completed."}]}return t(ae,fe,de.find((ce)=>ce!==void 0)?.environment)}finally{await Bun.spawn(["rm","-rf",w]).exited}}function Z(c,y,w=8){if(w<=1)throw RangeError(`range: multiplier must be > 1, got ${w}`);if(c<=0)throw RangeError(`range: start must be > 0, got ${c}`);let H=[];for(let A=c;A<=y;A*=w)H.push(A);if(!H.includes(y))H.push(y);return H}function Se(c,y){if(y){let w=c.measurements.find((H)=>H.id===y);return w?.cpu?[w]:[]}return c.measurements.filter((w)=>w.phase==="cpu"&&w.cpu)}function Ne(c){let y=c.nodes,w=y.length,H=it(c),A=new Int32Array(w).fill(-1);for(let se=0;se<w;se++)for(let le of y[se].children){let re=H(le);if(re!==-1)A[re]=se}let ie=[];for(let se=0;se<w;se++)if(A[se]===-1)ie.push(se);let Y=[],D=[];for(let se=ie.length-1;se>=0;se--)D.push(ie[se]);while(D.length>0){let se=D.pop();Y.push(se);for(let le of y[se].children){let re=H(le);if(re!==-1&&A[re]===se)D.push(re)}}return{count:w,indexOf:H,parentIx:A,roots:ie,order:Y}}function it(c){let y=c.nodes,w=y.length,H=1/0,A=-1/0,ie=!0;for(let D=0;D<w;D++){let se=y[D].id;if(!Number.isInteger(se)){ie=!1;break}if(se<H)H=se;if(se>A)A=se}if(ie&&w>0&&A-H<w*4+64){let D=A-H+1,se=new Int32Array(D).fill(-1);for(let le=0;le<w;le++)se[y[le].id-H]=le;return(le)=>{let re=le-H;return re>=0&&re<D?se[re]:-1}}let Y=new Map;for(let D=0;D<w;D++)Y.set(y[D].id,D);return(D)=>Y.get(D)??-1}function gn(c,y){let{count:w,indexOf:H,parentIx:A,order:ie}=y,Y=new Float64Array(w),D=new Float64Array(w),se=c.samples?.nodeIds??[],le=c.samples?.timeDeltasUs??[];for(let ue=0;ue<se.length;ue++){let oe=H(se[ue]);if(oe===-1)continue;Y[oe]+=le[ue]??0,D[oe]+=1}let re=new Float64Array(w);for(let ue=ie.length-1;ue>=0;ue--){let oe=ie[ue];re[oe]+=Y[oe];let me=A[oe];if(me>=0)re[me]+=re[oe]}return{selfUs:Y,totalUs:re,samples:D}}var hn={name:"collapsed",async render(c,y={}){return{files:Se(c,y.measurementId).map((A)=>{let ie=A.cpu,{nodes:Y,frames:D}=ie,se=Ne(ie),le=Array(se.count);for(let pe of se.order){let de=D[Y[pe].frameIx].name||"(anonymous)",ge=se.parentIx[pe];le[pe]=ge===-1?de:`${le[ge]};${de}`}let re=new Float64Array(se.count),ue=[],oe=ie.samples?.nodeIds??[];for(let pe=0;pe<oe.length;pe++){let de=se.indexOf(oe[pe]);if(de===-1)continue;if(re[de]++===0)ue.push(de)}let me=Array(ue.length);for(let pe=0;pe<ue.length;pe++){let de=ue[pe];me[pe]=`${le[de]} ${re[de]}`}return{path:`${A.id}.collapsed.txt`,content:me.join(`
3
- `)+(me.length>0?`
4
- `:"")}})}}};var bn={name:"cpuprofile",async render(c,y={}){let w=Se(c,y.measurementId),H=[],A=[];for(let ie of w){if(ie.cpu?.origin!=="cpu-prof"&&ie.cpu?.origin!=="inspector"){A.push(`${ie.id} (origin ${ie.cpu?.origin??"unknown"} has no .cpuprofile artifact to pass through)`);continue}let Y=ie.artifacts.find((se)=>se.kind==="cpuprofile");if(!Y){A.push(`${ie.id} (no cpuprofile artifact recorded on this run)`);continue}let D=Bun.file(Y.path);if(!await D.exists()){A.push(`${ie.id} (artifact missing on disk: ${Y.path})`);continue}H.push({path:`${ie.id}.cpuprofile`,content:await D.text()})}if(H.length===0&&A.length>0)return{text:`No .cpuprofile artifacts available:
5
- ${A.map((ie)=>` - ${ie}`).join(`
6
- `)}
7
- `};return{files:H}}};var wn={name:"json",async render(c){return{text:V(c)}}};var yn={name:"jsonl",async render(c){let{measurements:y,...w}=c;return{text:`${[R({kind:"document",...w}),...y.map((A)=>R({kind:"measurement",...A}))].join(`
8
- `)}
9
- `}}};var Fe=0.5,st={ns:1,\u{b5}s:1000,ms:1e6,s:1e9};function Be(c){let y=Math.abs(c);if(y>=1e9)return"s";if(y>=1e6)return"ms";if(y>=1000)return"\xB5s";return"ns"}function ot(c){let y=Math.floor(Math.log10(Math.max(Math.abs(c),1)))+1;return Math.max(1,3-y)}function ve(c,y=Be(c)){let w=c/st[y];return`${w.toFixed(ot(w))} ${y}`}function He(c){return`${c.cpuModel} \xB7 ${c.cores} cores \xB7 load ${c.loadAvg1.toFixed(1)} \xB7 noise floor ${c.noise.floorPct.toFixed(1)}%`}function g(c){return`${c.sha} (${c.branch}${c.dirty?", dirty":""})`}function n(c){return c?.label??c?.command?.join(" ")??c?.entry?.task??c?.id??"unknown"}function ze(c,y){if(c===1)return y?"1.00\xD7 (baseline)":"1.00\xD7";if(c>1)return`${c.toFixed(2)}\xD7 slower`;return`${(1/c).toFixed(2)}\xD7 faster`}function xn(c){return c.replace(/\|/g,"\\|").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/`/g,"\\`").replace(/\r\n|\r|\n/g,"<br>")}function Ge(c){if(!c?.entry)return;if(c.entry.group!==void 0)return c.entry.group;let y=c.entry.task,w=y.lastIndexOf("/");return w===-1?void 0:y.slice(0,w)}function We(c){let y=Math.min(...c.map((A)=>A.run.timing.median)),w=new Map;for(let A of c){let ie=Ge(A.workload);if(ie===void 0)continue;let Y=w.get(ie);if(Y)Y.push(A);else w.set(ie,[A])}let H=new Map;for(let A of c){let ie=Ge(A.workload);if(ie===void 0){H.set(A,y);continue}let Y=w.get(ie)??[A],D=Y.find((se)=>se.workload?.baseline);H.set(A,D?D.run.timing.median:Math.min(...Y.map((se)=>se.run.timing.median)))}return H}function Pn(c){return(c/1e6).toFixed(3)}function Mn(c){if(!c?.params)return"";return` (${Object.entries(c.params).map(([w,H])=>`${w}=${H}`).join(", ")})`}function Te(c){return xn(String(c))}function at(c){let y;for(let w of c){let H=w?.params?Object.keys(w.params):void 0;if(H?.length!==2)return;if(y===void 0)y=H;else if(H.length!==y.length||H.some((A,ie)=>A!==y[ie]))return}return y}var kn=10,Rn=10,$n={name:"markdown",async render(c){let y=new Map(c.workloads.map((D)=>[D.id,D])),w=[];w.push("# Profile Report","");let H=c.git?` \xB7 ${g(c.git)}`:"";if(w.push(`Bun ${c.bunVersion} \xB7 ostia ${c.toolVersion} \xB7 ${c.platform.os}/${c.platform.arch} \xB7 ${c.createdAt}${H}`,""),c.environment)w.push(He(c.environment),"");let A=(c.comparisons??[]).flatMap((D)=>D.warnings??[]).find((D)=>D.code==="environment-mismatch");if(A)w.push(`> \u26A0 ${A.message}`,"");let ie=c.measurements.filter((D)=>D.phase==="timing"&&D.timing!==void 0),Y=c.workloads.filter((D)=>D.skipped&&!ie.some((se)=>se.workloadId===D.id));if(ie.length>0||Y.length>0){w.push("## Timing","");let D=new Map,se=[];for(let ue of ie){let oe=y.get(ue.workloadId)?.entry?.group;if(oe===void 0){se.push(ue);continue}let me=D.get(oe);if(me)me.push(ue);else D.set(oe,[ue])}let le=new Map;for(let[ue,oe]of D){let me=at(oe.map((pe)=>y.get(pe.workloadId)));if(me)le.set(ue,{keys:me,runs:oe});else se.push(...oe)}if(se.length>0||Y.length>0){let ue=ie.map((he)=>({run:he,workload:y.get(he.workloadId)})),oe=ue.length>1,me=oe?We(ue):void 0,pe=new Map(ue.map((he)=>[he.run.id,me?.get(he)??he.run.timing.median])),de=oe?" Relative |":"",ge=oe?"---|":"";w.push(`| Task | Median | Spread (p75\u2026p99) | Mean \xB1 SD | Range | MAD |${de}`,`|---|---|---|---|---|---|${ge}`);for(let he of se){let xe=y.get(he.workloadId),we=Te(n(xe)+Mn(xe)),ae=he.timing,fe=Be(ae.median),ce=ae.p75??ae.median,ye=ae.p99??ae.max,ke=ae.mad!==void 0?ve(ae.mad,fe):"-",Pe=oe?` ${ze(ae.median/(pe.get(he.id)??ae.median),!!xe?.baseline)} |`:"";w.push(`| ${we} | ${ve(ae.median,fe)} | ${ve(ce,fe)}\u2026${ve(ye,fe)} | ${ve(ae.mean,fe)} \xB1 ${ve(ae.stddev,fe)} | ${ve(ae.min,fe)}\u2026${ve(ae.max,fe)} | ${ke} |${Pe}`)}for(let he of Y){let xe=Te(n(he)+Mn(he)),we=oe?" - |":"";w.push(`| ${xe} | - skipped | - | - | - | - |${we}`)}w.push("")}for(let[ue,{keys:oe,runs:me}]of le){let[pe,de]=oe,ge=[],he=[],xe=new Map;for(let we of me){let ae=y.get(we.workloadId).params,fe=ae[pe],ce=ae[de];if(!ge.includes(fe))ge.push(fe);if(!he.includes(ce))he.push(ce);xe.set(`${fe}\x00${ce}`,we)}w.push(`### ${Te(ue)} (${Te(pe)} \xD7 ${Te(de)})`,""),w.push(`| ${Te(pe)} \\ ${Te(de)} | ${he.map(Te).join(" | ")} |`,`|---|${he.map(()=>"---").join("|")}|`);for(let we of ge){let ae=he.map((fe)=>{let ce=xe.get(`${we}\x00${fe}`);return ce?ve(ce.timing.median):"-"});w.push(`| ${Te(we)} | ${ae.join(" | ")} |`)}w.push("")}let re=ie.filter((ue)=>ue.warnings.length>0);if(re.length>0){w.push("### Warnings","");for(let ue of re){let oe=n(y.get(ue.workloadId));for(let me of ue.warnings)w.push(`- **${oe}**: ${me.message} (\`${me.code}\`)`)}w.push("")}}for(let D of c.measurements){if(D.phase!=="cpu"&&D.phase!=="heap")continue;let se=n(y.get(D.workloadId));if(D.phase==="cpu"){if(w.push(`## CPU capture - ${se}`,""),w.push(`instrumented, diagnostic wall ${Pn(D.diagnosticWallNs??0)}ms`,""),D.cpu){w.push(`origin: \`${D.cpu.origin}\`, interval: ${D.cpu.samplingIntervalUs}\xB5s`,""),w.push("| Self % | Self (ms) | Total (ms) | Frame |","|---|---|---|---|");let le=D.cpu.totals.reduce((re,ue)=>re+ue.selfUs,0)||1;for(let re of D.cpu.totals.slice(0,kn)){let ue=D.cpu.frames[re.frameIx],oe=(re.selfUs/le*100).toFixed(1);w.push(`| ${oe}% | ${(re.selfUs/1000).toFixed(2)} | ${(re.totalUs/1000).toFixed(2)} | ${Te(ue?.name||"(anonymous)")} |`)}if(w.push(""),D.jit){let re=D.jit.tiers;w.push(`JIT tiers: LLInt ${re.llint} \xB7 Baseline ${re.baseline} \xB7 DFG ${re.dfg} \xB7 FTL ${re.ftl}`,"")}}}else if(w.push(`## Heap snapshot - ${se}`,""),w.push(`instrumented, diagnostic wall ${Pn(D.diagnosticWallNs??0)}ms`,""),D.heap){w.push(`${D.heap.objectCount??"?"} objects, ${((D.heap.heapSizeBytes??0)/1e6).toFixed(2)}MB`,""),w.push("| Count | Type |","|---|---|");for(let le of D.heap.typeCounts.slice(0,Rn))w.push(`| ${le.count} | ${Te(le.type)} |`);w.push("")}for(let le of D.artifacts)w.push(`- artifact: \`${le.path}\``);for(let le of D.warnings)w.push(`- ! ${le.message} (\`${le.code}\`)`);if(D.artifacts.length>0||D.warnings.length>0)w.push("")}if(c.comparisons&&c.comparisons.length>0){w.push("## Comparisons","");for(let D of c.comparisons){let se=c.measurements.find((re)=>re.id===D.candidateMeasurementId),le=n(se?y.get(se.workloadId):y.get(D.candidateMeasurementId));if(w.push(`### ${D.verdict==="pass"?"\u2713":"\u2717"} ${le}`,""),D.timing){let re=D.timing.medianDeltaPct>0?"+":"",ue=D.timing.verdict==="unchanged"&&D.timing.pValue!==void 0&&D.timing.pValue>=D.thresholds.alpha?"~":"",oe=[];if(se?.timing)oe.push(`n=${se.timing.samples.length}`);if(D.timing.ci95)oe.push(`95% CI [${D.timing.ci95[0]>0?"+":""}${D.timing.ci95[0].toFixed(1)}%, ${D.timing.ci95[1]>0?"+":""}${D.timing.ci95[1].toFixed(1)}%]`);if(D.timing.pValue!==void 0)oe.push(`p=${D.timing.pValue.toFixed(4)}`);oe.push(`threshold ${D.thresholds.effectiveTimingPct.toFixed(1)}%`),w.push(`- timing: ${ue}${re}${D.timing.medianDeltaPct.toFixed(1)}% median, ${oe.join(", ")} (**${D.timing.verdict}**)`)}for(let re of D.frames?.slice(0,kn)??[]){if(Math.abs(re.deltaPct)<Fe)continue;let ue=re.deltaPct>0?"+":"";w.push(`- frame \`${Te(re.name)}\`: ${ue}${re.deltaPct.toFixed(1)}% self-time (${(re.baseSelfUs/1000).toFixed(2)}ms \u2192 ${(re.candSelfUs/1000).toFixed(2)}ms)`)}for(let re of D.heapTypes?.slice(0,Rn)??[]){if(Math.abs(re.deltaPct)<Fe)continue;let ue=re.deltaPct>0?"+":"";w.push(`- heap \`${Te(re.type)}\`: ${ue}${re.deltaPct.toFixed(1)}% count (${re.baseCount} \u2192 ${re.candCount})`)}for(let re of D.warnings??[]){if(re.code==="environment-mismatch")continue;w.push(`- ! ${re.message} (\`${re.code}\`)`)}w.push("")}}return{text:w.join(`
10
- `)}}};var mt=15;function Xe(c){return`n${c}`}function ct(c,y,w){return`${(c||"(anonymous)").replace(/"/g,"'")} (self ${(y/1000).toFixed(2)}ms, total ${(w/1000).toFixed(2)}ms)`}function ut(c,y,w,H){let A=[];if(H<=0)return A;for(let ie=0;ie<y;ie++){if(ie===w)continue;let Y=c[ie];if(A.length===H&&Y<=c[A[H-1]])continue;let D=A.length;while(D>0&&c[A[D-1]]<Y)D--;if(A.splice(D,0,ie),A.length>H)A.pop()}return A}var vn={name:"mermaid",async render(c,y={}){let w=y.topN??mt;return{files:Se(c,y.measurementId).map((ie)=>{let Y=ie.cpu,{nodes:D,frames:se}=Y,le=Ne(Y),{selfUs:re,totalUs:ue}=gn(Y,le),{parentIx:oe}=le,me=le.roots[0]??-1,pe=ut(re,le.count,me,w),de=new Set(me!==-1?[me]:[]),ge=[];for(let xe of pe){ge.length=0;for(let we=xe;we!==-1;we=oe[we])ge.push(we);for(let we=ge.length-1;we>=0;we--)de.add(ge[we])}let he=["graph TD"];for(let xe of de){let we=D[xe].id;he.push(` ${Xe(we)}["${ct(se[D[xe].frameIx].name,re[xe],ue[xe])}"]`)}for(let xe of de){let we=oe[xe];if(we!==-1&&de.has(we))he.push(` ${Xe(D[we].id)} --> ${Xe(D[xe].id)}`)}return{path:`${ie.id}.mermaid.md`,content:`${he.join(`
11
- `)}
12
- `}})}}};var l=1;function Re(c){return Number.isFinite(c)?Number(c.toPrecision(6)):c}function Ze(c,y){return c?.entry?.task??c?.label??c?.command?.join(" ")??y}function Cn(c,y){if(y?.entry?.group!==void 0)c.group=y.entry.group;if(y?.description!==void 0)c.description=y.description;if(y?.groupDescription!==void 0)c.groupDescription=y.groupDescription;if(y?.params!==void 0)c.params=y.params}function Tn(c){if(!c?.timing)return;let y={medianPct:Re(c.timing.medianDeltaPct),meanPct:Re(c.timing.meanDeltaPct),verdict:c.timing.verdict,pass:c.verdict==="pass",effectiveTimingPct:Re(c.thresholds.effectiveTimingPct),matched:!0};if(c.timing.ci95)y.ci95=[Re(c.timing.ci95[0]),Re(c.timing.ci95[1])];if(c.timing.pValue!==void 0)y.pValue=Re(c.timing.pValue);return y}function lt(c,y,w,H){let A={event:"run",protocolVersion:l,schemaVersion:c.schemaVersion,workloadId:y.id,task:Ze(y,y.id),skipped:!0,batch:1,warnings:(w?.warnings??[]).map((Y)=>Y.data?{code:Y.code,data:Y.data}:{code:Y.code})};if(Cn(A,y),H!==void 0)A.noiseFloorPct=Re(H);let ie=Tn(w);if(ie)A.delta=ie;return A}function dt(c){let y=new Map(c.workloads.map((re)=>[re.id,re])),w=c.environment?.noise.floorPct,H=c.measurements.filter((re)=>re.phase==="timing"&&re.timing!==void 0).map((re)=>({run:re,workload:y.get(re.workloadId)})),A=H.length>1?We(H):void 0,ie=new Map((c.comparisons??[]).map((re)=>[re.candidateMeasurementId,re])),Y=new Set(H.map((re)=>re.run.workloadId)),D=new Map;for(let re of c.measurements){if(re.phase!=="cpu"||re.warnings.length===0)continue;let ue=D.get(re.workloadId)??[];D.set(re.workloadId,[...ue,...re.warnings])}let se=c.workloads.filter((re)=>re.skipped&&!Y.has(re.id)).map((re)=>lt(c,re,ie.get(re.id),w));return[...H.map((re)=>{let{run:ue,workload:oe}=re,me=ue.timing,pe=ie.get(ue.id),de={event:"run",protocolVersion:l,schemaVersion:c.schemaVersion,workloadId:ue.workloadId,task:Ze(oe,ue.workloadId),unit:"ns",samples:me.samples.length,batch:me.batch??1,mean:Re(me.mean),median:Re(me.median),stddev:Re(me.stddev),stddevPct:Re(me.mean===0?0:me.stddev/me.mean*100),min:Re(me.min),max:Re(me.max),warnings:[...ue.warnings,...D.get(ue.workloadId)??[],...pe?.warnings??[]].map((he)=>he.data?{code:he.code,data:he.data}:{code:he.code})};if(me.p75!==void 0)de.p75=Re(me.p75);if(me.p99!==void 0)de.p99=Re(me.p99);if(me.mad!==void 0)de.mad=Re(me.mad);if(Cn(de,oe),A)de.relative=Re(me.median/(A.get(re)??me.median));if(oe?.baseline)de.baseline=!0;if(w!==void 0)de.noiseFloorPct=Re(w);let ge=Tn(pe);if(ge)de.delta=ge;return de}),...se]}function pt(c){if(!c.unmatched)return[];let y=(w,H)=>({event:"unmatched",protocolVersion:l,workloadId:w.id,task:Ze(w,w.id),side:H});return[...c.unmatched.baseOnly.map((w)=>y(w,"base")),...c.unmatched.candOnly.map((w)=>y(w,"cand"))]}function ft(c,y){let w=c.comparisonSummary,H=(y.unmatched?.baseOnly.length??0)+(y.unmatched?.candOnly.length??0),A={event:"summary",protocolVersion:l,command:y.command,matched:w?.matched??0,regressed:w?.regressed??0,improved:w?.improved??0,unchanged:w?.unchanged??0,unmatched:H,geomeanPct:w?.geomeanPct!==void 0?w.geomeanPct:null,effectiveTimingPct:Re(w?.effectiveTimingPct??0),verdict:y.exitCode===0?"pass":"fail",exitCode:y.exitCode};if(y.command==="ci"){if(A.cached=y.cached??0,A.executed=y.executed??0,A.failed=y.failed??0,A.missingBaseline=y.missingBaseline??0,y.baseline)A.baseline=y.baseline}if(c.environment)A.noiseFloorPct=Re(c.environment.noise.floorPct);if(y.baseGit||y.candGit)A.git={...y.baseGit&&{base:y.baseGit},...y.candGit&&{cand:y.candGit}};if(y.exportedTo)A.exportedTo=y.exportedTo;return A}var In={name:"minimal",async render(c,y={}){let w=[...dt(c)];if(y.protocol)w.push(...pt(y.protocol)),w.push(ft(c,y.protocol));let H=w.map((A)=>JSON.stringify(A));return{text:H.length>0?`${H.join(`
13
- `)}
14
- `:""}}};var gt="https://www.speedscope.app/file-format-schema.json";function Sn(c){return c?.label??c?.command?.join(" ")??c?.entry?.task??"profile"}var Dn={name:"speedscope",async render(c,y={}){let w=Se(c,y.measurementId),H=new Map(c.workloads.map((ie)=>[ie.id,ie]));return{files:w.map((ie)=>{let Y=ie.cpu,{nodes:D}=Y,se=Ne(Y),le=Y.samples?.nodeIds??[],re=Y.samples?.timeDeltasUs??[],ue=Array(se.count);for(let de of se.order){let ge=se.parentIx[de],he=D[de].frameIx;ue[de]=ge===-1?[he]:[...ue[ge],he]}let oe=Array(le.length);for(let de=0;de<le.length;de++){let ge=se.indexOf(le[de]);oe[de]=ge===-1?[]:ue[ge]}let me=0;for(let de=0;de<re.length;de++)me+=re[de];let pe={$schema:gt,exporter:"ostia",name:Sn(H.get(ie.workloadId)),activeProfileIndex:0,shared:{frames:Y.frames.map((de)=>({name:de.name||"(anonymous)",file:de.url,line:de.line!==void 0?de.line+1:void 0}))},profiles:[{type:"sampled",name:Sn(H.get(ie.workloadId)),unit:"microseconds",startValue:0,endValue:me,samples:oe,weights:re}]};return{path:`${ie.id}.speedscope.json`,content:`${JSON.stringify(pe,null,2)}
15
- `}})}}};function ht(c){return(c/1e6).toFixed(3)}function bt(c){if(c<1024)return`${c.toFixed(0)}B`;if(c<1048576)return`${(c/1024).toFixed(2)}KB`;return`${(c/1048576).toFixed(2)}MB`}var Nn={name:"table",async render(c){let y=c.measurements.filter((be)=>be.phase==="timing"&&be.timing!==void 0),w=new Map(c.workloads.map((be)=>[be.id,be])),H=c.environment?[He(c.environment),""]:[],A=c.workloads.filter((be)=>be.skipped&&!y.some((Me)=>Me.workloadId===be.id));if(y.length===0&&A.length===0){let be=On(c,w);return{text:be.length>0?`${[...H,...be].join(`
16
- `)}
17
- `:`(no timing runs)
18
- `}}let ie=new Map(y.map((be)=>[be.workloadId,be])),Y=[],D=[];for(let be of c.workloads){let Me=ie.get(be.id),$e=n(be);if(Me){let Ce={kind:"measured",run:Me,workload:be,label:$e};Y.push(Ce),D.push(Ce)}else if(be.skipped)Y.push({kind:"skipped",workload:be,label:$e})}let se=new Map(c.measurements.filter((be)=>be.phase==="memstats"&&be.memory?.bytesPerOp!==void 0).map((be)=>[be.workloadId,be.memory.bytesPerOp])),le=se.size>0,re=D.length>1,ue=We(D),oe=new Map,me=new Map,pe;for(let be of Y){let Me=Ge(be.workload);if(Me!==pe){if(Me!==void 0)me.set(be,Me);pe=Me}oe.set(be,Me!==void 0?" ":"")}let de=Math.max(4,...Y.map((be)=>oe.get(be).length+be.label.length)),ge=10,he=18,xe=18,we=10,ae=[...H],fe=le?` ${"Alloc/op".padEnd(we)}`:"",ce=`${"Task".padEnd(de)} ${"Median".padEnd(ge)} ${"Spread".padEnd(he)} ${"Range".padEnd(xe)}${fe}${re?" Relative":""}`;ae.push(ce),ae.push("-".repeat(ce.length));let ye=[];for(let be of Y){let Me=me.get(be);if(Me!==void 0)ae.push(`${Me}:`);let $e=oe.get(be);if(be.kind==="skipped"){ae.push(`${($e+be.label).padEnd(de)} - skipped`);continue}let{run:Ce,label:Ae,workload:Ke}=be,Ie=Ce.timing,Ee=Be(Ie.median),Bn=Ie.p75??Ie.median,An=Ie.p99??Ie.max,Ln=ve(Ie.median,Ee),_n=`${ve(Bn,Ee)}\u2026${ve(An,Ee)}`,jn=`${ve(Ie.min,Ee)}\u2026${ve(Ie.max,Ee)}`,Je=`${($e+Ae).padEnd(de)} ${Ln.padEnd(ge)} ${_n.padEnd(he)} ${jn.padEnd(xe)}`;if(le){let De=Ke?se.get(Ke.id):void 0,Vn=De!==void 0?bt(De):"";Je+=` ${Vn.padEnd(we)}`}if(re){let De=Ie.median/(ue.get(be)??Ie.median);Je+=` ${ze(De,!!Ke?.baseline)}`}if(ae.push(Je),Ce.warnings.length>0)ae.push(`${" ".repeat($e.length)} ! ${Ce.warnings.map((De)=>De.code).join(", ")}`),ye.push(be)}if(ye.length>0){ae.push(""),ae.push("Warnings:");for(let be of ye)for(let Me of be.run.warnings)ae.push(` ${be.label}: ${Me.message}`)}let ke=wt(c,w);if(ke.length>0)ae.push(""),ae.push(...ke);let Pe=On(c,w);if(Pe.length>0)ae.push(""),ae.push(...Pe);return{text:`${ae.map((be)=>be.trimEnd()).join(`
19
- `)}
20
- `}}};function On(c,y){if(!c.comparisons||c.comparisons.length===0)return[];let w=[],H=new Map(c.measurements.map((Y)=>[Y.id,Y])),A=c.comparisons.flatMap((Y)=>Y.warnings??[]).find((Y)=>Y.code==="environment-mismatch");if(A)w.push(`\u26A0 ${A.message}`,"");let ie=[];for(let Y of c.comparisons){let D=H.get(Y.candidateMeasurementId),se=y.get(D?.workloadId??Y.candidateMeasurementId),le=se?n(se):Y.candidateMeasurementId,re=Y.verdict==="pass"?"\u2713":"\u2717";if(w.push(`${re} ${le}`),Y.timing){let oe=(me)=>`${me>=0?"+":""}${me.toFixed(1)}%`;if(Y.timing.ci95&&Y.timing.pValue!==void 0){let me=Y.timing.pValue<0.001?"p<0.001":`p=${Y.timing.pValue.toFixed(3)}`;w.push(` timing: ${oe(Y.timing.medianDeltaPct)} median, 95% CI [${oe(Y.timing.ci95[0])}, ${oe(Y.timing.ci95[1])}], ${me} (${Y.timing.verdict})`)}else w.push(` timing: ${oe(Y.timing.medianDeltaPct)} median (${Y.timing.verdict})`)}if(Y.frames)for(let oe of Y.frames.slice(0,Fn)){if(Math.abs(oe.deltaPct)<Fe)continue;let me=oe.deltaPct>0?"+":"";w.push(` frame ${oe.name}: ${me}${oe.deltaPct.toFixed(1)}% self-time (${(oe.baseSelfUs/1000).toFixed(2)}ms -> ${(oe.candSelfUs/1000).toFixed(2)}ms)`)}if(Y.heapTypes)for(let oe of Y.heapTypes.slice(0,Wn)){if(Math.abs(oe.deltaPct)<Fe)continue;let me=oe.deltaPct>0?"+":"";w.push(` heap ${oe.type}: ${me}${oe.deltaPct.toFixed(1)}% count (${oe.baseCount} -> ${oe.candCount})`)}let ue=(Y.warnings??[]).filter((oe)=>oe.code!=="environment-mismatch");if(ue.length>0){w.push(` ! ${ue.map((oe)=>oe.code).join(", ")}`);for(let oe of ue)ie.push({label:le,message:oe.message})}}if(ie.length>0){w.push("","Comparison warnings:");for(let Y of ie)w.push(` ${Y.label}: ${Y.message}`)}return w}var Fn=5,Wn=5;function wt(c,y){let w=[];for(let H of c.measurements){if(H.phase!=="cpu"&&H.phase!=="heap")continue;let A=y.get(H.workloadId),ie=A?n(A):H.workloadId;if(H.phase==="cpu")if(H.cpu){w.push(`CPU capture - ${ie} (instrumented, ${H.cpu.samplingIntervalUs}\xB5s interval, diagnostic wall ${ht(H.diagnosticWallNs??0)}ms)`);let Y=H.cpu.totals.reduce((D,se)=>D+se.selfUs,0)||1;for(let D of H.cpu.totals.slice(0,Fn)){let se=H.cpu.frames[D.frameIx],le=(D.selfUs/Y*100).toFixed(1);w.push(` ${le.padStart(5)}% ${(D.selfUs/1000).toFixed(2).padStart(8)}ms self ${se?.name??"?"}`)}}else w.push(`CPU capture - ${ie} (instrumented, no evidence captured)`);else if(H.heap){let Y=((H.heap.heapSizeBytes??0)/1e6).toFixed(2);w.push(`Heap snapshot - ${ie} (instrumented, ${H.heap.objectCount??"?"} objects, ${Y}MB)`);for(let D of H.heap.typeCounts.slice(0,Wn))w.push(` ${String(D.count).padStart(6)} ${D.type}`)}else w.push(`Heap snapshot - ${ie} (instrumented, no evidence captured)`);for(let Y of H.artifacts)w.push(` artifact: ${Y.path}`);for(let Y of H.warnings)w.push(` ! ${Y.message}`)}return w}var o={table:Nn,json:wn,markdown:$n,jsonl:yn,minimal:In,collapsed:hn,mermaid:vn,speedscope:Dn,cpuprofile:bn};async function Q(c={}){let y=x();if(y.length===0)throw Error("run(): no tasks registered - call group()/task() before run() in the same file.");let w=y.filter((D)=>D.only),H=w.length>0?w:y;if(w.length>0)process.stderr.write(`bench: ${w.length} task(s) selected by .only
21
- `);let A=v(H,c.filter);if(A.length===0)throw Error(`run(): filter ${JSON.stringify(c.filter)} matched zero of ${H.length} registered task(s).`);let ie=Bun.main,Y=await P(ie,A,c);if(!c.quiet){let D=c.format??"table",{text:se}=await o[D].render(Y,{});if(se)process.stdout.write(se)}return Y}function ee(c,y){let w=Object.keys(c),H=(A,ie)=>{if(A===w.length){X(ie,()=>y(ie));return}let Y=w[A];for(let D of c[Y])H(A+1,{...ie,[Y]:D})};H(0,{})}function ne(c){return c}var en=1000;async function _(c){if(c.samples!==void 0&&(!Number.isFinite(c.samples)||c.samples<1))throw RangeError(`time: samples must be >= 1, got ${c.samples}`);if(c.minSamples!==void 0&&(!Number.isFinite(c.minSamples)||c.minSamples<1))throw RangeError(`time: minSamples must be >= 1, got ${c.minSamples}`);if(c.warmup!==void 0&&(!Number.isFinite(c.warmup)||c.warmup<0))throw RangeError(`time: warmup must be >= 0, got ${c.warmup}`);if(c.budgetMs!==void 0&&!Number.isFinite(c.budgetMs))throw RangeError(`time: budgetMs must be finite, got ${c.budgetMs}`);let y=a({samples:c.samples??null,budgetMs:c.budgetMs??null,minSamples:c.minSamples??null,warmup:c.warmup??null,cpu:c.cpu??!1,heap:c.heap??!1,cpuIntervalUs:c.cpuIntervalUs??en}),H=`${c.outDir??Ue}/artifacts`,A=c.noiseCheck===!1?void 0:p(),ie=A?F(A):void 0,Y=[],D=[],se=c.commands.map((me)=>{let pe=typeof me==="string"||Array.isArray(me)?{command:me}:me,de=Array.isArray(pe.command)?pe.command:b(pe.command),ge=pe.prepare??c.prepare,he=pe.timeSource??c.timeSource,xe=pe.timeoutMs??c.timeoutMs,we=pe.ignoreExitCodes??c.ignoreExitCodes,ae=pe.failOnNonzero??c.failOnNonzero,fe=k(de,pe.label??(Array.isArray(pe.command)?void 0:pe.command),{prepare:ge,timeSource:he});return{argv:de,workload:fe,prepare:ge,timeSource:he,timeoutMs:xe,ignoreExitCodes:we,failOnNonzero:ae}}),le=(c.interleave??!0)&&se.length>1,re=(me)=>({argv:me.argv,cwd:c.cwd,env:c.env,samples:c.samples,budgetMs:c.budgetMs,minSamples:c.minSamples,warmup:c.warmup,prepare:me.prepare,timeSource:me.timeSource,timeoutMs:me.timeoutMs,ignoreExitCodes:me.ignoreExitCodes,failOnNonzero:me.failOnNonzero,signal:c.signal}),ue=se.map((me)=>qe(re(me))),oe=async(me)=>{let{argv:pe,workload:de,prepare:ge}=se[me];Y.push(de);let he=ue[me].result(),xe=m({workload:de,configFingerprint:y,trials:he.trials,timing:he.timing,warnings:ie&&D.length===0?[...he.warnings,ie]:he.warnings,interleaved:le?!0:void 0});if(D.push(xe),!c.signal?.aborted)D.push(...await yt({workload:de,argv:pe,timingMeasurementId:xe.id,cfgFp:y,opts:c,artifactDir:H,prepare:ge}))};if(le){for(let pe of ue)await pe.warmup();let me=!0;while(me){me=!1;for(let pe of ue)if(await pe.step())me=!0}for(let pe=0;pe<se.length;pe++)await oe(pe)}else for(let me=0;me<se.length;me++)await Qe(ue[me]),await oe(me);if(c.signal?.aborted&&D.length>0){let me=D[D.length-1];me.warnings=[...me.warnings,Un()]}return t(Y,D,A)}function Un(){return{code:"aborted",message:"Run was cancelled before it finished; this document holds whatever measurements had already completed."}}async function yt({workload:c,argv:y,timingMeasurementId:w,cfgFp:H,opts:A,artifactDir:ie,prepare:Y}){let D=[],se=async(le)=>{if(Y)await N(Y,{phase:le,index:0},{cwd:A.cwd,env:A.env})};if(A.cpu){await se("cpu");let le=`${w}-cpu.cpuprofile`,re=await nn({argv:y,cwd:A.cwd,env:A.env,artifactDir:ie,fileName:le,intervalUs:A.cpuIntervalUs??en});D.push(await En({workload:c,phase:"cpu",configFingerprint:H,diagnosticWallNs:re.diagnosticWallNs,exitCode:re.exitCode,cpu:re.cpu,artifactPath:re.artifactPath,artifactKind:"cpuprofile",warnings:re.warnings}))}if(A.heap){await se("heap");let le=`${w}-heap.heapsnapshot`,re=await rn({argv:y,cwd:A.cwd,env:A.env,artifactDir:ie,fileName:le});D.push(await En({workload:c,phase:"heap",configFingerprint:H,diagnosticWallNs:re.diagnosticWallNs,exitCode:re.exitCode,heap:re.heap,artifactPath:re.artifactPath,artifactKind:"heapsnapshot",warnings:re.warnings}))}return D}async function En(c){let y=`${c.workload.id}-${c.phase}-${c.configFingerprint}`,w=c.artifactPath?[await K(y,c.artifactKind,c.artifactPath)]:[];return d({workload:c.workload,phase:c.phase,configFingerprint:c.configFingerprint,diagnosticWallNs:c.diagnosticWallNs,exitCode:c.exitCode,cpu:c.cpu,heap:c.heap,warnings:c.warnings,artifacts:w})}async function te(c,y={}){let w=q(c),H=a({intervalUs:y.intervalUs??en,origin:y.origin??"inspector"}),A=(D)=>D.samples?.nodeIds.length===0?[{code:"empty-profile",message:"In-process capture produced zero samples."}]:[];if(y.signal?.aborted){let D=Bun.nanoseconds(),se=await c(),le=d({workload:w,phase:"cpu",configFingerprint:H,diagnosticWallNs:Bun.nanoseconds()-D,warnings:[Un()],artifacts:[]});return{result:se,measurement:le,document:t([w],[le])}}let ie=y.origin==="jsc"?await E(c,y):{...await sn(c,y),jit:void 0},Y=d({workload:w,phase:"cpu",configFingerprint:H,diagnosticWallNs:ie.diagnosticWallNs,cpu:ie.cpu,jit:ie.jit,warnings:A(ie.cpu),artifacts:[]});return{result:ie.result,measurement:Y,document:t([w],[Y])}}
22
- export{u,B,M,U,T,s,W,C,j,L,G,f,J,g,n,Z,l,o,Q,ee,ne,_,te};