modestbench 0.1.0 → 0.3.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.
Files changed (484) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +162 -57
  3. package/dist/bootstrap.cjs +10 -10
  4. package/dist/bootstrap.cjs.map +1 -1
  5. package/dist/bootstrap.d.cts.map +1 -1
  6. package/dist/bootstrap.d.ts.map +1 -1
  7. package/dist/bootstrap.js +5 -5
  8. package/dist/bootstrap.js.map +1 -1
  9. package/dist/cli/commands/analyze.cjs +60 -0
  10. package/dist/cli/commands/analyze.cjs.map +1 -0
  11. package/dist/cli/commands/analyze.d.cts +35 -0
  12. package/dist/cli/commands/analyze.d.cts.map +1 -0
  13. package/dist/cli/commands/analyze.d.ts +35 -0
  14. package/dist/cli/commands/analyze.d.ts.map +1 -0
  15. package/dist/cli/commands/analyze.js +56 -0
  16. package/dist/cli/commands/analyze.js.map +1 -0
  17. package/dist/cli/commands/baseline.cjs +404 -0
  18. package/dist/cli/commands/baseline.cjs.map +1 -0
  19. package/dist/cli/commands/baseline.d.cts +72 -0
  20. package/dist/cli/commands/baseline.d.cts.map +1 -0
  21. package/dist/cli/commands/baseline.d.ts +72 -0
  22. package/dist/cli/commands/baseline.d.ts.map +1 -0
  23. package/dist/cli/commands/baseline.js +396 -0
  24. package/dist/cli/commands/baseline.js.map +1 -0
  25. package/dist/cli/commands/history.cjs +108 -266
  26. package/dist/cli/commands/history.cjs.map +1 -1
  27. package/dist/cli/commands/history.d.cts +75 -12
  28. package/dist/cli/commands/history.d.cts.map +1 -1
  29. package/dist/cli/commands/history.d.ts +75 -12
  30. package/dist/cli/commands/history.d.ts.map +1 -1
  31. package/dist/cli/commands/history.js +105 -268
  32. package/dist/cli/commands/history.js.map +1 -1
  33. package/dist/cli/commands/init.cjs +88 -155
  34. package/dist/cli/commands/init.cjs.map +1 -1
  35. package/dist/cli/commands/init.d.cts +4 -4
  36. package/dist/cli/commands/init.d.cts.map +1 -1
  37. package/dist/cli/commands/init.d.ts +4 -4
  38. package/dist/cli/commands/init.d.ts.map +1 -1
  39. package/dist/cli/commands/init.js +88 -155
  40. package/dist/cli/commands/init.js.map +1 -1
  41. package/dist/cli/commands/run.cjs +143 -112
  42. package/dist/cli/commands/run.cjs.map +1 -1
  43. package/dist/cli/commands/run.d.cts +17 -3
  44. package/dist/cli/commands/run.d.cts.map +1 -1
  45. package/dist/cli/commands/run.d.ts +17 -3
  46. package/dist/cli/commands/run.d.ts.map +1 -1
  47. package/dist/cli/commands/run.js +142 -78
  48. package/dist/cli/commands/run.js.map +1 -1
  49. package/dist/cli/index.cjs +671 -266
  50. package/dist/cli/index.cjs.map +1 -1
  51. package/dist/cli/index.d.cts +4 -16
  52. package/dist/cli/index.d.cts.map +1 -1
  53. package/dist/cli/index.d.ts +4 -16
  54. package/dist/cli/index.d.ts.map +1 -1
  55. package/dist/cli/index.js +664 -259
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/config/budget-schema.cjs +172 -0
  58. package/dist/config/budget-schema.cjs.map +1 -0
  59. package/dist/config/budget-schema.d.cts +59 -0
  60. package/dist/config/budget-schema.d.cts.map +1 -0
  61. package/dist/config/budget-schema.d.ts +59 -0
  62. package/dist/config/budget-schema.d.ts.map +1 -0
  63. package/dist/config/budget-schema.js +166 -0
  64. package/dist/config/budget-schema.js.map +1 -0
  65. package/dist/config/schema.cjs +182 -2
  66. package/dist/config/schema.cjs.map +1 -1
  67. package/dist/config/schema.d.cts +122 -3
  68. package/dist/config/schema.d.cts.map +1 -1
  69. package/dist/config/schema.d.ts +122 -3
  70. package/dist/config/schema.d.ts.map +1 -1
  71. package/dist/config/schema.js +180 -1
  72. package/dist/config/schema.js.map +1 -1
  73. package/dist/constants.cjs +45 -2
  74. package/dist/constants.cjs.map +1 -1
  75. package/dist/constants.d.cts +41 -0
  76. package/dist/constants.d.cts.map +1 -1
  77. package/dist/constants.d.ts +41 -0
  78. package/dist/constants.d.ts.map +1 -1
  79. package/dist/constants.js +44 -1
  80. package/dist/constants.js.map +1 -1
  81. package/dist/core/engine.cjs +104 -15
  82. package/dist/core/engine.cjs.map +1 -1
  83. package/dist/core/engine.d.cts +7 -4
  84. package/dist/core/engine.d.cts.map +1 -1
  85. package/dist/core/engine.d.ts +7 -4
  86. package/dist/core/engine.d.ts.map +1 -1
  87. package/dist/core/engine.js +105 -16
  88. package/dist/core/engine.js.map +1 -1
  89. package/dist/core/output-path-resolver.cjs +41 -0
  90. package/dist/core/output-path-resolver.cjs.map +1 -0
  91. package/dist/core/output-path-resolver.d.cts +10 -0
  92. package/dist/core/output-path-resolver.d.cts.map +1 -0
  93. package/dist/core/output-path-resolver.d.ts +10 -0
  94. package/dist/core/output-path-resolver.d.ts.map +1 -0
  95. package/dist/core/output-path-resolver.js +37 -0
  96. package/dist/core/output-path-resolver.js.map +1 -0
  97. package/dist/errors/base.cjs +12 -3
  98. package/dist/errors/base.cjs.map +1 -1
  99. package/dist/errors/base.d.cts +7 -0
  100. package/dist/errors/base.d.cts.map +1 -1
  101. package/dist/errors/base.d.ts +7 -0
  102. package/dist/errors/base.d.ts.map +1 -1
  103. package/dist/errors/base.js +10 -2
  104. package/dist/errors/base.js.map +1 -1
  105. package/dist/errors/budget.cjs +37 -0
  106. package/dist/errors/budget.cjs.map +1 -0
  107. package/dist/errors/budget.d.cts +31 -0
  108. package/dist/errors/budget.d.cts.map +1 -0
  109. package/dist/errors/budget.d.ts +31 -0
  110. package/dist/errors/budget.d.ts.map +1 -0
  111. package/dist/errors/budget.js +33 -0
  112. package/dist/errors/budget.js.map +1 -0
  113. package/dist/errors/index.cjs +4 -1
  114. package/dist/errors/index.cjs.map +1 -1
  115. package/dist/errors/index.d.cts +1 -0
  116. package/dist/errors/index.d.cts.map +1 -1
  117. package/dist/errors/index.d.ts +1 -0
  118. package/dist/errors/index.d.ts.map +1 -1
  119. package/dist/errors/index.js +2 -0
  120. package/dist/errors/index.js.map +1 -1
  121. package/dist/formatters/history/base.cjs +9 -0
  122. package/dist/formatters/history/base.cjs.map +1 -0
  123. package/dist/formatters/history/base.d.cts +26 -0
  124. package/dist/formatters/history/base.d.cts.map +1 -0
  125. package/dist/formatters/history/base.d.ts +26 -0
  126. package/dist/formatters/history/base.d.ts.map +1 -0
  127. package/dist/formatters/history/base.js +8 -0
  128. package/dist/formatters/history/base.js.map +1 -0
  129. package/dist/formatters/history/compare.cjs +127 -0
  130. package/dist/formatters/history/compare.cjs.map +1 -0
  131. package/dist/formatters/history/compare.d.cts +21 -0
  132. package/dist/formatters/history/compare.d.cts.map +1 -0
  133. package/dist/formatters/history/compare.d.ts +21 -0
  134. package/dist/formatters/history/compare.d.ts.map +1 -0
  135. package/dist/formatters/history/compare.js +123 -0
  136. package/dist/formatters/history/compare.js.map +1 -0
  137. package/dist/formatters/history/list.cjs +74 -0
  138. package/dist/formatters/history/list.cjs.map +1 -0
  139. package/dist/formatters/history/list.d.cts +25 -0
  140. package/dist/formatters/history/list.d.cts.map +1 -0
  141. package/dist/formatters/history/list.d.ts +25 -0
  142. package/dist/formatters/history/list.d.ts.map +1 -0
  143. package/dist/formatters/history/list.js +70 -0
  144. package/dist/formatters/history/list.js.map +1 -0
  145. package/dist/formatters/history/show.cjs +98 -0
  146. package/dist/formatters/history/show.cjs.map +1 -0
  147. package/dist/formatters/history/show.d.cts +21 -0
  148. package/dist/formatters/history/show.d.cts.map +1 -0
  149. package/dist/formatters/history/show.d.ts +21 -0
  150. package/dist/formatters/history/show.d.ts.map +1 -0
  151. package/dist/formatters/history/show.js +94 -0
  152. package/dist/formatters/history/show.js.map +1 -0
  153. package/dist/formatters/history/trends.cjs +194 -0
  154. package/dist/formatters/history/trends.cjs.map +1 -0
  155. package/dist/formatters/history/trends.d.cts +22 -0
  156. package/dist/formatters/history/trends.d.cts.map +1 -0
  157. package/dist/formatters/history/trends.d.ts +22 -0
  158. package/dist/formatters/history/trends.d.ts.map +1 -0
  159. package/dist/formatters/history/trends.js +190 -0
  160. package/dist/formatters/history/trends.js.map +1 -0
  161. package/dist/formatters/history/visualization.cjs +79 -0
  162. package/dist/formatters/history/visualization.cjs.map +1 -0
  163. package/dist/formatters/history/visualization.d.cts +24 -0
  164. package/dist/formatters/history/visualization.d.cts.map +1 -0
  165. package/dist/formatters/history/visualization.d.ts +24 -0
  166. package/dist/formatters/history/visualization.d.ts.map +1 -0
  167. package/dist/formatters/history/visualization.js +74 -0
  168. package/dist/formatters/history/visualization.js.map +1 -0
  169. package/dist/index.cjs +27 -17
  170. package/dist/index.cjs.map +1 -1
  171. package/dist/index.d.cts +10 -5
  172. package/dist/index.d.cts.map +1 -1
  173. package/dist/index.d.ts +10 -5
  174. package/dist/index.d.ts.map +1 -1
  175. package/dist/index.js +14 -9
  176. package/dist/index.js.map +1 -1
  177. package/dist/reporters/csv.cjs +39 -19
  178. package/dist/reporters/csv.cjs.map +1 -1
  179. package/dist/reporters/csv.d.cts +4 -7
  180. package/dist/reporters/csv.d.cts.map +1 -1
  181. package/dist/reporters/csv.d.ts +4 -7
  182. package/dist/reporters/csv.d.ts.map +1 -1
  183. package/dist/reporters/csv.js +38 -18
  184. package/dist/reporters/csv.js.map +1 -1
  185. package/dist/reporters/human.cjs +87 -99
  186. package/dist/reporters/human.cjs.map +1 -1
  187. package/dist/reporters/human.d.cts +15 -14
  188. package/dist/reporters/human.d.cts.map +1 -1
  189. package/dist/reporters/human.d.ts +15 -14
  190. package/dist/reporters/human.d.ts.map +1 -1
  191. package/dist/reporters/human.js +68 -80
  192. package/dist/reporters/human.js.map +1 -1
  193. package/dist/reporters/json.cjs +25 -50
  194. package/dist/reporters/json.cjs.map +1 -1
  195. package/dist/reporters/json.d.cts +3 -29
  196. package/dist/reporters/json.d.cts.map +1 -1
  197. package/dist/reporters/json.d.ts +3 -29
  198. package/dist/reporters/json.d.ts.map +1 -1
  199. package/dist/reporters/json.js +26 -51
  200. package/dist/reporters/json.js.map +1 -1
  201. package/dist/reporters/profile-human.cjs +149 -0
  202. package/dist/reporters/profile-human.cjs.map +1 -0
  203. package/dist/reporters/profile-human.d.cts +44 -0
  204. package/dist/reporters/profile-human.d.cts.map +1 -0
  205. package/dist/reporters/profile-human.d.ts +44 -0
  206. package/dist/reporters/profile-human.d.ts.map +1 -0
  207. package/dist/reporters/profile-human.js +142 -0
  208. package/dist/reporters/profile-human.js.map +1 -0
  209. package/dist/reporters/simple.cjs +66 -46
  210. package/dist/reporters/simple.cjs.map +1 -1
  211. package/dist/reporters/simple.d.cts +15 -15
  212. package/dist/reporters/simple.d.cts.map +1 -1
  213. package/dist/reporters/simple.d.ts +15 -15
  214. package/dist/reporters/simple.d.ts.map +1 -1
  215. package/dist/reporters/simple.js +65 -45
  216. package/dist/reporters/simple.js.map +1 -1
  217. package/dist/schema/modestbench-config.schema.json +153 -0
  218. package/dist/services/baseline-storage.cjs +151 -0
  219. package/dist/services/baseline-storage.cjs.map +1 -0
  220. package/dist/services/baseline-storage.d.cts +55 -0
  221. package/dist/services/baseline-storage.d.cts.map +1 -0
  222. package/dist/services/baseline-storage.d.ts +55 -0
  223. package/dist/services/baseline-storage.d.ts.map +1 -0
  224. package/dist/services/baseline-storage.js +147 -0
  225. package/dist/services/baseline-storage.js.map +1 -0
  226. package/dist/services/budget-evaluator.cjs +146 -0
  227. package/dist/services/budget-evaluator.cjs.map +1 -0
  228. package/dist/services/budget-evaluator.d.cts +29 -0
  229. package/dist/services/budget-evaluator.d.cts.map +1 -0
  230. package/dist/services/budget-evaluator.d.ts +29 -0
  231. package/dist/services/budget-evaluator.d.ts.map +1 -0
  232. package/dist/services/budget-evaluator.js +142 -0
  233. package/dist/services/budget-evaluator.js.map +1 -0
  234. package/dist/{config/manager.cjs → services/config-manager.cjs} +25 -11
  235. package/dist/services/config-manager.cjs.map +1 -0
  236. package/dist/{config/manager.d.cts → services/config-manager.d.cts} +7 -2
  237. package/dist/services/config-manager.d.cts.map +1 -0
  238. package/dist/{config/manager.d.ts → services/config-manager.d.ts} +7 -2
  239. package/dist/services/config-manager.d.ts.map +1 -0
  240. package/dist/{config/manager.js → services/config-manager.js} +25 -11
  241. package/dist/services/config-manager.js.map +1 -0
  242. package/dist/{core/loader.cjs → services/file-loader.cjs} +5 -8
  243. package/dist/services/file-loader.cjs.map +1 -0
  244. package/dist/{core/loader.d.cts → services/file-loader.d.cts} +1 -1
  245. package/dist/services/file-loader.d.cts.map +1 -0
  246. package/dist/{core/loader.d.ts → services/file-loader.d.ts} +1 -1
  247. package/dist/services/file-loader.d.ts.map +1 -0
  248. package/dist/{core/loader.js → services/file-loader.js} +5 -8
  249. package/dist/services/file-loader.js.map +1 -0
  250. package/dist/services/history/comparison.cjs +124 -0
  251. package/dist/services/history/comparison.cjs.map +1 -0
  252. package/dist/services/history/comparison.d.cts +18 -0
  253. package/dist/services/history/comparison.d.cts.map +1 -0
  254. package/dist/services/history/comparison.d.ts +18 -0
  255. package/dist/services/history/comparison.d.ts.map +1 -0
  256. package/dist/services/history/comparison.js +120 -0
  257. package/dist/services/history/comparison.js.map +1 -0
  258. package/dist/services/history/models.cjs +9 -0
  259. package/dist/services/history/models.cjs.map +1 -0
  260. package/dist/services/history/models.d.cts +139 -0
  261. package/dist/services/history/models.d.cts.map +1 -0
  262. package/dist/services/history/models.d.ts +139 -0
  263. package/dist/services/history/models.d.ts.map +1 -0
  264. package/dist/services/history/models.js +8 -0
  265. package/dist/services/history/models.js.map +1 -0
  266. package/dist/services/history/query.cjs +97 -0
  267. package/dist/services/history/query.cjs.map +1 -0
  268. package/dist/services/history/query.d.cts +38 -0
  269. package/dist/services/history/query.d.cts.map +1 -0
  270. package/dist/services/history/query.d.ts +38 -0
  271. package/dist/services/history/query.d.ts.map +1 -0
  272. package/dist/services/history/query.js +92 -0
  273. package/dist/services/history/query.js.map +1 -0
  274. package/dist/services/history/trend-analysis.cjs +187 -0
  275. package/dist/services/history/trend-analysis.cjs.map +1 -0
  276. package/dist/services/history/trend-analysis.d.cts +34 -0
  277. package/dist/services/history/trend-analysis.d.cts.map +1 -0
  278. package/dist/services/history/trend-analysis.d.ts +34 -0
  279. package/dist/services/history/trend-analysis.d.ts.map +1 -0
  280. package/dist/services/history/trend-analysis.js +179 -0
  281. package/dist/services/history/trend-analysis.js.map +1 -0
  282. package/dist/{storage/history.cjs → services/history-storage.cjs} +1 -1
  283. package/dist/services/history-storage.cjs.map +1 -0
  284. package/dist/{storage/history.d.cts → services/history-storage.d.cts} +1 -1
  285. package/dist/services/history-storage.d.cts.map +1 -0
  286. package/dist/{storage/history.d.ts → services/history-storage.d.ts} +1 -1
  287. package/dist/services/history-storage.d.ts.map +1 -0
  288. package/dist/{storage/history.js → services/history-storage.js} +1 -1
  289. package/dist/services/history-storage.js.map +1 -0
  290. package/dist/services/profiler/profile-filter.cjs +113 -0
  291. package/dist/services/profiler/profile-filter.cjs.map +1 -0
  292. package/dist/services/profiler/profile-filter.d.cts +20 -0
  293. package/dist/services/profiler/profile-filter.d.cts.map +1 -0
  294. package/dist/services/profiler/profile-filter.d.ts +20 -0
  295. package/dist/services/profiler/profile-filter.d.ts.map +1 -0
  296. package/dist/services/profiler/profile-filter.js +109 -0
  297. package/dist/services/profiler/profile-filter.js.map +1 -0
  298. package/dist/services/profiler/profile-parser.cjs +139 -0
  299. package/dist/services/profiler/profile-parser.cjs.map +1 -0
  300. package/dist/services/profiler/profile-parser.d.cts +18 -0
  301. package/dist/services/profiler/profile-parser.d.cts.map +1 -0
  302. package/dist/services/profiler/profile-parser.d.ts +18 -0
  303. package/dist/services/profiler/profile-parser.d.ts.map +1 -0
  304. package/dist/services/profiler/profile-parser.js +132 -0
  305. package/dist/services/profiler/profile-parser.js.map +1 -0
  306. package/dist/services/profiler/profile-runner.cjs +90 -0
  307. package/dist/services/profiler/profile-runner.cjs.map +1 -0
  308. package/dist/services/profiler/profile-runner.d.cts +29 -0
  309. package/dist/services/profiler/profile-runner.d.cts.map +1 -0
  310. package/dist/services/profiler/profile-runner.d.ts +29 -0
  311. package/dist/services/profiler/profile-runner.d.ts.map +1 -0
  312. package/dist/services/profiler/profile-runner.js +86 -0
  313. package/dist/services/profiler/profile-runner.js.map +1 -0
  314. package/dist/{progress/manager.cjs → services/progress-manager.cjs} +1 -1
  315. package/dist/services/progress-manager.cjs.map +1 -0
  316. package/dist/{progress/manager.d.cts → services/progress-manager.d.cts} +1 -1
  317. package/dist/services/progress-manager.d.cts.map +1 -0
  318. package/dist/{progress/manager.d.ts → services/progress-manager.d.ts} +1 -1
  319. package/dist/services/progress-manager.d.ts.map +1 -0
  320. package/dist/{progress/manager.js → services/progress-manager.js} +1 -1
  321. package/dist/services/progress-manager.js.map +1 -0
  322. package/dist/{reporters/registry.cjs → services/reporter-registry.cjs} +19 -25
  323. package/dist/services/reporter-registry.cjs.map +1 -0
  324. package/dist/{reporters/registry.d.cts → services/reporter-registry.d.cts} +19 -41
  325. package/dist/services/reporter-registry.d.cts.map +1 -0
  326. package/dist/{reporters/registry.d.ts → services/reporter-registry.d.ts} +19 -41
  327. package/dist/services/reporter-registry.d.ts.map +1 -0
  328. package/dist/{reporters/registry.js → services/reporter-registry.js} +19 -25
  329. package/dist/services/reporter-registry.js.map +1 -0
  330. package/dist/types/budgets.cjs +8 -0
  331. package/dist/types/budgets.cjs.map +1 -0
  332. package/dist/types/budgets.d.cts +149 -0
  333. package/dist/types/budgets.d.cts.map +1 -0
  334. package/dist/types/budgets.d.ts +149 -0
  335. package/dist/types/budgets.d.ts.map +1 -0
  336. package/dist/types/budgets.js +7 -0
  337. package/dist/types/budgets.js.map +1 -0
  338. package/dist/types/cli.cjs +2 -11
  339. package/dist/types/cli.cjs.map +1 -1
  340. package/dist/types/cli.d.cts +3 -224
  341. package/dist/types/cli.d.cts.map +1 -1
  342. package/dist/types/cli.d.ts +3 -224
  343. package/dist/types/cli.d.ts.map +1 -1
  344. package/dist/types/cli.js +2 -11
  345. package/dist/types/cli.js.map +1 -1
  346. package/dist/types/core.cjs +6 -1
  347. package/dist/types/core.cjs.map +1 -1
  348. package/dist/types/core.d.cts +13 -2
  349. package/dist/types/core.d.cts.map +1 -1
  350. package/dist/types/core.d.ts +13 -2
  351. package/dist/types/core.d.ts.map +1 -1
  352. package/dist/types/core.js +2 -1
  353. package/dist/types/core.js.map +1 -1
  354. package/dist/types/index.cjs +5 -0
  355. package/dist/types/index.cjs.map +1 -1
  356. package/dist/types/index.d.cts +2 -0
  357. package/dist/types/index.d.cts.map +1 -1
  358. package/dist/types/index.d.ts +2 -0
  359. package/dist/types/index.d.ts.map +1 -1
  360. package/dist/types/index.js +2 -0
  361. package/dist/types/index.js.map +1 -1
  362. package/dist/types/interfaces.d.cts +15 -8
  363. package/dist/types/interfaces.d.cts.map +1 -1
  364. package/dist/types/interfaces.d.ts +15 -8
  365. package/dist/types/interfaces.d.ts.map +1 -1
  366. package/dist/types/profiler.cjs +11 -0
  367. package/dist/types/profiler.cjs.map +1 -0
  368. package/dist/types/profiler.d.cts +100 -0
  369. package/dist/types/profiler.d.cts.map +1 -0
  370. package/dist/types/profiler.d.ts +100 -0
  371. package/dist/types/profiler.d.ts.map +1 -0
  372. package/dist/types/profiler.js +10 -0
  373. package/dist/types/profiler.js.map +1 -0
  374. package/dist/types/utility.cjs.map +1 -1
  375. package/dist/types/utility.d.cts +0 -8
  376. package/dist/types/utility.d.cts.map +1 -1
  377. package/dist/types/utility.d.ts +0 -8
  378. package/dist/types/utility.d.ts.map +1 -1
  379. package/dist/types/utility.js.map +1 -1
  380. package/dist/utils/ansi.cjs +61 -0
  381. package/dist/utils/ansi.cjs.map +1 -0
  382. package/dist/utils/ansi.d.cts +53 -0
  383. package/dist/utils/ansi.d.cts.map +1 -0
  384. package/dist/utils/ansi.d.ts +53 -0
  385. package/dist/utils/ansi.d.ts.map +1 -0
  386. package/dist/utils/ansi.js +57 -0
  387. package/dist/utils/ansi.js.map +1 -0
  388. package/dist/utils/identifiers.cjs +32 -0
  389. package/dist/utils/identifiers.cjs.map +1 -0
  390. package/dist/utils/identifiers.d.cts +32 -0
  391. package/dist/utils/identifiers.d.cts.map +1 -0
  392. package/dist/utils/identifiers.d.ts +32 -0
  393. package/dist/utils/identifiers.d.ts.map +1 -0
  394. package/dist/utils/identifiers.js +27 -0
  395. package/dist/utils/identifiers.js.map +1 -0
  396. package/dist/utils/package.cjs +40 -0
  397. package/dist/utils/package.cjs.map +1 -0
  398. package/dist/utils/package.d.cts +15 -0
  399. package/dist/utils/package.d.cts.map +1 -0
  400. package/dist/utils/package.d.ts +15 -0
  401. package/dist/utils/package.d.ts.map +1 -0
  402. package/dist/utils/package.js +33 -0
  403. package/dist/utils/package.js.map +1 -0
  404. package/dist/utils/type-guards.cjs +48 -0
  405. package/dist/utils/type-guards.cjs.map +1 -0
  406. package/dist/utils/type-guards.d.cts +22 -0
  407. package/dist/utils/type-guards.d.cts.map +1 -0
  408. package/dist/utils/type-guards.d.ts +22 -0
  409. package/dist/utils/type-guards.d.ts.map +1 -0
  410. package/dist/utils/type-guards.js +43 -0
  411. package/dist/utils/type-guards.js.map +1 -0
  412. package/package.json +14 -13
  413. package/src/bootstrap.ts +5 -5
  414. package/src/cli/commands/analyze.ts +101 -0
  415. package/src/cli/commands/baseline.ts +577 -0
  416. package/src/cli/commands/history.ts +194 -342
  417. package/src/cli/commands/init.ts +105 -183
  418. package/src/cli/commands/run.ts +186 -88
  419. package/src/cli/index.ts +731 -234
  420. package/src/config/budget-schema.ts +189 -0
  421. package/src/config/schema.ts +260 -1
  422. package/src/constants.ts +53 -1
  423. package/src/core/engine.ts +153 -14
  424. package/src/core/output-path-resolver.ts +46 -0
  425. package/src/errors/base.ts +11 -2
  426. package/src/errors/budget.ts +38 -0
  427. package/src/errors/index.ts +3 -0
  428. package/src/formatters/history/base.ts +28 -0
  429. package/src/formatters/history/compare.ts +186 -0
  430. package/src/formatters/history/list.ts +101 -0
  431. package/src/formatters/history/show.ts +155 -0
  432. package/src/formatters/history/trends.ts +281 -0
  433. package/src/formatters/history/visualization.ts +93 -0
  434. package/src/index.ts +17 -12
  435. package/src/reporters/csv.ts +55 -26
  436. package/src/reporters/human.ts +90 -89
  437. package/src/reporters/json.ts +27 -72
  438. package/src/reporters/profile-human.ts +204 -0
  439. package/src/reporters/simple.ts +85 -54
  440. package/src/services/baseline-storage.ts +199 -0
  441. package/src/services/budget-evaluator.ts +182 -0
  442. package/src/{config/manager.ts → services/config-manager.ts} +24 -9
  443. package/src/{core/loader.ts → services/file-loader.ts} +4 -7
  444. package/src/services/history/comparison.ts +130 -0
  445. package/src/services/history/models.ts +148 -0
  446. package/src/services/history/query.ts +116 -0
  447. package/src/services/history/trend-analysis.ts +238 -0
  448. package/src/services/profiler/profile-filter.ts +143 -0
  449. package/src/services/profiler/profile-parser.ts +194 -0
  450. package/src/services/profiler/profile-runner.ts +121 -0
  451. package/src/{reporters/registry.ts → services/reporter-registry.ts} +46 -81
  452. package/src/types/budgets.ts +180 -0
  453. package/src/types/cli.ts +5 -235
  454. package/src/types/core.ts +50 -10
  455. package/src/types/index.ts +5 -0
  456. package/src/types/interfaces.ts +16 -6
  457. package/src/types/profiler.ts +132 -0
  458. package/src/types/utility.ts +0 -10
  459. package/src/utils/ansi.ts +59 -0
  460. package/src/utils/identifiers.ts +58 -0
  461. package/src/utils/package.ts +35 -0
  462. package/src/utils/type-guards.ts +51 -0
  463. package/dist/config/manager.cjs.map +0 -1
  464. package/dist/config/manager.d.cts.map +0 -1
  465. package/dist/config/manager.d.ts.map +0 -1
  466. package/dist/config/manager.js.map +0 -1
  467. package/dist/core/loader.cjs.map +0 -1
  468. package/dist/core/loader.d.cts.map +0 -1
  469. package/dist/core/loader.d.ts.map +0 -1
  470. package/dist/core/loader.js.map +0 -1
  471. package/dist/progress/manager.cjs.map +0 -1
  472. package/dist/progress/manager.d.cts.map +0 -1
  473. package/dist/progress/manager.d.ts.map +0 -1
  474. package/dist/progress/manager.js.map +0 -1
  475. package/dist/reporters/registry.cjs.map +0 -1
  476. package/dist/reporters/registry.d.cts.map +0 -1
  477. package/dist/reporters/registry.d.ts.map +0 -1
  478. package/dist/reporters/registry.js.map +0 -1
  479. package/dist/storage/history.cjs.map +0 -1
  480. package/dist/storage/history.d.cts.map +0 -1
  481. package/dist/storage/history.d.ts.map +0 -1
  482. package/dist/storage/history.js.map +0 -1
  483. /package/src/{storage/history.ts → services/history-storage.ts} +0 -0
  484. /package/src/{progress/manager.ts → services/progress-manager.ts} +0 -0
