@codspeed/tinybench-plugin 5.0.0-alpha.1 → 5.0.0-alpha.2

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/dist/index.cjs CHANGED
@@ -77,67 +77,70 @@ function getOrCreateUriMap(bench) {
77
77
  }
78
78
 
79
79
  function runInstrumentedBench(bench, rootCallingFile) {
80
+ const runTaskAsync = async (task, uri) => {
81
+ const { fnOpts, fn } = task;
82
+ await fnOpts?.beforeAll?.call(task, "run");
83
+ await core.optimizeFunction(async () => {
84
+ await fnOpts?.beforeEach?.call(task, "run");
85
+ await fn();
86
+ await fnOpts?.afterEach?.call(task, "run");
87
+ });
88
+ await fnOpts?.beforeEach?.call(task, "run");
89
+ await core.mongoMeasurement.start(uri);
90
+ await async function __codspeed_root_frame__() {
91
+ global.gc?.();
92
+ core.InstrumentHooks.startBenchmark();
93
+ await fn();
94
+ core.InstrumentHooks.stopBenchmark();
95
+ core.InstrumentHooks.setExecutedBenchmark(process.pid, uri);
96
+ }();
97
+ await core.mongoMeasurement.stop(uri);
98
+ await fnOpts?.afterEach?.call(task, "run");
99
+ await fnOpts?.afterAll?.call(task, "run");
100
+ };
101
+ const runTaskSync = (task, uri) => {
102
+ const { fnOpts, fn } = task;
103
+ fnOpts?.beforeAll?.call(task, "run");
104
+ fnOpts?.beforeEach?.call(task, "run");
105
+ (function __codspeed_root_frame__() {
106
+ global.gc?.();
107
+ core.InstrumentHooks.startBenchmark();
108
+ fn();
109
+ core.InstrumentHooks.stopBenchmark();
110
+ core.InstrumentHooks.setExecutedBenchmark(process.pid, uri);
111
+ })();
112
+ fnOpts?.afterEach?.call(task, "run");
113
+ fnOpts?.afterAll?.call(task, "run");
114
+ };
80
115
  bench.run = async () => {
81
- console.log(
82
- `[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.1"} (instrumented mode)`
83
- );
116
+ logStart();
84
117
  for (const task of bench.tasks) {
85
118
  const uri = getTaskUri(bench, task.name, rootCallingFile);
86
- const { fnOpts, fn } = task;
87
- await fnOpts?.beforeAll?.call(task, "run");
88
- await core.optimizeFunction(async () => {
89
- await fnOpts?.beforeEach?.call(task, "run");
90
- await fn();
91
- await fnOpts?.afterEach?.call(task, "run");
92
- });
93
- await fnOpts?.beforeEach?.call(task, "run");
94
- await core.mongoMeasurement.start(uri);
95
- global.gc?.();
96
- await async function __codspeed_root_frame__() {
97
- core.InstrumentHooks.startBenchmark();
98
- await fn();
99
- core.InstrumentHooks.stopBenchmark();
100
- core.InstrumentHooks.setExecutedBenchmark(process.pid, uri);
101
- }();
102
- await core.mongoMeasurement.stop(uri);
103
- await fnOpts?.afterEach?.call(task, "run");
104
- await fnOpts?.afterAll?.call(task, "run");
105
- console.log(
106
- ` \u2714 ${core.InstrumentHooks.isInstrumented() ? "Measured" : "Checked"} ${uri}`
107
- );
119
+ await runTaskAsync(task, uri);
120
+ logTaskCompletion(uri);
108
121
  }
109
- core.teardownCore();
110
- console.log(`[CodSpeed] Done running ${bench.tasks.length} benches.`);
111
- return bench.tasks;
122
+ return logEnd();
112
123
  };
113
124
  bench.runSync = () => {
114
- console.log(
115
- `[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.1"} (instrumented mode)`
116
- );
125
+ logStart();
117
126
  for (const task of bench.tasks) {
118
127
  const uri = getTaskUri(bench, task.name, rootCallingFile);
119
- const { fnOpts, fn } = task;
120
- fnOpts?.beforeAll?.call(task, "run");
121
- core.optimizeFunction(async () => {
122
- fnOpts?.beforeEach?.call(task, "run");
123
- fn();
124
- fnOpts?.afterEach?.call(task, "run");
125
- });
126
- fnOpts?.beforeEach?.call(task, "run");
127
- global.gc?.();
128
- (function __codspeed_root_frame__() {
129
- core.InstrumentHooks.startBenchmark();
130
- fn();
131
- core.InstrumentHooks.stopBenchmark();
132
- core.InstrumentHooks.setExecutedBenchmark(process.pid, uri);
133
- })();
134
- core.mongoMeasurement.stop(uri);
135
- fnOpts?.afterEach?.call(task, "run");
136
- fnOpts?.afterAll?.call(task, "run");
137
- console.log(
138
- ` \u2714 ${core.InstrumentHooks.isInstrumented() ? "Measured" : "Checked"} ${uri}`
139
- );
128
+ runTaskSync(task, uri);
129
+ logTaskCompletion(uri);
140
130
  }
131
+ return logEnd();
132
+ };
133
+ const logStart = () => {
134
+ console.log(
135
+ `[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.2"} (instrumented mode)`
136
+ );
137
+ };
138
+ const logTaskCompletion = (uri) => {
139
+ console.log(
140
+ ` \u2714 ${core.InstrumentHooks.isInstrumented() ? "Measured" : "Checked"} ${uri}`
141
+ );
142
+ };
143
+ const logEnd = () => {
141
144
  core.teardownCore();
142
145
  console.log(`[CodSpeed] Done running ${bench.tasks.length} benches.`);
143
146
  return bench.tasks;
@@ -146,21 +149,11 @@ function runInstrumentedBench(bench, rootCallingFile) {
146
149
 
147
150
  function runWalltimeBench(bench, rootCallingFile) {
148
151
  bench.run = async () => {
149
- console.log(
150
- `[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.1"} (walltime mode)`
151
- );
152
- const originalRun = bench.run;
153
- const benchProto = Object.getPrototypeOf(bench);
154
- const prototypeRun = benchProto.run;
155
- bench.run = prototypeRun;
156
- const benchmarks = [];
152
+ logStart();
153
+ const codspeedBenchmarks = [];
157
154
  for (const task of bench.tasks) {
158
155
  const uri = getTaskUri(bench, task.name, rootCallingFile);
159
- const { fn } = task;
160
- async function __codspeed_root_frame__() {
161
- await fn();
162
- }
163
- task.fn = __codspeed_root_frame__;
156
+ wrapTaskFunction(task, true);
164
157
  if (bench.opts.warmup) {
165
158
  await task.warmup();
166
159
  }
@@ -169,95 +162,91 @@ function runWalltimeBench(bench, rootCallingFile) {
169
162
  await task.run();
170
163
  core.InstrumentHooks.stopBenchmark();
171
164
  await core.mongoMeasurement.stop(uri);
172
- if (task.result) {
173
- const stats = convertTinybenchResultToBenchmarkStats(
174
- task.result,
175
- bench.opts.warmup ? bench.opts.warmupIterations ?? 0 : 0
176
- );
177
- const benchmark = {
178
- name: task.name,
179
- uri,
180
- config: {
181
- max_rounds: bench.opts.iterations ?? null,
182
- max_time_ns: bench.opts.time ? core.msToNs(bench.opts.time) : null,
183
- min_round_time_ns: null,
184
- // tinybench does not have an option for this
185
- warmup_time_ns: bench.opts.warmup && bench.opts.warmupTime ? core.msToNs(bench.opts.warmupTime) : null
186
- },
187
- stats
188
- };
189
- benchmarks.push(benchmark);
190
- console.log(` \u2714 Collected walltime data for ${uri}`);
191
- core.InstrumentHooks.setExecutedBenchmark(process.pid, uri);
192
- } else {
193
- console.warn(` \u26A0 No result data available for ${uri}`);
194
- }
195
- }
196
- if (benchmarks.length > 0) {
197
- core.writeWalltimeResults(benchmarks, true);
165
+ registerCodspeedBenchmarkFromTask(
166
+ codspeedBenchmarks,
167
+ task,
168
+ bench,
169
+ rootCallingFile
170
+ );
198
171
  }
199
- console.log(
200
- `[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`
201
- );
202
- bench.run = originalRun;
203
- return bench.tasks;
172
+ return finalizeWalltimeRun(bench, codspeedBenchmarks, true);
204
173
  };
205
174
  bench.runSync = () => {
206
- console.log(
207
- `[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.1"} (walltime mode)`
208
- );
209
- const originalRun = bench.run;
210
- const benchProto = Object.getPrototypeOf(bench);
211
- const prototypeRun = benchProto.run;
212
- bench.run = prototypeRun;
213
- const benchmarks = [];
175
+ logStart();
176
+ const codspeedBenchmarks = [];
214
177
  for (const task of bench.tasks) {
215
- let __codspeed_root_frame__2 = function() {
216
- fn();
217
- };
218
- const uri = getTaskUri(bench, task.name, rootCallingFile);
178
+ wrapTaskFunction(task, false);
219
179
  if (bench.opts.warmup) {
220
180
  task.warmup();
221
181
  }
222
- const { fn } = task;
223
- task.fn = __codspeed_root_frame__2;
224
182
  core.InstrumentHooks.startBenchmark();
225
183
  task.runSync();
226
184
  core.InstrumentHooks.stopBenchmark();
227
- if (task.result) {
228
- const stats = convertTinybenchResultToBenchmarkStats(
229
- task.result,
230
- bench.opts.warmup ? bench.opts.warmupIterations ?? 0 : 0
231
- );
232
- const benchmark = {
233
- name: task.name,
234
- uri,
235
- config: {
236
- max_rounds: bench.opts.iterations ?? null,
237
- max_time_ns: bench.opts.time ? core.msToNs(bench.opts.time) : null,
238
- min_round_time_ns: null,
239
- // tinybench does not have an option for this
240
- warmup_time_ns: bench.opts.warmup && bench.opts.warmupTime ? core.msToNs(bench.opts.warmupTime) : null
241
- },
242
- stats
243
- };
244
- benchmarks.push(benchmark);
245
- console.log(` \u2714 Collected walltime data for ${uri}`);
246
- core.InstrumentHooks.setExecutedBenchmark(process.pid, uri);
247
- } else {
248
- console.warn(` \u26A0 No result data available for ${uri}`);
249
- }
250
- }
251
- if (benchmarks.length > 0) {
252
- core.writeWalltimeResults(benchmarks);
185
+ registerCodspeedBenchmarkFromTask(
186
+ codspeedBenchmarks,
187
+ task,
188
+ bench,
189
+ rootCallingFile
190
+ );
253
191
  }
254
- console.log(
255
- `[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`
256
- );
257
- bench.run = originalRun;
258
- return bench.tasks;
192
+ return finalizeWalltimeRun(bench, codspeedBenchmarks, false);
259
193
  };
260
194
  }
195
+ function logStart() {
196
+ console.log(
197
+ `[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.2"} (walltime mode)`
198
+ );
199
+ }
200
+ const TINYBENCH_WARMUP_DEFAULT = 16;
201
+ function registerCodspeedBenchmarkFromTask(codspeedBenchmarks, task, bench, rootCallingFile) {
202
+ const uri = getTaskUri(bench, task.name, rootCallingFile);
203
+ if (!task.result) {
204
+ console.warn(` \u26A0 No result data available for ${uri}`);
205
+ return;
206
+ }
207
+ const warmupIterations = bench.opts.warmup ? bench.opts.warmupIterations ?? TINYBENCH_WARMUP_DEFAULT : 0;
208
+ const stats = convertTinybenchResultToBenchmarkStats(
209
+ task.result,
210
+ warmupIterations
211
+ );
212
+ codspeedBenchmarks.push({
213
+ name: task.name,
214
+ uri,
215
+ config: {
216
+ max_rounds: bench.opts.iterations ?? null,
217
+ max_time_ns: bench.opts.time ? core.msToNs(bench.opts.time) : null,
218
+ min_round_time_ns: null,
219
+ // tinybench does not have an option for this
220
+ warmup_time_ns: bench.opts.warmup && bench.opts.warmupTime ? core.msToNs(bench.opts.warmupTime) : null
221
+ },
222
+ stats
223
+ });
224
+ console.log(` \u2714 Collected walltime data for ${uri}`);
225
+ core.InstrumentHooks.setExecutedBenchmark(process.pid, uri);
226
+ }
227
+ function wrapTaskFunction(task, isAsync) {
228
+ const { fn } = task;
229
+ if (isAsync) {
230
+ async function __codspeed_root_frame__2() {
231
+ await fn();
232
+ }
233
+ task.fn = __codspeed_root_frame__2;
234
+ } else {
235
+ let __codspeed_root_frame__2 = function() {
236
+ fn();
237
+ };
238
+ task.fn = __codspeed_root_frame__2;
239
+ }
240
+ }
241
+ function finalizeWalltimeRun(bench, benchmarks, isAsync) {
242
+ if (benchmarks.length > 0) {
243
+ core.writeWalltimeResults(benchmarks, isAsync);
244
+ }
245
+ console.log(
246
+ `[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`
247
+ );
248
+ return bench.tasks;
249
+ }
261
250
  function convertTinybenchResultToBenchmarkStats(result, warmupIterations) {
262
251
  const { min, max, mean, sd, samples } = result.latency;
263
252
  const sortedTimesNs = samples.map(core.msToNs).sort((a, b) => a - b);
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../node_modules/.pnpm/stack-trace@1.0.0-pre2/node_modules/stack-trace/index.js","../src/uri.ts","../src/instrumented.ts","../src/walltime.ts","../src/index.ts"],"sourcesContent":["export function get(belowFn) {\r\n const oldLimit = Error.stackTraceLimit;\r\n Error.stackTraceLimit = Infinity;\r\n\r\n const dummyObject = {};\r\n\r\n const v8Handler = Error.prepareStackTrace;\r\n Error.prepareStackTrace = function(dummyObject, v8StackTrace) {\r\n return v8StackTrace;\r\n };\r\n Error.captureStackTrace(dummyObject, belowFn || get);\r\n\r\n const v8StackTrace = dummyObject.stack;\r\n Error.prepareStackTrace = v8Handler;\r\n Error.stackTraceLimit = oldLimit;\r\n\r\n return v8StackTrace;\r\n}\r\n\r\nexport function parse(err) {\r\n if (!err.stack) {\r\n return [];\r\n }\r\n\r\n const lines = err.stack.split('\\n').slice(1);\r\n return lines\r\n .map(function(line) {\r\n if (line.match(/^\\s*[-]{4,}$/)) {\r\n return createParsedCallSite({\r\n fileName: line,\r\n lineNumber: null,\r\n functionName: null,\r\n typeName: null,\r\n methodName: null,\r\n columnNumber: null,\r\n 'native': null,\r\n });\r\n }\r\n\r\n const lineMatch = line.match(/at (?:(.+?)\\s+\\()?(?:(.+?):(\\d+)(?::(\\d+))?|([^)]+))\\)?/);\r\n if (!lineMatch) {\r\n return;\r\n }\r\n\r\n let object = null;\r\n let method = null;\r\n let functionName = null;\r\n let typeName = null;\r\n let methodName = null;\r\n let isNative = (lineMatch[5] === 'native');\r\n\r\n if (lineMatch[1]) {\r\n functionName = lineMatch[1];\r\n let methodStart = functionName.lastIndexOf('.');\r\n if (functionName[methodStart-1] == '.')\r\n methodStart--;\r\n if (methodStart > 0) {\r\n object = functionName.substr(0, methodStart);\r\n method = functionName.substr(methodStart + 1);\r\n const objectEnd = object.indexOf('.Module');\r\n if (objectEnd > 0) {\r\n functionName = functionName.substr(objectEnd + 1);\r\n object = object.substr(0, objectEnd);\r\n }\r\n }\r\n }\r\n\r\n if (method) {\r\n typeName = object;\r\n methodName = method;\r\n }\r\n\r\n if (method === '<anonymous>') {\r\n methodName = null;\r\n functionName = null;\r\n }\r\n\r\n const properties = {\r\n fileName: lineMatch[2] || null,\r\n lineNumber: parseInt(lineMatch[3], 10) || null,\r\n functionName: functionName,\r\n typeName: typeName,\r\n methodName: methodName,\r\n columnNumber: parseInt(lineMatch[4], 10) || null,\r\n 'native': isNative,\r\n };\r\n\r\n return createParsedCallSite(properties);\r\n })\r\n .filter(function(callSite) {\r\n return !!callSite;\r\n });\r\n}\r\n\r\nfunction CallSite(properties) {\r\n for (const property in properties) {\r\n this[property] = properties[property];\r\n }\r\n}\r\n\r\nconst strProperties = [\r\n 'this',\r\n 'typeName',\r\n 'functionName',\r\n 'methodName',\r\n 'fileName',\r\n 'lineNumber',\r\n 'columnNumber',\r\n 'function',\r\n 'evalOrigin'\r\n];\r\n\r\nconst boolProperties = [\r\n 'topLevel',\r\n 'eval',\r\n 'native',\r\n 'constructor'\r\n];\r\n\r\nstrProperties.forEach(function (property) {\r\n CallSite.prototype[property] = null;\r\n CallSite.prototype['get' + property[0].toUpperCase() + property.substr(1)] = function () {\r\n return this[property];\r\n }\r\n});\r\n\r\nboolProperties.forEach(function (property) {\r\n CallSite.prototype[property] = false;\r\n CallSite.prototype['is' + property[0].toUpperCase() + property.substr(1)] = function () {\r\n return this[property];\r\n }\r\n});\r\n\r\nfunction createParsedCallSite(properties) {\r\n return new CallSite(properties);\r\n}\r\n","import { Bench } from \"tinybench\";\n\n// Store URI mapping externally since fnOpts is private\nexport const taskUriMap = new WeakMap<Bench, Map<string, string>>();\n\nexport function getTaskUri(\n bench: Bench,\n taskName: string,\n rootCallingFile: string\n): string {\n const uriMap = taskUriMap.get(bench);\n return uriMap?.get(taskName) || `${rootCallingFile}::${taskName}`;\n}\n\nexport function getOrCreateUriMap(bench: Bench): Map<string, string> {\n let uriMap = taskUriMap.get(bench);\n if (!uriMap) {\n uriMap = new Map<string, string>();\n taskUriMap.set(bench, uriMap);\n }\n return uriMap;\n}\n","import {\n InstrumentHooks,\n mongoMeasurement,\n optimizeFunction,\n teardownCore,\n} from \"@codspeed/core\";\nimport { Bench, Fn, FnOptions } from \"tinybench\";\nimport { getTaskUri } from \"./uri\";\n\ndeclare const __VERSION__: string;\n\nexport function runInstrumentedBench(\n bench: Bench,\n rootCallingFile: string\n): void {\n bench.run = async () => {\n console.log(\n `[CodSpeed] running with @codspeed/tinybench v${__VERSION__} (instrumented mode)`\n );\n\n for (const task of bench.tasks) {\n const uri = getTaskUri(bench, task.name, rootCallingFile);\n\n // Access private fields\n const { fnOpts, fn } = task as unknown as { fnOpts?: FnOptions; fn: Fn };\n\n // Call beforeAll hook if it exists\n await fnOpts?.beforeAll?.call(task, \"run\");\n\n // run optimizations\n await optimizeFunction(async () => {\n await fnOpts?.beforeEach?.call(task, \"run\");\n await fn();\n await fnOpts?.afterEach?.call(task, \"run\");\n });\n\n // run instrumented benchmark\n await fnOpts?.beforeEach?.call(task, \"run\");\n\n await mongoMeasurement.start(uri);\n global.gc?.();\n await (async function __codspeed_root_frame__() {\n InstrumentHooks.startBenchmark();\n await fn();\n InstrumentHooks.stopBenchmark();\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n })();\n await mongoMeasurement.stop(uri);\n\n await fnOpts?.afterEach?.call(task, \"run\");\n\n await fnOpts?.afterAll?.call(task, \"run\");\n\n // print results\n console.log(\n ` ✔ ${\n InstrumentHooks.isInstrumented() ? \"Measured\" : \"Checked\"\n } ${uri}`\n );\n }\n\n teardownCore();\n console.log(`[CodSpeed] Done running ${bench.tasks.length} benches.`);\n return bench.tasks;\n };\n\n bench.runSync = () => {\n console.log(\n `[CodSpeed] running with @codspeed/tinybench v${__VERSION__} (instrumented mode)`\n );\n\n for (const task of bench.tasks) {\n const uri = getTaskUri(bench, task.name, rootCallingFile);\n\n // Access private fields\n const { fnOpts, fn } = task as unknown as { fnOpts?: FnOptions; fn: Fn };\n\n // Call beforeAll hook if it exists\n fnOpts?.beforeAll?.call(task, \"run\");\n\n // run optimizations\n optimizeFunction(async () => {\n fnOpts?.beforeEach?.call(task, \"run\");\n fn();\n fnOpts?.afterEach?.call(task, \"run\");\n });\n\n // run instrumented benchmark\n fnOpts?.beforeEach?.call(task, \"run\");\n\n // await mongoMeasurement.start(uri);\n global.gc?.();\n (function __codspeed_root_frame__() {\n InstrumentHooks.startBenchmark();\n fn();\n InstrumentHooks.stopBenchmark();\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n })();\n mongoMeasurement.stop(uri);\n\n fnOpts?.afterEach?.call(task, \"run\");\n\n fnOpts?.afterAll?.call(task, \"run\");\n\n // print results\n console.log(\n ` ✔ ${\n InstrumentHooks.isInstrumented() ? \"Measured\" : \"Checked\"\n } ${uri}`\n );\n }\n\n teardownCore();\n console.log(`[CodSpeed] Done running ${bench.tasks.length} benches.`);\n return bench.tasks;\n };\n}\n","import {\n calculateQuantiles,\n InstrumentHooks,\n mongoMeasurement,\n msToNs,\n msToS,\n writeWalltimeResults,\n type Benchmark,\n type BenchmarkStats,\n} from \"@codspeed/core\";\nimport { Bench, Fn, TaskResult } from \"tinybench\";\nimport { getTaskUri } from \"./uri\";\n\ndeclare const __VERSION__: string;\n\nexport function runWalltimeBench(bench: Bench, rootCallingFile: string): void {\n bench.run = async () => {\n console.log(\n `[CodSpeed] running with @codspeed/tinybench v${__VERSION__} (walltime mode)`\n );\n\n // Store the original run method before we override it\n const originalRun = bench.run;\n\n // Temporarily restore the original run to get actual benchmark results\n const benchProto = Object.getPrototypeOf(bench);\n const prototypeRun = benchProto.run;\n bench.run = prototypeRun;\n\n const benchmarks: Benchmark[] = [];\n\n // Collect and report walltime data\n for (const task of bench.tasks) {\n const uri = getTaskUri(bench, task.name, rootCallingFile);\n\n // Override the function under test to add a static frame\n const { fn } = task as unknown as { fn: Fn };\n // eslint-disable-next-line no-inner-declarations\n async function __codspeed_root_frame__() {\n await fn();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (task as any).fn = __codspeed_root_frame__;\n\n // run the warmup of the task right before its actual run\n if (bench.opts.warmup) {\n await task.warmup();\n }\n\n await mongoMeasurement.start(uri);\n InstrumentHooks.startBenchmark();\n await task.run();\n InstrumentHooks.stopBenchmark();\n await mongoMeasurement.stop(uri);\n\n if (task.result) {\n // Convert tinybench result to BenchmarkStats format\n const stats = convertTinybenchResultToBenchmarkStats(\n task.result,\n bench.opts.warmup ? bench.opts.warmupIterations ?? 0 : 0\n );\n\n const benchmark: Benchmark = {\n name: task.name,\n uri,\n config: {\n max_rounds: bench.opts.iterations ?? null,\n max_time_ns: bench.opts.time ? msToNs(bench.opts.time) : null,\n min_round_time_ns: null, // tinybench does not have an option for this\n warmup_time_ns:\n bench.opts.warmup && bench.opts.warmupTime\n ? msToNs(bench.opts.warmupTime)\n : null,\n },\n stats,\n };\n\n benchmarks.push(benchmark);\n console.log(` ✔ Collected walltime data for ${uri}`);\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n } else {\n console.warn(` ⚠ No result data available for ${uri}`);\n }\n }\n\n // Write results to JSON file using core function\n if (benchmarks.length > 0) {\n writeWalltimeResults(benchmarks, true);\n }\n\n console.log(\n `[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`\n );\n // Restore our custom run method\n bench.run = originalRun;\n\n return bench.tasks;\n };\n\n bench.runSync = () => {\n console.log(\n `[CodSpeed] running with @codspeed/tinybench v${__VERSION__} (walltime mode)`\n );\n\n // Store the original run method before we override it\n const originalRun = bench.run;\n\n // Temporarily restore the original run to get actual benchmark results\n const benchProto = Object.getPrototypeOf(bench);\n const prototypeRun = benchProto.run;\n bench.run = prototypeRun;\n\n const benchmarks: Benchmark[] = [];\n\n // Collect and report walltime data\n for (const task of bench.tasks) {\n const uri = getTaskUri(bench, task.name, rootCallingFile);\n\n // run the warmup of the task right before its actual run\n if (bench.opts.warmup) {\n task.warmup();\n }\n\n // Override the function under test to add a static frame\n const { fn } = task as unknown as { fn: Fn };\n // eslint-disable-next-line no-inner-declarations\n function __codspeed_root_frame__() {\n fn();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (task as any).fn = __codspeed_root_frame__;\n\n InstrumentHooks.startBenchmark();\n task.runSync();\n InstrumentHooks.stopBenchmark();\n\n if (task.result) {\n // Convert tinybench result to BenchmarkStats format\n const stats = convertTinybenchResultToBenchmarkStats(\n task.result,\n bench.opts.warmup ? bench.opts.warmupIterations ?? 0 : 0\n );\n\n const benchmark: Benchmark = {\n name: task.name,\n uri,\n config: {\n max_rounds: bench.opts.iterations ?? null,\n max_time_ns: bench.opts.time ? msToNs(bench.opts.time) : null,\n min_round_time_ns: null, // tinybench does not have an option for this\n warmup_time_ns:\n bench.opts.warmup && bench.opts.warmupTime\n ? msToNs(bench.opts.warmupTime)\n : null,\n },\n stats,\n };\n\n benchmarks.push(benchmark);\n console.log(` ✔ Collected walltime data for ${uri}`);\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n } else {\n console.warn(` ⚠ No result data available for ${uri}`);\n }\n }\n\n // Write results to JSON file using core function\n if (benchmarks.length > 0) {\n writeWalltimeResults(benchmarks);\n }\n\n console.log(\n `[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`\n );\n // Restore our custom run method\n bench.run = originalRun;\n\n return bench.tasks;\n };\n}\n\nfunction convertTinybenchResultToBenchmarkStats(\n result: TaskResult,\n warmupIterations: number\n): BenchmarkStats {\n const { min, max, mean, sd, samples } = result.latency;\n\n // Get individual sample times in nanoseconds and sort them\n const sortedTimesNs = samples.map(msToNs).sort((a, b) => a - b);\n const meanNs = msToNs(mean);\n const stdevNs = msToNs(sd);\n\n const { q1_ns, q3_ns, median_ns, iqr_outlier_rounds, stdev_outlier_rounds } =\n calculateQuantiles({ meanNs, stdevNs, sortedTimesNs });\n\n return {\n min_ns: msToNs(min),\n max_ns: msToNs(max),\n mean_ns: meanNs,\n stdev_ns: stdevNs,\n q1_ns,\n median_ns,\n q3_ns,\n total_time: msToS(result.totalTime),\n iter_per_round: 1, // as there is only one round in tinybench, we define that there were n rounds of 1 iteration\n rounds: sortedTimesNs.length,\n iqr_outlier_rounds,\n stdev_outlier_rounds,\n warmup_iters: warmupIterations,\n };\n}\n","import {\n getCodspeedRunnerMode,\n getGitDir,\n InstrumentHooks,\n mongoMeasurement,\n setupCore,\n SetupInstrumentsRequestBody,\n SetupInstrumentsResponse,\n tryIntrospect,\n} from \"@codspeed/core\";\nimport path from \"path\";\nimport { get as getStackTrace } from \"stack-trace\";\nimport { Bench } from \"tinybench\";\nimport { fileURLToPath } from \"url\";\nimport { runInstrumentedBench } from \"./instrumented\";\nimport { getOrCreateUriMap } from \"./uri\";\nimport { runWalltimeBench } from \"./walltime\";\n\ntryIntrospect();\n\nexport function withCodSpeed(bench: Bench): Bench {\n const codspeedRunnerMode = getCodspeedRunnerMode();\n if (codspeedRunnerMode === \"disabled\") {\n return bench;\n }\n setupCore();\n\n const rootCallingFile = getCallingFile();\n\n // Compute and register URI for bench\n const uriMap = getOrCreateUriMap(bench);\n const rawAdd = bench.add;\n bench.add = (name, fn, opts?) => {\n const callingFile = getCallingFile();\n let uri = callingFile;\n if (bench.name !== undefined) {\n uri += `::${bench.name}`;\n }\n uri += `::${name}`;\n uriMap.set(name, uri);\n return rawAdd.bind(bench)(name, fn, opts);\n };\n\n if (codspeedRunnerMode === \"instrumented\") {\n runInstrumentedBench(bench, rootCallingFile);\n } else if (codspeedRunnerMode === \"walltime\") {\n runWalltimeBench(bench, rootCallingFile);\n }\n\n return bench;\n}\n\nfunction getCallingFile(): string {\n const stack = getStackTrace();\n let callingFile = stack[2].getFileName(); // [here, withCodSpeed, actual caller]\n const gitDir = getGitDir(callingFile);\n if (gitDir === undefined) {\n throw new Error(\"Could not find a git repository\");\n }\n if (callingFile.startsWith(\"file://\")) {\n callingFile = fileURLToPath(callingFile);\n }\n return path.relative(gitDir, callingFile);\n}\n\n/**\n * Dynamically setup the CodSpeed instruments.\n */\nexport async function setupInstruments(\n body: SetupInstrumentsRequestBody\n): Promise<SetupInstrumentsResponse> {\n if (!InstrumentHooks.isInstrumented()) {\n console.warn(\"[CodSpeed] No instrumentation found, using default mongoUrl\");\n\n return { remoteAddr: body.mongoUrl };\n }\n\n return await mongoMeasurement.setupInstruments(body);\n}\n"],"names":["optimizeFunction","mongoMeasurement","InstrumentHooks","teardownCore","msToNs","writeWalltimeResults","__codspeed_root_frame__","calculateQuantiles","msToS","tryIntrospect","getCodspeedRunnerMode","setupCore","getStackTrace","getGitDir","fileURLToPath"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.cjs","sources":["../../../node_modules/.pnpm/stack-trace@1.0.0-pre2/node_modules/stack-trace/index.js","../src/uri.ts","../src/instrumented.ts","../src/walltime.ts","../src/index.ts"],"sourcesContent":["export function get(belowFn) {\r\n const oldLimit = Error.stackTraceLimit;\r\n Error.stackTraceLimit = Infinity;\r\n\r\n const dummyObject = {};\r\n\r\n const v8Handler = Error.prepareStackTrace;\r\n Error.prepareStackTrace = function(dummyObject, v8StackTrace) {\r\n return v8StackTrace;\r\n };\r\n Error.captureStackTrace(dummyObject, belowFn || get);\r\n\r\n const v8StackTrace = dummyObject.stack;\r\n Error.prepareStackTrace = v8Handler;\r\n Error.stackTraceLimit = oldLimit;\r\n\r\n return v8StackTrace;\r\n}\r\n\r\nexport function parse(err) {\r\n if (!err.stack) {\r\n return [];\r\n }\r\n\r\n const lines = err.stack.split('\\n').slice(1);\r\n return lines\r\n .map(function(line) {\r\n if (line.match(/^\\s*[-]{4,}$/)) {\r\n return createParsedCallSite({\r\n fileName: line,\r\n lineNumber: null,\r\n functionName: null,\r\n typeName: null,\r\n methodName: null,\r\n columnNumber: null,\r\n 'native': null,\r\n });\r\n }\r\n\r\n const lineMatch = line.match(/at (?:(.+?)\\s+\\()?(?:(.+?):(\\d+)(?::(\\d+))?|([^)]+))\\)?/);\r\n if (!lineMatch) {\r\n return;\r\n }\r\n\r\n let object = null;\r\n let method = null;\r\n let functionName = null;\r\n let typeName = null;\r\n let methodName = null;\r\n let isNative = (lineMatch[5] === 'native');\r\n\r\n if (lineMatch[1]) {\r\n functionName = lineMatch[1];\r\n let methodStart = functionName.lastIndexOf('.');\r\n if (functionName[methodStart-1] == '.')\r\n methodStart--;\r\n if (methodStart > 0) {\r\n object = functionName.substr(0, methodStart);\r\n method = functionName.substr(methodStart + 1);\r\n const objectEnd = object.indexOf('.Module');\r\n if (objectEnd > 0) {\r\n functionName = functionName.substr(objectEnd + 1);\r\n object = object.substr(0, objectEnd);\r\n }\r\n }\r\n }\r\n\r\n if (method) {\r\n typeName = object;\r\n methodName = method;\r\n }\r\n\r\n if (method === '<anonymous>') {\r\n methodName = null;\r\n functionName = null;\r\n }\r\n\r\n const properties = {\r\n fileName: lineMatch[2] || null,\r\n lineNumber: parseInt(lineMatch[3], 10) || null,\r\n functionName: functionName,\r\n typeName: typeName,\r\n methodName: methodName,\r\n columnNumber: parseInt(lineMatch[4], 10) || null,\r\n 'native': isNative,\r\n };\r\n\r\n return createParsedCallSite(properties);\r\n })\r\n .filter(function(callSite) {\r\n return !!callSite;\r\n });\r\n}\r\n\r\nfunction CallSite(properties) {\r\n for (const property in properties) {\r\n this[property] = properties[property];\r\n }\r\n}\r\n\r\nconst strProperties = [\r\n 'this',\r\n 'typeName',\r\n 'functionName',\r\n 'methodName',\r\n 'fileName',\r\n 'lineNumber',\r\n 'columnNumber',\r\n 'function',\r\n 'evalOrigin'\r\n];\r\n\r\nconst boolProperties = [\r\n 'topLevel',\r\n 'eval',\r\n 'native',\r\n 'constructor'\r\n];\r\n\r\nstrProperties.forEach(function (property) {\r\n CallSite.prototype[property] = null;\r\n CallSite.prototype['get' + property[0].toUpperCase() + property.substr(1)] = function () {\r\n return this[property];\r\n }\r\n});\r\n\r\nboolProperties.forEach(function (property) {\r\n CallSite.prototype[property] = false;\r\n CallSite.prototype['is' + property[0].toUpperCase() + property.substr(1)] = function () {\r\n return this[property];\r\n }\r\n});\r\n\r\nfunction createParsedCallSite(properties) {\r\n return new CallSite(properties);\r\n}\r\n","import { Bench } from \"tinybench\";\n\n// Store URI mapping externally since fnOpts is private\nexport const taskUriMap = new WeakMap<Bench, Map<string, string>>();\n\nexport function getTaskUri(\n bench: Bench,\n taskName: string,\n rootCallingFile: string\n): string {\n const uriMap = taskUriMap.get(bench);\n return uriMap?.get(taskName) || `${rootCallingFile}::${taskName}`;\n}\n\nexport function getOrCreateUriMap(bench: Bench): Map<string, string> {\n let uriMap = taskUriMap.get(bench);\n if (!uriMap) {\n uriMap = new Map<string, string>();\n taskUriMap.set(bench, uriMap);\n }\n return uriMap;\n}\n","import {\n InstrumentHooks,\n mongoMeasurement,\n optimizeFunction,\n teardownCore,\n} from \"@codspeed/core\";\nimport { Bench, Fn, FnOptions, Task } from \"tinybench\";\nimport { getTaskUri } from \"./uri\";\n\ndeclare const __VERSION__: string;\n\nexport function runInstrumentedBench(\n bench: Bench,\n rootCallingFile: string\n): void {\n const runTaskAsync = async (task: Task, uri: string): Promise<void> => {\n const { fnOpts, fn } = task as unknown as { fnOpts?: FnOptions; fn: Fn };\n\n await fnOpts?.beforeAll?.call(task, \"run\");\n await optimizeFunction(async () => {\n await fnOpts?.beforeEach?.call(task, \"run\");\n await fn();\n await fnOpts?.afterEach?.call(task, \"run\");\n });\n await fnOpts?.beforeEach?.call(task, \"run\");\n await mongoMeasurement.start(uri);\n\n await (async function __codspeed_root_frame__() {\n global.gc?.();\n InstrumentHooks.startBenchmark();\n await fn();\n InstrumentHooks.stopBenchmark();\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n })();\n\n await mongoMeasurement.stop(uri);\n await fnOpts?.afterEach?.call(task, \"run\");\n await fnOpts?.afterAll?.call(task, \"run\");\n };\n\n // Sync task runner\n const runTaskSync = (task: Task, uri: string): void => {\n const { fnOpts, fn } = task as unknown as { fnOpts?: FnOptions; fn: Fn };\n\n fnOpts?.beforeAll?.call(task, \"run\");\n fnOpts?.beforeEach?.call(task, \"run\");\n\n (function __codspeed_root_frame__() {\n global.gc?.();\n InstrumentHooks.startBenchmark();\n fn();\n InstrumentHooks.stopBenchmark();\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n })();\n\n fnOpts?.afterEach?.call(task, \"run\");\n fnOpts?.afterAll?.call(task, \"run\");\n };\n\n bench.run = async () => {\n logStart();\n\n for (const task of bench.tasks) {\n const uri = getTaskUri(bench, task.name, rootCallingFile);\n await runTaskAsync(task, uri);\n logTaskCompletion(uri);\n }\n\n return logEnd();\n };\n\n bench.runSync = () => {\n logStart();\n\n for (const task of bench.tasks) {\n const uri = getTaskUri(bench, task.name, rootCallingFile);\n runTaskSync(task, uri);\n logTaskCompletion(uri);\n }\n\n return logEnd();\n };\n\n const logStart = () => {\n console.log(\n `[CodSpeed] running with @codspeed/tinybench v${__VERSION__} (instrumented mode)`\n );\n };\n\n const logTaskCompletion = (uri: string) => {\n console.log(\n ` ✔ ${\n InstrumentHooks.isInstrumented() ? \"Measured\" : \"Checked\"\n } ${uri}`\n );\n };\n\n const logEnd = () => {\n teardownCore();\n console.log(`[CodSpeed] Done running ${bench.tasks.length} benches.`);\n return bench.tasks;\n };\n}\n","import {\n calculateQuantiles,\n InstrumentHooks,\n mongoMeasurement,\n msToNs,\n msToS,\n writeWalltimeResults,\n type Benchmark as CodspeedBenchmark,\n type BenchmarkStats,\n} from \"@codspeed/core\";\nimport { Bench, Fn, Task, TaskResult } from \"tinybench\";\nimport { getTaskUri } from \"./uri\";\n\ndeclare const __VERSION__: string;\n\nexport function runWalltimeBench(bench: Bench, rootCallingFile: string): void {\n bench.run = async () => {\n logStart();\n const codspeedBenchmarks: CodspeedBenchmark[] = [];\n\n // Collect and report walltime data\n for (const task of bench.tasks) {\n const uri = getTaskUri(bench, task.name, rootCallingFile);\n\n // Override the function under test to add a static frame\n wrapTaskFunction(task, true);\n\n // run the warmup of the task right before its actual run\n if (bench.opts.warmup) {\n await task.warmup();\n }\n\n await mongoMeasurement.start(uri);\n InstrumentHooks.startBenchmark();\n await task.run();\n InstrumentHooks.stopBenchmark();\n await mongoMeasurement.stop(uri);\n\n registerCodspeedBenchmarkFromTask(\n codspeedBenchmarks,\n task,\n bench,\n rootCallingFile\n );\n }\n\n return finalizeWalltimeRun(bench, codspeedBenchmarks, true);\n };\n\n bench.runSync = () => {\n logStart();\n const codspeedBenchmarks: CodspeedBenchmark[] = [];\n\n for (const task of bench.tasks) {\n // Override the function under test to add a static frame\n wrapTaskFunction(task, false);\n\n if (bench.opts.warmup) {\n task.warmup();\n }\n\n InstrumentHooks.startBenchmark();\n task.runSync();\n InstrumentHooks.stopBenchmark();\n\n registerCodspeedBenchmarkFromTask(\n codspeedBenchmarks,\n task,\n bench,\n rootCallingFile\n );\n }\n\n return finalizeWalltimeRun(bench, codspeedBenchmarks, false);\n };\n}\n\nfunction logStart() {\n console.log(\n `[CodSpeed] running with @codspeed/tinybench v${__VERSION__} (walltime mode)`\n );\n}\n\nconst TINYBENCH_WARMUP_DEFAULT = 16;\n\nfunction registerCodspeedBenchmarkFromTask(\n codspeedBenchmarks: CodspeedBenchmark[],\n task: Task,\n bench: Bench,\n rootCallingFile: string\n): void {\n const uri = getTaskUri(bench, task.name, rootCallingFile);\n\n if (!task.result) {\n console.warn(` ⚠ No result data available for ${uri}`);\n return;\n }\n\n const warmupIterations = bench.opts.warmup\n ? bench.opts.warmupIterations ?? TINYBENCH_WARMUP_DEFAULT\n : 0;\n const stats = convertTinybenchResultToBenchmarkStats(\n task.result,\n warmupIterations\n );\n\n codspeedBenchmarks.push({\n name: task.name,\n uri,\n config: {\n max_rounds: bench.opts.iterations ?? null,\n max_time_ns: bench.opts.time ? msToNs(bench.opts.time) : null,\n min_round_time_ns: null, // tinybench does not have an option for this\n warmup_time_ns:\n bench.opts.warmup && bench.opts.warmupTime\n ? msToNs(bench.opts.warmupTime)\n : null,\n },\n stats,\n });\n\n console.log(` ✔ Collected walltime data for ${uri}`);\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n}\n\nfunction wrapTaskFunction(task: Task, isAsync: boolean): void {\n const { fn } = task as unknown as { fn: Fn };\n if (isAsync) {\n // eslint-disable-next-line no-inner-declarations\n async function __codspeed_root_frame__() {\n await fn();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (task as any).fn = __codspeed_root_frame__;\n } else {\n // eslint-disable-next-line no-inner-declarations\n function __codspeed_root_frame__() {\n fn();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (task as any).fn = __codspeed_root_frame__;\n }\n}\n\nfunction finalizeWalltimeRun(\n bench: Bench,\n benchmarks: CodspeedBenchmark[],\n isAsync: boolean\n) {\n // Write results to JSON file using core function\n if (benchmarks.length > 0) {\n writeWalltimeResults(benchmarks, isAsync);\n }\n\n console.log(\n `[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`\n );\n return bench.tasks;\n}\n\nfunction convertTinybenchResultToBenchmarkStats(\n result: TaskResult,\n warmupIterations: number\n): BenchmarkStats {\n const { min, max, mean, sd, samples } = result.latency;\n\n // Get individual sample times in nanoseconds and sort them\n const sortedTimesNs = samples.map(msToNs).sort((a, b) => a - b);\n const meanNs = msToNs(mean);\n const stdevNs = msToNs(sd);\n\n const { q1_ns, q3_ns, median_ns, iqr_outlier_rounds, stdev_outlier_rounds } =\n calculateQuantiles({ meanNs, stdevNs, sortedTimesNs });\n\n return {\n min_ns: msToNs(min),\n max_ns: msToNs(max),\n mean_ns: meanNs,\n stdev_ns: stdevNs,\n q1_ns,\n median_ns,\n q3_ns,\n total_time: msToS(result.totalTime),\n iter_per_round: 1, // as there is only one round in tinybench, we define that there were n rounds of 1 iteration\n rounds: sortedTimesNs.length,\n iqr_outlier_rounds,\n stdev_outlier_rounds,\n warmup_iters: warmupIterations,\n };\n}\n","import {\n getCodspeedRunnerMode,\n getGitDir,\n InstrumentHooks,\n mongoMeasurement,\n setupCore,\n SetupInstrumentsRequestBody,\n SetupInstrumentsResponse,\n tryIntrospect,\n} from \"@codspeed/core\";\nimport path from \"path\";\nimport { get as getStackTrace } from \"stack-trace\";\nimport { Bench } from \"tinybench\";\nimport { fileURLToPath } from \"url\";\nimport { runInstrumentedBench } from \"./instrumented\";\nimport { getOrCreateUriMap } from \"./uri\";\nimport { runWalltimeBench } from \"./walltime\";\n\ntryIntrospect();\n\nexport function withCodSpeed(bench: Bench): Bench {\n const codspeedRunnerMode = getCodspeedRunnerMode();\n if (codspeedRunnerMode === \"disabled\") {\n return bench;\n }\n setupCore();\n\n const rootCallingFile = getCallingFile();\n\n // Compute and register URI for bench\n const uriMap = getOrCreateUriMap(bench);\n const rawAdd = bench.add;\n bench.add = (name, fn, opts?) => {\n const callingFile = getCallingFile();\n let uri = callingFile;\n if (bench.name !== undefined) {\n uri += `::${bench.name}`;\n }\n uri += `::${name}`;\n uriMap.set(name, uri);\n return rawAdd.bind(bench)(name, fn, opts);\n };\n\n if (codspeedRunnerMode === \"instrumented\") {\n runInstrumentedBench(bench, rootCallingFile);\n } else if (codspeedRunnerMode === \"walltime\") {\n runWalltimeBench(bench, rootCallingFile);\n }\n\n return bench;\n}\n\nfunction getCallingFile(): string {\n const stack = getStackTrace();\n let callingFile = stack[2].getFileName(); // [here, withCodSpeed, actual caller]\n const gitDir = getGitDir(callingFile);\n if (gitDir === undefined) {\n throw new Error(\"Could not find a git repository\");\n }\n if (callingFile.startsWith(\"file://\")) {\n callingFile = fileURLToPath(callingFile);\n }\n return path.relative(gitDir, callingFile);\n}\n\n/**\n * Dynamically setup the CodSpeed instruments.\n */\nexport async function setupInstruments(\n body: SetupInstrumentsRequestBody\n): Promise<SetupInstrumentsResponse> {\n if (!InstrumentHooks.isInstrumented()) {\n console.warn(\"[CodSpeed] No instrumentation found, using default mongoUrl\");\n\n return { remoteAddr: body.mongoUrl };\n }\n\n return await mongoMeasurement.setupInstruments(body);\n}\n"],"names":["optimizeFunction","mongoMeasurement","InstrumentHooks","teardownCore","msToNs","__codspeed_root_frame__","writeWalltimeResults","calculateQuantiles","msToS","tryIntrospect","getCodspeedRunnerMode","setupCore","getStackTrace","getGitDir","fileURLToPath"],"mappings":"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","x_google_ignoreList":[0]}
package/dist/index.es5.js CHANGED
@@ -1,4 +1,4 @@
1
- import { optimizeFunction, mongoMeasurement, InstrumentHooks, teardownCore, msToNs, writeWalltimeResults, calculateQuantiles, msToS, tryIntrospect, getCodspeedRunnerMode, setupCore, getGitDir } from '@codspeed/core';
1
+ import { InstrumentHooks, teardownCore, optimizeFunction, mongoMeasurement, msToNs, writeWalltimeResults, calculateQuantiles, msToS, tryIntrospect, getCodspeedRunnerMode, setupCore, getGitDir } from '@codspeed/core';
2
2
  import path from 'path';
3
3
  import { fileURLToPath } from 'url';
4
4
 
@@ -75,67 +75,70 @@ function getOrCreateUriMap(bench) {
75
75
  }
76
76
 
77
77
  function runInstrumentedBench(bench, rootCallingFile) {
78
+ const runTaskAsync = async (task, uri) => {
79
+ const { fnOpts, fn } = task;
80
+ await fnOpts?.beforeAll?.call(task, "run");
81
+ await optimizeFunction(async () => {
82
+ await fnOpts?.beforeEach?.call(task, "run");
83
+ await fn();
84
+ await fnOpts?.afterEach?.call(task, "run");
85
+ });
86
+ await fnOpts?.beforeEach?.call(task, "run");
87
+ await mongoMeasurement.start(uri);
88
+ await async function __codspeed_root_frame__() {
89
+ global.gc?.();
90
+ InstrumentHooks.startBenchmark();
91
+ await fn();
92
+ InstrumentHooks.stopBenchmark();
93
+ InstrumentHooks.setExecutedBenchmark(process.pid, uri);
94
+ }();
95
+ await mongoMeasurement.stop(uri);
96
+ await fnOpts?.afterEach?.call(task, "run");
97
+ await fnOpts?.afterAll?.call(task, "run");
98
+ };
99
+ const runTaskSync = (task, uri) => {
100
+ const { fnOpts, fn } = task;
101
+ fnOpts?.beforeAll?.call(task, "run");
102
+ fnOpts?.beforeEach?.call(task, "run");
103
+ (function __codspeed_root_frame__() {
104
+ global.gc?.();
105
+ InstrumentHooks.startBenchmark();
106
+ fn();
107
+ InstrumentHooks.stopBenchmark();
108
+ InstrumentHooks.setExecutedBenchmark(process.pid, uri);
109
+ })();
110
+ fnOpts?.afterEach?.call(task, "run");
111
+ fnOpts?.afterAll?.call(task, "run");
112
+ };
78
113
  bench.run = async () => {
79
- console.log(
80
- `[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.1"} (instrumented mode)`
81
- );
114
+ logStart();
82
115
  for (const task of bench.tasks) {
83
116
  const uri = getTaskUri(bench, task.name, rootCallingFile);
84
- const { fnOpts, fn } = task;
85
- await fnOpts?.beforeAll?.call(task, "run");
86
- await optimizeFunction(async () => {
87
- await fnOpts?.beforeEach?.call(task, "run");
88
- await fn();
89
- await fnOpts?.afterEach?.call(task, "run");
90
- });
91
- await fnOpts?.beforeEach?.call(task, "run");
92
- await mongoMeasurement.start(uri);
93
- global.gc?.();
94
- await async function __codspeed_root_frame__() {
95
- InstrumentHooks.startBenchmark();
96
- await fn();
97
- InstrumentHooks.stopBenchmark();
98
- InstrumentHooks.setExecutedBenchmark(process.pid, uri);
99
- }();
100
- await mongoMeasurement.stop(uri);
101
- await fnOpts?.afterEach?.call(task, "run");
102
- await fnOpts?.afterAll?.call(task, "run");
103
- console.log(
104
- ` \u2714 ${InstrumentHooks.isInstrumented() ? "Measured" : "Checked"} ${uri}`
105
- );
117
+ await runTaskAsync(task, uri);
118
+ logTaskCompletion(uri);
106
119
  }
107
- teardownCore();
108
- console.log(`[CodSpeed] Done running ${bench.tasks.length} benches.`);
109
- return bench.tasks;
120
+ return logEnd();
110
121
  };
111
122
  bench.runSync = () => {
112
- console.log(
113
- `[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.1"} (instrumented mode)`
114
- );
123
+ logStart();
115
124
  for (const task of bench.tasks) {
116
125
  const uri = getTaskUri(bench, task.name, rootCallingFile);
117
- const { fnOpts, fn } = task;
118
- fnOpts?.beforeAll?.call(task, "run");
119
- optimizeFunction(async () => {
120
- fnOpts?.beforeEach?.call(task, "run");
121
- fn();
122
- fnOpts?.afterEach?.call(task, "run");
123
- });
124
- fnOpts?.beforeEach?.call(task, "run");
125
- global.gc?.();
126
- (function __codspeed_root_frame__() {
127
- InstrumentHooks.startBenchmark();
128
- fn();
129
- InstrumentHooks.stopBenchmark();
130
- InstrumentHooks.setExecutedBenchmark(process.pid, uri);
131
- })();
132
- mongoMeasurement.stop(uri);
133
- fnOpts?.afterEach?.call(task, "run");
134
- fnOpts?.afterAll?.call(task, "run");
135
- console.log(
136
- ` \u2714 ${InstrumentHooks.isInstrumented() ? "Measured" : "Checked"} ${uri}`
137
- );
126
+ runTaskSync(task, uri);
127
+ logTaskCompletion(uri);
138
128
  }
129
+ return logEnd();
130
+ };
131
+ const logStart = () => {
132
+ console.log(
133
+ `[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.2"} (instrumented mode)`
134
+ );
135
+ };
136
+ const logTaskCompletion = (uri) => {
137
+ console.log(
138
+ ` \u2714 ${InstrumentHooks.isInstrumented() ? "Measured" : "Checked"} ${uri}`
139
+ );
140
+ };
141
+ const logEnd = () => {
139
142
  teardownCore();
140
143
  console.log(`[CodSpeed] Done running ${bench.tasks.length} benches.`);
141
144
  return bench.tasks;
@@ -144,21 +147,11 @@ function runInstrumentedBench(bench, rootCallingFile) {
144
147
 
145
148
  function runWalltimeBench(bench, rootCallingFile) {
146
149
  bench.run = async () => {
147
- console.log(
148
- `[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.1"} (walltime mode)`
149
- );
150
- const originalRun = bench.run;
151
- const benchProto = Object.getPrototypeOf(bench);
152
- const prototypeRun = benchProto.run;
153
- bench.run = prototypeRun;
154
- const benchmarks = [];
150
+ logStart();
151
+ const codspeedBenchmarks = [];
155
152
  for (const task of bench.tasks) {
156
153
  const uri = getTaskUri(bench, task.name, rootCallingFile);
157
- const { fn } = task;
158
- async function __codspeed_root_frame__() {
159
- await fn();
160
- }
161
- task.fn = __codspeed_root_frame__;
154
+ wrapTaskFunction(task, true);
162
155
  if (bench.opts.warmup) {
163
156
  await task.warmup();
164
157
  }
@@ -167,95 +160,91 @@ function runWalltimeBench(bench, rootCallingFile) {
167
160
  await task.run();
168
161
  InstrumentHooks.stopBenchmark();
169
162
  await mongoMeasurement.stop(uri);
170
- if (task.result) {
171
- const stats = convertTinybenchResultToBenchmarkStats(
172
- task.result,
173
- bench.opts.warmup ? bench.opts.warmupIterations ?? 0 : 0
174
- );
175
- const benchmark = {
176
- name: task.name,
177
- uri,
178
- config: {
179
- max_rounds: bench.opts.iterations ?? null,
180
- max_time_ns: bench.opts.time ? msToNs(bench.opts.time) : null,
181
- min_round_time_ns: null,
182
- // tinybench does not have an option for this
183
- warmup_time_ns: bench.opts.warmup && bench.opts.warmupTime ? msToNs(bench.opts.warmupTime) : null
184
- },
185
- stats
186
- };
187
- benchmarks.push(benchmark);
188
- console.log(` \u2714 Collected walltime data for ${uri}`);
189
- InstrumentHooks.setExecutedBenchmark(process.pid, uri);
190
- } else {
191
- console.warn(` \u26A0 No result data available for ${uri}`);
192
- }
193
- }
194
- if (benchmarks.length > 0) {
195
- writeWalltimeResults(benchmarks, true);
163
+ registerCodspeedBenchmarkFromTask(
164
+ codspeedBenchmarks,
165
+ task,
166
+ bench,
167
+ rootCallingFile
168
+ );
196
169
  }
197
- console.log(
198
- `[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`
199
- );
200
- bench.run = originalRun;
201
- return bench.tasks;
170
+ return finalizeWalltimeRun(bench, codspeedBenchmarks, true);
202
171
  };
203
172
  bench.runSync = () => {
204
- console.log(
205
- `[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.1"} (walltime mode)`
206
- );
207
- const originalRun = bench.run;
208
- const benchProto = Object.getPrototypeOf(bench);
209
- const prototypeRun = benchProto.run;
210
- bench.run = prototypeRun;
211
- const benchmarks = [];
173
+ logStart();
174
+ const codspeedBenchmarks = [];
212
175
  for (const task of bench.tasks) {
213
- let __codspeed_root_frame__2 = function() {
214
- fn();
215
- };
216
- const uri = getTaskUri(bench, task.name, rootCallingFile);
176
+ wrapTaskFunction(task, false);
217
177
  if (bench.opts.warmup) {
218
178
  task.warmup();
219
179
  }
220
- const { fn } = task;
221
- task.fn = __codspeed_root_frame__2;
222
180
  InstrumentHooks.startBenchmark();
223
181
  task.runSync();
224
182
  InstrumentHooks.stopBenchmark();
225
- if (task.result) {
226
- const stats = convertTinybenchResultToBenchmarkStats(
227
- task.result,
228
- bench.opts.warmup ? bench.opts.warmupIterations ?? 0 : 0
229
- );
230
- const benchmark = {
231
- name: task.name,
232
- uri,
233
- config: {
234
- max_rounds: bench.opts.iterations ?? null,
235
- max_time_ns: bench.opts.time ? msToNs(bench.opts.time) : null,
236
- min_round_time_ns: null,
237
- // tinybench does not have an option for this
238
- warmup_time_ns: bench.opts.warmup && bench.opts.warmupTime ? msToNs(bench.opts.warmupTime) : null
239
- },
240
- stats
241
- };
242
- benchmarks.push(benchmark);
243
- console.log(` \u2714 Collected walltime data for ${uri}`);
244
- InstrumentHooks.setExecutedBenchmark(process.pid, uri);
245
- } else {
246
- console.warn(` \u26A0 No result data available for ${uri}`);
247
- }
248
- }
249
- if (benchmarks.length > 0) {
250
- writeWalltimeResults(benchmarks);
183
+ registerCodspeedBenchmarkFromTask(
184
+ codspeedBenchmarks,
185
+ task,
186
+ bench,
187
+ rootCallingFile
188
+ );
251
189
  }
252
- console.log(
253
- `[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`
254
- );
255
- bench.run = originalRun;
256
- return bench.tasks;
190
+ return finalizeWalltimeRun(bench, codspeedBenchmarks, false);
257
191
  };
258
192
  }
193
+ function logStart() {
194
+ console.log(
195
+ `[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.2"} (walltime mode)`
196
+ );
197
+ }
198
+ const TINYBENCH_WARMUP_DEFAULT = 16;
199
+ function registerCodspeedBenchmarkFromTask(codspeedBenchmarks, task, bench, rootCallingFile) {
200
+ const uri = getTaskUri(bench, task.name, rootCallingFile);
201
+ if (!task.result) {
202
+ console.warn(` \u26A0 No result data available for ${uri}`);
203
+ return;
204
+ }
205
+ const warmupIterations = bench.opts.warmup ? bench.opts.warmupIterations ?? TINYBENCH_WARMUP_DEFAULT : 0;
206
+ const stats = convertTinybenchResultToBenchmarkStats(
207
+ task.result,
208
+ warmupIterations
209
+ );
210
+ codspeedBenchmarks.push({
211
+ name: task.name,
212
+ uri,
213
+ config: {
214
+ max_rounds: bench.opts.iterations ?? null,
215
+ max_time_ns: bench.opts.time ? msToNs(bench.opts.time) : null,
216
+ min_round_time_ns: null,
217
+ // tinybench does not have an option for this
218
+ warmup_time_ns: bench.opts.warmup && bench.opts.warmupTime ? msToNs(bench.opts.warmupTime) : null
219
+ },
220
+ stats
221
+ });
222
+ console.log(` \u2714 Collected walltime data for ${uri}`);
223
+ InstrumentHooks.setExecutedBenchmark(process.pid, uri);
224
+ }
225
+ function wrapTaskFunction(task, isAsync) {
226
+ const { fn } = task;
227
+ if (isAsync) {
228
+ async function __codspeed_root_frame__2() {
229
+ await fn();
230
+ }
231
+ task.fn = __codspeed_root_frame__2;
232
+ } else {
233
+ let __codspeed_root_frame__2 = function() {
234
+ fn();
235
+ };
236
+ task.fn = __codspeed_root_frame__2;
237
+ }
238
+ }
239
+ function finalizeWalltimeRun(bench, benchmarks, isAsync) {
240
+ if (benchmarks.length > 0) {
241
+ writeWalltimeResults(benchmarks, isAsync);
242
+ }
243
+ console.log(
244
+ `[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`
245
+ );
246
+ return bench.tasks;
247
+ }
259
248
  function convertTinybenchResultToBenchmarkStats(result, warmupIterations) {
260
249
  const { min, max, mean, sd, samples } = result.latency;
261
250
  const sortedTimesNs = samples.map(msToNs).sort((a, b) => a - b);
@@ -1 +1 @@
1
- {"version":3,"file":"index.es5.js","sources":["../../../node_modules/.pnpm/stack-trace@1.0.0-pre2/node_modules/stack-trace/index.js","../src/uri.ts","../src/instrumented.ts","../src/walltime.ts","../src/index.ts"],"sourcesContent":["export function get(belowFn) {\r\n const oldLimit = Error.stackTraceLimit;\r\n Error.stackTraceLimit = Infinity;\r\n\r\n const dummyObject = {};\r\n\r\n const v8Handler = Error.prepareStackTrace;\r\n Error.prepareStackTrace = function(dummyObject, v8StackTrace) {\r\n return v8StackTrace;\r\n };\r\n Error.captureStackTrace(dummyObject, belowFn || get);\r\n\r\n const v8StackTrace = dummyObject.stack;\r\n Error.prepareStackTrace = v8Handler;\r\n Error.stackTraceLimit = oldLimit;\r\n\r\n return v8StackTrace;\r\n}\r\n\r\nexport function parse(err) {\r\n if (!err.stack) {\r\n return [];\r\n }\r\n\r\n const lines = err.stack.split('\\n').slice(1);\r\n return lines\r\n .map(function(line) {\r\n if (line.match(/^\\s*[-]{4,}$/)) {\r\n return createParsedCallSite({\r\n fileName: line,\r\n lineNumber: null,\r\n functionName: null,\r\n typeName: null,\r\n methodName: null,\r\n columnNumber: null,\r\n 'native': null,\r\n });\r\n }\r\n\r\n const lineMatch = line.match(/at (?:(.+?)\\s+\\()?(?:(.+?):(\\d+)(?::(\\d+))?|([^)]+))\\)?/);\r\n if (!lineMatch) {\r\n return;\r\n }\r\n\r\n let object = null;\r\n let method = null;\r\n let functionName = null;\r\n let typeName = null;\r\n let methodName = null;\r\n let isNative = (lineMatch[5] === 'native');\r\n\r\n if (lineMatch[1]) {\r\n functionName = lineMatch[1];\r\n let methodStart = functionName.lastIndexOf('.');\r\n if (functionName[methodStart-1] == '.')\r\n methodStart--;\r\n if (methodStart > 0) {\r\n object = functionName.substr(0, methodStart);\r\n method = functionName.substr(methodStart + 1);\r\n const objectEnd = object.indexOf('.Module');\r\n if (objectEnd > 0) {\r\n functionName = functionName.substr(objectEnd + 1);\r\n object = object.substr(0, objectEnd);\r\n }\r\n }\r\n }\r\n\r\n if (method) {\r\n typeName = object;\r\n methodName = method;\r\n }\r\n\r\n if (method === '<anonymous>') {\r\n methodName = null;\r\n functionName = null;\r\n }\r\n\r\n const properties = {\r\n fileName: lineMatch[2] || null,\r\n lineNumber: parseInt(lineMatch[3], 10) || null,\r\n functionName: functionName,\r\n typeName: typeName,\r\n methodName: methodName,\r\n columnNumber: parseInt(lineMatch[4], 10) || null,\r\n 'native': isNative,\r\n };\r\n\r\n return createParsedCallSite(properties);\r\n })\r\n .filter(function(callSite) {\r\n return !!callSite;\r\n });\r\n}\r\n\r\nfunction CallSite(properties) {\r\n for (const property in properties) {\r\n this[property] = properties[property];\r\n }\r\n}\r\n\r\nconst strProperties = [\r\n 'this',\r\n 'typeName',\r\n 'functionName',\r\n 'methodName',\r\n 'fileName',\r\n 'lineNumber',\r\n 'columnNumber',\r\n 'function',\r\n 'evalOrigin'\r\n];\r\n\r\nconst boolProperties = [\r\n 'topLevel',\r\n 'eval',\r\n 'native',\r\n 'constructor'\r\n];\r\n\r\nstrProperties.forEach(function (property) {\r\n CallSite.prototype[property] = null;\r\n CallSite.prototype['get' + property[0].toUpperCase() + property.substr(1)] = function () {\r\n return this[property];\r\n }\r\n});\r\n\r\nboolProperties.forEach(function (property) {\r\n CallSite.prototype[property] = false;\r\n CallSite.prototype['is' + property[0].toUpperCase() + property.substr(1)] = function () {\r\n return this[property];\r\n }\r\n});\r\n\r\nfunction createParsedCallSite(properties) {\r\n return new CallSite(properties);\r\n}\r\n","import { Bench } from \"tinybench\";\n\n// Store URI mapping externally since fnOpts is private\nexport const taskUriMap = new WeakMap<Bench, Map<string, string>>();\n\nexport function getTaskUri(\n bench: Bench,\n taskName: string,\n rootCallingFile: string\n): string {\n const uriMap = taskUriMap.get(bench);\n return uriMap?.get(taskName) || `${rootCallingFile}::${taskName}`;\n}\n\nexport function getOrCreateUriMap(bench: Bench): Map<string, string> {\n let uriMap = taskUriMap.get(bench);\n if (!uriMap) {\n uriMap = new Map<string, string>();\n taskUriMap.set(bench, uriMap);\n }\n return uriMap;\n}\n","import {\n InstrumentHooks,\n mongoMeasurement,\n optimizeFunction,\n teardownCore,\n} from \"@codspeed/core\";\nimport { Bench, Fn, FnOptions } from \"tinybench\";\nimport { getTaskUri } from \"./uri\";\n\ndeclare const __VERSION__: string;\n\nexport function runInstrumentedBench(\n bench: Bench,\n rootCallingFile: string\n): void {\n bench.run = async () => {\n console.log(\n `[CodSpeed] running with @codspeed/tinybench v${__VERSION__} (instrumented mode)`\n );\n\n for (const task of bench.tasks) {\n const uri = getTaskUri(bench, task.name, rootCallingFile);\n\n // Access private fields\n const { fnOpts, fn } = task as unknown as { fnOpts?: FnOptions; fn: Fn };\n\n // Call beforeAll hook if it exists\n await fnOpts?.beforeAll?.call(task, \"run\");\n\n // run optimizations\n await optimizeFunction(async () => {\n await fnOpts?.beforeEach?.call(task, \"run\");\n await fn();\n await fnOpts?.afterEach?.call(task, \"run\");\n });\n\n // run instrumented benchmark\n await fnOpts?.beforeEach?.call(task, \"run\");\n\n await mongoMeasurement.start(uri);\n global.gc?.();\n await (async function __codspeed_root_frame__() {\n InstrumentHooks.startBenchmark();\n await fn();\n InstrumentHooks.stopBenchmark();\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n })();\n await mongoMeasurement.stop(uri);\n\n await fnOpts?.afterEach?.call(task, \"run\");\n\n await fnOpts?.afterAll?.call(task, \"run\");\n\n // print results\n console.log(\n ` ✔ ${\n InstrumentHooks.isInstrumented() ? \"Measured\" : \"Checked\"\n } ${uri}`\n );\n }\n\n teardownCore();\n console.log(`[CodSpeed] Done running ${bench.tasks.length} benches.`);\n return bench.tasks;\n };\n\n bench.runSync = () => {\n console.log(\n `[CodSpeed] running with @codspeed/tinybench v${__VERSION__} (instrumented mode)`\n );\n\n for (const task of bench.tasks) {\n const uri = getTaskUri(bench, task.name, rootCallingFile);\n\n // Access private fields\n const { fnOpts, fn } = task as unknown as { fnOpts?: FnOptions; fn: Fn };\n\n // Call beforeAll hook if it exists\n fnOpts?.beforeAll?.call(task, \"run\");\n\n // run optimizations\n optimizeFunction(async () => {\n fnOpts?.beforeEach?.call(task, \"run\");\n fn();\n fnOpts?.afterEach?.call(task, \"run\");\n });\n\n // run instrumented benchmark\n fnOpts?.beforeEach?.call(task, \"run\");\n\n // await mongoMeasurement.start(uri);\n global.gc?.();\n (function __codspeed_root_frame__() {\n InstrumentHooks.startBenchmark();\n fn();\n InstrumentHooks.stopBenchmark();\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n })();\n mongoMeasurement.stop(uri);\n\n fnOpts?.afterEach?.call(task, \"run\");\n\n fnOpts?.afterAll?.call(task, \"run\");\n\n // print results\n console.log(\n ` ✔ ${\n InstrumentHooks.isInstrumented() ? \"Measured\" : \"Checked\"\n } ${uri}`\n );\n }\n\n teardownCore();\n console.log(`[CodSpeed] Done running ${bench.tasks.length} benches.`);\n return bench.tasks;\n };\n}\n","import {\n calculateQuantiles,\n InstrumentHooks,\n mongoMeasurement,\n msToNs,\n msToS,\n writeWalltimeResults,\n type Benchmark,\n type BenchmarkStats,\n} from \"@codspeed/core\";\nimport { Bench, Fn, TaskResult } from \"tinybench\";\nimport { getTaskUri } from \"./uri\";\n\ndeclare const __VERSION__: string;\n\nexport function runWalltimeBench(bench: Bench, rootCallingFile: string): void {\n bench.run = async () => {\n console.log(\n `[CodSpeed] running with @codspeed/tinybench v${__VERSION__} (walltime mode)`\n );\n\n // Store the original run method before we override it\n const originalRun = bench.run;\n\n // Temporarily restore the original run to get actual benchmark results\n const benchProto = Object.getPrototypeOf(bench);\n const prototypeRun = benchProto.run;\n bench.run = prototypeRun;\n\n const benchmarks: Benchmark[] = [];\n\n // Collect and report walltime data\n for (const task of bench.tasks) {\n const uri = getTaskUri(bench, task.name, rootCallingFile);\n\n // Override the function under test to add a static frame\n const { fn } = task as unknown as { fn: Fn };\n // eslint-disable-next-line no-inner-declarations\n async function __codspeed_root_frame__() {\n await fn();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (task as any).fn = __codspeed_root_frame__;\n\n // run the warmup of the task right before its actual run\n if (bench.opts.warmup) {\n await task.warmup();\n }\n\n await mongoMeasurement.start(uri);\n InstrumentHooks.startBenchmark();\n await task.run();\n InstrumentHooks.stopBenchmark();\n await mongoMeasurement.stop(uri);\n\n if (task.result) {\n // Convert tinybench result to BenchmarkStats format\n const stats = convertTinybenchResultToBenchmarkStats(\n task.result,\n bench.opts.warmup ? bench.opts.warmupIterations ?? 0 : 0\n );\n\n const benchmark: Benchmark = {\n name: task.name,\n uri,\n config: {\n max_rounds: bench.opts.iterations ?? null,\n max_time_ns: bench.opts.time ? msToNs(bench.opts.time) : null,\n min_round_time_ns: null, // tinybench does not have an option for this\n warmup_time_ns:\n bench.opts.warmup && bench.opts.warmupTime\n ? msToNs(bench.opts.warmupTime)\n : null,\n },\n stats,\n };\n\n benchmarks.push(benchmark);\n console.log(` ✔ Collected walltime data for ${uri}`);\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n } else {\n console.warn(` ⚠ No result data available for ${uri}`);\n }\n }\n\n // Write results to JSON file using core function\n if (benchmarks.length > 0) {\n writeWalltimeResults(benchmarks, true);\n }\n\n console.log(\n `[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`\n );\n // Restore our custom run method\n bench.run = originalRun;\n\n return bench.tasks;\n };\n\n bench.runSync = () => {\n console.log(\n `[CodSpeed] running with @codspeed/tinybench v${__VERSION__} (walltime mode)`\n );\n\n // Store the original run method before we override it\n const originalRun = bench.run;\n\n // Temporarily restore the original run to get actual benchmark results\n const benchProto = Object.getPrototypeOf(bench);\n const prototypeRun = benchProto.run;\n bench.run = prototypeRun;\n\n const benchmarks: Benchmark[] = [];\n\n // Collect and report walltime data\n for (const task of bench.tasks) {\n const uri = getTaskUri(bench, task.name, rootCallingFile);\n\n // run the warmup of the task right before its actual run\n if (bench.opts.warmup) {\n task.warmup();\n }\n\n // Override the function under test to add a static frame\n const { fn } = task as unknown as { fn: Fn };\n // eslint-disable-next-line no-inner-declarations\n function __codspeed_root_frame__() {\n fn();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (task as any).fn = __codspeed_root_frame__;\n\n InstrumentHooks.startBenchmark();\n task.runSync();\n InstrumentHooks.stopBenchmark();\n\n if (task.result) {\n // Convert tinybench result to BenchmarkStats format\n const stats = convertTinybenchResultToBenchmarkStats(\n task.result,\n bench.opts.warmup ? bench.opts.warmupIterations ?? 0 : 0\n );\n\n const benchmark: Benchmark = {\n name: task.name,\n uri,\n config: {\n max_rounds: bench.opts.iterations ?? null,\n max_time_ns: bench.opts.time ? msToNs(bench.opts.time) : null,\n min_round_time_ns: null, // tinybench does not have an option for this\n warmup_time_ns:\n bench.opts.warmup && bench.opts.warmupTime\n ? msToNs(bench.opts.warmupTime)\n : null,\n },\n stats,\n };\n\n benchmarks.push(benchmark);\n console.log(` ✔ Collected walltime data for ${uri}`);\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n } else {\n console.warn(` ⚠ No result data available for ${uri}`);\n }\n }\n\n // Write results to JSON file using core function\n if (benchmarks.length > 0) {\n writeWalltimeResults(benchmarks);\n }\n\n console.log(\n `[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`\n );\n // Restore our custom run method\n bench.run = originalRun;\n\n return bench.tasks;\n };\n}\n\nfunction convertTinybenchResultToBenchmarkStats(\n result: TaskResult,\n warmupIterations: number\n): BenchmarkStats {\n const { min, max, mean, sd, samples } = result.latency;\n\n // Get individual sample times in nanoseconds and sort them\n const sortedTimesNs = samples.map(msToNs).sort((a, b) => a - b);\n const meanNs = msToNs(mean);\n const stdevNs = msToNs(sd);\n\n const { q1_ns, q3_ns, median_ns, iqr_outlier_rounds, stdev_outlier_rounds } =\n calculateQuantiles({ meanNs, stdevNs, sortedTimesNs });\n\n return {\n min_ns: msToNs(min),\n max_ns: msToNs(max),\n mean_ns: meanNs,\n stdev_ns: stdevNs,\n q1_ns,\n median_ns,\n q3_ns,\n total_time: msToS(result.totalTime),\n iter_per_round: 1, // as there is only one round in tinybench, we define that there were n rounds of 1 iteration\n rounds: sortedTimesNs.length,\n iqr_outlier_rounds,\n stdev_outlier_rounds,\n warmup_iters: warmupIterations,\n };\n}\n","import {\n getCodspeedRunnerMode,\n getGitDir,\n InstrumentHooks,\n mongoMeasurement,\n setupCore,\n SetupInstrumentsRequestBody,\n SetupInstrumentsResponse,\n tryIntrospect,\n} from \"@codspeed/core\";\nimport path from \"path\";\nimport { get as getStackTrace } from \"stack-trace\";\nimport { Bench } from \"tinybench\";\nimport { fileURLToPath } from \"url\";\nimport { runInstrumentedBench } from \"./instrumented\";\nimport { getOrCreateUriMap } from \"./uri\";\nimport { runWalltimeBench } from \"./walltime\";\n\ntryIntrospect();\n\nexport function withCodSpeed(bench: Bench): Bench {\n const codspeedRunnerMode = getCodspeedRunnerMode();\n if (codspeedRunnerMode === \"disabled\") {\n return bench;\n }\n setupCore();\n\n const rootCallingFile = getCallingFile();\n\n // Compute and register URI for bench\n const uriMap = getOrCreateUriMap(bench);\n const rawAdd = bench.add;\n bench.add = (name, fn, opts?) => {\n const callingFile = getCallingFile();\n let uri = callingFile;\n if (bench.name !== undefined) {\n uri += `::${bench.name}`;\n }\n uri += `::${name}`;\n uriMap.set(name, uri);\n return rawAdd.bind(bench)(name, fn, opts);\n };\n\n if (codspeedRunnerMode === \"instrumented\") {\n runInstrumentedBench(bench, rootCallingFile);\n } else if (codspeedRunnerMode === \"walltime\") {\n runWalltimeBench(bench, rootCallingFile);\n }\n\n return bench;\n}\n\nfunction getCallingFile(): string {\n const stack = getStackTrace();\n let callingFile = stack[2].getFileName(); // [here, withCodSpeed, actual caller]\n const gitDir = getGitDir(callingFile);\n if (gitDir === undefined) {\n throw new Error(\"Could not find a git repository\");\n }\n if (callingFile.startsWith(\"file://\")) {\n callingFile = fileURLToPath(callingFile);\n }\n return path.relative(gitDir, callingFile);\n}\n\n/**\n * Dynamically setup the CodSpeed instruments.\n */\nexport async function setupInstruments(\n body: SetupInstrumentsRequestBody\n): Promise<SetupInstrumentsResponse> {\n if (!InstrumentHooks.isInstrumented()) {\n console.warn(\"[CodSpeed] No instrumentation found, using default mongoUrl\");\n\n return { remoteAddr: body.mongoUrl };\n }\n\n return await mongoMeasurement.setupInstruments(body);\n}\n"],"names":["__codspeed_root_frame__","getStackTrace"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.es5.js","sources":["../../../node_modules/.pnpm/stack-trace@1.0.0-pre2/node_modules/stack-trace/index.js","../src/uri.ts","../src/instrumented.ts","../src/walltime.ts","../src/index.ts"],"sourcesContent":["export function get(belowFn) {\r\n const oldLimit = Error.stackTraceLimit;\r\n Error.stackTraceLimit = Infinity;\r\n\r\n const dummyObject = {};\r\n\r\n const v8Handler = Error.prepareStackTrace;\r\n Error.prepareStackTrace = function(dummyObject, v8StackTrace) {\r\n return v8StackTrace;\r\n };\r\n Error.captureStackTrace(dummyObject, belowFn || get);\r\n\r\n const v8StackTrace = dummyObject.stack;\r\n Error.prepareStackTrace = v8Handler;\r\n Error.stackTraceLimit = oldLimit;\r\n\r\n return v8StackTrace;\r\n}\r\n\r\nexport function parse(err) {\r\n if (!err.stack) {\r\n return [];\r\n }\r\n\r\n const lines = err.stack.split('\\n').slice(1);\r\n return lines\r\n .map(function(line) {\r\n if (line.match(/^\\s*[-]{4,}$/)) {\r\n return createParsedCallSite({\r\n fileName: line,\r\n lineNumber: null,\r\n functionName: null,\r\n typeName: null,\r\n methodName: null,\r\n columnNumber: null,\r\n 'native': null,\r\n });\r\n }\r\n\r\n const lineMatch = line.match(/at (?:(.+?)\\s+\\()?(?:(.+?):(\\d+)(?::(\\d+))?|([^)]+))\\)?/);\r\n if (!lineMatch) {\r\n return;\r\n }\r\n\r\n let object = null;\r\n let method = null;\r\n let functionName = null;\r\n let typeName = null;\r\n let methodName = null;\r\n let isNative = (lineMatch[5] === 'native');\r\n\r\n if (lineMatch[1]) {\r\n functionName = lineMatch[1];\r\n let methodStart = functionName.lastIndexOf('.');\r\n if (functionName[methodStart-1] == '.')\r\n methodStart--;\r\n if (methodStart > 0) {\r\n object = functionName.substr(0, methodStart);\r\n method = functionName.substr(methodStart + 1);\r\n const objectEnd = object.indexOf('.Module');\r\n if (objectEnd > 0) {\r\n functionName = functionName.substr(objectEnd + 1);\r\n object = object.substr(0, objectEnd);\r\n }\r\n }\r\n }\r\n\r\n if (method) {\r\n typeName = object;\r\n methodName = method;\r\n }\r\n\r\n if (method === '<anonymous>') {\r\n methodName = null;\r\n functionName = null;\r\n }\r\n\r\n const properties = {\r\n fileName: lineMatch[2] || null,\r\n lineNumber: parseInt(lineMatch[3], 10) || null,\r\n functionName: functionName,\r\n typeName: typeName,\r\n methodName: methodName,\r\n columnNumber: parseInt(lineMatch[4], 10) || null,\r\n 'native': isNative,\r\n };\r\n\r\n return createParsedCallSite(properties);\r\n })\r\n .filter(function(callSite) {\r\n return !!callSite;\r\n });\r\n}\r\n\r\nfunction CallSite(properties) {\r\n for (const property in properties) {\r\n this[property] = properties[property];\r\n }\r\n}\r\n\r\nconst strProperties = [\r\n 'this',\r\n 'typeName',\r\n 'functionName',\r\n 'methodName',\r\n 'fileName',\r\n 'lineNumber',\r\n 'columnNumber',\r\n 'function',\r\n 'evalOrigin'\r\n];\r\n\r\nconst boolProperties = [\r\n 'topLevel',\r\n 'eval',\r\n 'native',\r\n 'constructor'\r\n];\r\n\r\nstrProperties.forEach(function (property) {\r\n CallSite.prototype[property] = null;\r\n CallSite.prototype['get' + property[0].toUpperCase() + property.substr(1)] = function () {\r\n return this[property];\r\n }\r\n});\r\n\r\nboolProperties.forEach(function (property) {\r\n CallSite.prototype[property] = false;\r\n CallSite.prototype['is' + property[0].toUpperCase() + property.substr(1)] = function () {\r\n return this[property];\r\n }\r\n});\r\n\r\nfunction createParsedCallSite(properties) {\r\n return new CallSite(properties);\r\n}\r\n","import { Bench } from \"tinybench\";\n\n// Store URI mapping externally since fnOpts is private\nexport const taskUriMap = new WeakMap<Bench, Map<string, string>>();\n\nexport function getTaskUri(\n bench: Bench,\n taskName: string,\n rootCallingFile: string\n): string {\n const uriMap = taskUriMap.get(bench);\n return uriMap?.get(taskName) || `${rootCallingFile}::${taskName}`;\n}\n\nexport function getOrCreateUriMap(bench: Bench): Map<string, string> {\n let uriMap = taskUriMap.get(bench);\n if (!uriMap) {\n uriMap = new Map<string, string>();\n taskUriMap.set(bench, uriMap);\n }\n return uriMap;\n}\n","import {\n InstrumentHooks,\n mongoMeasurement,\n optimizeFunction,\n teardownCore,\n} from \"@codspeed/core\";\nimport { Bench, Fn, FnOptions, Task } from \"tinybench\";\nimport { getTaskUri } from \"./uri\";\n\ndeclare const __VERSION__: string;\n\nexport function runInstrumentedBench(\n bench: Bench,\n rootCallingFile: string\n): void {\n const runTaskAsync = async (task: Task, uri: string): Promise<void> => {\n const { fnOpts, fn } = task as unknown as { fnOpts?: FnOptions; fn: Fn };\n\n await fnOpts?.beforeAll?.call(task, \"run\");\n await optimizeFunction(async () => {\n await fnOpts?.beforeEach?.call(task, \"run\");\n await fn();\n await fnOpts?.afterEach?.call(task, \"run\");\n });\n await fnOpts?.beforeEach?.call(task, \"run\");\n await mongoMeasurement.start(uri);\n\n await (async function __codspeed_root_frame__() {\n global.gc?.();\n InstrumentHooks.startBenchmark();\n await fn();\n InstrumentHooks.stopBenchmark();\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n })();\n\n await mongoMeasurement.stop(uri);\n await fnOpts?.afterEach?.call(task, \"run\");\n await fnOpts?.afterAll?.call(task, \"run\");\n };\n\n // Sync task runner\n const runTaskSync = (task: Task, uri: string): void => {\n const { fnOpts, fn } = task as unknown as { fnOpts?: FnOptions; fn: Fn };\n\n fnOpts?.beforeAll?.call(task, \"run\");\n fnOpts?.beforeEach?.call(task, \"run\");\n\n (function __codspeed_root_frame__() {\n global.gc?.();\n InstrumentHooks.startBenchmark();\n fn();\n InstrumentHooks.stopBenchmark();\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n })();\n\n fnOpts?.afterEach?.call(task, \"run\");\n fnOpts?.afterAll?.call(task, \"run\");\n };\n\n bench.run = async () => {\n logStart();\n\n for (const task of bench.tasks) {\n const uri = getTaskUri(bench, task.name, rootCallingFile);\n await runTaskAsync(task, uri);\n logTaskCompletion(uri);\n }\n\n return logEnd();\n };\n\n bench.runSync = () => {\n logStart();\n\n for (const task of bench.tasks) {\n const uri = getTaskUri(bench, task.name, rootCallingFile);\n runTaskSync(task, uri);\n logTaskCompletion(uri);\n }\n\n return logEnd();\n };\n\n const logStart = () => {\n console.log(\n `[CodSpeed] running with @codspeed/tinybench v${__VERSION__} (instrumented mode)`\n );\n };\n\n const logTaskCompletion = (uri: string) => {\n console.log(\n ` ✔ ${\n InstrumentHooks.isInstrumented() ? \"Measured\" : \"Checked\"\n } ${uri}`\n );\n };\n\n const logEnd = () => {\n teardownCore();\n console.log(`[CodSpeed] Done running ${bench.tasks.length} benches.`);\n return bench.tasks;\n };\n}\n","import {\n calculateQuantiles,\n InstrumentHooks,\n mongoMeasurement,\n msToNs,\n msToS,\n writeWalltimeResults,\n type Benchmark as CodspeedBenchmark,\n type BenchmarkStats,\n} from \"@codspeed/core\";\nimport { Bench, Fn, Task, TaskResult } from \"tinybench\";\nimport { getTaskUri } from \"./uri\";\n\ndeclare const __VERSION__: string;\n\nexport function runWalltimeBench(bench: Bench, rootCallingFile: string): void {\n bench.run = async () => {\n logStart();\n const codspeedBenchmarks: CodspeedBenchmark[] = [];\n\n // Collect and report walltime data\n for (const task of bench.tasks) {\n const uri = getTaskUri(bench, task.name, rootCallingFile);\n\n // Override the function under test to add a static frame\n wrapTaskFunction(task, true);\n\n // run the warmup of the task right before its actual run\n if (bench.opts.warmup) {\n await task.warmup();\n }\n\n await mongoMeasurement.start(uri);\n InstrumentHooks.startBenchmark();\n await task.run();\n InstrumentHooks.stopBenchmark();\n await mongoMeasurement.stop(uri);\n\n registerCodspeedBenchmarkFromTask(\n codspeedBenchmarks,\n task,\n bench,\n rootCallingFile\n );\n }\n\n return finalizeWalltimeRun(bench, codspeedBenchmarks, true);\n };\n\n bench.runSync = () => {\n logStart();\n const codspeedBenchmarks: CodspeedBenchmark[] = [];\n\n for (const task of bench.tasks) {\n // Override the function under test to add a static frame\n wrapTaskFunction(task, false);\n\n if (bench.opts.warmup) {\n task.warmup();\n }\n\n InstrumentHooks.startBenchmark();\n task.runSync();\n InstrumentHooks.stopBenchmark();\n\n registerCodspeedBenchmarkFromTask(\n codspeedBenchmarks,\n task,\n bench,\n rootCallingFile\n );\n }\n\n return finalizeWalltimeRun(bench, codspeedBenchmarks, false);\n };\n}\n\nfunction logStart() {\n console.log(\n `[CodSpeed] running with @codspeed/tinybench v${__VERSION__} (walltime mode)`\n );\n}\n\nconst TINYBENCH_WARMUP_DEFAULT = 16;\n\nfunction registerCodspeedBenchmarkFromTask(\n codspeedBenchmarks: CodspeedBenchmark[],\n task: Task,\n bench: Bench,\n rootCallingFile: string\n): void {\n const uri = getTaskUri(bench, task.name, rootCallingFile);\n\n if (!task.result) {\n console.warn(` ⚠ No result data available for ${uri}`);\n return;\n }\n\n const warmupIterations = bench.opts.warmup\n ? bench.opts.warmupIterations ?? TINYBENCH_WARMUP_DEFAULT\n : 0;\n const stats = convertTinybenchResultToBenchmarkStats(\n task.result,\n warmupIterations\n );\n\n codspeedBenchmarks.push({\n name: task.name,\n uri,\n config: {\n max_rounds: bench.opts.iterations ?? null,\n max_time_ns: bench.opts.time ? msToNs(bench.opts.time) : null,\n min_round_time_ns: null, // tinybench does not have an option for this\n warmup_time_ns:\n bench.opts.warmup && bench.opts.warmupTime\n ? msToNs(bench.opts.warmupTime)\n : null,\n },\n stats,\n });\n\n console.log(` ✔ Collected walltime data for ${uri}`);\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n}\n\nfunction wrapTaskFunction(task: Task, isAsync: boolean): void {\n const { fn } = task as unknown as { fn: Fn };\n if (isAsync) {\n // eslint-disable-next-line no-inner-declarations\n async function __codspeed_root_frame__() {\n await fn();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (task as any).fn = __codspeed_root_frame__;\n } else {\n // eslint-disable-next-line no-inner-declarations\n function __codspeed_root_frame__() {\n fn();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (task as any).fn = __codspeed_root_frame__;\n }\n}\n\nfunction finalizeWalltimeRun(\n bench: Bench,\n benchmarks: CodspeedBenchmark[],\n isAsync: boolean\n) {\n // Write results to JSON file using core function\n if (benchmarks.length > 0) {\n writeWalltimeResults(benchmarks, isAsync);\n }\n\n console.log(\n `[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`\n );\n return bench.tasks;\n}\n\nfunction convertTinybenchResultToBenchmarkStats(\n result: TaskResult,\n warmupIterations: number\n): BenchmarkStats {\n const { min, max, mean, sd, samples } = result.latency;\n\n // Get individual sample times in nanoseconds and sort them\n const sortedTimesNs = samples.map(msToNs).sort((a, b) => a - b);\n const meanNs = msToNs(mean);\n const stdevNs = msToNs(sd);\n\n const { q1_ns, q3_ns, median_ns, iqr_outlier_rounds, stdev_outlier_rounds } =\n calculateQuantiles({ meanNs, stdevNs, sortedTimesNs });\n\n return {\n min_ns: msToNs(min),\n max_ns: msToNs(max),\n mean_ns: meanNs,\n stdev_ns: stdevNs,\n q1_ns,\n median_ns,\n q3_ns,\n total_time: msToS(result.totalTime),\n iter_per_round: 1, // as there is only one round in tinybench, we define that there were n rounds of 1 iteration\n rounds: sortedTimesNs.length,\n iqr_outlier_rounds,\n stdev_outlier_rounds,\n warmup_iters: warmupIterations,\n };\n}\n","import {\n getCodspeedRunnerMode,\n getGitDir,\n InstrumentHooks,\n mongoMeasurement,\n setupCore,\n SetupInstrumentsRequestBody,\n SetupInstrumentsResponse,\n tryIntrospect,\n} from \"@codspeed/core\";\nimport path from \"path\";\nimport { get as getStackTrace } from \"stack-trace\";\nimport { Bench } from \"tinybench\";\nimport { fileURLToPath } from \"url\";\nimport { runInstrumentedBench } from \"./instrumented\";\nimport { getOrCreateUriMap } from \"./uri\";\nimport { runWalltimeBench } from \"./walltime\";\n\ntryIntrospect();\n\nexport function withCodSpeed(bench: Bench): Bench {\n const codspeedRunnerMode = getCodspeedRunnerMode();\n if (codspeedRunnerMode === \"disabled\") {\n return bench;\n }\n setupCore();\n\n const rootCallingFile = getCallingFile();\n\n // Compute and register URI for bench\n const uriMap = getOrCreateUriMap(bench);\n const rawAdd = bench.add;\n bench.add = (name, fn, opts?) => {\n const callingFile = getCallingFile();\n let uri = callingFile;\n if (bench.name !== undefined) {\n uri += `::${bench.name}`;\n }\n uri += `::${name}`;\n uriMap.set(name, uri);\n return rawAdd.bind(bench)(name, fn, opts);\n };\n\n if (codspeedRunnerMode === \"instrumented\") {\n runInstrumentedBench(bench, rootCallingFile);\n } else if (codspeedRunnerMode === \"walltime\") {\n runWalltimeBench(bench, rootCallingFile);\n }\n\n return bench;\n}\n\nfunction getCallingFile(): string {\n const stack = getStackTrace();\n let callingFile = stack[2].getFileName(); // [here, withCodSpeed, actual caller]\n const gitDir = getGitDir(callingFile);\n if (gitDir === undefined) {\n throw new Error(\"Could not find a git repository\");\n }\n if (callingFile.startsWith(\"file://\")) {\n callingFile = fileURLToPath(callingFile);\n }\n return path.relative(gitDir, callingFile);\n}\n\n/**\n * Dynamically setup the CodSpeed instruments.\n */\nexport async function setupInstruments(\n body: SetupInstrumentsRequestBody\n): Promise<SetupInstrumentsResponse> {\n if (!InstrumentHooks.isInstrumented()) {\n console.warn(\"[CodSpeed] No instrumentation found, using default mongoUrl\");\n\n return { remoteAddr: body.mongoUrl };\n }\n\n return await mongoMeasurement.setupInstruments(body);\n}\n"],"names":["__codspeed_root_frame__","getStackTrace"],"mappings":";;;;AAAO,SAAS,GAAG,CAAC,OAAO,EAAE;AAC7B,EAAE,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,CAAC;AACzC,EAAE,KAAK,CAAC,eAAe,GAAG,QAAQ,CAAC;AACnC;AACA,EAAE,MAAM,WAAW,GAAG,EAAE,CAAC;AACzB;AACA,EAAE,MAAM,SAAS,GAAG,KAAK,CAAC,iBAAiB,CAAC;AAC5C,EAAE,KAAK,CAAC,iBAAiB,GAAG,SAAS,WAAW,EAAE,YAAY,EAAE;AAChE,IAAI,OAAO,YAAY,CAAC;AACxB,EAAE,CAAC,CAAC;AACJ,EAAE,KAAK,CAAC,iBAAiB,CAAC,WAAW,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;AACvD;AACA,EAAE,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC;AACzC,EAAE,KAAK,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACtC,EAAE,KAAK,CAAC,eAAe,GAAG,QAAQ,CAAC;AACnC;AACA,EAAE,OAAO,YAAY,CAAC;AACtB,CAAC;AA4ED;AACA,SAAS,QAAQ,CAAC,UAAU,EAAE;AAC9B,EAAE,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;AACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC1C,EAAE,CAAC;AACH,CAAC;AACD;AACA,MAAM,aAAa,GAAG;AACtB,EAAE,MAAM;AACR,EAAE,UAAU;AACZ,EAAE,cAAc;AAChB,EAAE,YAAY;AACd,EAAE,UAAU;AACZ,EAAE,YAAY;AACd,EAAE,cAAc;AAChB,EAAE,UAAU;AACZ,EAAE,YAAY;AACd,CAAC,CAAC;AACF;AACA,MAAM,cAAc,GAAG;AACvB,EAAE,UAAU;AACZ,EAAE,MAAM;AACR,EAAE,QAAQ;AACV,EAAE,aAAa;AACf,CAAC,CAAC;AACF;AACA,aAAa,CAAC,OAAO,CAAC,UAAU,QAAQ,EAAE;AAC1C,EAAE,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AACtC,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY;AAC3F,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,EAAE,EAAC;AACH,CAAC,CAAC,CAAC;AACH;AACA,cAAc,CAAC,OAAO,CAAC,UAAU,QAAQ,EAAE;AAC3C,EAAE,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;AACvC,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY;AAC1F,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,EAAE,EAAC;AACH,CAAC,CAAC;;AChIK,MAAM,UAAA,uBAAiB,OAAA,EAAoC;AAE3D,SAAS,UAAA,CACd,KAAA,EACA,QAAA,EACA,eAAA,EACQ;AACR,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA;AACnC,EAAA,OAAO,MAAA,EAAQ,GAAA,CAAI,QAAQ,CAAA,IAAK,GAAG,eAAA,CAAA,EAAA,EAAoB,QAAA,CAAA,CAAA;AACzD;AAEO,SAAS,kBAAkB,KAAA,EAAmC;AACnE,EAAA,IAAI,MAAA,GAAS,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA;AACjC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAA,uBAAa,GAAA,EAAoB;AACjC,IAAA,UAAA,CAAW,GAAA,CAAI,OAAO,MAAM,CAAA;AAAA,EAC9B;AACA,EAAA,OAAO,MAAA;AACT;;ACVO,SAAS,oBAAA,CACd,OACA,eAAA,EACM;AACN,EAAA,MAAM,YAAA,GAAe,OAAO,IAAA,EAAY,GAAA,KAA+B;AACrE,IAAA,MAAM,EAAE,MAAA,EAAQ,EAAA,EAAG,GAAI,IAAA;AAEvB,IAAA,MAAM,MAAA,EAAQ,SAAA,EAAW,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AACzC,IAAA,MAAM,iBAAiB,YAAY;AACjC,MAAA,MAAM,MAAA,EAAQ,UAAA,EAAY,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAC1C,MAAA,MAAM,EAAA,EAAG;AACT,MAAA,MAAM,MAAA,EAAQ,SAAA,EAAW,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAAA,IAC3C,CAAC,CAAA;AACD,IAAA,MAAM,MAAA,EAAQ,UAAA,EAAY,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAC1C,IAAA,MAAM,gBAAA,CAAiB,MAAM,GAAG,CAAA;AAEhC,IAAA,MAAO,eAAe,uBAAA,GAA0B;AAC9C,MAAA,MAAA,CAAO,EAAA,IAAK;AACZ,MAAA,eAAA,CAAgB,cAAA,EAAe;AAC/B,MAAA,MAAM,EAAA,EAAG;AACT,MAAA,eAAA,CAAgB,aAAA,EAAc;AAC9B,MAAA,eAAA,CAAgB,oBAAA,CAAqB,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AAAA,IACvD,CAAA,EAAG;AAEH,IAAA,MAAM,gBAAA,CAAiB,KAAK,GAAG,CAAA;AAC/B,IAAA,MAAM,MAAA,EAAQ,SAAA,EAAW,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AACzC,IAAA,MAAM,MAAA,EAAQ,QAAA,EAAU,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAAA,EAC1C,CAAA;AAGA,EAAA,MAAM,WAAA,GAAc,CAAC,IAAA,EAAY,GAAA,KAAsB;AACrD,IAAA,MAAM,EAAE,MAAA,EAAQ,EAAA,EAAG,GAAI,IAAA;AAEvB,IAAA,MAAA,EAAQ,SAAA,EAAW,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AACnC,IAAA,MAAA,EAAQ,UAAA,EAAY,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAEpC,IAAA,CAAC,SAAS,uBAAA,GAA0B;AAClC,MAAA,MAAA,CAAO,EAAA,IAAK;AACZ,MAAA,eAAA,CAAgB,cAAA,EAAe;AAC/B,MAAA,EAAA,EAAG;AACH,MAAA,eAAA,CAAgB,aAAA,EAAc;AAC9B,MAAA,eAAA,CAAgB,oBAAA,CAAqB,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AAAA,IACvD,CAAA,GAAG;AAEH,IAAA,MAAA,EAAQ,SAAA,EAAW,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AACnC,IAAA,MAAA,EAAQ,QAAA,EAAU,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAAA,EACpC,CAAA;AAEA,EAAA,KAAA,CAAM,MAAM,YAAY;AACtB,IAAA,QAAA,EAAS;AAET,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,KAAA,EAAO,IAAA,CAAK,MAAM,eAAe,CAAA;AACxD,MAAA,MAAM,YAAA,CAAa,MAAM,GAAG,CAAA;AAC5B,MAAA,iBAAA,CAAkB,GAAG,CAAA;AAAA,IACvB;AAEA,IAAA,OAAO,MAAA,EAAO;AAAA,EAChB,CAAA;AAEA,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,QAAA,EAAS;AAET,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,KAAA,EAAO,IAAA,CAAK,MAAM,eAAe,CAAA;AACxD,MAAA,WAAA,CAAY,MAAM,GAAG,CAAA;AACrB,MAAA,iBAAA,CAAkB,GAAG,CAAA;AAAA,IACvB;AAEA,IAAA,OAAO,MAAA,EAAO;AAAA,EAChB,CAAA;AAEA,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,6CAAA,EAAgD,eAAA,CAAA,oBAAA;AAAA,KAClD;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,GAAA,KAAgB;AACzC,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,WAAA,EACE,eAAA,CAAgB,cAAA,EAAe,GAAI,aAAa,SAAA,CAAA,CAAA,EAC9C,GAAA,CAAA;AAAA,KACN;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,YAAA,EAAa;AACb,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,wBAAA,EAA2B,KAAA,CAAM,KAAA,CAAM,MAAA,CAAA,SAAA,CAAiB,CAAA;AACpE,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,EACf,CAAA;AACF;;ACvFO,SAAS,gBAAA,CAAiB,OAAc,eAAA,EAA+B;AAC5E,EAAA,KAAA,CAAM,MAAM,YAAY;AACtB,IAAA,QAAA,EAAS;AACT,IAAA,MAAM,qBAA0C,EAAC;AAGjD,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,KAAA,EAAO,IAAA,CAAK,MAAM,eAAe,CAAA;AAGxD,MAAA,gBAAA,CAAiB,MAAM,IAAI,CAAA;AAG3B,MAAA,IAAI,KAAA,CAAM,KAAK,MAAA,EAAQ;AACrB,QAAA,MAAM,KAAK,MAAA,EAAO;AAAA,MACpB;AAEA,MAAA,MAAM,gBAAA,CAAiB,MAAM,GAAG,CAAA;AAChC,MAAA,eAAA,CAAgB,cAAA,EAAe;AAC/B,MAAA,MAAM,KAAK,GAAA,EAAI;AACf,MAAA,eAAA,CAAgB,aAAA,EAAc;AAC9B,MAAA,MAAM,gBAAA,CAAiB,KAAK,GAAG,CAAA;AAE/B,MAAA,iCAAA;AAAA,QACE,kBAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,mBAAA,CAAoB,KAAA,EAAO,kBAAA,EAAoB,IAAI,CAAA;AAAA,EAC5D,CAAA;AAEA,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,QAAA,EAAS;AACT,IAAA,MAAM,qBAA0C,EAAC;AAEjD,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAE9B,MAAA,gBAAA,CAAiB,MAAM,KAAK,CAAA;AAE5B,MAAA,IAAI,KAAA,CAAM,KAAK,MAAA,EAAQ;AACrB,QAAA,IAAA,CAAK,MAAA,EAAO;AAAA,MACd;AAEA,MAAA,eAAA,CAAgB,cAAA,EAAe;AAC/B,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,eAAA,CAAgB,aAAA,EAAc;AAE9B,MAAA,iCAAA;AAAA,QACE,kBAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,mBAAA,CAAoB,KAAA,EAAO,kBAAA,EAAoB,KAAK,CAAA;AAAA,EAC7D,CAAA;AACF;AAEA,SAAS,QAAA,GAAW;AAClB,EAAA,OAAA,CAAQ,GAAA;AAAA,IACN,CAAA,6CAAA,EAAgD,eAAA,CAAA,gBAAA;AAAA,GAClD;AACF;AAEA,MAAM,wBAAA,GAA2B,EAAA;AAEjC,SAAS,iCAAA,CACP,kBAAA,EACA,IAAA,EACA,KAAA,EACA,eAAA,EACM;AACN,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,KAAA,EAAO,IAAA,CAAK,MAAM,eAAe,CAAA;AAExD,EAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,IAAA,OAAA,CAAQ,IAAA,CAAK,2CAAsC,GAAA,CAAA,CAAK,CAAA;AACxD,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,mBAAmB,KAAA,CAAM,IAAA,CAAK,SAChC,KAAA,CAAM,IAAA,CAAK,oBAAoB,wBAAA,GAC/B,CAAA;AACJ,EAAA,MAAM,KAAA,GAAQ,sCAAA;AAAA,IACZ,IAAA,CAAK,MAAA;AAAA,IACL;AAAA,GACF;AAEA,EAAA,kBAAA,CAAmB,IAAA,CAAK;AAAA,IACtB,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,GAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,UAAA,EAAY,KAAA,CAAM,IAAA,CAAK,UAAA,IAAc,IAAA;AAAA,MACrC,WAAA,EAAa,MAAM,IAAA,CAAK,IAAA,GAAO,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAAA,MACzD,iBAAA,EAAmB,IAAA;AAAA;AAAA,MACnB,cAAA,EACE,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,KAAA,CAAM,IAAA,CAAK,UAAA,GAC5B,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,GAC5B;AAAA,KACR;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,OAAA,CAAQ,GAAA,CAAI,0CAAqC,GAAA,CAAA,CAAK,CAAA;AACtD,EAAA,eAAA,CAAgB,oBAAA,CAAqB,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AACvD;AAEA,SAAS,gBAAA,CAAiB,MAAY,OAAA,EAAwB;AAC5D,EAAA,MAAM,EAAE,IAAG,GAAI,IAAA;AACf,EAAA,IAAI,OAAA,EAAS;AAEX,IAAA,eAAeA,wBAAAA,GAA0B;AACvC,MAAA,MAAM,EAAA,EAAG;AAAA,IACX;AAEA,IAAC,KAAa,EAAA,GAAKA,wBAAAA;AAAA,EACrB,CAAA,MAAO;AAEL,IAAA,IAASA,2BAAT,WAAmC;AACjC,MAAA,EAAA,EAAG;AAAA,IACL,CAAA;AAEA,IAAC,KAAa,EAAA,GAAKA,wBAAAA;AAAA,EACrB;AACF;AAEA,SAAS,mBAAA,CACP,KAAA,EACA,UAAA,EACA,OAAA,EACA;AAEA,EAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,IAAA,oBAAA,CAAqB,YAAY,OAAO,CAAA;AAAA,EAC1C;AAEA,EAAA,OAAA,CAAQ,GAAA;AAAA,IACN,CAAA,6CAAA,EAAgD,MAAM,KAAA,CAAM,MAAA,CAAA,SAAA;AAAA,GAC9D;AACA,EAAA,OAAO,KAAA,CAAM,KAAA;AACf;AAEA,SAAS,sCAAA,CACP,QACA,gBAAA,EACgB;AAChB,EAAA,MAAM,EAAE,GAAA,EAAK,GAAA,EAAK,MAAM,EAAA,EAAI,OAAA,KAAY,MAAA,CAAO,OAAA;AAG/C,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAC9D,EAAA,MAAM,MAAA,GAAS,OAAO,IAAI,CAAA;AAC1B,EAAA,MAAM,OAAA,GAAU,OAAO,EAAE,CAAA;AAEzB,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW,kBAAA,EAAoB,oBAAA,EAAqB,GACxE,kBAAA,CAAmB,EAAE,MAAA,EAAQ,OAAA,EAAS,aAAA,EAAe,CAAA;AAEvD,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,OAAO,GAAG,CAAA;AAAA,IAClB,MAAA,EAAQ,OAAO,GAAG,CAAA;AAAA,IAClB,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU,OAAA;AAAA,IACV,KAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA,EAAY,KAAA,CAAM,MAAA,CAAO,SAAS,CAAA;AAAA,IAClC,cAAA,EAAgB,CAAA;AAAA;AAAA,IAChB,QAAQ,aAAA,CAAc,MAAA;AAAA,IACtB,kBAAA;AAAA,IACA,oBAAA;AAAA,IACA,YAAA,EAAc;AAAA,GAChB;AACF;;AC3KA,aAAA,EAAc;AAEP,SAAS,aAAa,KAAA,EAAqB;AAChD,EAAA,MAAM,qBAAqB,qBAAA,EAAsB;AACjD,EAAA,IAAI,uBAAuB,UAAA,EAAY;AACrC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,SAAA,EAAU;AAEV,EAAA,MAAM,kBAAkB,cAAA,EAAe;AAGvC,EAAA,MAAM,MAAA,GAAS,kBAAkB,KAAK,CAAA;AACtC,EAAA,MAAM,SAAS,KAAA,CAAM,GAAA;AACrB,EAAA,KAAA,CAAM,GAAA,GAAM,CAAC,IAAA,EAAM,EAAA,EAAI,IAAA,KAAU;AAC/B,IAAA,MAAM,cAAc,cAAA,EAAe;AACnC,IAAA,IAAI,GAAA,GAAM,WAAA;AACV,IAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAW;AAC5B,MAAA,GAAA,IAAO,KAAK,KAAA,CAAM,IAAA,CAAA,CAAA;AAAA,IACpB;AACA,IAAA,GAAA,IAAO,CAAA,EAAA,EAAK,IAAA,CAAA,CAAA;AACZ,IAAA,MAAA,CAAO,GAAA,CAAI,MAAM,GAAG,CAAA;AACpB,IAAA,OAAO,OAAO,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,EAAM,IAAI,IAAI,CAAA;AAAA,EAC1C,CAAA;AAEA,EAAA,IAAI,uBAAuB,cAAA,EAAgB;AACzC,IAAA,oBAAA,CAAqB,OAAO,eAAe,CAAA;AAAA,EAC7C,CAAA,MAAA,IAAW,uBAAuB,UAAA,EAAY;AAC5C,IAAA,gBAAA,CAAiB,OAAO,eAAe,CAAA;AAAA,EACzC;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,cAAA,GAAyB;AAChC,EAAA,MAAM,QAAQC,GAAA,EAAc;AAC5B,EAAA,IAAI,WAAA,GAAc,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA,EAAY;AACvC,EAAA,MAAM,MAAA,GAAS,UAAU,WAAW,CAAA;AACpC,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,EACnD;AACA,EAAA,IAAI,WAAA,CAAY,UAAA,CAAW,SAAS,CAAA,EAAG;AACrC,IAAA,WAAA,GAAc,cAAc,WAAW,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,IAAA,CAAK,QAAA,CAAS,MAAA,EAAQ,WAAW,CAAA;AAC1C;AAKA,eAAsB,iBACpB,IAAA,EACmC;AACnC,EAAA,IAAI,CAAC,eAAA,CAAgB,cAAA,EAAe,EAAG;AACrC,IAAA,OAAA,CAAQ,KAAK,6DAA6D,CAAA;AAE1E,IAAA,OAAO,EAAE,UAAA,EAAY,IAAA,CAAK,QAAA,EAAS;AAAA,EACrC;AAEA,EAAA,OAAO,MAAM,gBAAA,CAAiB,gBAAA,CAAiB,IAAI,CAAA;AACrD;;;;","x_google_ignoreList":[0]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codspeed/tinybench-plugin",
3
- "version": "5.0.0-alpha.1",
3
+ "version": "5.0.0-alpha.2",
4
4
  "description": "tinybench compatibility layer for CodSpeed",
5
5
  "keywords": [
6
6
  "codspeed",
@@ -31,7 +31,7 @@
31
31
  "vitest": "^3.2.4"
32
32
  },
33
33
  "dependencies": {
34
- "@codspeed/core": "^5.0.0-alpha.1",
34
+ "@codspeed/core": "^5.0.0-alpha.2",
35
35
  "stack-trace": "1.0.0-pre2"
36
36
  },
37
37
  "peerDependencies": {