ostia 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -11,8 +11,6 @@ export interface CommandSpec {
11
11
  timeoutMs?: number;
12
12
  /** Overrides `TimeOptions.ignoreExitCodes` for this command. */
13
13
  ignoreExitCodes?: number[];
14
- /** Overrides `TimeOptions.failOnNonzero` for this command. */
15
- failOnNonzero?: boolean;
16
14
  }
17
15
 
18
16
  export interface TimeOptions {
@@ -72,11 +70,6 @@ export interface TimeOptions {
72
70
  * no `nonzero-exit` warning, as if it had exited 0. `CommandSpec.ignoreExitCodes`
73
71
  * overrides it per command. */
74
72
  ignoreExitCodes?: number[];
75
- /** Stops a command's trial loop after its first non-zero, non-ignored
76
- * exit (that trial's sample is still recorded) instead of running its
77
- * full sample count regardless of exit code. `CommandSpec.failOnNonzero`
78
- * overrides it per command. */
79
- failOnNonzero?: boolean;
80
73
  }
81
74
 
82
75
  export declare function time(opts: TimeOptions): Promise<ProfileDocument>;
@@ -104,6 +97,10 @@ export interface WorkloadConfig {
104
97
  label?: string;
105
98
  command?: string[];
106
99
  suites?: string[];
100
+ /** `command` only. Globs of the files this command's timing depends on:
101
+ * `ostia ci` reuses a cached run while their contents are unchanged.
102
+ * Omitted, the workload always reruns; `[]` declares it depends on
103
+ * nothing and caches until the command or config changes. */
107
104
  inputs?: string[];
108
105
  /** `command` only. Runs before every trial (warmup included), unmeasured:
109
106
  * a command string / argv array in both `.ts` and JSON config, or a
@@ -121,9 +118,6 @@ export interface WorkloadConfig {
121
118
  /** `command` only. Exit codes to treat as success; see
122
119
  * `TimeOptions.ignoreExitCodes`. */
123
120
  ignoreExitCodes?: number[];
124
- /** `command` only. Stops this workload's trial loop after its first
125
- * non-zero, non-ignored exit; see `TimeOptions.failOnNonzero`. */
126
- failOnNonzero?: boolean;
127
121
  }
128
122
 
129
123
  interface BenchConfig {
@@ -133,6 +127,9 @@ interface BenchConfig {
133
127
  * with it. */
134
128
  suites?: string[];
135
129
  preload?: string[];
130
+ /** Extra flags for the `bun` process that runs each suite file; see
131
+ * `BenchOptions.bunFlags`. `--bun-flags` replaces this list. */
132
+ bunFlags?: string[];
136
133
  jobs?: number | "auto";
137
134
  budgetMs?: number;
138
135
  samples?: number;
@@ -149,12 +146,17 @@ interface BenchConfig {
149
146
  }
150
147
 
151
148
  export interface OstiaConfig {
152
- runs: number | null;
149
+ /** `command` workloads: exact trial count, same as `time()`'s `samples`.
150
+ * Unset, the `budgetMs`/`minSamples` loop decides. */
151
+ samples?: number;
152
+ /** `command` workloads: wall-clock sampling budget, ms; see `time()`. */
153
+ budgetMs?: number;
154
+ /** `command` workloads: hard floor on trials; see `time()`. */
155
+ minSamples?: number;
153
156
  warmup: number;
154
157
  outDir: string;
155
158
  baselineDir: string;
156
159
  baseline: string;
157
- cpuIntervalUs: number;
158
160
  thresholds: Thresholds;
159
161
  workloads: WorkloadConfig[];
160
162
  bench?: BenchConfig;
@@ -164,7 +166,7 @@ export interface OstiaConfig {
164
166
  * Unset (the default): `"fail"` when *every* configured workload is
165
167
  * missing, `"warn"` otherwise - a totally stale/wrong baseline is a hard
166
168
  * error, a handful of new workloads next to an otherwise-matching
167
- * baseline is not. `--on-missing-baseline` overrides this per invocation. */
169
+ * baseline is not. */
168
170
  onMissingBaseline?: "warn" | "fail";
169
171
  /** Measures this machine's noise floor once per `ostia ci` invocation
170
172
  * (default true) and stamps it on the candidate document as
@@ -278,7 +280,6 @@ export interface Workload {
278
280
  kind: "subprocess" | "inprocess";
279
281
  label?: string;
280
282
  command?: string[];
281
- shell?: string;
282
283
  /** Command form of the `prepare` hook that ran before every trial of this
283
284
  * command (`ostia time --prepare`, `time({ prepare })`, config `prepare`).
284
285
  * Part of the workload id: the same command with and without a prepare
@@ -391,17 +392,16 @@ interface TimingStats {
391
392
  mild: number;
392
393
  severe: number;
393
394
  };
394
- /** 25th percentile, ns. Optional: absent on documents saved before this
395
- * field existed (`loadDocument` never backfills it). */
396
- p25?: number;
397
- /** 75th percentile, ns. Same caveat as `p25`. */
398
- p75?: number;
399
- /** 99th percentile, ns. Same caveat as `p75`. */
400
- p99?: number;
395
+ /** 25th percentile, ns. */
396
+ p25: number;
397
+ /** 75th percentile, ns. */
398
+ p75: number;
399
+ /** 99th percentile, ns. */
400
+ p99: number;
401
401
  /** Median absolute deviation, ns: the median of `|sample - median|` across
402
402
  * all samples. A robust spread measure that (unlike stddev) isn't skewed
403
403
  * by the long right tail typical of wall-clock timings. */
404
- mad?: number;
404
+ mad: number;
405
405
  /** In-process trials batched into one timed block (see
406
406
  * `measure/inprocess.ts`'s `sizeBatch`), set only when batching occurred.
407
407
  * Absent for every subprocess timing measurement, and for an in-process
@@ -444,7 +444,7 @@ interface CpuEvidence {
444
444
  }
445
445
 
446
446
  interface HeapEvidence {
447
- origin: "heap-prof" | "generateHeapSnapshot" | "heapStats";
447
+ origin: "heap-prof";
448
448
  heapSizeBytes?: number;
449
449
  objectCount?: number;
450
450
  typeCounts: {
@@ -455,11 +455,8 @@ interface HeapEvidence {
455
455
  }
456
456
 
457
457
  interface MemoryEvidence {
458
- origin: "resourceUsage" | "memoryUsage" | "heapStats";
459
- perTrial?: {
460
- rssBytes?: number;
461
- heapSizeBytes?: number;
462
- }[];
458
+ origin: "resourceUsage" | "heapStats";
459
+ /** Largest `Trial.maxRssBytes` across a timing measurement's trials. */
463
460
  maxRssBytes?: number;
464
461
  /** Bytes allocated per call, from `ostia bench --alloc`: heap size delta
465
462
  * (`bun:jsc`'s `heapStats().heapSize`, falling back to
@@ -483,7 +480,7 @@ interface JitTierBreakdown {
483
480
  }[];
484
481
  }
485
482
 
486
- declare const WARNING_CODES: readonly ["slow-first-run", "outliers-detected", "fast-command", "nonzero-exit", "artifact-missing", "empty-profile", "below-timer-resolution", "low-sample-count", "thin-comparison", "noisy-machine", "skipped", "jit-cold", "timeout", "aborted", "time-source-no-match", "environment-mismatch"];
483
+ declare const WARNING_CODES: readonly ["slow-first-run", "outliers-detected", "fast-command", "nonzero-exit", "artifact-missing", "empty-profile", "low-sample-count", "thin-comparison", "noisy-machine", "skipped", "jit-cold", "timeout", "aborted", "time-source-no-match", "environment-mismatch"];
487
484
 
488
485
  export type WarningCode = (typeof WARNING_CODES)[number];
489
486
 
@@ -495,7 +492,7 @@ export interface Warning {
495
492
 
496
493
  interface ArtifactRef {
497
494
  id: string;
498
- kind: "cpuprofile" | "cpu-md" | "heapsnapshot" | "heap-md" | "speedscope" | "collapsed" | "mermaid" | "other";
495
+ kind: "cpuprofile" | "heapsnapshot";
499
496
  path: string;
500
497
  sha256: string;
501
498
  bytes: number;
@@ -614,6 +611,8 @@ interface InprocessTimingOptions {
614
611
 
615
612
  export declare function keep(value: unknown): void;
616
613
 
614
+ type TaskFn = () => unknown | Promise<unknown>;
615
+
617
616
  interface BenchOptions {
618
617
  suites: string[];
619
618
  /** Wall-clock sampling budget per task, ms (default 500). */
@@ -666,8 +665,8 @@ interface BenchOptions {
666
665
  * resolution condition Bun doesn't set by default (e.g. Svelte/Vue's
667
666
  * `browser` vs `default` builds). */
668
667
  bunFlags?: string[];
669
- /** Measure this machine's noise floor before the first task per suite
670
- * subprocess (default: true) and stamp it on the document as
668
+ /** Measure this machine's noise floor once, before any suite runs
669
+ * (default: true), and stamp it on the document as
671
670
  * `environment`. Set false to skip the ~200ms reference measurement. */
672
671
  noiseCheck?: boolean;
673
672
  /** Kills a suite file's subprocess (or, under `isolate`, one task's
@@ -780,19 +779,6 @@ interface GroupFn {
780
779
 
781
780
  export declare const group: GroupFn;
782
781
 
783
- interface TaskFn {
784
- (name: string, fn: () => unknown | Promise<unknown>, opts?: TaskOptions): void;
785
- /** Registers the task as skipped: the runner never measures it, but the
786
- * document still carries its workload (marked `Workload.skipped`) so a
787
- * renderer or `compare` can say so explicitly instead of the task simply
788
- * being absent. */
789
- skip: (name: string, fn: () => unknown | Promise<unknown>, opts?: TaskOptions) => void;
790
- /** When any task or group in the suite uses `.only`, the runner restricts
791
- * the whole suite file to only those tasks (before `--filter` narrows
792
- * further) and prints a one-line notice to stderr. */
793
- only: (name: string, fn: () => unknown | Promise<unknown>, opts?: TaskOptions) => void;
794
- }
795
-
796
782
  export declare const task: TaskFn;
797
783
 
798
784
  export interface RunOptions extends MeasureTasksOpts {
@@ -871,7 +857,7 @@ interface MinimalWarning {
871
857
  data?: Record<string, unknown>;
872
858
  }
873
859
 
874
- export interface MinimalDelta {
860
+ interface MinimalDelta {
875
861
  medianPct: number;
876
862
  meanPct: number;
877
863
  verdict: "improved" | "regressed" | "unchanged";
@@ -888,7 +874,7 @@ export interface MinimalDelta {
888
874
  matched: true;
889
875
  }
890
876
 
891
- export interface MinimalRunLine {
877
+ interface MinimalRunLine {
892
878
  event: "run";
893
879
  protocolVersion: typeof MINIMAL_PROTOCOL_VERSION;
894
880
  schemaVersion: ProfileDocument["schemaVersion"];
@@ -919,11 +905,13 @@ export interface MinimalRunLine {
919
905
  stddevPct?: number;
920
906
  min?: number;
921
907
  max?: number;
922
- /** 75th/99th percentile and median absolute deviation, ns. Absent on
923
- * documents saved before these fields existed. */
908
+ /** 75th/99th percentile and median absolute deviation, ns. */
924
909
  p75?: number;
925
910
  p99?: number;
926
911
  mad?: number;
912
+ /** Median user / system CPU time per trial, ns: subprocess commands only. */
913
+ userNs?: number;
914
+ systemNs?: number;
927
915
  /** Median over the group's reference median (its baseline task, else its
928
916
  * fastest). Only present when the document has more than one timing run. */
929
917
  relative?: number;
@@ -938,7 +926,7 @@ export interface MinimalRunLine {
938
926
  delta?: MinimalDelta;
939
927
  }
940
928
 
941
- export interface MinimalUnmatchedLine {
929
+ interface MinimalUnmatchedLine {
942
930
  event: "unmatched";
943
931
  protocolVersion: typeof MINIMAL_PROTOCOL_VERSION;
944
932
  workloadId: string;
@@ -946,7 +934,7 @@ export interface MinimalUnmatchedLine {
946
934
  side: "base" | "cand";
947
935
  }
948
936
 
949
- export interface MinimalSummaryLine {
937
+ interface MinimalSummaryLine {
950
938
  event: "summary";
951
939
  protocolVersion: typeof MINIMAL_PROTOCOL_VERSION;
952
940
  command: "compare" | "ci";
@@ -978,27 +966,3 @@ export interface MinimalSummaryLine {
978
966
  }
979
967
 
980
968
  export type MinimalEvent = MinimalRunLine | MinimalUnmatchedLine | MinimalSummaryLine;
981
-
982
- export interface MinimalProtocolContext {
983
- command: "compare" | "ci";
984
- exitCode: number;
985
- unmatched?: {
986
- baseOnly: Workload[];
987
- candOnly: Workload[];
988
- };
989
- baseGit?: GitMetadata;
990
- candGit?: GitMetadata;
991
- baseline?: {
992
- name: string;
993
- path: string;
994
- };
995
- cached?: number;
996
- executed?: number;
997
- failed?: number;
998
- missingBaseline?: number;
999
- exportedTo?: string;
1000
- }
1001
-
1002
- export interface MinimalRenderOptions {
1003
- protocol?: MinimalProtocolContext;
1004
- }
package/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
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};
2
+ import{m,F,v,ce,p,i,ue,me,le,Q,de}from"./chunk-85cap0sk.js";import{r,u,x,s,pe,fe,ge}from"./chunk-8m8jb8gw.js";export{m as DEFAULT_THRESHOLDS,p as MINIMAL_PROTOCOL_VERSION,x as OstiaDocumentError,v as bench,F as compareDocuments,r as createDocument,le as defineConfig,fe as group,pe as keep,s as loadDocument,de as profile,ce as range,i as renderers,ue as run,u as saveDocument,me as sweep,ge as task,Q as time};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ostia",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "description": "Fast profiling and benchmarking for Bun.",
5
5
  "type": "module",
6
6
  "engines": {
@@ -15,6 +15,10 @@
15
15
  "bin": {
16
16
  "ostia": "cli.js"
17
17
  },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/metonym/ostia.git"
21
+ },
18
22
  "main": "./index.js",
19
23
  "module": "./index.js",
20
24
  "types": "./index.d.ts"
package/runner.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
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));
3
+ import{u,O,ie,C,ee,D,N}from"./chunk-8m8jb8gw.js";async function c(){let[t,a,o]=process.argv.slice(2);if(!t||!a)return process.stderr.write(`bench runner: usage: runner.ts <suiteFile> <outputPath> [optsJson]
4
+ `),2;let e=o?JSON.parse(o):{};for(let s of e.preload??[])await import(s);ie(),await import(t);let i=O();if(i.length===0)return process.stderr.write(`bench runner: ${t} registered no tasks (no task() calls found).
5
+ `),2;let r;try{r=D(i,e.filter,t)}catch(s){return process.stderr.write(`bench runner: ${s.message}
6
+ `),2}if(e.taskIds){let s=new Set(e.taskIds);r=r.filter((n)=>s.has(C(n)))}if(e.planPath){let s=r.map((n)=>({id:C(n),isolate:ee(n,e.isolate??!1)}));await Bun.write(e.planPath,JSON.stringify({tasks:s}))}let p=e.taskIds?r:r.filter((s)=>!ee(s,e.isolate??!1)),l=await N(t,p,e);return await u(l,a),0}c().then((t)=>process.exit(t));
package/chunk-1wydyvyj.js DELETED
@@ -1,12 +0,0 @@
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};
package/chunk-cf9hya3b.js DELETED
@@ -1,22 +0,0 @@
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};