@@ -33,74 +33,10 @@ export abstract class BaseReporter implements Reporter {
33
33
  this.options = options;
34
34
  }
35
35
 
36
- /**
37
- * Get reporter name
38
- */
39
- getName(): string {
40
- return this.name;
41
- }
42
-
43
- /**
44
- * Get reporter options
45
- */
46
- getOptions(): Record<string, unknown> {
47
- return { ...this.options };
48
- }
49
-
50
- /**
51
- * Called when benchmark run completes
52
- */
53
- abstract onEnd(run: BenchmarkRun): Promise<void> | void;
54
-
55
- /**
56
- * Called when an error occurs
57
- */
58
- abstract onError(error: Error): Promise<void> | void;
59
-
60
- /**
61
- * Called when a file completes
62
- */
63
- abstract onFileEnd(result: FileResult): Promise<void> | void;
64
-
65
- /**
66
- * Called when a file starts execution
67
- */
68
- abstract onFileStart(file: string): Promise<void> | void;
69
-
70
- /**
71
- * Called for progress updates
72
- */
73
- abstract onProgress(state: ProgressState): Promise<void> | void;
74
-
75
- /**
76
- * Called when benchmark run starts
77
- */
78
- abstract onStart(run: BenchmarkRun): Promise<void> | void;
79
-
80
- /**
81
- * Called when a suite completes
82
- */
83
- abstract onSuiteEnd(result: SuiteResult): Promise<void> | void;
84
-
85
- /**
86
- * Called when a suite starts execution
87
- */
88
- abstract onSuiteStart(suite: string): Promise<void> | void;
89
-
90
- /**
91
- * Called when a task completes
92
- */
93
- abstract onTaskResult(result: TaskResult): Promise<void> | void;
94
-
95
- /**
96
- * Called when a task starts execution
97
- */
98
- abstract onTaskStart(task: string): Promise<void> | void;
99
-
100
36
  /**
101
37
  * Utility method to format duration in human-readable format
102
38
  */
