@codspeed/tinybench-plugin 5.0.0-alpha.5 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -76,8 +76,96 @@ function getOrCreateUriMap(bench) {
76
76
  return uriMap;
77
77
  }
78
78
 
79
- function runInstrumentedBench(bench, rootCallingFile) {
80
- const runTaskAsync = async (task, uri) => {
79
+ var __defProp$1 = Object.defineProperty;
80
+ var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
81
+ var __publicField$1 = (obj, key, value) => {
82
+ __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
83
+ return value;
84
+ };
85
+ class BaseBenchRunner {
86
+ constructor(bench, rootCallingFile) {
87
+ __publicField$1(this, "bench");
88
+ __publicField$1(this, "rootCallingFile");
89
+ this.bench = bench;
90
+ this.rootCallingFile = rootCallingFile;
91
+ }
92
+ setupBenchRun() {
93
+ core.setupCore();
94
+ this.logStart();
95
+ }
96
+ logStart() {
97
+ console.log(
98
+ `[CodSpeed] running with @codspeed/tinybench v${"5.0.0"} (${this.getModeName()})`
99
+ );
100
+ }
101
+ getTaskUri(task) {
102
+ return getTaskUri(this.bench, task.name, this.rootCallingFile);
103
+ }
104
+ logTaskCompletion(uri, status) {
105
+ console.log(`[CodSpeed] ${status} ${uri}`);
106
+ }
107
+ finalizeBenchRun() {
108
+ core.teardownCore();
109
+ console.log(`[CodSpeed] Done running ${this.bench.tasks.length} benches.`);
110
+ return this.bench.tasks;
111
+ }
112
+ wrapWithInstrumentHooks(fn, uri) {
113
+ core.InstrumentHooks.startBenchmark();
114
+ const result = fn();
115
+ core.InstrumentHooks.stopBenchmark();
116
+ core.InstrumentHooks.setExecutedBenchmark(process.pid, uri);
117
+ return result;
118
+ }
119
+ async wrapWithInstrumentHooksAsync(fn, uri) {
120
+ core.InstrumentHooks.startBenchmark();
121
+ const result = await fn();
122
+ core.InstrumentHooks.stopBenchmark();
123
+ core.InstrumentHooks.setExecutedBenchmark(process.pid, uri);
124
+ return result;
125
+ }
126
+ setupBenchMethods() {
127
+ this.bench.run = async () => {
128
+ this.setupBenchRun();
129
+ for (const task of this.bench.tasks) {
130
+ const uri = this.getTaskUri(task);
131
+ await this.runTaskAsync(task, uri);
132
+ }
133
+ return this.finalizeAsyncRun();
134
+ };
135
+ this.bench.runSync = () => {
136
+ this.setupBenchRun();
137
+ for (const task of this.bench.tasks) {
138
+ const uri = this.getTaskUri(task);
139
+ this.runTaskSync(task, uri);
140
+ }
141
+ return this.finalizeSyncRun();
142
+ };
143
+ }
144
+ }
145
+
146
+ function setupCodspeedInstrumentedBench(bench, rootCallingFile) {
147
+ const runner = new InstrumentedBenchRunner(bench, rootCallingFile);
148
+ runner.setupBenchMethods();
149
+ }
150
+ class InstrumentedBenchRunner extends BaseBenchRunner {
151
+ getModeName() {
152
+ return "instrumented mode";
153
+ }
154
+ taskCompletionMessage() {
155
+ return core.InstrumentHooks.isInstrumented() ? "Measured" : "Checked";
156
+ }
157
+ wrapFunctionWithFrame(fn, isAsync) {
158
+ if (isAsync) {
159
+ return async function __codspeed_root_frame__() {
160
+ await fn();
161
+ };
162
+ } else {
163
+ return function __codspeed_root_frame__() {
164
+ fn();
165
+ };
166
+ }
167
+ }
168
+ async runTaskAsync(task, uri) {
81
169
  const { fnOpts, fn } = task;
82
170
  await fnOpts?.beforeAll?.call(task, "run");
83
171
  await core.optimizeFunction(async () => {
@@ -87,166 +175,125 @@ function runInstrumentedBench(bench, rootCallingFile) {
87
175
  });
88
176
  await fnOpts?.beforeEach?.call(task, "run");
89
177
  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
- }();
178
+ global.gc?.();
179
+ await this.wrapWithInstrumentHooksAsync(
180
+ this.wrapFunctionWithFrame(fn, true),
181
+ uri
182
+ );
97
183
  await core.mongoMeasurement.stop(uri);
98
184
  await fnOpts?.afterEach?.call(task, "run");
99
185
  await fnOpts?.afterAll?.call(task, "run");
100
- };
101
- const runTaskSync = (task, uri) => {
186
+ this.logTaskCompletion(uri, this.taskCompletionMessage());
187
+ }
188
+ runTaskSync(task, uri) {
102
189
  const { fnOpts, fn } = task;
103
190
  fnOpts?.beforeAll?.call(task, "run");
104
191
  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
- })();
192
+ this.wrapWithInstrumentHooks(this.wrapFunctionWithFrame(fn, false), uri);
112
193
  fnOpts?.afterEach?.call(task, "run");
113
194
  fnOpts?.afterAll?.call(task, "run");
114
- };
115
- bench.run = async () => {
116
- logStart();
117
- for (const task of bench.tasks) {
118
- const uri = getTaskUri(bench, task.name, rootCallingFile);
119
- await runTaskAsync(task, uri);
120
- logTaskCompletion(uri);
121
- }
122
- return logEnd();
123
- };
124
- bench.runSync = () => {
125
- logStart();
126
- for (const task of bench.tasks) {
127
- const uri = getTaskUri(bench, task.name, rootCallingFile);
128
- runTaskSync(task, uri);
129
- logTaskCompletion(uri);
130
- }
131
- return logEnd();
132
- };
133
- const logStart = () => {
134
- console.log(
135
- `[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.5"} (instrumented mode)`
136
- );
137
- };
138
- const logTaskCompletion = (uri) => {
139
- console.log(
140
- ` \u2714 ${core.InstrumentHooks.isInstrumented() ? "Measured" : "Checked"} ${uri}`
141
- );
142
- };
143
- const logEnd = () => {
144
- core.teardownCore();
145
- console.log(`[CodSpeed] Done running ${bench.tasks.length} benches.`);
146
- return bench.tasks;
147
- };
195
+ this.logTaskCompletion(uri, this.taskCompletionMessage());
196
+ }
197
+ finalizeAsyncRun() {
198
+ return this.finalizeBenchRun();
199
+ }
200
+ finalizeSyncRun() {
201
+ return this.finalizeBenchRun();
202
+ }
148
203
  }
