@codspeed/tinybench-plugin 5.0.0-alpha.0 → 5.0.0-alpha.1
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 +105 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.es5.js +106 -12
- package/dist/index.es5.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -79,9 +79,8 @@ function getOrCreateUriMap(bench) {
|
|
|
79
79
|
function runInstrumentedBench(bench, rootCallingFile) {
|
|
80
80
|
bench.run = async () => {
|
|
81
81
|
console.log(
|
|
82
|
-
`[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.
|
|
82
|
+
`[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.1"} (instrumented mode)`
|
|
83
83
|
);
|
|
84
|
-
core.setupCore();
|
|
85
84
|
for (const task of bench.tasks) {
|
|
86
85
|
const uri = getTaskUri(bench, task.name, rootCallingFile);
|
|
87
86
|
const { fnOpts, fn } = task;
|
|
@@ -95,15 +94,48 @@ function runInstrumentedBench(bench, rootCallingFile) {
|
|
|
95
94
|
await core.mongoMeasurement.start(uri);
|
|
96
95
|
global.gc?.();
|
|
97
96
|
await async function __codspeed_root_frame__() {
|
|
98
|
-
core.
|
|
97
|
+
core.InstrumentHooks.startBenchmark();
|
|
99
98
|
await fn();
|
|
100
|
-
core.
|
|
99
|
+
core.InstrumentHooks.stopBenchmark();
|
|
100
|
+
core.InstrumentHooks.setExecutedBenchmark(process.pid, uri);
|
|
101
101
|
}();
|
|
102
102
|
await core.mongoMeasurement.stop(uri);
|
|
103
103
|
await fnOpts?.afterEach?.call(task, "run");
|
|
104
104
|
await fnOpts?.afterAll?.call(task, "run");
|
|
105
105
|
console.log(
|
|
106
|
-
` \u2714 ${core.
|
|
106
|
+
` \u2714 ${core.InstrumentHooks.isInstrumented() ? "Measured" : "Checked"} ${uri}`
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
core.teardownCore();
|
|
110
|
+
console.log(`[CodSpeed] Done running ${bench.tasks.length} benches.`);
|
|
111
|
+
return bench.tasks;
|
|
112
|
+
};
|
|
113
|
+
bench.runSync = () => {
|
|
114
|
+
console.log(
|
|
115
|
+
`[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.1"} (instrumented mode)`
|
|
116
|
+
);
|
|
117
|
+
for (const task of bench.tasks) {
|
|
118
|
+
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}`
|
|
107
139
|
);
|
|
108
140
|
}
|
|
109
141
|
core.teardownCore();
|
|
@@ -115,23 +147,28 @@ function runInstrumentedBench(bench, rootCallingFile) {
|
|
|
115
147
|
function runWalltimeBench(bench, rootCallingFile) {
|
|
116
148
|
bench.run = async () => {
|
|
117
149
|
console.log(
|
|
118
|
-
`[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.
|
|
150
|
+
`[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.1"} (walltime mode)`
|
|
119
151
|
);
|
|
120
152
|
const originalRun = bench.run;
|
|
121
153
|
const benchProto = Object.getPrototypeOf(bench);
|
|
122
154
|
const prototypeRun = benchProto.run;
|
|
123
155
|
bench.run = prototypeRun;
|
|
124
156
|
const benchmarks = [];
|
|
125
|
-
const results = [];
|
|
126
157
|
for (const task of bench.tasks) {
|
|
127
158
|
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__;
|
|
128
164
|
if (bench.opts.warmup) {
|
|
129
165
|
await task.warmup();
|
|
130
166
|
}
|
|
131
167
|
await core.mongoMeasurement.start(uri);
|
|
132
|
-
|
|
168
|
+
core.InstrumentHooks.startBenchmark();
|
|
169
|
+
await task.run();
|
|
170
|
+
core.InstrumentHooks.stopBenchmark();
|
|
133
171
|
await core.mongoMeasurement.stop(uri);
|
|
134
|
-
results.push(taskResult);
|
|
135
172
|
if (task.result) {
|
|
136
173
|
const stats = convertTinybenchResultToBenchmarkStats(
|
|
137
174
|
task.result,
|
|
@@ -151,6 +188,62 @@ function runWalltimeBench(bench, rootCallingFile) {
|
|
|
151
188
|
};
|
|
152
189
|
benchmarks.push(benchmark);
|
|
153
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);
|
|
198
|
+
}
|
|
199
|
+
console.log(
|
|
200
|
+
`[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`
|
|
201
|
+
);
|
|
202
|
+
bench.run = originalRun;
|
|
203
|
+
return bench.tasks;
|
|
204
|
+
};
|
|
205
|
+
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 = [];
|
|
214
|
+
for (const task of bench.tasks) {
|
|
215
|
+
let __codspeed_root_frame__2 = function() {
|
|
216
|
+
fn();
|
|
217
|
+
};
|
|
218
|
+
const uri = getTaskUri(bench, task.name, rootCallingFile);
|
|
219
|
+
if (bench.opts.warmup) {
|
|
220
|
+
task.warmup();
|
|
221
|
+
}
|
|
222
|
+
const { fn } = task;
|
|
223
|
+
task.fn = __codspeed_root_frame__2;
|
|
224
|
+
core.InstrumentHooks.startBenchmark();
|
|
225
|
+
task.runSync();
|
|
226
|
+
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);
|
|
154
247
|
} else {
|
|
155
248
|
console.warn(` \u26A0 No result data available for ${uri}`);
|
|
156
249
|
}
|
|
@@ -162,7 +255,7 @@ function runWalltimeBench(bench, rootCallingFile) {
|
|
|
162
255
|
`[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`
|
|
163
256
|
);
|
|
164
257
|
bench.run = originalRun;
|
|
165
|
-
return
|
|
258
|
+
return bench.tasks;
|
|
166
259
|
};
|
|
167
260
|
}
|
|
168
261
|
function convertTinybenchResultToBenchmarkStats(result, warmupIterations) {
|
|
@@ -195,6 +288,7 @@ function withCodSpeed(bench) {
|
|
|
195
288
|
if (codspeedRunnerMode === "disabled") {
|
|
196
289
|
return bench;
|
|
197
290
|
}
|
|
291
|
+
core.setupCore();
|
|
198
292
|
const rootCallingFile = getCallingFile();
|
|
199
293
|
const uriMap = getOrCreateUriMap(bench);
|
|
200
294
|
const rawAdd = bench.add;
|
|
@@ -228,7 +322,7 @@ function getCallingFile() {
|
|
|
228
322
|
return path.relative(gitDir, callingFile);
|
|
229
323
|
}
|
|
230
324
|
async function setupInstruments(body) {
|
|
231
|
-
if (!core.
|
|
325
|
+
if (!core.InstrumentHooks.isInstrumented()) {
|
|
232
326
|
console.warn("[CodSpeed] No instrumentation found, using default mongoUrl");
|
|
233
327
|
return { remoteAddr: body.mongoUrl };
|
|
234
328
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -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 Measurement,\n mongoMeasurement,\n optimizeFunction,\n setupCore,\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 setupCore();\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 Measurement.startInstrumentation();\n await fn();\n Measurement.stopInstrumentation(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 ` ✔ ${Measurement.isInstrumented() ? \"Measured\" : \"Checked\"} ${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 mongoMeasurement,\n msToNs,\n msToS,\n writeWalltimeResults,\n type Benchmark,\n type BenchmarkStats,\n} from \"@codspeed/core\";\nimport { Bench, 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 // Run the bench naturally to collect TaskResult data\n const results = [];\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 await task.warmup();\n }\n await mongoMeasurement.start(uri);\n const taskResult = await task.run();\n await mongoMeasurement.stop(uri);\n results.push(taskResult);\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\n console.log(` ✔ Collected walltime data for ${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 results;\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 Measurement,\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 { 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\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 (!Measurement.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":["setupCore","optimizeFunction","mongoMeasurement","Measurement","teardownCore","msToNs","writeWalltimeResults","calculateQuantiles","msToS","tryIntrospect","getCodspeedRunnerMode","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 } 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]}
|
package/dist/index.es5.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { optimizeFunction, mongoMeasurement, InstrumentHooks, teardownCore, 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
|
|
|
@@ -77,9 +77,8 @@ function getOrCreateUriMap(bench) {
|
|
|
77
77
|
function runInstrumentedBench(bench, rootCallingFile) {
|
|
78
78
|
bench.run = async () => {
|
|
79
79
|
console.log(
|
|
80
|
-
`[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.
|
|
80
|
+
`[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.1"} (instrumented mode)`
|
|
81
81
|
);
|
|
82
|
-
setupCore();
|
|
83
82
|
for (const task of bench.tasks) {
|
|
84
83
|
const uri = getTaskUri(bench, task.name, rootCallingFile);
|
|
85
84
|
const { fnOpts, fn } = task;
|
|
@@ -93,15 +92,48 @@ function runInstrumentedBench(bench, rootCallingFile) {
|
|
|
93
92
|
await mongoMeasurement.start(uri);
|
|
94
93
|
global.gc?.();
|
|
95
94
|
await async function __codspeed_root_frame__() {
|
|
96
|
-
|
|
95
|
+
InstrumentHooks.startBenchmark();
|
|
97
96
|
await fn();
|
|
98
|
-
|
|
97
|
+
InstrumentHooks.stopBenchmark();
|
|
98
|
+
InstrumentHooks.setExecutedBenchmark(process.pid, uri);
|
|
99
99
|
}();
|
|
100
100
|
await mongoMeasurement.stop(uri);
|
|
101
101
|
await fnOpts?.afterEach?.call(task, "run");
|
|
102
102
|
await fnOpts?.afterAll?.call(task, "run");
|
|
103
103
|
console.log(
|
|
104
|
-
` \u2714 ${
|
|
104
|
+
` \u2714 ${InstrumentHooks.isInstrumented() ? "Measured" : "Checked"} ${uri}`
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
teardownCore();
|
|
108
|
+
console.log(`[CodSpeed] Done running ${bench.tasks.length} benches.`);
|
|
109
|
+
return bench.tasks;
|
|
110
|
+
};
|
|
111
|
+
bench.runSync = () => {
|
|
112
|
+
console.log(
|
|
113
|
+
`[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.1"} (instrumented mode)`
|
|
114
|
+
);
|
|
115
|
+
for (const task of bench.tasks) {
|
|
116
|
+
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}`
|
|
105
137
|
);
|
|
106
138
|
}
|
|
107
139
|
teardownCore();
|
|
@@ -113,23 +145,28 @@ function runInstrumentedBench(bench, rootCallingFile) {
|
|
|
113
145
|
function runWalltimeBench(bench, rootCallingFile) {
|
|
114
146
|
bench.run = async () => {
|
|
115
147
|
console.log(
|
|
116
|
-
`[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.
|
|
148
|
+
`[CodSpeed] running with @codspeed/tinybench v${"5.0.0-alpha.1"} (walltime mode)`
|
|
117
149
|
);
|
|
118
150
|
const originalRun = bench.run;
|
|
119
151
|
const benchProto = Object.getPrototypeOf(bench);
|
|
120
152
|
const prototypeRun = benchProto.run;
|
|
121
153
|
bench.run = prototypeRun;
|
|
122
154
|
const benchmarks = [];
|
|
123
|
-
const results = [];
|
|
124
155
|
for (const task of bench.tasks) {
|
|
125
156
|
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__;
|
|
126
162
|
if (bench.opts.warmup) {
|
|
127
163
|
await task.warmup();
|
|
128
164
|
}
|
|
129
165
|
await mongoMeasurement.start(uri);
|
|
130
|
-
|
|
166
|
+
InstrumentHooks.startBenchmark();
|
|
167
|
+
await task.run();
|
|
168
|
+
InstrumentHooks.stopBenchmark();
|
|
131
169
|
await mongoMeasurement.stop(uri);
|
|
132
|
-
results.push(taskResult);
|
|
133
170
|
if (task.result) {
|
|
134
171
|
const stats = convertTinybenchResultToBenchmarkStats(
|
|
135
172
|
task.result,
|
|
@@ -149,6 +186,62 @@ function runWalltimeBench(bench, rootCallingFile) {
|
|
|
149
186
|
};
|
|
150
187
|
benchmarks.push(benchmark);
|
|
151
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);
|
|
196
|
+
}
|
|
197
|
+
console.log(
|
|
198
|
+
`[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`
|
|
199
|
+
);
|
|
200
|
+
bench.run = originalRun;
|
|
201
|
+
return bench.tasks;
|
|
202
|
+
};
|
|
203
|
+
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 = [];
|
|
212
|
+
for (const task of bench.tasks) {
|
|
213
|
+
let __codspeed_root_frame__2 = function() {
|
|
214
|
+
fn();
|
|
215
|
+
};
|
|
216
|
+
const uri = getTaskUri(bench, task.name, rootCallingFile);
|
|
217
|
+
if (bench.opts.warmup) {
|
|
218
|
+
task.warmup();
|
|
219
|
+
}
|
|
220
|
+
const { fn } = task;
|
|
221
|
+
task.fn = __codspeed_root_frame__2;
|
|
222
|
+
InstrumentHooks.startBenchmark();
|
|
223
|
+
task.runSync();
|
|
224
|
+
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);
|
|
152
245
|
} else {
|
|
153
246
|
console.warn(` \u26A0 No result data available for ${uri}`);
|
|
154
247
|
}
|
|
@@ -160,7 +253,7 @@ function runWalltimeBench(bench, rootCallingFile) {
|
|
|
160
253
|
`[CodSpeed] Done collecting walltime data for ${bench.tasks.length} benches.`
|
|
161
254
|
);
|
|
162
255
|
bench.run = originalRun;
|
|
163
|
-
return
|
|
256
|
+
return bench.tasks;
|
|
164
257
|
};
|
|
165
258
|
}
|
|
166
259
|
function convertTinybenchResultToBenchmarkStats(result, warmupIterations) {
|
|
@@ -193,6 +286,7 @@ function withCodSpeed(bench) {
|
|
|
193
286
|
if (codspeedRunnerMode === "disabled") {
|
|
194
287
|
return bench;
|
|
195
288
|
}
|
|
289
|
+
setupCore();
|
|
196
290
|
const rootCallingFile = getCallingFile();
|
|
197
291
|
const uriMap = getOrCreateUriMap(bench);
|
|
198
292
|
const rawAdd = bench.add;
|
|
@@ -226,7 +320,7 @@ function getCallingFile() {
|
|
|
226
320
|
return path.relative(gitDir, callingFile);
|
|
227
321
|
}
|
|
228
322
|
async function setupInstruments(body) {
|
|
229
|
-
if (!
|
|
323
|
+
if (!InstrumentHooks.isInstrumented()) {
|
|
230
324
|
console.warn("[CodSpeed] No instrumentation found, using default mongoUrl");
|
|
231
325
|
return { remoteAddr: body.mongoUrl };
|
|
232
326
|
}
|
package/dist/index.es5.js.map
CHANGED
|
@@ -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 Measurement,\n mongoMeasurement,\n optimizeFunction,\n setupCore,\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 setupCore();\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 Measurement.startInstrumentation();\n await fn();\n Measurement.stopInstrumentation(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 ` ✔ ${Measurement.isInstrumented() ? \"Measured\" : \"Checked\"} ${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 mongoMeasurement,\n msToNs,\n msToS,\n writeWalltimeResults,\n type Benchmark,\n type BenchmarkStats,\n} from \"@codspeed/core\";\nimport { Bench, 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 // Run the bench naturally to collect TaskResult data\n const results = [];\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 await task.warmup();\n }\n await mongoMeasurement.start(uri);\n const taskResult = await task.run();\n await mongoMeasurement.stop(uri);\n results.push(taskResult);\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\n console.log(` ✔ Collected walltime data for ${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 results;\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 Measurement,\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 { 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\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 (!Measurement.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":["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 } 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":";;;;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,KAAA,CAAM,MAAM,YAAY;AACtB,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,6CAAA,EAAgD,eAAA,CAAA,oBAAA;AAAA,KAClD;AAEA,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,KAAA,EAAO,IAAA,CAAK,MAAM,eAAe,CAAA;AAGxD,MAAA,MAAM,EAAE,MAAA,EAAQ,EAAA,EAAG,GAAI,IAAA;AAGvB,MAAA,MAAM,MAAA,EAAQ,SAAA,EAAW,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAGzC,MAAA,MAAM,iBAAiB,YAAY;AACjC,QAAA,MAAM,MAAA,EAAQ,UAAA,EAAY,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAC1C,QAAA,MAAM,EAAA,EAAG;AACT,QAAA,MAAM,MAAA,EAAQ,SAAA,EAAW,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAAA,MAC3C,CAAC,CAAA;AAGD,MAAA,MAAM,MAAA,EAAQ,UAAA,EAAY,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAE1C,MAAA,MAAM,gBAAA,CAAiB,MAAM,GAAG,CAAA;AAChC,MAAA,MAAA,CAAO,EAAA,IAAK;AACZ,MAAA,MAAO,eAAe,uBAAA,GAA0B;AAC9C,QAAA,eAAA,CAAgB,cAAA,EAAe;AAC/B,QAAA,MAAM,EAAA,EAAG;AACT,QAAA,eAAA,CAAgB,aAAA,EAAc;AAC9B,QAAA,eAAA,CAAgB,oBAAA,CAAqB,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AAAA,MACvD,CAAA,EAAG;AACH,MAAA,MAAM,gBAAA,CAAiB,KAAK,GAAG,CAAA;AAE/B,MAAA,MAAM,MAAA,EAAQ,SAAA,EAAW,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAEzC,MAAA,MAAM,MAAA,EAAQ,QAAA,EAAU,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAGxC,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,WAAA,EACE,eAAA,CAAgB,cAAA,EAAe,GAAI,aAAa,SAAA,CAAA,CAAA,EAC9C,GAAA,CAAA;AAAA,OACN;AAAA,IACF;AAEA,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;AAEA,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,6CAAA,EAAgD,eAAA,CAAA,oBAAA;AAAA,KAClD;AAEA,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,KAAA,EAAO,IAAA,CAAK,MAAM,eAAe,CAAA;AAGxD,MAAA,MAAM,EAAE,MAAA,EAAQ,EAAA,EAAG,GAAI,IAAA;AAGvB,MAAA,MAAA,EAAQ,SAAA,EAAW,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAGnC,MAAA,gBAAA,CAAiB,YAAY;AAC3B,QAAA,MAAA,EAAQ,UAAA,EAAY,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AACpC,QAAA,EAAA,EAAG;AACH,QAAA,MAAA,EAAQ,SAAA,EAAW,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAAA,MACrC,CAAC,CAAA;AAGD,MAAA,MAAA,EAAQ,UAAA,EAAY,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAGpC,MAAA,MAAA,CAAO,EAAA,IAAK;AACZ,MAAA,CAAC,SAAS,uBAAA,GAA0B;AAClC,QAAA,eAAA,CAAgB,cAAA,EAAe;AAC/B,QAAA,EAAA,EAAG;AACH,QAAA,eAAA,CAAgB,aAAA,EAAc;AAC9B,QAAA,eAAA,CAAgB,oBAAA,CAAqB,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AAAA,MACvD,CAAA,GAAG;AACH,MAAA,gBAAA,CAAiB,KAAK,GAAG,CAAA;AAEzB,MAAA,MAAA,EAAQ,SAAA,EAAW,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAEnC,MAAA,MAAA,EAAQ,QAAA,EAAU,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAGlC,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,WAAA,EACE,eAAA,CAAgB,cAAA,EAAe,GAAI,aAAa,SAAA,CAAA,CAAA,EAC9C,GAAA,CAAA;AAAA,OACN;AAAA,IACF;AAEA,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;;ACrGO,SAAS,gBAAA,CAAiB,OAAc,eAAA,EAA+B;AAC5E,EAAA,KAAA,CAAM,MAAM,YAAY;AACtB,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,6CAAA,EAAgD,eAAA,CAAA,gBAAA;AAAA,KAClD;AAGA,IAAA,MAAM,cAAc,KAAA,CAAM,GAAA;AAG1B,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,cAAA,CAAe,KAAK,CAAA;AAC9C,IAAA,MAAM,eAAe,UAAA,CAAW,GAAA;AAChC,IAAA,KAAA,CAAM,GAAA,GAAM,YAAA;AAEZ,IAAA,MAAM,aAA0B,EAAC;AAGjC,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,KAAA,EAAO,IAAA,CAAK,MAAM,eAAe,CAAA;AAGxD,MAAA,MAAM,EAAE,IAAG,GAAI,IAAA;AAEf,MAAA,eAAe,uBAAA,GAA0B;AACvC,QAAA,MAAM,EAAA,EAAG;AAAA,MACX;AAEA,MAAC,KAAa,EAAA,GAAK,uBAAA;AAGnB,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,IAAI,KAAK,MAAA,EAAQ;AAEf,QAAA,MAAM,KAAA,GAAQ,sCAAA;AAAA,UACZ,IAAA,CAAK,MAAA;AAAA,UACL,MAAM,IAAA,CAAK,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,oBAAoB,CAAA,GAAI;AAAA,SACzD;AAEA,QAAA,MAAM,SAAA,GAAuB;AAAA,UAC3B,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,GAAA;AAAA,UACA,MAAA,EAAQ;AAAA,YACN,UAAA,EAAY,KAAA,CAAM,IAAA,CAAK,UAAA,IAAc,IAAA;AAAA,YACrC,WAAA,EAAa,MAAM,IAAA,CAAK,IAAA,GAAO,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAAA,YACzD,iBAAA,EAAmB,IAAA;AAAA;AAAA,YACnB,cAAA,EACE,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,KAAA,CAAM,IAAA,CAAK,UAAA,GAC5B,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,GAC5B;AAAA,WACR;AAAA,UACA;AAAA,SACF;AAEA,QAAA,UAAA,CAAW,KAAK,SAAS,CAAA;AACzB,QAAA,OAAA,CAAQ,GAAA,CAAI,0CAAqC,GAAA,CAAA,CAAK,CAAA;AACtD,QAAA,eAAA,CAAgB,oBAAA,CAAqB,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AAAA,MACvD,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAA,CAAK,2CAAsC,GAAA,CAAA,CAAK,CAAA;AAAA,MAC1D;AAAA,IACF;AAGA,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,oBAAA,CAAqB,YAAY,IAAI,CAAA;AAAA,IACvC;AAEA,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,6CAAA,EAAgD,MAAM,KAAA,CAAM,MAAA,CAAA,SAAA;AAAA,KAC9D;AAEA,IAAA,KAAA,CAAM,GAAA,GAAM,WAAA;AAEZ,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,EACf,CAAA;AAEA,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,6CAAA,EAAgD,eAAA,CAAA,gBAAA;AAAA,KAClD;AAGA,IAAA,MAAM,cAAc,KAAA,CAAM,GAAA;AAG1B,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,cAAA,CAAe,KAAK,CAAA;AAC9C,IAAA,MAAM,eAAe,UAAA,CAAW,GAAA;AAChC,IAAA,KAAA,CAAM,GAAA,GAAM,YAAA;AAEZ,IAAA,MAAM,aAA0B,EAAC;AAGjC,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAW9B,MAAA,IAASA,2BAAT,WAAmC;AACjC,QAAA,EAAA,EAAG;AAAA,MACL,CAAA;AAZA,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,KAAA,EAAO,IAAA,CAAK,MAAM,eAAe,CAAA;AAGxD,MAAA,IAAI,KAAA,CAAM,KAAK,MAAA,EAAQ;AACrB,QAAA,IAAA,CAAK,MAAA,EAAO;AAAA,MACd;AAGA,MAAA,MAAM,EAAE,IAAG,GAAI,IAAA;AAMf,MAAC,KAAa,EAAA,GAAKA,wBAAAA;AAEnB,MAAA,eAAA,CAAgB,cAAA,EAAe;AAC/B,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,eAAA,CAAgB,aAAA,EAAc;AAE9B,MAAA,IAAI,KAAK,MAAA,EAAQ;AAEf,QAAA,MAAM,KAAA,GAAQ,sCAAA;AAAA,UACZ,IAAA,CAAK,MAAA;AAAA,UACL,MAAM,IAAA,CAAK,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,oBAAoB,CAAA,GAAI;AAAA,SACzD;AAEA,QAAA,MAAM,SAAA,GAAuB;AAAA,UAC3B,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,GAAA;AAAA,UACA,MAAA,EAAQ;AAAA,YACN,UAAA,EAAY,KAAA,CAAM,IAAA,CAAK,UAAA,IAAc,IAAA;AAAA,YACrC,WAAA,EAAa,MAAM,IAAA,CAAK,IAAA,GAAO,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAAA,YACzD,iBAAA,EAAmB,IAAA;AAAA;AAAA,YACnB,cAAA,EACE,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,KAAA,CAAM,IAAA,CAAK,UAAA,GAC5B,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,GAC5B;AAAA,WACR;AAAA,UACA;AAAA,SACF;AAEA,QAAA,UAAA,CAAW,KAAK,SAAS,CAAA;AACzB,QAAA,OAAA,CAAQ,GAAA,CAAI,0CAAqC,GAAA,CAAA,CAAK,CAAA;AACtD,QAAA,eAAA,CAAgB,oBAAA,CAAqB,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AAAA,MACvD,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAA,CAAK,2CAAsC,GAAA,CAAA,CAAK,CAAA;AAAA,MAC1D;AAAA,IACF;AAGA,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,oBAAA,CAAqB,UAAU,CAAA;AAAA,IACjC;AAEA,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,6CAAA,EAAgD,MAAM,KAAA,CAAM,MAAA,CAAA,SAAA;AAAA,KAC9D;AAEA,IAAA,KAAA,CAAM,GAAA,GAAM,WAAA;AAEZ,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,EACf,CAAA;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;;AChMA,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.
|
|
3
|
+
"version": "5.0.0-alpha.1",
|
|
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.
|
|
34
|
+
"@codspeed/core": "^5.0.0-alpha.1",
|
|
35
35
|
"stack-trace": "1.0.0-pre2"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|