UNPKG

@monstermann/tinybench-pretty-printer

Version:
162 lines (160 loc) 4.39 kB
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 };