149
204
 
150
- function runWalltimeBench(bench, rootCallingFile) {
151
- bench.run = async () => {
152
- logStart();
153
- const codspeedBenchmarks = [];
154
- for (const task of bench.tasks) {
155
- const uri = getTaskUri(bench, task.name, rootCallingFile);
156
- wrapTaskFunction(task, true);
157
- if (bench.opts.warmup) {
158
- await task.warmup();
159
- }
160
- await core.mongoMeasurement.start(uri);
161
- core.InstrumentHooks.startBenchmark();
162
- await task.run();
163
- core.InstrumentHooks.stopBenchmark();
164
- await core.mongoMeasurement.stop(uri);
165
- registerCodspeedBenchmarkFromTask(
166
- codspeedBenchmarks,
167
- task,
168
- bench,
169
- rootCallingFile
170
- );
205
+ var __defProp = Object.defineProperty;
206
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
207
+ var __publicField = (obj, key, value) => {
208
+ __defNormalProp(obj, key + "" , value);
209
+ return value;
210
+ };
211
+ function setupCodspeedWalltimeBench(bench, rootCallingFile) {
212
+ const runner = new WalltimeBenchRunner(bench, rootCallingFile);
213
+ runner.setupBenchMethods();
214
+ }
215
+ class WalltimeBenchRunner extends BaseBenchRunner {
216
+ constructor() {
217
+ super(...arguments);
218
+ __publicField(this, "codspeedBenchmarks", []);
219
+ }
220
+ getModeName() {
221
+ return "walltime mode";
222
+ }
223
+ async runTaskAsync(task, uri) {
224
+ this.wrapTaskFunction(task, true);
225
+ if (this.bench.opts.warmup) {
226
+ await task.warmup();
171
227
  }
172
- return finalizeWalltimeRun(bench, codspeedBenchmarks, true);
173
- };
174
- bench.runSync = () => {
175
- logStart();
176
- const codspeedBenchmarks = [];
177
- for (const task of bench.tasks) {
178
- wrapTaskFunction(task, false);
179
- if (bench.opts.warmup) {
180
- task.warmup();
228
+ await core.mongoMeasurement.start(uri);
229
+ await this.wrapWithInstrumentHooksAsync(() => task.run(), uri);
230
+ await core.mongoMeasurement.stop(uri);
231
+ this.registerCodspeedBenchmarkFromTask(task);
232
+ }
233
+ runTaskSync(task, uri) {
234
+ this.wrapTaskFunction(task, false);
235
+ if (this.bench.opts.warmup) {
236
+ task.warmup();
237
+ }
238
+ this.wrapWithInstrumentHooks(() => task.runSync(), uri);
239
+ this.registerCodspeedBenchmarkFromTask(task);
240
+ }
241
+ finalizeAsyncRun() {
242
+ return this.finalizeWalltimeRun(true);
243
+ }
244
+ finalizeSyncRun() {
245
+ return this.finalizeWalltimeRun(false);
246
+ }
247
+ wrapTaskFunction(task, isAsync) {
248
+ const { fn } = task;
249
+ if (isAsync) {
250
+ async function __codspeed_root_frame__2() {
251
+ await fn();
181
252
  }
182
- core.InstrumentHooks.startBenchmark();
183
- task.runSync();
184
- core.InstrumentHooks.stopBenchmark();
185
- registerCodspeedBenchmarkFromTask(
186
- codspeedBenchmarks,
187
- task,
188
- bench,
189
- rootCallingFile
190
- );
253
+ task.fn = __codspeed_root_frame__2;
254
+ } else {
255
+ let __codspeed_root_frame__2 = function() {
256
+ fn();
257
+ };
258
+ task.fn = __codspeed_root_frame__2;
191
259
  }
192
- return finalizeWalltimeRun(bench, codspeedBenchmarks, false);
193
- };
194
- }
195
- function logStart() {
196
- console.log(
197
- `[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.5"} (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
260
  }
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();
261
+ registerCodspeedBenchmarkFromTask(task) {
262
+ const uri = this.getTaskUri(task);
263
+ if (!task.result) {
264
+ console.warn(` \u26A0 No result data available for ${uri}`);
265
+ return;
232
266
  }
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;
267
+ const warmupIterations = this.bench.opts.warmup ? this.bench.opts.warmupIterations ?? TINYBENCH_WARMUP_DEFAULT : 0;
268
+ const stats = convertTinybenchResultToBenchmarkStats(
269
+ task.result,
270
+ warmupIterations
271
+ );
272
+ this.codspeedBenchmarks.push({
273
+ name: task.name,
274
+ uri,
275
+ config: {
276
+ max_rounds: this.bench.opts.iterations ?? null,
277
+ max_time_ns: this.bench.opts.time ? core.msToNs(this.bench.opts.time) : null,
278
+ min_round_time_ns: null,
279
+ // tinybench does not have an option for this
280
+ warmup_time_ns: this.bench.opts.warmup && this.bench.opts.warmupTime ? core.msToNs(this.bench.opts.warmupTime) : null
281
+ },
282
+ stats
283
+ });
284
+ this.logTaskCompletion(uri, "Collected walltime data for");
239
285
  }
240
- }
241
- function finalizeWalltimeRun(bench, benchmarks, isAsync) {
242
- if (benchmarks.length > 0) {
243
- core.writeWalltimeResults(benchmarks, isAsync);
286
+ finalizeWalltimeRun(isAsync) {
287
+ if (this.codspeedBenchmarks.length > 0) {
288
+ core.writeWalltimeResults(this.codspeedBenchmarks, isAsync);
289
+ }
290
+ console.log(
291
+ `[CodSpeed] Done collecting walltime data for ${this.bench.tasks.length} benches.`
292
+ );
293
+ return this.bench.tasks;
244
294
  }
245
- console.log(
246
- `[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`
247
- );
248
- return bench.tasks;
249
295
  }
296
+ const TINYBENCH_WARMUP_DEFAULT = 16;
250
297
  function convertTinybenchResultToBenchmarkStats(result, warmupIterations) {
251
298
  const { min, max, mean, sd, samples } = result.latency;
252
299
  const sortedTimesNs = samples.map(core.msToNs).sort((a, b) => a - b);
@@ -277,7 +324,6 @@ function withCodSpeed(bench) {
277
324
  if (codspeedRunnerMode === "disabled") {
278
325
  return bench;
279
326
  }
280
- core.setupCore();
281
327
  const rootCallingFile = getCallingFile();
282
328
  const uriMap = getOrCreateUriMap(bench);
283
329
  const rawAdd = bench.add;
@@ -292,9 +338,9 @@ function withCodSpeed(bench) {
292
338
  return rawAdd.bind(bench)(name, fn, opts);
293
339
  };
294
340
  if (codspeedRunnerMode === "instrumented") {
295
- runInstrumentedBench(bench, rootCallingFile);
341
+ setupCodspeedInstrumentedBench(bench, rootCallingFile);
296
342
  } else if (codspeedRunnerMode === "walltime") {
297
- runWalltimeBench(bench, rootCallingFile);
343
+ setupCodspeedWalltimeBench(bench, rootCallingFile);
298
344
  }
299
345
  return bench;
300
346
  }
@@ -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, 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]}
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/shared.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 { InstrumentHooks, setupCore, teardownCore } from \"@codspeed/core\";\nimport { Bench, Fn, Task } from \"tinybench\";\nimport { getTaskUri } from \"./uri\";\n\ndeclare const __VERSION__: string;\n\nexport abstract class BaseBenchRunner {\n protected bench: Bench;\n protected rootCallingFile: string;\n\n constructor(bench: Bench, rootCallingFile: string) {\n this.bench = bench;\n this.rootCallingFile = rootCallingFile;\n }\n\n private setupBenchRun(): void {\n setupCore();\n this.logStart();\n }\n\n private logStart(): void {\n console.log(\n `[CodSpeed] running with @codspeed/tinybench v${__VERSION__} (${this.getModeName()})`\n );\n }\n\n protected getTaskUri(task: Task): string {\n return getTaskUri(this.bench, task.name, this.rootCallingFile);\n }\n\n protected logTaskCompletion(uri: string, status: string): void {\n console.log(`[CodSpeed] ${status} ${uri}`);\n }\n\n protected finalizeBenchRun(): Task[] {\n teardownCore();\n console.log(`[CodSpeed] Done running ${this.bench.tasks.length} benches.`);\n return this.bench.tasks;\n }\n\n protected wrapWithInstrumentHooks<T>(fn: () => T, uri: string): T {\n InstrumentHooks.startBenchmark();\n const result = fn();\n InstrumentHooks.stopBenchmark();\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n return result;\n }\n\n protected async wrapWithInstrumentHooksAsync(\n fn: Fn,\n uri: string\n ): Promise<unknown> {\n InstrumentHooks.startBenchmark();\n const result = await fn();\n InstrumentHooks.stopBenchmark();\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n return result;\n }\n\n protected abstract getModeName(): string;\n protected abstract runTaskAsync(task: Task, uri: string): Promise<void>;\n protected abstract runTaskSync(task: Task, uri: string): void;\n protected abstract finalizeAsyncRun(): Task[];\n protected abstract finalizeSyncRun(): Task[];\n\n public setupBenchMethods(): void {\n this.bench.run = async () => {\n this.setupBenchRun();\n\n for (const task of this.bench.tasks) {\n const uri = this.getTaskUri(task);\n await this.runTaskAsync(task, uri);\n }\n\n return this.finalizeAsyncRun();\n };\n\n this.bench.runSync = () => {\n this.setupBenchRun();\n\n for (const task of this.bench.tasks) {\n const uri = this.getTaskUri(task);\n this.runTaskSync(task, uri);\n }\n\n return this.finalizeSyncRun();\n };\n }\n}\n","import {\n InstrumentHooks,\n mongoMeasurement,\n optimizeFunction,\n} from \"@codspeed/core\";\nimport { Bench, Fn, FnOptions, Task } from \"tinybench\";\nimport { BaseBenchRunner } from \"./shared\";\n\nexport function setupCodspeedInstrumentedBench(\n bench: Bench,\n rootCallingFile: string\n): void {\n const runner = new InstrumentedBenchRunner(bench, rootCallingFile);\n runner.setupBenchMethods();\n}\n\nclass InstrumentedBenchRunner extends BaseBenchRunner {\n protected getModeName(): string {\n return \"instrumented mode\";\n }\n\n private taskCompletionMessage() {\n return InstrumentHooks.isInstrumented() ? \"Measured\" : \"Checked\";\n }\n\n private wrapFunctionWithFrame(fn: Fn, isAsync: boolean): Fn {\n if (isAsync) {\n return async function __codspeed_root_frame__() {\n await fn();\n };\n } else {\n return function __codspeed_root_frame__() {\n fn();\n };\n }\n }\n\n protected async runTaskAsync(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 global.gc?.();\n await this.wrapWithInstrumentHooksAsync(\n this.wrapFunctionWithFrame(fn, true),\n uri\n );\n\n await mongoMeasurement.stop(uri);\n await fnOpts?.afterEach?.call(task, \"run\");\n await fnOpts?.afterAll?.call(task, \"run\");\n\n this.logTaskCompletion(uri, this.taskCompletionMessage());\n }\n\n protected 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 this.wrapWithInstrumentHooks(this.wrapFunctionWithFrame(fn, false), uri);\n\n fnOpts?.afterEach?.call(task, \"run\");\n fnOpts?.afterAll?.call(task, \"run\");\n\n this.logTaskCompletion(uri, this.taskCompletionMessage());\n }\n\n protected finalizeAsyncRun(): Task[] {\n return this.finalizeBenchRun();\n }\n\n protected finalizeSyncRun(): Task[] {\n return this.finalizeBenchRun();\n }\n}\n","import {\n calculateQuantiles,\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 { BaseBenchRunner } from \"./shared\";\n\nexport function setupCodspeedWalltimeBench(\n bench: Bench,\n rootCallingFile: string\n): void {\n const runner = new WalltimeBenchRunner(bench, rootCallingFile);\n runner.setupBenchMethods();\n}\n\nclass WalltimeBenchRunner extends BaseBenchRunner {\n private codspeedBenchmarks: CodspeedBenchmark[] = [];\n\n protected getModeName(): string {\n return \"walltime mode\";\n }\n\n protected async runTaskAsync(task: Task, uri: string): Promise<void> {\n // Override the function under test to add a static frame\n this.wrapTaskFunction(task, true);\n\n // run the warmup of the task right before its actual run\n if (this.bench.opts.warmup) {\n await task.warmup();\n }\n\n await mongoMeasurement.start(uri);\n await this.wrapWithInstrumentHooksAsync(() => task.run(), uri);\n await mongoMeasurement.stop(uri);\n\n this.registerCodspeedBenchmarkFromTask(task);\n }\n\n protected runTaskSync(task: Task, uri: string): void {\n // Override the function under test to add a static frame\n this.wrapTaskFunction(task, false);\n\n if (this.bench.opts.warmup) {\n task.warmup();\n }\n\n this.wrapWithInstrumentHooks(() => task.runSync(), uri);\n\n this.registerCodspeedBenchmarkFromTask(task);\n }\n\n protected finalizeAsyncRun(): Task[] {\n return this.finalizeWalltimeRun(true);\n }\n\n protected finalizeSyncRun(): Task[] {\n return this.finalizeWalltimeRun(false);\n }\n\n private 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\n private registerCodspeedBenchmarkFromTask(task: Task): void {\n const uri = this.getTaskUri(task);\n\n if (!task.result) {\n console.warn(` ⚠ No result data available for ${uri}`);\n return;\n }\n\n const warmupIterations = this.bench.opts.warmup\n ? this.bench.opts.warmupIterations ?? TINYBENCH_WARMUP_DEFAULT\n : 0;\n const stats = convertTinybenchResultToBenchmarkStats(\n task.result,\n warmupIterations\n );\n\n this.codspeedBenchmarks.push({\n name: task.name,\n uri,\n config: {\n max_rounds: this.bench.opts.iterations ?? null,\n max_time_ns: this.bench.opts.time ? msToNs(this.bench.opts.time) : null,\n min_round_time_ns: null, // tinybench does not have an option for this\n warmup_time_ns:\n this.bench.opts.warmup && this.bench.opts.warmupTime\n ? msToNs(this.bench.opts.warmupTime)\n : null,\n },\n stats,\n });\n\n this.logTaskCompletion(uri, \"Collected walltime data for\");\n }\n\n private finalizeWalltimeRun(isAsync: boolean): Task[] {\n // Write results to JSON file using core function\n if (this.codspeedBenchmarks.length > 0) {\n writeWalltimeResults(this.codspeedBenchmarks, isAsync);\n }\n\n console.log(\n `[CodSpeed] Done collecting walltime data for ${this.bench.tasks.length} benches.`\n );\n return this.bench.tasks;\n }\n}\n\nconst TINYBENCH_WARMUP_DEFAULT = 16;\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 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 { setupCodspeedInstrumentedBench } from \"./instrumented\";\nimport { getOrCreateUriMap } from \"./uri\";\nimport { setupCodspeedWalltimeBench } from \"./walltime\";\n\ntryIntrospect();\n\nexport function withCodSpeed(bench: Bench): Bench {\n const codspeedRunnerMode = getCodspeedRunnerMode();\n if (codspeedRunnerMode === \"disabled\") {\n return bench;\n }\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 setupCodspeedInstrumentedBench(bench, rootCallingFile);\n } else if (codspeedRunnerMode === \"walltime\") {\n setupCodspeedWalltimeBench(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":["__publicField","setupCore","teardownCore","InstrumentHooks","optimizeFunction","mongoMeasurement","__codspeed_root_frame__","msToNs","writeWalltimeResults","calculateQuantiles","msToS","tryIntrospect","getCodspeedRunnerMode","getStackTrace","getGitDir","fileURLToPath"],"mappings":"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","x_google_ignoreList":[0]}
package/dist/index.es5.js CHANGED
@@ -1,4 +1,4 @@
1
- import { InstrumentHooks, teardownCore, optimizeFunction, mongoMeasurement, msToNs, writeWalltimeResults, calculateQuantiles, msToS, tryIntrospect, getCodspeedRunnerMode, setupCore, getGitDir } from '@codspeed/core';
1
+ import { setupCore, teardownCore, InstrumentHooks, optimizeFunction, mongoMeasurement, msToNs, writeWalltimeResults, calculateQuantiles, msToS, tryIntrospect, getCodspeedRunnerMode, getGitDir } from '@codspeed/core';
2
2
  import path from 'path';
3
3
  import { fileURLToPath } from 'url';
4
4
 
@@ -74,8 +74,96 @@ function getOrCreateUriMap(bench) {
74
74
  return uriMap;
75
75
  }
76
76
 
77
- function runInstrumentedBench(bench, rootCallingFile) {
78
- const runTaskAsync = async (task, uri) => {
77
+ var __defProp$1 = Object.defineProperty;
78
+ var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
79
+ var __publicField$1 = (obj, key, value) => {
80
+ __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
81
+ return value;
82
+ };
83
+ class BaseBenchRunner {
84
+ constructor(bench, rootCallingFile) {
85
+ __publicField$1(this, "bench");
86
+ __publicField$1(this, "rootCallingFile");
87
+ this.bench = bench;
88
+ this.rootCallingFile = rootCallingFile;
89
+ }
90
+ setupBenchRun() {
91
+ setupCore();
92
+ this.logStart();
93
+ }
94
+ logStart() {
95
+ console.log(
96
+ `[CodSpeed] running with @codspeed/tinybench v${"5.0.0"} (${this.getModeName()})`
97
+ );
98
+ }
99
+ getTaskUri(task) {
100
+ return getTaskUri(this.bench, task.name, this.rootCallingFile);
101
+ }
102
+ logTaskCompletion(uri, status) {
103
+ console.log(`[CodSpeed] ${status} ${uri}`);
104
+ }
105
+ finalizeBenchRun() {
106
+ teardownCore();
107
+ console.log(`[CodSpeed] Done running ${this.bench.tasks.length} benches.`);
108
+ return this.bench.tasks;
109
+ }
110
+ wrapWithInstrumentHooks(fn, uri) {
111
+ InstrumentHooks.startBenchmark();
112
+ const result = fn();
113
+ InstrumentHooks.stopBenchmark();
114
+ InstrumentHooks.setExecutedBenchmark(process.pid, uri);
115
+ return result;
116
+ }
117
+ async wrapWithInstrumentHooksAsync(fn, uri) {
118
+ InstrumentHooks.startBenchmark();
119
+ const result = await fn();
120
+ InstrumentHooks.stopBenchmark();
121
+ InstrumentHooks.setExecutedBenchmark(process.pid, uri);
122
+ return result;
123
+ }
124
+ setupBenchMethods() {
125
+ this.bench.run = async () => {
126
+ this.setupBenchRun();
127
+ for (const task of this.bench.tasks) {
128
+ const uri = this.getTaskUri(task);
129
+ await this.runTaskAsync(task, uri);
130
+ }
131
+ return this.finalizeAsyncRun();
132
+ };
133
+ this.bench.runSync = () => {
134
+ this.setupBenchRun();
135
+ for (const task of this.bench.tasks) {
136
+ const uri = this.getTaskUri(task);
137
+ this.runTaskSync(task, uri);
138
+ }
139
+ return this.finalizeSyncRun();
140
+ };
141
+ }
142
+ }
143
+
144
+ function setupCodspeedInstrumentedBench(bench, rootCallingFile) {
145
+ const runner = new InstrumentedBenchRunner(bench, rootCallingFile);
146
+ runner.setupBenchMethods();
147
+ }
148
+ class InstrumentedBenchRunner extends BaseBenchRunner {
149
+ getModeName() {
150
+ return "instrumented mode";
151
+ }
152
+ taskCompletionMessage() {
153
+ return InstrumentHooks.isInstrumented() ? "Measured" : "Checked";
154
+ }
155
+ wrapFunctionWithFrame(fn, isAsync) {
156
+ if (isAsync) {
157
+ return async function __codspeed_root_frame__() {
158
+ await fn();
159
+ };
160
+ } else {
161
+ return function __codspeed_root_frame__() {
162
+ fn();
163
+ };
164
+ }
165
+ }
166
+ async runTaskAsync(task, uri) {
79
167
  const { fnOpts, fn } = task;
80
168
  await fnOpts?.beforeAll?.call(task, "run");
81
169
  await optimizeFunction(async () => {
@@ -85,166 +173,125 @@ function runInstrumentedBench(bench, rootCallingFile) {
85
173
  });
86
174
  await fnOpts?.beforeEach?.call(task, "run");
87
175
  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
- }();
176
+ global.gc?.();
177
+ await this.wrapWithInstrumentHooksAsync(
178
+ this.wrapFunctionWithFrame(fn, true),
179
+ uri
180
+ );
95
181
  await mongoMeasurement.stop(uri);
96
182
  await fnOpts?.afterEach?.call(task, "run");
97
183
  await fnOpts?.afterAll?.call(task, "run");
98
- };
99
- const runTaskSync = (task, uri) => {
184
+ this.logTaskCompletion(uri, this.taskCompletionMessage());
185
+ }
186
+ runTaskSync(task, uri) {
100
187
  const { fnOpts, fn } = task;
101
188
  fnOpts?.beforeAll?.call(task, "run");
102
189
  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
- })();
190
+ this.wrapWithInstrumentHooks(this.wrapFunctionWithFrame(fn, false), uri);
110
191
  fnOpts?.afterEach?.call(task, "run");
111
192
  fnOpts?.afterAll?.call(task, "run");
112
- };
113
- bench.run = async () => {
114
- logStart();
115
- for (const task of bench.tasks) {
116
- const uri = getTaskUri(bench, task.name, rootCallingFile);
117
- await runTaskAsync(task, uri);
118
- logTaskCompletion(uri);
119
- }
120
- return logEnd();
121
- };
122
- bench.runSync = () => {
123
- logStart();
124
- for (const task of bench.tasks) {
125
- const uri = getTaskUri(bench, task.name, rootCallingFile);
126
- runTaskSync(task, uri);
127
- logTaskCompletion(uri);
128
- }
129
- return logEnd();
130
- };
131
- const logStart = () => {
132
- console.log(
133
- `[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.5"} (instrumented mode)`
134
- );
135
- };
136
- const logTaskCompletion = (uri) => {
137
- console.log(
138
- ` \u2714 ${InstrumentHooks.isInstrumented() ? "Measured" : "Checked"} ${uri}`
139
- );
140
- };
141
- const logEnd = () => {
142
- teardownCore();
143
- console.log(`[CodSpeed] Done running ${bench.tasks.length} benches.`);
144
- return bench.tasks;
145
- };
193
+ this.logTaskCompletion(uri, this.taskCompletionMessage());
194
+ }
195
+ finalizeAsyncRun() {
196
+ return this.finalizeBenchRun();
197
+ }
198
+ finalizeSyncRun() {
199
+ return this.finalizeBenchRun();
200
+ }
146
201
  }
147
202
 
148
- function runWalltimeBench(bench, rootCallingFile) {
149
- bench.run = async () => {
150
- logStart();
151
- const codspeedBenchmarks = [];
152
- for (const task of bench.tasks) {
153
- const uri = getTaskUri(bench, task.name, rootCallingFile);
154
- wrapTaskFunction(task, true);
155
- if (bench.opts.warmup) {
156
- await task.warmup();
157
- }
158
- await mongoMeasurement.start(uri);
159
- InstrumentHooks.startBenchmark();
160
- await task.run();
161
- InstrumentHooks.stopBenchmark();
162
- await mongoMeasurement.stop(uri);
163
- registerCodspeedBenchmarkFromTask(
164
- codspeedBenchmarks,
165
- task,
166
- bench,
167
- rootCallingFile
168
- );
203
+ var __defProp = Object.defineProperty;
204
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
205
+ var __publicField = (obj, key, value) => {
206
+ __defNormalProp(obj, key + "" , value);
207
+ return value;
208
+ };
209
+ function setupCodspeedWalltimeBench(bench, rootCallingFile) {
210
+ const runner = new WalltimeBenchRunner(bench, rootCallingFile);
211
+ runner.setupBenchMethods();
212
+ }
213
+ class WalltimeBenchRunner extends BaseBenchRunner {
214
+ constructor() {
215
+ super(...arguments);
216
+ __publicField(this, "codspeedBenchmarks", []);
217
+ }
218
+ getModeName() {
219
+ return "walltime mode";
220
+ }
221
+ async runTaskAsync(task, uri) {
222
+ this.wrapTaskFunction(task, true);
223
+ if (this.bench.opts.warmup) {
224
+ await task.warmup();
169
225
  }
170
- return finalizeWalltimeRun(bench, codspeedBenchmarks, true);
171
- };
172
- bench.runSync = () => {
173
- logStart();
174
- const codspeedBenchmarks = [];
175
- for (const task of bench.tasks) {
176
- wrapTaskFunction(task, false);
177
- if (bench.opts.warmup) {
178
- task.warmup();
226
+ await mongoMeasurement.start(uri);
227
+ await this.wrapWithInstrumentHooksAsync(() => task.run(), uri);
228
+ await mongoMeasurement.stop(uri);
229
+ this.registerCodspeedBenchmarkFromTask(task);
230
+ }
231
+ runTaskSync(task, uri) {
232
+ this.wrapTaskFunction(task, false);
233
+ if (this.bench.opts.warmup) {
234
+ task.warmup();
235
+ }
236
+ this.wrapWithInstrumentHooks(() => task.runSync(), uri);
237
+ this.registerCodspeedBenchmarkFromTask(task);
238
+ }
239
+ finalizeAsyncRun() {
240
+ return this.finalizeWalltimeRun(true);
241
+ }
242
+ finalizeSyncRun() {
243
+ return this.finalizeWalltimeRun(false);
244
+ }
245
+ wrapTaskFunction(task, isAsync) {
246
+ const { fn } = task;
247
+ if (isAsync) {
248
+ async function __codspeed_root_frame__2() {
249
+ await fn();
179
250
  }
180
- InstrumentHooks.startBenchmark();
181
- task.runSync();
182
- InstrumentHooks.stopBenchmark();
183
- registerCodspeedBenchmarkFromTask(
184
- codspeedBenchmarks,
185
- task,
186
- bench,
187
- rootCallingFile
188
- );
251
+ task.fn = __codspeed_root_frame__2;
252
+ } else {
253
+ let __codspeed_root_frame__2 = function() {
254
+ fn();
255
+ };
256
+ task.fn = __codspeed_root_frame__2;
189
257
  }
190
- return finalizeWalltimeRun(bench, codspeedBenchmarks, false);
191
- };
192
- }
193
- function logStart() {
194
- console.log(
195
- `[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.5"} (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
258
  }
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();
259
+ registerCodspeedBenchmarkFromTask(task) {
260
+ const uri = this.getTaskUri(task);
261
+ if (!task.result) {
262
+ console.warn(` \u26A0 No result data available for ${uri}`);
263
+ return;
230
264
  }
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;
265
+ const warmupIterations = this.bench.opts.warmup ? this.bench.opts.warmupIterations ?? TINYBENCH_WARMUP_DEFAULT : 0;
266
+ const stats = convertTinybenchResultToBenchmarkStats(
267
+ task.result,
268
+ warmupIterations
269
+ );
270
+ this.codspeedBenchmarks.push({
271
+ name: task.name,
272
+ uri,
273
+ config: {
274
+ max_rounds: this.bench.opts.iterations ?? null,
275
+ max_time_ns: this.bench.opts.time ? msToNs(this.bench.opts.time) : null,
276
+ min_round_time_ns: null,
277
+ // tinybench does not have an option for this
278
+ warmup_time_ns: this.bench.opts.warmup && this.bench.opts.warmupTime ? msToNs(this.bench.opts.warmupTime) : null
279
+ },
280
+ stats
281
+ });
282
+ this.logTaskCompletion(uri, "Collected walltime data for");
237
283
  }
238
- }
239
- function finalizeWalltimeRun(bench, benchmarks, isAsync) {
240
- if (benchmarks.length > 0) {
241
- writeWalltimeResults(benchmarks, isAsync);
284
+ finalizeWalltimeRun(isAsync) {
285
+ if (this.codspeedBenchmarks.length > 0) {
286
+ writeWalltimeResults(this.codspeedBenchmarks, isAsync);
287
+ }
288
+ console.log(
289
+ `[CodSpeed] Done collecting walltime data for ${this.bench.tasks.length} benches.`
290
+ );
291
+ return this.bench.tasks;
242
292
  }
243
- console.log(
244
- `[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`
245
- );
246
- return bench.tasks;
247
293
  }
294
+ const TINYBENCH_WARMUP_DEFAULT = 16;
248
295
  function convertTinybenchResultToBenchmarkStats(result, warmupIterations) {
249
296
  const { min, max, mean, sd, samples } = result.latency;
250
297
  const sortedTimesNs = samples.map(msToNs).sort((a, b) => a - b);
@@ -275,7 +322,6 @@ function withCodSpeed(bench) {
275
322
  if (codspeedRunnerMode === "disabled") {
276
323
  return bench;
277
324
  }
278
- setupCore();
279
325
  const rootCallingFile = getCallingFile();
280
326
  const uriMap = getOrCreateUriMap(bench);
281
327
  const rawAdd = bench.add;
@@ -290,9 +336,9 @@ function withCodSpeed(bench) {
290
336
  return rawAdd.bind(bench)(name, fn, opts);
291
337
  };
292
338
  if (codspeedRunnerMode === "instrumented") {
293
- runInstrumentedBench(bench, rootCallingFile);
339
+ setupCodspeedInstrumentedBench(bench, rootCallingFile);
294
340
  } else if (codspeedRunnerMode === "walltime") {
295
- runWalltimeBench(bench, rootCallingFile);
341
+ setupCodspeedWalltimeBench(bench, rootCallingFile);
296
342
  }
297
343
  return bench;
298
344
  }
@@ -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, 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":"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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/shared.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 { InstrumentHooks, setupCore, teardownCore } from \"@codspeed/core\";\nimport { Bench, Fn, Task } from \"tinybench\";\nimport { getTaskUri } from \"./uri\";\n\ndeclare const __VERSION__: string;\n\nexport abstract class BaseBenchRunner {\n protected bench: Bench;\n protected rootCallingFile: string;\n\n constructor(bench: Bench, rootCallingFile: string) {\n this.bench = bench;\n this.rootCallingFile = rootCallingFile;\n }\n\n private setupBenchRun(): void {\n setupCore();\n this.logStart();\n }\n\n private logStart(): void {\n console.log(\n `[CodSpeed] running with @codspeed/tinybench v${__VERSION__} (${this.getModeName()})`\n );\n }\n\n protected getTaskUri(task: Task): string {\n return getTaskUri(this.bench, task.name, this.rootCallingFile);\n }\n\n protected logTaskCompletion(uri: string, status: string): void {\n console.log(`[CodSpeed] ${status} ${uri}`);\n }\n\n protected finalizeBenchRun(): Task[] {\n teardownCore();\n console.log(`[CodSpeed] Done running ${this.bench.tasks.length} benches.`);\n return this.bench.tasks;\n }\n\n protected wrapWithInstrumentHooks<T>(fn: () => T, uri: string): T {\n InstrumentHooks.startBenchmark();\n const result = fn();\n InstrumentHooks.stopBenchmark();\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n return result;\n }\n\n protected async wrapWithInstrumentHooksAsync(\n fn: Fn,\n uri: string\n ): Promise<unknown> {\n InstrumentHooks.startBenchmark();\n const result = await fn();\n InstrumentHooks.stopBenchmark();\n InstrumentHooks.setExecutedBenchmark(process.pid, uri);\n return result;\n }\n\n protected abstract getModeName(): string;\n protected abstract runTaskAsync(task: Task, uri: string): Promise<void>;\n protected abstract runTaskSync(task: Task, uri: string): void;\n protected abstract finalizeAsyncRun(): Task[];\n protected abstract finalizeSyncRun(): Task[];\n\n public setupBenchMethods(): void {\n this.bench.run = async () => {\n this.setupBenchRun();\n\n for (const task of this.bench.tasks) {\n const uri = this.getTaskUri(task);\n await this.runTaskAsync(task, uri);\n }\n\n return this.finalizeAsyncRun();\n };\n\n this.bench.runSync = () => {\n this.setupBenchRun();\n\n for (const task of this.bench.tasks) {\n const uri = this.getTaskUri(task);\n this.runTaskSync(task, uri);\n }\n\n return this.finalizeSyncRun();\n };\n }\n}\n","import {\n InstrumentHooks,\n mongoMeasurement,\n optimizeFunction,\n} from \"@codspeed/core\";\nimport { Bench, Fn, FnOptions, Task } from \"tinybench\";\nimport { BaseBenchRunner } from \"./shared\";\n\nexport function setupCodspeedInstrumentedBench(\n bench: Bench,\n rootCallingFile: string\n): void {\n const runner = new InstrumentedBenchRunner(bench, rootCallingFile);\n runner.setupBenchMethods();\n}\n\nclass InstrumentedBenchRunner extends BaseBenchRunner {\n protected getModeName(): string {\n return \"instrumented mode\";\n }\n\n private taskCompletionMessage() {\n return InstrumentHooks.isInstrumented() ? \"Measured\" : \"Checked\";\n }\n\n private wrapFunctionWithFrame(fn: Fn, isAsync: boolean): Fn {\n if (isAsync) {\n return async function __codspeed_root_frame__() {\n await fn();\n };\n } else {\n return function __codspeed_root_frame__() {\n fn();\n };\n }\n }\n\n protected async runTaskAsync(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 global.gc?.();\n await this.wrapWithInstrumentHooksAsync(\n this.wrapFunctionWithFrame(fn, true),\n uri\n );\n\n await mongoMeasurement.stop(uri);\n await fnOpts?.afterEach?.call(task, \"run\");\n await fnOpts?.afterAll?.call(task, \"run\");\n\n this.logTaskCompletion(uri, this.taskCompletionMessage());\n }\n\n protected 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 this.wrapWithInstrumentHooks(this.wrapFunctionWithFrame(fn, false), uri);\n\n fnOpts?.afterEach?.call(task, \"run\");\n fnOpts?.afterAll?.call(task, \"run\");\n\n this.logTaskCompletion(uri, this.taskCompletionMessage());\n }\n\n protected finalizeAsyncRun(): Task[] {\n return this.finalizeBenchRun();\n }\n\n protected finalizeSyncRun(): Task[] {\n return this.finalizeBenchRun();\n }\n}\n","import {\n calculateQuantiles,\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 { BaseBenchRunner } from \"./shared\";\n\nexport function setupCodspeedWalltimeBench(\n bench: Bench,\n rootCallingFile: string\n): void {\n const runner = new WalltimeBenchRunner(bench, rootCallingFile);\n runner.setupBenchMethods();\n}\n\nclass WalltimeBenchRunner extends BaseBenchRunner {\n private codspeedBenchmarks: CodspeedBenchmark[] = [];\n\n protected getModeName(): string {\n return \"walltime mode\";\n }\n\n protected async runTaskAsync(task: Task, uri: string): Promise<void> {\n // Override the function under test to add a static frame\n this.wrapTaskFunction(task, true);\n\n // run the warmup of the task right before its actual run\n if (this.bench.opts.warmup) {\n await task.warmup();\n }\n\n await mongoMeasurement.start(uri);\n await this.wrapWithInstrumentHooksAsync(() => task.run(), uri);\n await mongoMeasurement.stop(uri);\n\n this.registerCodspeedBenchmarkFromTask(task);\n }\n\n protected runTaskSync(task: Task, uri: string): void {\n // Override the function under test to add a static frame\n this.wrapTaskFunction(task, false);\n\n if (this.bench.opts.warmup) {\n task.warmup();\n }\n\n this.wrapWithInstrumentHooks(() => task.runSync(), uri);\n\n this.registerCodspeedBenchmarkFromTask(task);\n }\n\n protected finalizeAsyncRun(): Task[] {\n return this.finalizeWalltimeRun(true);\n }\n\n protected finalizeSyncRun(): Task[] {\n return this.finalizeWalltimeRun(false);\n }\n\n private 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\n private registerCodspeedBenchmarkFromTask(task: Task): void {\n const uri = this.getTaskUri(task);\n\n if (!task.result) {\n console.warn(` ⚠ No result data available for ${uri}`);\n return;\n }\n\n const warmupIterations = this.bench.opts.warmup\n ? this.bench.opts.warmupIterations ?? TINYBENCH_WARMUP_DEFAULT\n : 0;\n const stats = convertTinybenchResultToBenchmarkStats(\n task.result,\n warmupIterations\n );\n\n this.codspeedBenchmarks.push({\n name: task.name,\n uri,\n config: {\n max_rounds: this.bench.opts.iterations ?? null,\n max_time_ns: this.bench.opts.time ? msToNs(this.bench.opts.time) : null,\n min_round_time_ns: null, // tinybench does not have an option for this\n warmup_time_ns:\n this.bench.opts.warmup && this.bench.opts.warmupTime\n ? msToNs(this.bench.opts.warmupTime)\n : null,\n },\n stats,\n });\n\n this.logTaskCompletion(uri, \"Collected walltime data for\");\n }\n\n private finalizeWalltimeRun(isAsync: boolean): Task[] {\n // Write results to JSON file using core function\n if (this.codspeedBenchmarks.length > 0) {\n writeWalltimeResults(this.codspeedBenchmarks, isAsync);\n }\n\n console.log(\n `[CodSpeed] Done collecting walltime data for ${this.bench.tasks.length} benches.`\n );\n return this.bench.tasks;\n }\n}\n\nconst TINYBENCH_WARMUP_DEFAULT = 16;\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 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 { setupCodspeedInstrumentedBench } from \"./instrumented\";\nimport { getOrCreateUriMap } from \"./uri\";\nimport { setupCodspeedWalltimeBench } from \"./walltime\";\n\ntryIntrospect();\n\nexport function withCodSpeed(bench: Bench): Bench {\n const codspeedRunnerMode = getCodspeedRunnerMode();\n if (codspeedRunnerMode === \"disabled\") {\n return bench;\n }\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 setupCodspeedInstrumentedBench(bench, rootCallingFile);\n } else if (codspeedRunnerMode === \"walltime\") {\n setupCodspeedWalltimeBench(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":["__publicField","__codspeed_root_frame__","getStackTrace"],"mappings":"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","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.5",
3
+ "version": "5.0.0",
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.5",
34
+ "@codspeed/core": "^5.0.0",
35
35
  "stack-trace": "1.0.0-pre2"
36
36
  },
37
37
  "peerDependencies": {