@codspeed/tinybench-plugin 6.0.0 → 6.0.1-alpha.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 +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.es5.js +1 -1
- package/dist/index.es5.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -48,7 +48,7 @@ class BaseBenchRunner {
|
|
|
48
48
|
}
|
|
49
49
|
logStart() {
|
|
50
50
|
console.log(
|
|
51
|
-
`[CodSpeed] running with @codspeed/tinybench v${"6.0.0"} (${this.getModeName()})`
|
|
51
|
+
`[CodSpeed] running with @codspeed/tinybench v${"6.0.1-alpha.0"} (${this.getModeName()})`
|
|
52
52
|
);
|
|
53
53
|
}
|
|
54
54
|
getTaskUri(task) {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/taskData.ts","../src/uri.ts","../src/shared.ts","../src/analysis.ts","../src/benchOptions.ts","../src/walltime.ts","../src/index.ts"],"sourcesContent":["import { Bench, Fn, FnOptions } from \"tinybench\";\n\n// tinybench stores the benchmark function and its options as private fields on\n// `Task`. They were reachable through casts on older majors but became true\n// `#private` fields in v6, so we capture them ourselves when `bench.add` runs\n// and key them by task name, mirroring the URI map.\nexport interface CapturedTaskData {\n fn: Fn;\n fnOpts?: FnOptions;\n}\n\nconst taskDataMap = new WeakMap<Bench, Map<string, CapturedTaskData>>();\n\nexport function getOrCreateTaskDataMap(\n bench: Bench,\n): Map<string, CapturedTaskData> {\n let map = taskDataMap.get(bench);\n if (!map) {\n map = new Map<string, CapturedTaskData>();\n taskDataMap.set(bench, map);\n }\n return map;\n}\n\nexport function getTaskData(\n bench: Bench,\n taskName: string,\n): CapturedTaskData | undefined {\n return taskDataMap.get(bench)?.get(taskName);\n}\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 { setupCore, teardownCore } from \"@codspeed/core\";\nimport { Bench, Task } from \"tinybench\";\nimport { CapturedTaskData, getTaskData } from \"./taskData\";\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 getTaskData(task: Task): CapturedTaskData {\n const data = getTaskData(this.bench, task.name);\n if (!data) {\n throw new Error(\n `[CodSpeed] No captured function found for task \"${task.name}\"`,\n );\n }\n return data;\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 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 getCodspeedRunnerMode,\n InstrumentHooks,\n mongoMeasurement,\n optimizeFunction,\n optimizeFunctionSync,\n wrapWithRootFrame,\n wrapWithRootFrameSync,\n} from \"@codspeed/core\";\nimport { Bench, Task } from \"tinybench\";\nimport { BaseBenchRunner } from \"./shared\";\n\nexport function setupCodspeedAnalysisBench(\n bench: Bench,\n rootCallingFile: string,\n): void {\n const runner = new AnalysisBenchRunner(bench, rootCallingFile);\n runner.setupBenchMethods();\n}\n\nclass AnalysisBenchRunner extends BaseBenchRunner {\n protected getModeName(): string {\n const runnerMode = getCodspeedRunnerMode();\n return `${runnerMode} mode`;\n }\n\n private taskCompletionMessage() {\n return InstrumentHooks.isInstrumented() ? \"Measured\" : \"Checked\";\n }\n\n protected async runTaskAsync(task: Task, uri: string): Promise<void> {\n const { fnOpts, fn } = this.getTaskData(task);\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 const rootFrame = wrapWithRootFrame(fn);\n InstrumentHooks.startBenchmark();\n try {\n await rootFrame();\n } finally {\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 this.logTaskCompletion(uri, this.taskCompletionMessage());\n }\n\n protected runTaskSync(task: Task, uri: string): void {\n const { fnOpts, fn } = this.getTaskData(task);\n\n fnOpts?.beforeAll?.call(task, \"run\");\n\n optimizeFunctionSync(async () => {\n fnOpts?.beforeEach?.call(task, \"run\");\n await fn();\n fnOpts?.afterEach?.call(task, \"run\");\n });\n\n fnOpts?.beforeEach?.call(task, \"run\");\n\n global.gc?.();\n const rootFrame = wrapWithRootFrameSync(fn);\n InstrumentHooks.startBenchmark();\n try {\n rootFrame();\n } finally {\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 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 { Bench, Hook } from \"tinybench\";\n\n// The benchmark options tinybench resolves: timing knobs plus the suite-level\n// setup/teardown hooks. tinybench guarantees `setup`/`teardown` are populated\n// (at least with no-op defaults), so they are non-optional here.\nexport interface ResolvedBenchOptions {\n setup: Hook;\n teardown: Hook;\n warmup?: boolean;\n warmupIterations?: number;\n warmupTime?: number;\n iterations?: number;\n time?: number;\n retainSamples?: boolean;\n}\n\n// Up to tinybench v5 the resolved options lived under `bench.opts`; from v6 they\n// are flattened onto the bench instance itself. Returning the holder object\n// (rather than a copy) keeps in-place mutation of `setup`/`teardown` working,\n// which the walltime runner relies on to bracket its instrumentation window.\nexport function getBenchOptions(bench: Bench): ResolvedBenchOptions {\n const opts = (bench as unknown as { opts?: ResolvedBenchOptions }).opts;\n return opts ?? (bench as unknown as ResolvedBenchOptions);\n}\n","import {\n calculateQuantiles,\n InstrumentHooks,\n MARKER_TYPE_BENCHMARK_END,\n MARKER_TYPE_BENCHMARK_START,\n mongoMeasurement,\n msToNs,\n msToS,\n writeWalltimeResults,\n type BenchmarkStats,\n type Benchmark as CodspeedBenchmark,\n} from \"@codspeed/core\";\nimport { Bench, Task, TaskResult } from \"tinybench\";\nimport { getBenchOptions } from \"./benchOptions\";\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.installInstrumentHooks();\n runner.setupBenchMethods();\n}\n\nclass WalltimeBenchRunner extends BaseBenchRunner {\n private codspeedBenchmarks: CodspeedBenchmark[] = [];\n\n // Carries the window start timestamp from the setup hook to the teardown\n // hook. Tasks run strictly sequentially, so a single field is enough.\n private runStart: bigint | null = null;\n\n protected getModeName(): string {\n return \"walltime mode\";\n }\n\n /**\n * Drive the instrumentation window from the task's setup/teardown hooks so it\n * brackets only tinybench's measured loop, excluding warmup and the\n * statistics computation (`processRunResult`) that surround it. The user's\n * own hooks are preserved and still run in their original order relative to\n * the work under test.\n */\n public installInstrumentHooks(): void {\n // The resolved options expose `setup`/`teardown` as typed `Readonly`, but\n // tinybench populates them with (at least) no-op defaults and lets them be\n // reassigned at runtime.\n const opts = getBenchOptions(this.bench);\n\n // We build the walltime statistics from the per-round latency samples.\n // tinybench stopped retaining them by default in v6, so opt back in.\n opts.retainSamples = true;\n\n const userSetup = opts.setup;\n const userTeardown = opts.teardown;\n\n opts.setup = (task, mode) => {\n const setupResult = userSetup(task, mode);\n if (mode === \"run\") {\n InstrumentHooks.startBenchmark();\n this.runStart = InstrumentHooks.currentTimestamp();\n }\n return setupResult;\n };\n\n opts.teardown = (task, mode) => {\n if (mode === \"run\" && task) {\n const runEnd = InstrumentHooks.currentTimestamp();\n InstrumentHooks.stopBenchmark();\n InstrumentHooks.setExecutedBenchmark(\n process.pid,\n this.getTaskUri(task),\n );\n if (this.runStart !== null) {\n this.sendBenchmarkMarkers(this.runStart, runEnd);\n }\n\n this.runStart = null;\n }\n return userTeardown(task, mode);\n };\n }\n\n private sendBenchmarkMarkers(runStart: bigint, runEnd: bigint): void {\n InstrumentHooks.addMarker(\n process.pid,\n MARKER_TYPE_BENCHMARK_START,\n runStart,\n );\n InstrumentHooks.addMarker(process.pid, MARKER_TYPE_BENCHMARK_END, runEnd);\n }\n\n protected async runTaskAsync(task: Task, uri: string): Promise<void> {\n // run the warmup of the task right before its actual run\n if (getBenchOptions(this.bench).warmup) {\n await task.warmup();\n }\n\n await mongoMeasurement.start(uri);\n await task.run();\n await mongoMeasurement.stop(uri);\n\n this.registerCodspeedBenchmarkFromTask(task);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected runTaskSync(task: Task, _uri: string): void {\n if (getBenchOptions(this.bench).warmup) {\n task.warmupSync();\n }\n\n task.runSync();\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 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 opts = getBenchOptions(this.bench);\n const warmupIterations = opts.warmup\n ? (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: opts.iterations ?? null,\n max_time_ns: opts.time ? msToNs(opts.time) : null,\n min_round_time_ns: null, // tinybench does not have an option for this\n warmup_time_ns:\n opts.warmup && opts.warmupTime ? msToNs(opts.warmupTime) : 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 getCallingFile,\n getCodspeedRunnerMode,\n getInstrumentMode,\n InstrumentHooks,\n mongoMeasurement,\n SetupInstrumentsRequestBody,\n SetupInstrumentsResponse,\n tryIntrospect,\n wrapWithRootFrameSync,\n} from \"@codspeed/core\";\nimport { Bench } from \"tinybench\";\nimport { setupCodspeedAnalysisBench } from \"./analysis\";\nimport { getOrCreateTaskDataMap } from \"./taskData\";\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(1);\n const instrumentMode = getInstrumentMode();\n\n // Compute and register URI for bench\n const uriMap = getOrCreateUriMap(bench);\n const taskDataMap = getOrCreateTaskDataMap(bench);\n const rawAdd = bench.add;\n bench.add = (name, fn, opts?) => {\n const callingFile = getCallingFile(1);\n let uri = callingFile;\n if (bench.name !== undefined) {\n uri += `::${bench.name}`;\n }\n uri += `::${name}`;\n uriMap.set(name, uri);\n taskDataMap.set(name, { fn, fnOpts: opts });\n // In walltime mode the task is driven by tinybench's own measured loop, so\n // the root frame must be baked into the function tinybench stores rather\n // than injected later (the function is an inaccessible private field on the\n // task from tinybench v6 onwards). The sync wrapper is transparent to the\n // function's return value, so it preserves tinybench's sync/async handling.\n const registeredFn =\n instrumentMode === \"walltime\" ? wrapWithRootFrameSync(fn) : fn;\n return rawAdd.bind(bench)(name, registeredFn, opts);\n };\n\n if (instrumentMode === \"analysis\") {\n setupCodspeedAnalysisBench(bench, rootCallingFile);\n } else if (instrumentMode === \"walltime\") {\n setupCodspeedWalltimeBench(bench, rootCallingFile);\n }\n\n return bench;\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","getCodspeedRunnerMode","InstrumentHooks","optimizeFunction","mongoMeasurement","wrapWithRootFrame","optimizeFunctionSync","wrapWithRootFrameSync","MARKER_TYPE_BENCHMARK_START","MARKER_TYPE_BENCHMARK_END","msToNs","writeWalltimeResults","calculateQuantiles","msToS","tryIntrospect","getCallingFile","getInstrumentMode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/taskData.ts","../src/uri.ts","../src/shared.ts","../src/analysis.ts","../src/benchOptions.ts","../src/walltime.ts","../src/index.ts"],"sourcesContent":["import { Bench, Fn, FnOptions } from \"tinybench\";\n\n// tinybench stores the benchmark function and its options as private fields on\n// `Task`. They were reachable through casts on older majors but became true\n// `#private` fields in v6, so we capture them ourselves when `bench.add` runs\n// and key them by task name, mirroring the URI map.\nexport interface CapturedTaskData {\n fn: Fn;\n fnOpts?: FnOptions;\n}\n\nconst taskDataMap = new WeakMap<Bench, Map<string, CapturedTaskData>>();\n\nexport function getOrCreateTaskDataMap(\n bench: Bench,\n): Map<string, CapturedTaskData> {\n let map = taskDataMap.get(bench);\n if (!map) {\n map = new Map<string, CapturedTaskData>();\n taskDataMap.set(bench, map);\n }\n return map;\n}\n\nexport function getTaskData(\n bench: Bench,\n taskName: string,\n): CapturedTaskData | undefined {\n return taskDataMap.get(bench)?.get(taskName);\n}\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 { setupCore, teardownCore } from \"@codspeed/core\";\nimport { Bench, Task } from \"tinybench\";\nimport { CapturedTaskData, getTaskData } from \"./taskData\";\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 getTaskData(task: Task): CapturedTaskData {\n const data = getTaskData(this.bench, task.name);\n if (!data) {\n throw new Error(\n `[CodSpeed] No captured function found for task \"${task.name}\"`,\n );\n }\n return data;\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 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 getCodspeedRunnerMode,\n InstrumentHooks,\n mongoMeasurement,\n optimizeFunction,\n optimizeFunctionSync,\n wrapWithRootFrame,\n wrapWithRootFrameSync,\n} from \"@codspeed/core\";\nimport { Bench, Task } from \"tinybench\";\nimport { BaseBenchRunner } from \"./shared\";\n\nexport function setupCodspeedAnalysisBench(\n bench: Bench,\n rootCallingFile: string,\n): void {\n const runner = new AnalysisBenchRunner(bench, rootCallingFile);\n runner.setupBenchMethods();\n}\n\nclass AnalysisBenchRunner extends BaseBenchRunner {\n protected getModeName(): string {\n const runnerMode = getCodspeedRunnerMode();\n return `${runnerMode} mode`;\n }\n\n private taskCompletionMessage() {\n return InstrumentHooks.isInstrumented() ? \"Measured\" : \"Checked\";\n }\n\n protected async runTaskAsync(task: Task, uri: string): Promise<void> {\n const { fnOpts, fn } = this.getTaskData(task);\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 const rootFrame = wrapWithRootFrame(fn);\n InstrumentHooks.startBenchmark();\n try {\n await rootFrame();\n } finally {\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 this.logTaskCompletion(uri, this.taskCompletionMessage());\n }\n\n protected runTaskSync(task: Task, uri: string): void {\n const { fnOpts, fn } = this.getTaskData(task);\n\n fnOpts?.beforeAll?.call(task, \"run\");\n\n optimizeFunctionSync(async () => {\n fnOpts?.beforeEach?.call(task, \"run\");\n await fn();\n fnOpts?.afterEach?.call(task, \"run\");\n });\n\n fnOpts?.beforeEach?.call(task, \"run\");\n\n global.gc?.();\n const rootFrame = wrapWithRootFrameSync(fn);\n InstrumentHooks.startBenchmark();\n try {\n rootFrame();\n } finally {\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 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 { Bench, Hook } from \"tinybench\";\n\n// The benchmark options tinybench resolves: timing knobs plus the suite-level\n// setup/teardown hooks. tinybench guarantees `setup`/`teardown` are populated\n// (at least with no-op defaults), so they are non-optional here.\nexport interface ResolvedBenchOptions {\n setup: Hook;\n teardown: Hook;\n warmup?: boolean;\n warmupIterations?: number;\n warmupTime?: number;\n iterations?: number;\n time?: number;\n retainSamples?: boolean;\n}\n\n// Up to tinybench v5 the resolved options lived under `bench.opts`; from v6 they\n// are flattened onto the bench instance itself. Returning the holder object\n// (rather than a copy) keeps in-place mutation of `setup`/`teardown` working,\n// which the walltime runner relies on to bracket its instrumentation window.\nexport function getBenchOptions(bench: Bench): ResolvedBenchOptions {\n const opts = (bench as unknown as { opts?: ResolvedBenchOptions }).opts;\n return opts ?? (bench as unknown as ResolvedBenchOptions);\n}\n","import {\n calculateQuantiles,\n InstrumentHooks,\n MARKER_TYPE_BENCHMARK_END,\n MARKER_TYPE_BENCHMARK_START,\n mongoMeasurement,\n msToNs,\n msToS,\n writeWalltimeResults,\n type BenchmarkStats,\n type Benchmark as CodspeedBenchmark,\n} from \"@codspeed/core\";\nimport { Bench, Task, TaskResult } from \"tinybench\";\nimport { getBenchOptions } from \"./benchOptions\";\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.installInstrumentHooks();\n runner.setupBenchMethods();\n}\n\nclass WalltimeBenchRunner extends BaseBenchRunner {\n private codspeedBenchmarks: CodspeedBenchmark[] = [];\n\n // Carries the window start timestamp from the setup hook to the teardown\n // hook. Tasks run strictly sequentially, so a single field is enough.\n private runStart: bigint | null = null;\n\n protected getModeName(): string {\n return \"walltime mode\";\n }\n\n /**\n * Drive the instrumentation window from the task's setup/teardown hooks so it\n * brackets only tinybench's measured loop, excluding warmup and the\n * statistics computation (`processRunResult`) that surround it. The user's\n * own hooks are preserved and still run in their original order relative to\n * the work under test.\n */\n public installInstrumentHooks(): void {\n // The resolved options expose `setup`/`teardown` as typed `Readonly`, but\n // tinybench populates them with (at least) no-op defaults and lets them be\n // reassigned at runtime.\n const opts = getBenchOptions(this.bench);\n\n // We build the walltime statistics from the per-round latency samples.\n // tinybench stopped retaining them by default in v6, so opt back in.\n opts.retainSamples = true;\n\n const userSetup = opts.setup;\n const userTeardown = opts.teardown;\n\n opts.setup = (task, mode) => {\n const setupResult = userSetup(task, mode);\n if (mode === \"run\") {\n InstrumentHooks.startBenchmark();\n this.runStart = InstrumentHooks.currentTimestamp();\n }\n return setupResult;\n };\n\n opts.teardown = (task, mode) => {\n if (mode === \"run\" && task) {\n const runEnd = InstrumentHooks.currentTimestamp();\n InstrumentHooks.stopBenchmark();\n InstrumentHooks.setExecutedBenchmark(\n process.pid,\n this.getTaskUri(task),\n );\n if (this.runStart !== null) {\n this.sendBenchmarkMarkers(this.runStart, runEnd);\n }\n\n this.runStart = null;\n }\n return userTeardown(task, mode);\n };\n }\n\n private sendBenchmarkMarkers(runStart: bigint, runEnd: bigint): void {\n InstrumentHooks.addMarker(\n process.pid,\n MARKER_TYPE_BENCHMARK_START,\n runStart,\n );\n InstrumentHooks.addMarker(process.pid, MARKER_TYPE_BENCHMARK_END, runEnd);\n }\n\n protected async runTaskAsync(task: Task, uri: string): Promise<void> {\n // run the warmup of the task right before its actual run\n if (getBenchOptions(this.bench).warmup) {\n await task.warmup();\n }\n\n await mongoMeasurement.start(uri);\n await task.run();\n await mongoMeasurement.stop(uri);\n\n this.registerCodspeedBenchmarkFromTask(task);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected runTaskSync(task: Task, _uri: string): void {\n if (getBenchOptions(this.bench).warmup) {\n task.warmupSync();\n }\n\n task.runSync();\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 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 opts = getBenchOptions(this.bench);\n const warmupIterations = opts.warmup\n ? (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: opts.iterations ?? null,\n max_time_ns: opts.time ? msToNs(opts.time) : null,\n min_round_time_ns: null, // tinybench does not have an option for this\n warmup_time_ns:\n opts.warmup && opts.warmupTime ? msToNs(opts.warmupTime) : 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 getCallingFile,\n getCodspeedRunnerMode,\n getInstrumentMode,\n InstrumentHooks,\n mongoMeasurement,\n SetupInstrumentsRequestBody,\n SetupInstrumentsResponse,\n tryIntrospect,\n wrapWithRootFrameSync,\n} from \"@codspeed/core\";\nimport { Bench } from \"tinybench\";\nimport { setupCodspeedAnalysisBench } from \"./analysis\";\nimport { getOrCreateTaskDataMap } from \"./taskData\";\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(1);\n const instrumentMode = getInstrumentMode();\n\n // Compute and register URI for bench\n const uriMap = getOrCreateUriMap(bench);\n const taskDataMap = getOrCreateTaskDataMap(bench);\n const rawAdd = bench.add;\n bench.add = (name, fn, opts?) => {\n const callingFile = getCallingFile(1);\n let uri = callingFile;\n if (bench.name !== undefined) {\n uri += `::${bench.name}`;\n }\n uri += `::${name}`;\n uriMap.set(name, uri);\n taskDataMap.set(name, { fn, fnOpts: opts });\n // In walltime mode the task is driven by tinybench's own measured loop, so\n // the root frame must be baked into the function tinybench stores rather\n // than injected later (the function is an inaccessible private field on the\n // task from tinybench v6 onwards). The sync wrapper is transparent to the\n // function's return value, so it preserves tinybench's sync/async handling.\n const registeredFn =\n instrumentMode === \"walltime\" ? wrapWithRootFrameSync(fn) : fn;\n return rawAdd.bind(bench)(name, registeredFn, opts);\n };\n\n if (instrumentMode === \"analysis\") {\n setupCodspeedAnalysisBench(bench, rootCallingFile);\n } else if (instrumentMode === \"walltime\") {\n setupCodspeedWalltimeBench(bench, rootCallingFile);\n }\n\n return bench;\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","getCodspeedRunnerMode","InstrumentHooks","optimizeFunction","mongoMeasurement","wrapWithRootFrame","optimizeFunctionSync","wrapWithRootFrameSync","MARKER_TYPE_BENCHMARK_START","MARKER_TYPE_BENCHMARK_END","msToNs","writeWalltimeResults","calculateQuantiles","msToS","tryIntrospect","getCallingFile","getInstrumentMode"],"mappings":"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"}
|
package/dist/index.es5.js
CHANGED
|
@@ -46,7 +46,7 @@ class BaseBenchRunner {
|
|
|
46
46
|
}
|
|
47
47
|
logStart() {
|
|
48
48
|
console.log(
|
|
49
|
-
`[CodSpeed] running with @codspeed/tinybench v${"6.0.0"} (${this.getModeName()})`
|
|
49
|
+
`[CodSpeed] running with @codspeed/tinybench v${"6.0.1-alpha.0"} (${this.getModeName()})`
|
|
50
50
|
);
|
|
51
51
|
}
|
|
52
52
|
getTaskUri(task) {
|
package/dist/index.es5.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es5.js","sources":["../src/taskData.ts","../src/uri.ts","../src/shared.ts","../src/analysis.ts","../src/benchOptions.ts","../src/walltime.ts","../src/index.ts"],"sourcesContent":["import { Bench, Fn, FnOptions } from \"tinybench\";\n\n// tinybench stores the benchmark function and its options as private fields on\n// `Task`. They were reachable through casts on older majors but became true\n// `#private` fields in v6, so we capture them ourselves when `bench.add` runs\n// and key them by task name, mirroring the URI map.\nexport interface CapturedTaskData {\n fn: Fn;\n fnOpts?: FnOptions;\n}\n\nconst taskDataMap = new WeakMap<Bench, Map<string, CapturedTaskData>>();\n\nexport function getOrCreateTaskDataMap(\n bench: Bench,\n): Map<string, CapturedTaskData> {\n let map = taskDataMap.get(bench);\n if (!map) {\n map = new Map<string, CapturedTaskData>();\n taskDataMap.set(bench, map);\n }\n return map;\n}\n\nexport function getTaskData(\n bench: Bench,\n taskName: string,\n): CapturedTaskData | undefined {\n return taskDataMap.get(bench)?.get(taskName);\n}\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 { setupCore, teardownCore } from \"@codspeed/core\";\nimport { Bench, Task } from \"tinybench\";\nimport { CapturedTaskData, getTaskData } from \"./taskData\";\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 getTaskData(task: Task): CapturedTaskData {\n const data = getTaskData(this.bench, task.name);\n if (!data) {\n throw new Error(\n `[CodSpeed] No captured function found for task \"${task.name}\"`,\n );\n }\n return data;\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 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 getCodspeedRunnerMode,\n InstrumentHooks,\n mongoMeasurement,\n optimizeFunction,\n optimizeFunctionSync,\n wrapWithRootFrame,\n wrapWithRootFrameSync,\n} from \"@codspeed/core\";\nimport { Bench, Task } from \"tinybench\";\nimport { BaseBenchRunner } from \"./shared\";\n\nexport function setupCodspeedAnalysisBench(\n bench: Bench,\n rootCallingFile: string,\n): void {\n const runner = new AnalysisBenchRunner(bench, rootCallingFile);\n runner.setupBenchMethods();\n}\n\nclass AnalysisBenchRunner extends BaseBenchRunner {\n protected getModeName(): string {\n const runnerMode = getCodspeedRunnerMode();\n return `${runnerMode} mode`;\n }\n\n private taskCompletionMessage() {\n return InstrumentHooks.isInstrumented() ? \"Measured\" : \"Checked\";\n }\n\n protected async runTaskAsync(task: Task, uri: string): Promise<void> {\n const { fnOpts, fn } = this.getTaskData(task);\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 const rootFrame = wrapWithRootFrame(fn);\n InstrumentHooks.startBenchmark();\n try {\n await rootFrame();\n } finally {\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 this.logTaskCompletion(uri, this.taskCompletionMessage());\n }\n\n protected runTaskSync(task: Task, uri: string): void {\n const { fnOpts, fn } = this.getTaskData(task);\n\n fnOpts?.beforeAll?.call(task, \"run\");\n\n optimizeFunctionSync(async () => {\n fnOpts?.beforeEach?.call(task, \"run\");\n await fn();\n fnOpts?.afterEach?.call(task, \"run\");\n });\n\n fnOpts?.beforeEach?.call(task, \"run\");\n\n global.gc?.();\n const rootFrame = wrapWithRootFrameSync(fn);\n InstrumentHooks.startBenchmark();\n try {\n rootFrame();\n } finally {\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 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 { Bench, Hook } from \"tinybench\";\n\n// The benchmark options tinybench resolves: timing knobs plus the suite-level\n// setup/teardown hooks. tinybench guarantees `setup`/`teardown` are populated\n// (at least with no-op defaults), so they are non-optional here.\nexport interface ResolvedBenchOptions {\n setup: Hook;\n teardown: Hook;\n warmup?: boolean;\n warmupIterations?: number;\n warmupTime?: number;\n iterations?: number;\n time?: number;\n retainSamples?: boolean;\n}\n\n// Up to tinybench v5 the resolved options lived under `bench.opts`; from v6 they\n// are flattened onto the bench instance itself. Returning the holder object\n// (rather than a copy) keeps in-place mutation of `setup`/`teardown` working,\n// which the walltime runner relies on to bracket its instrumentation window.\nexport function getBenchOptions(bench: Bench): ResolvedBenchOptions {\n const opts = (bench as unknown as { opts?: ResolvedBenchOptions }).opts;\n return opts ?? (bench as unknown as ResolvedBenchOptions);\n}\n","import {\n calculateQuantiles,\n InstrumentHooks,\n MARKER_TYPE_BENCHMARK_END,\n MARKER_TYPE_BENCHMARK_START,\n mongoMeasurement,\n msToNs,\n msToS,\n writeWalltimeResults,\n type BenchmarkStats,\n type Benchmark as CodspeedBenchmark,\n} from \"@codspeed/core\";\nimport { Bench, Task, TaskResult } from \"tinybench\";\nimport { getBenchOptions } from \"./benchOptions\";\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.installInstrumentHooks();\n runner.setupBenchMethods();\n}\n\nclass WalltimeBenchRunner extends BaseBenchRunner {\n private codspeedBenchmarks: CodspeedBenchmark[] = [];\n\n // Carries the window start timestamp from the setup hook to the teardown\n // hook. Tasks run strictly sequentially, so a single field is enough.\n private runStart: bigint | null = null;\n\n protected getModeName(): string {\n return \"walltime mode\";\n }\n\n /**\n * Drive the instrumentation window from the task's setup/teardown hooks so it\n * brackets only tinybench's measured loop, excluding warmup and the\n * statistics computation (`processRunResult`) that surround it. The user's\n * own hooks are preserved and still run in their original order relative to\n * the work under test.\n */\n public installInstrumentHooks(): void {\n // The resolved options expose `setup`/`teardown` as typed `Readonly`, but\n // tinybench populates them with (at least) no-op defaults and lets them be\n // reassigned at runtime.\n const opts = getBenchOptions(this.bench);\n\n // We build the walltime statistics from the per-round latency samples.\n // tinybench stopped retaining them by default in v6, so opt back in.\n opts.retainSamples = true;\n\n const userSetup = opts.setup;\n const userTeardown = opts.teardown;\n\n opts.setup = (task, mode) => {\n const setupResult = userSetup(task, mode);\n if (mode === \"run\") {\n InstrumentHooks.startBenchmark();\n this.runStart = InstrumentHooks.currentTimestamp();\n }\n return setupResult;\n };\n\n opts.teardown = (task, mode) => {\n if (mode === \"run\" && task) {\n const runEnd = InstrumentHooks.currentTimestamp();\n InstrumentHooks.stopBenchmark();\n InstrumentHooks.setExecutedBenchmark(\n process.pid,\n this.getTaskUri(task),\n );\n if (this.runStart !== null) {\n this.sendBenchmarkMarkers(this.runStart, runEnd);\n }\n\n this.runStart = null;\n }\n return userTeardown(task, mode);\n };\n }\n\n private sendBenchmarkMarkers(runStart: bigint, runEnd: bigint): void {\n InstrumentHooks.addMarker(\n process.pid,\n MARKER_TYPE_BENCHMARK_START,\n runStart,\n );\n InstrumentHooks.addMarker(process.pid, MARKER_TYPE_BENCHMARK_END, runEnd);\n }\n\n protected async runTaskAsync(task: Task, uri: string): Promise<void> {\n // run the warmup of the task right before its actual run\n if (getBenchOptions(this.bench).warmup) {\n await task.warmup();\n }\n\n await mongoMeasurement.start(uri);\n await task.run();\n await mongoMeasurement.stop(uri);\n\n this.registerCodspeedBenchmarkFromTask(task);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected runTaskSync(task: Task, _uri: string): void {\n if (getBenchOptions(this.bench).warmup) {\n task.warmupSync();\n }\n\n task.runSync();\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 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 opts = getBenchOptions(this.bench);\n const warmupIterations = opts.warmup\n ? (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: opts.iterations ?? null,\n max_time_ns: opts.time ? msToNs(opts.time) : null,\n min_round_time_ns: null, // tinybench does not have an option for this\n warmup_time_ns:\n opts.warmup && opts.warmupTime ? msToNs(opts.warmupTime) : 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 getCallingFile,\n getCodspeedRunnerMode,\n getInstrumentMode,\n InstrumentHooks,\n mongoMeasurement,\n SetupInstrumentsRequestBody,\n SetupInstrumentsResponse,\n tryIntrospect,\n wrapWithRootFrameSync,\n} from \"@codspeed/core\";\nimport { Bench } from \"tinybench\";\nimport { setupCodspeedAnalysisBench } from \"./analysis\";\nimport { getOrCreateTaskDataMap } from \"./taskData\";\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(1);\n const instrumentMode = getInstrumentMode();\n\n // Compute and register URI for bench\n const uriMap = getOrCreateUriMap(bench);\n const taskDataMap = getOrCreateTaskDataMap(bench);\n const rawAdd = bench.add;\n bench.add = (name, fn, opts?) => {\n const callingFile = getCallingFile(1);\n let uri = callingFile;\n if (bench.name !== undefined) {\n uri += `::${bench.name}`;\n }\n uri += `::${name}`;\n uriMap.set(name, uri);\n taskDataMap.set(name, { fn, fnOpts: opts });\n // In walltime mode the task is driven by tinybench's own measured loop, so\n // the root frame must be baked into the function tinybench stores rather\n // than injected later (the function is an inaccessible private field on the\n // task from tinybench v6 onwards). The sync wrapper is transparent to the\n // function's return value, so it preserves tinybench's sync/async handling.\n const registeredFn =\n instrumentMode === \"walltime\" ? wrapWithRootFrameSync(fn) : fn;\n return rawAdd.bind(bench)(name, registeredFn, opts);\n };\n\n if (instrumentMode === \"analysis\") {\n setupCodspeedAnalysisBench(bench, rootCallingFile);\n } else if (instrumentMode === \"walltime\") {\n setupCodspeedWalltimeBench(bench, rootCallingFile);\n }\n\n return bench;\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es5.js","sources":["../src/taskData.ts","../src/uri.ts","../src/shared.ts","../src/analysis.ts","../src/benchOptions.ts","../src/walltime.ts","../src/index.ts"],"sourcesContent":["import { Bench, Fn, FnOptions } from \"tinybench\";\n\n// tinybench stores the benchmark function and its options as private fields on\n// `Task`. They were reachable through casts on older majors but became true\n// `#private` fields in v6, so we capture them ourselves when `bench.add` runs\n// and key them by task name, mirroring the URI map.\nexport interface CapturedTaskData {\n fn: Fn;\n fnOpts?: FnOptions;\n}\n\nconst taskDataMap = new WeakMap<Bench, Map<string, CapturedTaskData>>();\n\nexport function getOrCreateTaskDataMap(\n bench: Bench,\n): Map<string, CapturedTaskData> {\n let map = taskDataMap.get(bench);\n if (!map) {\n map = new Map<string, CapturedTaskData>();\n taskDataMap.set(bench, map);\n }\n return map;\n}\n\nexport function getTaskData(\n bench: Bench,\n taskName: string,\n): CapturedTaskData | undefined {\n return taskDataMap.get(bench)?.get(taskName);\n}\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 { setupCore, teardownCore } from \"@codspeed/core\";\nimport { Bench, Task } from \"tinybench\";\nimport { CapturedTaskData, getTaskData } from \"./taskData\";\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 getTaskData(task: Task): CapturedTaskData {\n const data = getTaskData(this.bench, task.name);\n if (!data) {\n throw new Error(\n `[CodSpeed] No captured function found for task \"${task.name}\"`,\n );\n }\n return data;\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 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 getCodspeedRunnerMode,\n InstrumentHooks,\n mongoMeasurement,\n optimizeFunction,\n optimizeFunctionSync,\n wrapWithRootFrame,\n wrapWithRootFrameSync,\n} from \"@codspeed/core\";\nimport { Bench, Task } from \"tinybench\";\nimport { BaseBenchRunner } from \"./shared\";\n\nexport function setupCodspeedAnalysisBench(\n bench: Bench,\n rootCallingFile: string,\n): void {\n const runner = new AnalysisBenchRunner(bench, rootCallingFile);\n runner.setupBenchMethods();\n}\n\nclass AnalysisBenchRunner extends BaseBenchRunner {\n protected getModeName(): string {\n const runnerMode = getCodspeedRunnerMode();\n return `${runnerMode} mode`;\n }\n\n private taskCompletionMessage() {\n return InstrumentHooks.isInstrumented() ? \"Measured\" : \"Checked\";\n }\n\n protected async runTaskAsync(task: Task, uri: string): Promise<void> {\n const { fnOpts, fn } = this.getTaskData(task);\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 const rootFrame = wrapWithRootFrame(fn);\n InstrumentHooks.startBenchmark();\n try {\n await rootFrame();\n } finally {\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 this.logTaskCompletion(uri, this.taskCompletionMessage());\n }\n\n protected runTaskSync(task: Task, uri: string): void {\n const { fnOpts, fn } = this.getTaskData(task);\n\n fnOpts?.beforeAll?.call(task, \"run\");\n\n optimizeFunctionSync(async () => {\n fnOpts?.beforeEach?.call(task, \"run\");\n await fn();\n fnOpts?.afterEach?.call(task, \"run\");\n });\n\n fnOpts?.beforeEach?.call(task, \"run\");\n\n global.gc?.();\n const rootFrame = wrapWithRootFrameSync(fn);\n InstrumentHooks.startBenchmark();\n try {\n rootFrame();\n } finally {\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 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 { Bench, Hook } from \"tinybench\";\n\n// The benchmark options tinybench resolves: timing knobs plus the suite-level\n// setup/teardown hooks. tinybench guarantees `setup`/`teardown` are populated\n// (at least with no-op defaults), so they are non-optional here.\nexport interface ResolvedBenchOptions {\n setup: Hook;\n teardown: Hook;\n warmup?: boolean;\n warmupIterations?: number;\n warmupTime?: number;\n iterations?: number;\n time?: number;\n retainSamples?: boolean;\n}\n\n// Up to tinybench v5 the resolved options lived under `bench.opts`; from v6 they\n// are flattened onto the bench instance itself. Returning the holder object\n// (rather than a copy) keeps in-place mutation of `setup`/`teardown` working,\n// which the walltime runner relies on to bracket its instrumentation window.\nexport function getBenchOptions(bench: Bench): ResolvedBenchOptions {\n const opts = (bench as unknown as { opts?: ResolvedBenchOptions }).opts;\n return opts ?? (bench as unknown as ResolvedBenchOptions);\n}\n","import {\n calculateQuantiles,\n InstrumentHooks,\n MARKER_TYPE_BENCHMARK_END,\n MARKER_TYPE_BENCHMARK_START,\n mongoMeasurement,\n msToNs,\n msToS,\n writeWalltimeResults,\n type BenchmarkStats,\n type Benchmark as CodspeedBenchmark,\n} from \"@codspeed/core\";\nimport { Bench, Task, TaskResult } from \"tinybench\";\nimport { getBenchOptions } from \"./benchOptions\";\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.installInstrumentHooks();\n runner.setupBenchMethods();\n}\n\nclass WalltimeBenchRunner extends BaseBenchRunner {\n private codspeedBenchmarks: CodspeedBenchmark[] = [];\n\n // Carries the window start timestamp from the setup hook to the teardown\n // hook. Tasks run strictly sequentially, so a single field is enough.\n private runStart: bigint | null = null;\n\n protected getModeName(): string {\n return \"walltime mode\";\n }\n\n /**\n * Drive the instrumentation window from the task's setup/teardown hooks so it\n * brackets only tinybench's measured loop, excluding warmup and the\n * statistics computation (`processRunResult`) that surround it. The user's\n * own hooks are preserved and still run in their original order relative to\n * the work under test.\n */\n public installInstrumentHooks(): void {\n // The resolved options expose `setup`/`teardown` as typed `Readonly`, but\n // tinybench populates them with (at least) no-op defaults and lets them be\n // reassigned at runtime.\n const opts = getBenchOptions(this.bench);\n\n // We build the walltime statistics from the per-round latency samples.\n // tinybench stopped retaining them by default in v6, so opt back in.\n opts.retainSamples = true;\n\n const userSetup = opts.setup;\n const userTeardown = opts.teardown;\n\n opts.setup = (task, mode) => {\n const setupResult = userSetup(task, mode);\n if (mode === \"run\") {\n InstrumentHooks.startBenchmark();\n this.runStart = InstrumentHooks.currentTimestamp();\n }\n return setupResult;\n };\n\n opts.teardown = (task, mode) => {\n if (mode === \"run\" && task) {\n const runEnd = InstrumentHooks.currentTimestamp();\n InstrumentHooks.stopBenchmark();\n InstrumentHooks.setExecutedBenchmark(\n process.pid,\n this.getTaskUri(task),\n );\n if (this.runStart !== null) {\n this.sendBenchmarkMarkers(this.runStart, runEnd);\n }\n\n this.runStart = null;\n }\n return userTeardown(task, mode);\n };\n }\n\n private sendBenchmarkMarkers(runStart: bigint, runEnd: bigint): void {\n InstrumentHooks.addMarker(\n process.pid,\n MARKER_TYPE_BENCHMARK_START,\n runStart,\n );\n InstrumentHooks.addMarker(process.pid, MARKER_TYPE_BENCHMARK_END, runEnd);\n }\n\n protected async runTaskAsync(task: Task, uri: string): Promise<void> {\n // run the warmup of the task right before its actual run\n if (getBenchOptions(this.bench).warmup) {\n await task.warmup();\n }\n\n await mongoMeasurement.start(uri);\n await task.run();\n await mongoMeasurement.stop(uri);\n\n this.registerCodspeedBenchmarkFromTask(task);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected runTaskSync(task: Task, _uri: string): void {\n if (getBenchOptions(this.bench).warmup) {\n task.warmupSync();\n }\n\n task.runSync();\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 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 opts = getBenchOptions(this.bench);\n const warmupIterations = opts.warmup\n ? (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: opts.iterations ?? null,\n max_time_ns: opts.time ? msToNs(opts.time) : null,\n min_round_time_ns: null, // tinybench does not have an option for this\n warmup_time_ns:\n opts.warmup && opts.warmupTime ? msToNs(opts.warmupTime) : 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 getCallingFile,\n getCodspeedRunnerMode,\n getInstrumentMode,\n InstrumentHooks,\n mongoMeasurement,\n SetupInstrumentsRequestBody,\n SetupInstrumentsResponse,\n tryIntrospect,\n wrapWithRootFrameSync,\n} from \"@codspeed/core\";\nimport { Bench } from \"tinybench\";\nimport { setupCodspeedAnalysisBench } from \"./analysis\";\nimport { getOrCreateTaskDataMap } from \"./taskData\";\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(1);\n const instrumentMode = getInstrumentMode();\n\n // Compute and register URI for bench\n const uriMap = getOrCreateUriMap(bench);\n const taskDataMap = getOrCreateTaskDataMap(bench);\n const rawAdd = bench.add;\n bench.add = (name, fn, opts?) => {\n const callingFile = getCallingFile(1);\n let uri = callingFile;\n if (bench.name !== undefined) {\n uri += `::${bench.name}`;\n }\n uri += `::${name}`;\n uriMap.set(name, uri);\n taskDataMap.set(name, { fn, fnOpts: opts });\n // In walltime mode the task is driven by tinybench's own measured loop, so\n // the root frame must be baked into the function tinybench stores rather\n // than injected later (the function is an inaccessible private field on the\n // task from tinybench v6 onwards). The sync wrapper is transparent to the\n // function's return value, so it preserves tinybench's sync/async handling.\n const registeredFn =\n instrumentMode === \"walltime\" ? wrapWithRootFrameSync(fn) : fn;\n return rawAdd.bind(bench)(name, registeredFn, opts);\n };\n\n if (instrumentMode === \"analysis\") {\n setupCodspeedAnalysisBench(bench, rootCallingFile);\n } else if (instrumentMode === \"walltime\") {\n setupCodspeedWalltimeBench(bench, rootCallingFile);\n }\n\n return bench;\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"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codspeed/tinybench-plugin",
|
|
3
|
-
"version": "6.0.0",
|
|
3
|
+
"version": "6.0.1-alpha.0",
|
|
4
4
|
"description": "tinybench compatibility layer for CodSpeed",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"codspeed",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"vitest": "^3.2.4"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@codspeed/core": "^6.0.0"
|
|
33
|
+
"@codspeed/core": "^6.0.1-alpha.0"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
36
|
"tinybench": ">=4.0.1"
|