103
- protected formatDuration(nanoseconds: number): string {
39
+ protected static formatDuration(this: void, nanoseconds: number): string {
104
40
  if (nanoseconds < 1000) {
105
41
  return `${nanoseconds.toFixed(2)}ns`;
106
42
  } else if (nanoseconds < 1000000) {
@@ -115,7 +51,10 @@ export abstract class BaseReporter implements Reporter {
115
51
  /**
116
52
  * Utility method to format operations per second
117
53
  */
118
- protected formatOpsPerSecond(opsPerSecond: number): string {
54
+ protected static formatOpsPerSecond(
55
+ this: void,
56
+ opsPerSecond: number,
57
+ ): string {
119
58
  if (opsPerSecond < 1000) {
120
59
  return `${opsPerSecond.toFixed(2)} ops/sec`;
121
60
  } else if (opsPerSecond < 1000000) {
@@ -130,23 +69,43 @@ export abstract class BaseReporter implements Reporter {
130
69
  /**
131
70
  * Utility method to format percentage
132
71
  */
133
- protected formatPercentage(value: number): string {
72
+ protected static formatPercentage(this: void, value: number): string {
134
73
  return `${value.toFixed(2)}%`;
135
74
  }
136
75
 
137
76
  /**
138
- * Utility method to safely handle async operations
77
+ * Get reporter name
139
78
  */
140
- protected async safeAsync<T>(operation: () => Promise<T>): Promise<null | T> {
141
- try {
142
- return await operation();
143
- } catch (error) {
144
- await this.onError(
145
- error instanceof Error ? error : new Error(String(error)),
146
- );
147
- return null;
148
- }
79
+ getName(): string {
80
+ return this.name;
81
+ }
82
+
83
+ /**
84
+ * Get reporter options
85
+ */
86
+ getOptions(): Record<string, unknown> {
87
+ return { ...this.options };
149
88
  }
89
+
90
+ /**
91
+ * Called when benchmark run completes
92
+ */
93
+ abstract onEnd(run: BenchmarkRun): Promise<void> | void;
94
+
95
+ /**
96
+ * Called when an error occurs
97
+ */
98
+ abstract onError(error: Error): Promise<void> | void;
99
+
100
+ /**
101
+ * Called when benchmark run starts
102
+ */
103
+ abstract onStart(run: BenchmarkRun): Promise<void> | void;
104
+
105
+ /**
106
+ * Called when a task completes
107
+ */
108
+ abstract onTaskResult(result: TaskResult): Promise<void> | void;
150
109
  }
151
110
 
152
111
  /**
@@ -162,6 +121,8 @@ export class CompositeReporter extends BaseReporter {
162
121
 
163
122
  /**
164
123
  * Add a reporter to the composite
124
+ *
125
+ * Intended for programmatic usage.
165
126
  */
166
127
  addReporter(reporter: Reporter): void {
167
128
  this.reporters.push(reporter);
@@ -169,16 +130,18 @@ export class CompositeReporter extends BaseReporter {
169
130
 
170
131
  /**
171
132
  * Get all reporters in the composite
133
+ *
134
+ * Intended for programmatic usage.
172
135
  */
173
136
  getReporters(): Reporter[] {
174
137
  return [...this.reporters];
175
138
  }
176
139
 
177
- async onEnd(run: BenchmarkRun): Promise<void> {
140
+ override async onEnd(run: BenchmarkRun): Promise<void> {
178
141
  await this.broadcastAsync('onEnd', run);
179
142
  }
180
143
 
181
- async onError(error: Error): Promise<void> {
144
+ override async onError(error: Error): Promise<void> {
182
145
  await this.broadcastAsync('onError', error);
183
146
  }
184
147
 
@@ -194,7 +157,7 @@ export class CompositeReporter extends BaseReporter {
194
157
  await this.broadcastAsync('onProgress', state);
195
158
  }
196
159
 
197
- async onStart(run: BenchmarkRun): Promise<void> {
160
+ override async onStart(run: BenchmarkRun): Promise<void> {
198
161
  await this.broadcastAsync('onStart', run);
199
162
  }
200
163
 
@@ -206,7 +169,7 @@ export class CompositeReporter extends BaseReporter {
206
169
  await this.broadcastAsync('onSuiteStart', suite);
207
170
  }
208
171
 
209
- async onTaskResult(result: TaskResult): Promise<void> {
172
+ override async onTaskResult(result: TaskResult): Promise<void> {
210
173
  await this.broadcastAsync('onTaskResult', result);
211
174
  }
212
175
 
@@ -216,6 +179,8 @@ export class CompositeReporter extends BaseReporter {
216
179
 
217
180
  /**
218
181
  * Remove a reporter from the composite
182
+ *
183
+ * Intended for programmatic usage.
219
184
  */
220
185
  removeReporter(reporter: Reporter): boolean {
221
186
  const index = this.reporters.indexOf(reporter);
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Performance budget types for benchmark thresholds
3
+ *
4
+ * @module types/budgets
5
+ */
6
+
7
+ /**
8
+ * Absolute performance budgets (time-based)
9
+ */
10
+ export interface AbsoluteBudget {
11
+ /** Maximum 99th percentile in nanoseconds */
12
+ readonly maxP99?: number;
13
+
14
+ /** Maximum mean execution time in nanoseconds */
15
+ readonly maxTime?: number;
16
+
17
+ /** Minimum operations per second */
18
+ readonly minOpsPerSec?: number;
19
+ }
20
+
21
+ /**
22
+ * Named baseline reference
23
+ */
24
+ export interface BaselineReference {
25
+ /** Git branch (if available) */
26
+ readonly branch?: string;
27
+
28
+ /** Git commit (if available) */
29
+ readonly commit?: string;
30
+
31
+ /** Date baseline was created */
32
+ readonly date: Date;
33
+
34
+ /** Baseline name */
35
+ readonly name: string;
36
+
37
+ /** Run ID this baseline points to */
38
+ readonly runId: RunId;
39
+
40
+ /** Summary of benchmark results for quick comparison */
41
+ readonly summary: Record<TaskId, BaselineSummaryData>;
42
+ }
43
+
44
+ /**
45
+ * Baseline storage file format
46
+ */
47
+ export interface BaselineStorage {
48
+ /** Named baselines */
49
+ readonly baselines: Record<string, BaselineReference>;
50
+
51
+ /** Default baseline name (optional) */
52
+ readonly default?: string;
53
+
54
+ /** Schema version */
55
+ readonly version: string;
56
+ }
57
+
58
+ /**
59
+ * Baseline summary data for a single task
60
+ */
61
+ export interface BaselineSummaryData {
62
+ /** Mean execution time in nanoseconds */
63
+ readonly mean: number;
64
+
65
+ /** Operations per second */
66
+ readonly opsPerSecond: number;
67
+
68
+ /** 99th percentile (if available) */
69
+ readonly p99?: number;
70
+ }
71
+
72
+ /**
73
+ * Complete budget definition
74
+ */
75
+ export interface Budget {
76
+ /** Absolute thresholds */
77
+ readonly absolute?: AbsoluteBudget;
78
+
79
+ /** Relative thresholds */
80
+ readonly relative?: RelativeBudget;
81
+ }
82
+
83
+ /**
84
+ * Budget evaluation result for a single task
85
+ */
86
+ export interface BudgetResult {
87
+ /** Actual measured values */
88
+ readonly actual: {
89
+ readonly mean: number;
90
+ readonly opsPerSecond: number;
91
+ readonly p99?: number;
92
+ };
93
+
94
+ /** Baseline values (if relative budget) */
95
+ readonly baseline?: {
96
+ readonly mean: number;
97
+ readonly opsPerSecond: number;
98
+ readonly p99?: number;
99
+ };
100
+
101
+ /** Budget that was checked */
102
+ readonly budget: Budget;
103
+
104
+ /** Whether budget passed */
105
+ readonly passed: boolean;
106
+
107
+ /** Task identifier (file/suite/task) */
108
+ readonly taskId: TaskId;
109
+
110
+ /** Violations (what thresholds were exceeded) */
111
+ readonly violations: BudgetViolation[];
112
+ }
113
+
114
+ /**
115
+ * Budget evaluation summary for entire run
116
+ */
117
+ export interface BudgetSummary {
118
+ /** Number failed */
119
+ readonly failed: number;
120
+
121
+ /** Number passed */
122
+ readonly passed: number;
123
+
124
+ /** Individual results */
125
+ readonly results: BudgetResult[];
126
+
127
+ /** Total budgets checked */
128
+ readonly total: number;
129
+ }
130
+
131
+ /**
132
+ * Specific budget violation
133
+ */
134
+ export interface BudgetViolation {
135
+ /** Actual measured value */
136
+ readonly actual: number;
137
+
138
+ /** How much over/under threshold (as decimal, e.g., 0.15 = 15% over) */
139
+ readonly delta: number;
140
+
141
+ /** Human-readable message */
142
+ readonly message: string;
143
+
144
+ /** Expected threshold */
145
+ readonly threshold: number;
146
+
147
+ /** Type of budget that was violated */
148
+ readonly type: 'maxP99' | 'maxRegression' | 'maxTime' | 'minOpsPerSec';
149
+ }
150
+
151
+ /**
152
+ * Relative performance budgets (comparison-based)
153
+ */
154
+ export interface RelativeBudget {
155
+ /** Name of baseline to compare against */
156
+ readonly baseline?: string;
157
+
158
+ /** Maximum performance regression as decimal (0.10 = 10%) */
159
+ readonly maxRegression?: number;
160
+ }
161
+
162
+ /**
163
+ * Branded type for benchmark run identifiers
164
+ *
165
+ * RunId is a 7-character alphanumeric string that uniquely identifies a
166
+ * benchmark run. Using a branded type prevents accidental mixing with regular
167
+ * strings or TaskIds.
168
+ */
169
+ export type RunId = string & { readonly __brand: 'RunId' };
170
+
171
+ /**
172
+ * Branded type for task identifiers
173
+ *
174
+ * TaskId follows the format: `{filePath}/{suiteName}/{taskName}` Example:
175
+ * `benchmarks/array.bench.js/Array Operations/Array.push()`
176
+ *
177
+ * Using a branded type prevents accidental mixing with regular strings or
178
+ * RunIds.
179
+ */
180
+ export type TaskId = string & { readonly __brand: 'TaskId' };
package/src/types/cli.ts CHANGED
@@ -5,17 +5,9 @@
5
5
  * definitions, argument parsing, and CLI-specific configuration structures.
6
6
  */
7
7
 
8
- /**
9
- * Exit codes used by the CLI
10
- */
11
- export const ExitCodes = {
12
- ConfigurationError: 2,
13
- ExecutionError: 5,
14
- FileDiscoveryError: 3,
15
- GeneralError: 1,
16
- Success: 0,
17
- ValidationError: 4,
18
- } as const;
8
+ import { ExitCodes } from '../constants.js';
9
+
10
+ export { ExitCodes };
19
11
 
20
12
  /**
21
13
  * CLI argument specification for a command
@@ -39,56 +31,6 @@ export interface ArgumentSpec {
39
31
  readonly validate?: (value: unknown) => boolean | string;
40
32
  }
41
33
 
42
- /**
43
- * Base command interface
44
- */
45
- export interface CliCommand {
46
- /** Command aliases */
47
- readonly aliases?: string[];
48
- /** Command description */
49
- readonly description: string;
50
- /** Execute the command */
51
- execute(args: CommandArguments): Promise<ExitCode>;
52
- /** Command name */
53
- readonly name: string;
54
- }
55
-
56
- /**
57
- * CLI configuration
58
- */
59
- export interface CliConfig {
60
- /** Available commands */
61
- readonly commands: CommandSpec[];
62
- /** Application description */
63
- readonly description: string;
64
- /** Global options */
65
- readonly globalOptions: ArgumentSpec[];
66
- /** Application name */
67
- readonly name: string;
68
- /** Application version */
69
- readonly version: string;
70
- }
71
-
72
- /**
73
- * Color theme for CLI output
74
- */
75
- export interface ColorTheme {
76
- /** Error color */
77
- readonly error: string;
78
- /** Highlight color */
79
- readonly highlight: string;
80
- /** Info color */
81
- readonly info: string;
82
- /** Muted/secondary text color */
83
- readonly muted: string;
84
- /** Primary color for branding */
85
- readonly primary: string;
86
- /** Success color */
87
- readonly success: string;
88
- /** Warning color */
89
- readonly warning: string;
90
- }
91
-
92
34
  /**
93
35
  * Parsed command-line arguments
94
36
  */
@@ -119,118 +61,9 @@ export interface CommandSpec {
119
61
  readonly subcommands?: CommandSpec[];
120
62
  }
121
63
 
122
- export type ExitCode = (typeof ExitCodes)[keyof typeof ExitCodes];
123
-
124
- /**
125
- * Global CLI options available to all commands
126
- */
127
- export interface GlobalOptions {
128
- readonly c?: string;
129
- /** Configuration file */
130
- readonly config?: string;
131
- /** Working directory */
132
- readonly cwd?: string;
133
- readonly h?: boolean;
134
- /** Help flag */
135
- readonly help?: boolean;
136
- /** Log level */
137
- readonly logLevel?: 'debug' | 'error' | 'info' | 'silent' | 'warn';
138
- /** No color output */
139
- readonly noColor?: boolean;
140
- /** Version flag */
141
- readonly version?: boolean;
142
- }
143
-
144
- /**
145
- * CLI help information
146
- */
147
- export interface HelpInfo {
148
- /** Command name */
149
- readonly command: string;
150
- /** Command description */
151
- readonly description: string;
152
- /** Examples */
153
- readonly examples?: string[];
154
- /** Available options */
155
- readonly options: Array<{
156
- readonly default?: string;
157
- readonly description: string;
158
- readonly flags: string;
159
- }>;
160
- /** Available subcommands */
161
- readonly subcommands?: Array<{
162
- readonly description: string;
163
- readonly name: string;
164
- }>;
165
- /** Usage string */
166
- readonly usage: string;
167
- }
168
-
169
- /**
170
- * Arguments for the history command
171
- */
172
- export interface HistoryCommandArgs extends CommandArguments {
173
- readonly f?: 'csv' | 'json' | 'table';
174
- /** Output format */
175
- readonly format?: 'csv' | 'json' | 'table';
176
- readonly l?: number;
177
- /** Limit number of results */
178
- readonly limit?: number;
179
- /** Pattern to match */
180
- readonly pattern?: string;
181
- /** Run IDs for show/compare commands */
182
- readonly runIds?: string[];
183
- /** Filter by date */
184
- readonly since?: string;
185
- /** History subcommand */
186
- readonly subcommand?: 'clean' | 'compare' | 'list' | 'show' | 'trends';
187
- /** Tags to filter by */
188
- readonly tags?: string | string[];
189
- }
190
-
191
- /**
192
- * Arguments for the init command
193
- */
194
- export interface InitCommandArgs extends CommandArguments {
195
- /** Configuration file type */
196
- readonly configType?: 'js' | 'json' | 'ts' | 'yaml';
197
- /** Create example files */
198
- readonly examples?: boolean;
199
- /** Force overwrite existing files */
200
- readonly force?: boolean;
201
- }
202
-
203
- /**
204
- * Output formatting options
205
- */
206
- export interface OutputFormat {
207
- /** Compact output mode */
208
- readonly compact: boolean;
209
- /** Progress display options */
210
- readonly progress: ProgressDisplayOptions;
211
- /** Color theme */
212
- readonly theme: ColorTheme;
213
- /** Use colors in output */
214
- readonly useColors: boolean;
215
- /** Use Unicode symbols */
216
- readonly useUnicode: boolean;
217
- }
64
+ export type Engine = 'accurate' | 'tinybench';
218
65
 
219
- /**
220
- * CLI parser result
221
- */
222
- export interface ParseResult {
223
- /** Parsed arguments */
224
- readonly args: CommandArguments;
225
- /** Parsed command name */
226
- readonly command: string;
227
- /** Parsing errors */
228
- readonly errors: string[];
229
- /** Whether help was requested */
230
- readonly help: boolean;
231
- /** Whether version was requested */
232
- readonly version: boolean;
233
- }
66
+ export type ExitCode = (typeof ExitCodes)[keyof typeof ExitCodes];
234
67
 
235
68
  /**
236
69
  * Progress display options
@@ -247,66 +80,3 @@ export interface ProgressDisplayOptions {
247
80
  /** Update interval in milliseconds */
248
81
  readonly updateInterval: number;
249
82
  }
250
-
251
- /**
252
- * Arguments for the run command
253
- */
254
- export interface RunCommandArgs extends CommandArguments {
255
- /** Stop on first failure */
256
- readonly bail?: boolean;
257
- readonly c?: string;
258
- /** Configuration file path */
259
- readonly config?: string;
260
- readonly e?: 'accurate' | 'tinybench';
261
- /** Benchmark engine to use */
262
- readonly engine?: 'accurate' | 'tinybench';
263
- /** Files to exclude */
264
- readonly exclude?: string | string[];
265
- /** Tags to exclude */
266
- readonly excludeTags?: string | string[];
267
- readonly i?: number;
268
- /** Number of iterations */
269
- readonly iterations?: number;
270
- /** How to limit benchmark execution */
271
- readonly limitBy?: 'all' | 'any' | 'iterations' | 'time';
272
- readonly o?: string;
273
- /** Output directory */
274
- readonly output?: string;
275
- /** Pattern for discovering benchmark files */
276
- readonly pattern?: string;
277
- readonly q?: boolean;
278
- /** Quiet output */
279
- readonly quiet?: boolean;
280
- readonly r?: string | string[];
281
- /** Reporters to use */
282
- readonly reporters?: string | string[];
283
- readonly t?: number;
284
- /** Tags to include */
285
- readonly tags?: string | string[];
286
- /** Time limit in milliseconds */
287
- readonly time?: number;
288
- /** Timeout per task */
289
- readonly timeout?: number;
290
- readonly v?: boolean;
291
- /** Verbose output */
292
- readonly verbose?: boolean;
293
- readonly w?: number;
294
- /** Warmup iterations */
295
- readonly warmup?: number;
296
- }
297
-
298
- /**
299
- * Terminal capabilities
300
- */
301
- export interface TerminalCapabilities {
302
- /** Terminal height in rows */
303
- readonly height: number;
304
- /** Terminal supports interactive features */
305
- readonly interactive: boolean;
306
- /** Terminal supports colors */
307
- readonly supportsColor: boolean;
308
- /** Terminal supports Unicode characters */
309
- readonly supportsUnicode: boolean;
310
- /** Terminal width in columns */
311
- readonly width: number;
312
- }