@monstermann/tinybench-pretty-printer
Version:
Customizable pretty-printer for tinybench benchmarks
162 lines (160 loc) • 4.39 kB
JavaScript
import { margin } from "./columns/margin.mjs";
import { name } from "./columns/name.mjs";
import { ops } from "./columns/ops.mjs";
import { samples } from "./columns/samples.mjs";
import { summary } from "./columns/summary.mjs";
import { time } from "./columns/time.mjs";
import { createCountFormatter } from "./helpers/createCountFormatter.mjs";
import { createDurationFormatter } from "./helpers/createDurationFormatter.mjs";
import { createNumberFormatter } from "./helpers/createNumberFormatter.mjs";
import { getFastestTask } from "./helpers/getFastestTask.mjs";
import { getSlowestTask } from "./helpers/getSlowestTask.mjs";
import { mapRecord } from "./helpers/mapRecord.mjs";
import { sortTasks } from "./helpers/sortTasks.mjs";
import { cli, markdown } from "@monstermann/tables";
//#region src/tinybenchPrinter.ts
var TinybenchPrinterImpl = class TinybenchPrinterImpl {
config;
constructor(config) {
this.config = config;
}
borders(borders) {
return this.merge({ borders });
}
borderStyle(borderStyle) {
return this.merge({ borderStyle });
}
column(name$1, column) {
return this.merge({ columns: {
...this.config.columns,
[name$1]: column
} });
}
locales(locales) {
return this.merge({ locales });
}
margin(options) {
return this.column("margin", margin(options));
}
maxWidth(maxWidth) {
return this.merge({ maxWidth });
}
merge(config) {
return new TinybenchPrinterImpl({
...this.config,
...config
});
}
name(options) {
return this.column("name", name(options));
}
ops(options) {
return this.column("ops", ops(options));
}
order(order) {
return this.merge({ order });
}
padding(padding) {
return this.merge({ padding });
}
prepareTableConfig(bench) {
const { columns, locales, order, sort, ...rest } = this.config;
let tasks = bench.tasks.filter((task) => task.result.state === "completed" || task.result.state === "aborted-with-statistics");
if (!tasks.length) return;
tasks = sortTasks(tasks, sort);
const fastestTask = getFastestTask(tasks);
const slowestTask = getSlowestTask(tasks);
const formatNumber = createNumberFormatter(locales);
const formatDuration = createDurationFormatter(locales);
const formatCount = createCountFormatter(locales);
const rows = tasks.map((task) => mapRecord(columns, (column) => column.content({
fastestTask,
formatCount,
formatDuration,
formatNumber,
locales,
slowestTask,
task,
tasks
})));
return {
...rest,
columnAlignments: mapRecord(columns, (column) => column.rowAlignment),
columns: order,
columnStyles: mapRecord(columns, (column) => column.rowStyle),
headerAlignments: mapRecord(columns, (column) => column.headerAlignment),
headerStyles: mapRecord(columns, (column) => column.headerStyle),
headerTitles: mapRecord(columns, (column) => column.header),
rows
};
}
samples(options) {
return this.column("samples", samples(options));
}
sort(sort) {
return this.merge({ sort });
}
stdout(stdout) {
return this.merge({ stdout });
}
summary(options) {
return this.column("summary", summary(options));
}
time(options) {
return this.column("time", time(options));
}
toCli(bench) {
const config = this.prepareTableConfig(bench);
if (!config) return "";
return cli.createTable(config);
}
toMarkdown(bench) {
const config = this.prepareTableConfig(bench);
if (!config) return "";
return markdown.createTable(config);
}
useBottomBorder(useBottomBorder) {
return this.merge({ useBottomBorder });
}
useDividerBorder(useDividerBorder) {
return this.merge({ useDividerBorder });
}
useHeader(useHeader) {
return this.merge({ useHeader });
}
useHeaderSeparator(useHeaderSeparator) {
return this.merge({ useHeaderSeparator });
}
useLeftBorder(useLeftBorder) {
return this.merge({ useLeftBorder });
}
useRightBorder(useRightBorder) {
return this.merge({ useRightBorder });
}
useRowSeparator(useRowSeparator) {
return this.merge({ useRowSeparator });
}
useTopBorder(useTopBorder) {
return this.merge({ useTopBorder });
}
};
const tinybenchPrinter = new TinybenchPrinterImpl({
order: [
"name",
"summary",
"ops",
"time",
"margin",
"samples"
],
columns: {
margin: margin(),
name: name(),
ops: ops(),
samples: samples(),
summary: summary(),
time: time()
}
});
//#endregion
export { TinybenchPrinterImpl, tinybenchPrinter };