modestbench 0.0.3 → 0.2.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 (394) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +39 -31
  3. package/dist/bootstrap.cjs +10 -12
  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 -7
  8. package/dist/bootstrap.js.map +1 -1
  9. package/dist/cli/commands/history.cjs +108 -265
  10. package/dist/cli/commands/history.cjs.map +1 -1
  11. package/dist/cli/commands/history.d.cts +75 -12
  12. package/dist/cli/commands/history.d.cts.map +1 -1
  13. package/dist/cli/commands/history.d.ts +75 -12
  14. package/dist/cli/commands/history.d.ts.map +1 -1
  15. package/dist/cli/commands/history.js +105 -267
  16. package/dist/cli/commands/history.js.map +1 -1
  17. package/dist/cli/commands/init.cjs +5 -4
  18. package/dist/cli/commands/init.cjs.map +1 -1
  19. package/dist/cli/commands/init.d.cts.map +1 -1
  20. package/dist/cli/commands/init.d.ts.map +1 -1
  21. package/dist/cli/commands/init.js +5 -4
  22. package/dist/cli/commands/init.js.map +1 -1
  23. package/dist/cli/commands/run.cjs +32 -9
  24. package/dist/cli/commands/run.cjs.map +1 -1
  25. package/dist/cli/commands/run.d.cts +1 -0
  26. package/dist/cli/commands/run.d.cts.map +1 -1
  27. package/dist/cli/commands/run.d.ts +1 -0
  28. package/dist/cli/commands/run.d.ts.map +1 -1
  29. package/dist/cli/commands/run.js +32 -9
  30. package/dist/cli/commands/run.js.map +1 -1
  31. package/dist/cli/index.cjs +336 -103
  32. package/dist/cli/index.cjs.map +1 -1
  33. package/dist/cli/index.d.cts +1 -2
  34. package/dist/cli/index.d.cts.map +1 -1
  35. package/dist/cli/index.d.ts +1 -2
  36. package/dist/cli/index.d.ts.map +1 -1
  37. package/dist/cli/index.js +332 -99
  38. package/dist/cli/index.js.map +1 -1
  39. package/dist/constants.cjs +53 -1
  40. package/dist/constants.cjs.map +1 -1
  41. package/dist/constants.d.cts +36 -0
  42. package/dist/constants.d.cts.map +1 -1
  43. package/dist/constants.d.ts +36 -0
  44. package/dist/constants.d.ts.map +1 -1
  45. package/dist/constants.js +52 -0
  46. package/dist/constants.js.map +1 -1
  47. package/dist/core/engine.cjs +23 -43
  48. package/dist/core/engine.cjs.map +1 -1
  49. package/dist/core/engine.d.cts +4 -3
  50. package/dist/core/engine.d.cts.map +1 -1
  51. package/dist/core/engine.d.ts +4 -3
  52. package/dist/core/engine.d.ts.map +1 -1
  53. package/dist/core/engine.js +23 -43
  54. package/dist/core/engine.js.map +1 -1
  55. package/dist/core/engines/accurate-engine.cjs +2 -1
  56. package/dist/core/engines/accurate-engine.cjs.map +1 -1
  57. package/dist/core/engines/accurate-engine.d.cts.map +1 -1
  58. package/dist/core/engines/accurate-engine.d.ts.map +1 -1
  59. package/dist/core/engines/accurate-engine.js +2 -1
  60. package/dist/core/engines/accurate-engine.js.map +1 -1
  61. package/dist/core/engines/tinybench-engine.cjs +6 -5
  62. package/dist/core/engines/tinybench-engine.cjs.map +1 -1
  63. package/dist/core/engines/tinybench-engine.d.cts.map +1 -1
  64. package/dist/core/engines/tinybench-engine.d.ts.map +1 -1
  65. package/dist/core/engines/tinybench-engine.js +6 -5
  66. package/dist/core/engines/tinybench-engine.js.map +1 -1
  67. package/dist/core/output-path-resolver.cjs +34 -0
  68. package/dist/core/output-path-resolver.cjs.map +1 -0
  69. package/dist/core/output-path-resolver.d.cts +10 -0
  70. package/dist/core/output-path-resolver.d.cts.map +1 -0
  71. package/dist/core/output-path-resolver.d.ts +10 -0
  72. package/dist/core/output-path-resolver.d.ts.map +1 -0
  73. package/dist/core/output-path-resolver.js +30 -0
  74. package/dist/core/output-path-resolver.js.map +1 -0
  75. package/dist/errors/base.cjs +130 -0
  76. package/dist/errors/base.cjs.map +1 -0
  77. package/dist/errors/base.d.cts +97 -0
  78. package/dist/errors/base.d.cts.map +1 -0
  79. package/dist/errors/base.d.ts +97 -0
  80. package/dist/errors/base.d.ts.map +1 -0
  81. package/dist/errors/base.js +124 -0
  82. package/dist/errors/base.js.map +1 -0
  83. package/dist/errors/cli.cjs +58 -0
  84. package/dist/errors/cli.cjs.map +1 -0
  85. package/dist/errors/cli.d.cts +44 -0
  86. package/dist/errors/cli.d.cts.map +1 -0
  87. package/dist/errors/cli.d.ts +44 -0
  88. package/dist/errors/cli.d.ts.map +1 -0
  89. package/dist/errors/cli.js +52 -0
  90. package/dist/errors/cli.js.map +1 -0
  91. package/dist/errors/configuration.cjs +48 -0
  92. package/dist/errors/configuration.cjs.map +1 -0
  93. package/dist/errors/configuration.d.cts +41 -0
  94. package/dist/errors/configuration.d.cts.map +1 -0
  95. package/dist/errors/configuration.d.ts +41 -0
  96. package/dist/errors/configuration.d.ts.map +1 -0
  97. package/dist/errors/configuration.js +41 -0
  98. package/dist/errors/configuration.js.map +1 -0
  99. package/dist/errors/execution.cjs +65 -0
  100. package/dist/errors/execution.cjs.map +1 -0
  101. package/dist/errors/execution.d.cts +56 -0
  102. package/dist/errors/execution.d.cts.map +1 -0
  103. package/dist/errors/execution.d.ts +56 -0
  104. package/dist/errors/execution.d.ts.map +1 -0
  105. package/dist/errors/execution.js +56 -0
  106. package/dist/errors/execution.js.map +1 -0
  107. package/dist/errors/file.cjs +56 -0
  108. package/dist/errors/file.cjs.map +1 -0
  109. package/dist/errors/file.d.cts +48 -0
  110. package/dist/errors/file.d.cts.map +1 -0
  111. package/dist/errors/file.d.ts +48 -0
  112. package/dist/errors/file.d.ts.map +1 -0
  113. package/dist/errors/file.js +48 -0
  114. package/dist/errors/file.js.map +1 -0
  115. package/dist/errors/index.cjs +59 -0
  116. package/dist/errors/index.cjs.map +1 -0
  117. package/dist/errors/index.d.cts +16 -0
  118. package/dist/errors/index.d.cts.map +1 -0
  119. package/dist/errors/index.d.ts +16 -0
  120. package/dist/errors/index.d.ts.map +1 -0
  121. package/dist/errors/index.js +24 -0
  122. package/dist/errors/index.js.map +1 -0
  123. package/dist/errors/reporter.cjs +38 -0
  124. package/dist/errors/reporter.cjs.map +1 -0
  125. package/dist/errors/reporter.d.cts +32 -0
  126. package/dist/errors/reporter.d.cts.map +1 -0
  127. package/dist/errors/reporter.d.ts +32 -0
  128. package/dist/errors/reporter.d.ts.map +1 -0
  129. package/dist/errors/reporter.js +32 -0
  130. package/dist/errors/reporter.js.map +1 -0
  131. package/dist/errors/storage.cjs +55 -0
  132. package/dist/errors/storage.cjs.map +1 -0
  133. package/dist/errors/storage.d.cts +47 -0
  134. package/dist/errors/storage.d.cts.map +1 -0
  135. package/dist/errors/storage.d.ts +47 -0
  136. package/dist/errors/storage.d.ts.map +1 -0
  137. package/dist/errors/storage.js +47 -0
  138. package/dist/errors/storage.js.map +1 -0
  139. package/dist/errors/validation.cjs +38 -0
  140. package/dist/errors/validation.cjs.map +1 -0
  141. package/dist/errors/validation.d.cts +32 -0
  142. package/dist/errors/validation.d.cts.map +1 -0
  143. package/dist/errors/validation.d.ts +32 -0
  144. package/dist/errors/validation.d.ts.map +1 -0
  145. package/dist/errors/validation.js +32 -0
  146. package/dist/errors/validation.js.map +1 -0
  147. package/dist/formatters/history/base.cjs +9 -0
  148. package/dist/formatters/history/base.cjs.map +1 -0
  149. package/dist/formatters/history/base.d.cts +26 -0
  150. package/dist/formatters/history/base.d.cts.map +1 -0
  151. package/dist/formatters/history/base.d.ts +26 -0
  152. package/dist/formatters/history/base.d.ts.map +1 -0
  153. package/dist/formatters/history/base.js +8 -0
  154. package/dist/formatters/history/base.js.map +1 -0
  155. package/dist/formatters/history/compare.cjs +127 -0
  156. package/dist/formatters/history/compare.cjs.map +1 -0
  157. package/dist/formatters/history/compare.d.cts +21 -0
  158. package/dist/formatters/history/compare.d.cts.map +1 -0
  159. package/dist/formatters/history/compare.d.ts +21 -0
  160. package/dist/formatters/history/compare.d.ts.map +1 -0
  161. package/dist/formatters/history/compare.js +123 -0
  162. package/dist/formatters/history/compare.js.map +1 -0
  163. package/dist/formatters/history/list.cjs +74 -0
  164. package/dist/formatters/history/list.cjs.map +1 -0
  165. package/dist/formatters/history/list.d.cts +25 -0
  166. package/dist/formatters/history/list.d.cts.map +1 -0
  167. package/dist/formatters/history/list.d.ts +25 -0
  168. package/dist/formatters/history/list.d.ts.map +1 -0
  169. package/dist/formatters/history/list.js +70 -0
  170. package/dist/formatters/history/list.js.map +1 -0
  171. package/dist/formatters/history/show.cjs +98 -0
  172. package/dist/formatters/history/show.cjs.map +1 -0
  173. package/dist/formatters/history/show.d.cts +21 -0
  174. package/dist/formatters/history/show.d.cts.map +1 -0
  175. package/dist/formatters/history/show.d.ts +21 -0
  176. package/dist/formatters/history/show.d.ts.map +1 -0
  177. package/dist/formatters/history/show.js +94 -0
  178. package/dist/formatters/history/show.js.map +1 -0
  179. package/dist/formatters/history/trends.cjs +194 -0
  180. package/dist/formatters/history/trends.cjs.map +1 -0
  181. package/dist/formatters/history/trends.d.cts +22 -0
  182. package/dist/formatters/history/trends.d.cts.map +1 -0
  183. package/dist/formatters/history/trends.d.ts +22 -0
  184. package/dist/formatters/history/trends.d.ts.map +1 -0
  185. package/dist/formatters/history/trends.js +190 -0
  186. package/dist/formatters/history/trends.js.map +1 -0
  187. package/dist/formatters/history/visualization.cjs +79 -0
  188. package/dist/formatters/history/visualization.cjs.map +1 -0
  189. package/dist/formatters/history/visualization.d.cts +24 -0
  190. package/dist/formatters/history/visualization.d.cts.map +1 -0
  191. package/dist/formatters/history/visualization.d.ts +24 -0
  192. package/dist/formatters/history/visualization.d.ts.map +1 -0
  193. package/dist/formatters/history/visualization.js +74 -0
  194. package/dist/formatters/history/visualization.js.map +1 -0
  195. package/dist/index.cjs +17 -20
  196. package/dist/index.cjs.map +1 -1
  197. package/dist/index.d.cts +6 -6
  198. package/dist/index.d.cts.map +1 -1
  199. package/dist/index.d.ts +6 -6
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +9 -11
  202. package/dist/index.js.map +1 -1
  203. package/dist/reporters/csv.cjs +5 -4
  204. package/dist/reporters/csv.cjs.map +1 -1
  205. package/dist/reporters/csv.d.cts +1 -1
  206. package/dist/reporters/csv.d.cts.map +1 -1
  207. package/dist/reporters/csv.d.ts +1 -1
  208. package/dist/reporters/csv.d.ts.map +1 -1
  209. package/dist/reporters/csv.js +4 -3
  210. package/dist/reporters/csv.js.map +1 -1
  211. package/dist/reporters/human.cjs +24 -62
  212. package/dist/reporters/human.cjs.map +1 -1
  213. package/dist/reporters/human.d.cts +1 -1
  214. package/dist/reporters/human.d.cts.map +1 -1
  215. package/dist/reporters/human.d.ts +1 -1
  216. package/dist/reporters/human.d.ts.map +1 -1
  217. package/dist/reporters/human.js +3 -41
  218. package/dist/reporters/human.js.map +1 -1
  219. package/dist/reporters/json.cjs +5 -4
  220. package/dist/reporters/json.cjs.map +1 -1
  221. package/dist/reporters/json.d.cts +1 -1
  222. package/dist/reporters/json.d.cts.map +1 -1
  223. package/dist/reporters/json.d.ts +1 -1
  224. package/dist/reporters/json.d.ts.map +1 -1
  225. package/dist/reporters/json.js +4 -3
  226. package/dist/reporters/json.js.map +1 -1
  227. package/dist/reporters/simple.cjs +3 -3
  228. package/dist/reporters/simple.cjs.map +1 -1
  229. package/dist/reporters/simple.d.cts +1 -1
  230. package/dist/reporters/simple.d.cts.map +1 -1
  231. package/dist/reporters/simple.d.ts +1 -1
  232. package/dist/reporters/simple.d.ts.map +1 -1
  233. package/dist/reporters/simple.js +2 -2
  234. package/dist/reporters/simple.js.map +1 -1
  235. package/dist/{config/manager.cjs → services/config-manager.cjs} +10 -4
  236. package/dist/services/config-manager.cjs.map +1 -0
  237. package/dist/{config/manager.d.cts → services/config-manager.d.cts} +1 -1
  238. package/dist/services/config-manager.d.cts.map +1 -0
  239. package/dist/{config/manager.d.ts → services/config-manager.d.ts} +1 -1
  240. package/dist/services/config-manager.d.ts.map +1 -0
  241. package/dist/{config/manager.js → services/config-manager.js} +10 -4
  242. package/dist/services/config-manager.js.map +1 -0
  243. package/dist/{core/loader.cjs → services/file-loader.cjs} +18 -7
  244. package/dist/services/file-loader.cjs.map +1 -0
  245. package/dist/{core/loader.d.cts → services/file-loader.d.cts} +1 -1
  246. package/dist/services/file-loader.d.cts.map +1 -0
  247. package/dist/{core/loader.d.ts → services/file-loader.d.ts} +1 -1
  248. package/dist/services/file-loader.d.ts.map +1 -0
  249. package/dist/{core/loader.js → services/file-loader.js} +18 -7
  250. package/dist/services/file-loader.js.map +1 -0
  251. package/dist/services/history/comparison.cjs +124 -0
  252. package/dist/services/history/comparison.cjs.map +1 -0
  253. package/dist/services/history/comparison.d.cts +18 -0
  254. package/dist/services/history/comparison.d.cts.map +1 -0
  255. package/dist/services/history/comparison.d.ts +18 -0
  256. package/dist/services/history/comparison.d.ts.map +1 -0
  257. package/dist/services/history/comparison.js +120 -0
  258. package/dist/services/history/comparison.js.map +1 -0
  259. package/dist/services/history/models.cjs +9 -0
  260. package/dist/services/history/models.cjs.map +1 -0
  261. package/dist/services/history/models.d.cts +139 -0
  262. package/dist/services/history/models.d.cts.map +1 -0
  263. package/dist/services/history/models.d.ts +139 -0
  264. package/dist/services/history/models.d.ts.map +1 -0
  265. package/dist/services/history/models.js +8 -0
  266. package/dist/services/history/models.js.map +1 -0
  267. package/dist/services/history/query.cjs +97 -0
  268. package/dist/services/history/query.cjs.map +1 -0
  269. package/dist/services/history/query.d.cts +38 -0
  270. package/dist/services/history/query.d.cts.map +1 -0
  271. package/dist/services/history/query.d.ts +38 -0
  272. package/dist/services/history/query.d.ts.map +1 -0
  273. package/dist/services/history/query.js +92 -0
  274. package/dist/services/history/query.js.map +1 -0
  275. package/dist/services/history/trend-analysis.cjs +187 -0
  276. package/dist/services/history/trend-analysis.cjs.map +1 -0
  277. package/dist/services/history/trend-analysis.d.cts +34 -0
  278. package/dist/services/history/trend-analysis.d.cts.map +1 -0
  279. package/dist/services/history/trend-analysis.d.ts +34 -0
  280. package/dist/services/history/trend-analysis.d.ts.map +1 -0
  281. package/dist/services/history/trend-analysis.js +179 -0
  282. package/dist/services/history/trend-analysis.js.map +1 -0
  283. package/dist/{storage/history.cjs → services/history-storage.cjs} +33 -12
  284. package/dist/services/history-storage.cjs.map +1 -0
  285. package/dist/{storage/history.d.cts → services/history-storage.d.cts} +1 -1
  286. package/dist/services/history-storage.d.cts.map +1 -0
  287. package/dist/{storage/history.d.ts → services/history-storage.d.ts} +1 -1
  288. package/dist/services/history-storage.d.ts.map +1 -0
  289. package/dist/{storage/history.js → services/history-storage.js} +33 -12
  290. package/dist/services/history-storage.js.map +1 -0
  291. package/dist/{progress/manager.cjs → services/progress-manager.cjs} +1 -1
  292. package/dist/services/progress-manager.cjs.map +1 -0
  293. package/dist/{progress/manager.d.cts → services/progress-manager.d.cts} +1 -1
  294. package/dist/services/progress-manager.d.cts.map +1 -0
  295. package/dist/{progress/manager.d.ts → services/progress-manager.d.ts} +1 -1
  296. package/dist/services/progress-manager.d.ts.map +1 -0
  297. package/dist/{progress/manager.js → services/progress-manager.js} +1 -1
  298. package/dist/services/progress-manager.js.map +1 -0
  299. package/dist/{reporters/registry.cjs → services/reporter-registry.cjs} +4 -3
  300. package/dist/services/reporter-registry.cjs.map +1 -0
  301. package/dist/{reporters/registry.d.cts → services/reporter-registry.d.cts} +1 -1
  302. package/dist/services/reporter-registry.d.cts.map +1 -0
  303. package/dist/{reporters/registry.d.ts → services/reporter-registry.d.ts} +1 -1
  304. package/dist/services/reporter-registry.d.ts.map +1 -0
  305. package/dist/{reporters/registry.js → services/reporter-registry.js} +4 -3
  306. package/dist/services/reporter-registry.js.map +1 -0
  307. package/dist/types/cli.d.cts +3 -0
  308. package/dist/types/cli.d.cts.map +1 -1
  309. package/dist/types/cli.d.ts +3 -0
  310. package/dist/types/cli.d.ts.map +1 -1
  311. package/dist/types/interfaces.d.cts +1 -34
  312. package/dist/types/interfaces.d.cts.map +1 -1
  313. package/dist/types/interfaces.d.ts +1 -34
  314. package/dist/types/interfaces.d.ts.map +1 -1
  315. package/dist/utils/ansi.cjs +61 -0
  316. package/dist/utils/ansi.cjs.map +1 -0
  317. package/dist/utils/ansi.d.cts +53 -0
  318. package/dist/utils/ansi.d.cts.map +1 -0
  319. package/dist/utils/ansi.d.ts +53 -0
  320. package/dist/utils/ansi.d.ts.map +1 -0
  321. package/dist/utils/ansi.js +57 -0
  322. package/dist/utils/ansi.js.map +1 -0
  323. package/package.json +10 -8
  324. package/src/bootstrap.ts +5 -7
  325. package/src/cli/commands/history.ts +195 -341
  326. package/src/cli/commands/init.ts +14 -4
  327. package/src/cli/commands/run.ts +52 -7
  328. package/src/cli/index.ts +393 -119
  329. package/src/constants.ts +60 -0
  330. package/src/core/engine.ts +40 -48
  331. package/src/core/engines/accurate-engine.ts +4 -1
  332. package/src/core/engines/tinybench-engine.ts +12 -5
  333. package/src/core/output-path-resolver.ts +38 -0
  334. package/src/errors/base.ts +152 -0
  335. package/src/errors/cli.ts +59 -0
  336. package/src/errors/configuration.ts +45 -0
  337. package/src/errors/execution.ts +62 -0
  338. package/src/errors/file.ts +53 -0
  339. package/src/errors/index.ts +71 -0
  340. package/src/errors/reporter.ts +35 -0
  341. package/src/errors/storage.ts +52 -0
  342. package/src/errors/validation.ts +35 -0
  343. package/src/formatters/history/base.ts +28 -0
  344. package/src/formatters/history/compare.ts +186 -0
  345. package/src/formatters/history/list.ts +101 -0
  346. package/src/formatters/history/show.ts +155 -0
  347. package/src/formatters/history/trends.ts +281 -0
  348. package/src/formatters/history/visualization.ts +93 -0
  349. package/src/index.ts +10 -14
  350. package/src/reporters/csv.ts +5 -3
  351. package/src/reporters/human.ts +3 -43
  352. package/src/reporters/json.ts +5 -3
  353. package/src/reporters/simple.ts +2 -2
  354. package/src/{config/manager.ts → services/config-manager.ts} +13 -3
  355. package/src/{core/loader.ts → services/file-loader.ts} +28 -6
  356. package/src/services/history/comparison.ts +130 -0
  357. package/src/services/history/models.ts +148 -0
  358. package/src/services/history/query.ts +116 -0
  359. package/src/services/history/trend-analysis.ts +238 -0
  360. package/src/{storage/history.ts → services/history-storage.ts} +58 -11
  361. package/src/{reporters/registry.ts → services/reporter-registry.ts} +9 -2
  362. package/src/types/cli.ts +3 -0
  363. package/src/types/interfaces.ts +0 -43
  364. package/src/utils/ansi.ts +59 -0
  365. package/dist/config/manager.cjs.map +0 -1
  366. package/dist/config/manager.d.cts.map +0 -1
  367. package/dist/config/manager.d.ts.map +0 -1
  368. package/dist/config/manager.js.map +0 -1
  369. package/dist/core/error-manager.cjs +0 -303
  370. package/dist/core/error-manager.cjs.map +0 -1
  371. package/dist/core/error-manager.d.cts +0 -77
  372. package/dist/core/error-manager.d.cts.map +0 -1
  373. package/dist/core/error-manager.d.ts +0 -77
  374. package/dist/core/error-manager.d.ts.map +0 -1
  375. package/dist/core/error-manager.js +0 -299
  376. package/dist/core/error-manager.js.map +0 -1
  377. package/dist/core/loader.cjs.map +0 -1
  378. package/dist/core/loader.d.cts.map +0 -1
  379. package/dist/core/loader.d.ts.map +0 -1
  380. package/dist/core/loader.js.map +0 -1
  381. package/dist/progress/manager.cjs.map +0 -1
  382. package/dist/progress/manager.d.cts.map +0 -1
  383. package/dist/progress/manager.d.ts.map +0 -1
  384. package/dist/progress/manager.js.map +0 -1
  385. package/dist/reporters/registry.cjs.map +0 -1
  386. package/dist/reporters/registry.d.cts.map +0 -1
  387. package/dist/reporters/registry.d.ts.map +0 -1
  388. package/dist/reporters/registry.js.map +0 -1
  389. package/dist/storage/history.cjs.map +0 -1
  390. package/dist/storage/history.d.cts.map +0 -1
  391. package/dist/storage/history.d.ts.map +0 -1
  392. package/dist/storage/history.js.map +0 -1
  393. package/src/core/error-manager.ts +0 -372
  394. /package/src/{progress/manager.ts → services/progress-manager.ts} +0 -0
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Storage-related errors
3
+ *
4
+ * Errors that occur during history storage operations.
5
+ */
6
+ import { ModestBenchError } from "./base.js";
7
+ /**
8
+ * Storage data corruption
9
+ *
10
+ * Thrown when stored data is found to be corrupted or invalid.
11
+ */
12
+ export class StorageCorruptionError extends ModestBenchError {
13
+ code = 'ERR_MB_STORAGE_CORRUPTION';
14
+ }
15
+ /**
16
+ * Storage operation failed
17
+ *
18
+ * Thrown when a general storage operation fails.
19
+ */
20
+ export class StorageError extends ModestBenchError {
21
+ code = 'ERR_MB_STORAGE_FAILED';
22
+ }
23
+ /**
24
+ * Storage index corruption
25
+ *
26
+ * Thrown when the storage index is corrupted or cannot be read.
27
+ */
28
+ export class StorageIndexError extends ModestBenchError {
29
+ code = 'ERR_MB_STORAGE_INDEX_CORRUPTION';
30
+ }
31
+ /**
32
+ * Insufficient storage space
33
+ *
34
+ * Thrown when there is insufficient disk space for storage operations.
35
+ */
36
+ export class StorageSpaceError extends ModestBenchError {
37
+ code = 'ERR_MB_STORAGE_INSUFFICIENT_SPACE';
38
+ }
39
+ /**
40
+ * Unsupported export format
41
+ *
42
+ * Thrown when attempting to export data in an unsupported format.
43
+ */
44
+ export class UnsupportedExportFormatError extends ModestBenchError {
45
+ code = 'ERR_MB_STORAGE_EXPORT_UNSUPPORTED';
46
+ }
47
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/errors/storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,kBAAkB;AAE7C;;;;GAIG;AACH,MAAM,OAAO,sBAAuB,SAAQ,gBAAgB;IACjD,IAAI,GAAG,2BAA2B,CAAC;CAC7C;AAED;;;;GAIG;AACH,MAAM,OAAO,YAAa,SAAQ,gBAAgB;IACvC,IAAI,GAAG,uBAAuB,CAAC;CACzC;AAED;;;;GAIG;AACH,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IAC5C,IAAI,GAAG,iCAAiC,CAAC;CACnD;AAED;;;;GAIG;AACH,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IAC5C,IAAI,GAAG,mCAAmC,CAAC;CACrD;AAED;;;;GAIG;AACH,MAAM,OAAO,4BAA6B,SAAQ,gBAAgB;IACvD,IAAI,GAAG,mCAAmC,CAAC;CACrD"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ /**
3
+ * Validation-related errors
4
+ *
5
+ * Errors that occur during benchmark file structure and data validation.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.TypeValidationError = exports.StructureValidationError = exports.SchemaValidationError = void 0;
9
+ const base_js_1 = require("./base.cjs");
10
+ /**
11
+ * Schema validation failed
12
+ *
13
+ * Thrown when data fails to validate against a Zod schema or other schema
14
+ * validation.
15
+ */
16
+ class SchemaValidationError extends base_js_1.ModestBenchError {
17
+ code = 'ERR_MB_VALIDATION_SCHEMA_FAILED';
18
+ }
19
+ exports.SchemaValidationError = SchemaValidationError;
20
+ /**
21
+ * Invalid benchmark structure
22
+ *
23
+ * Thrown when a benchmark file has an invalid or unexpected structure.
24
+ */
25
+ class StructureValidationError extends base_js_1.ModestBenchError {
26
+ code = 'ERR_MB_VALIDATION_STRUCTURE_INVALID';
27
+ }
28
+ exports.StructureValidationError = StructureValidationError;
29
+ /**
30
+ * Type validation failed
31
+ *
32
+ * Thrown when data fails type validation checks.
33
+ */
34
+ class TypeValidationError extends base_js_1.ModestBenchError {
35
+ code = 'ERR_MB_VALIDATION_TYPE_FAILED';
36
+ }
37
+ exports.TypeValidationError = TypeValidationError;
38
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/errors/validation.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,wCAA6C;AAE7C;;;;;GAKG;AACH,MAAa,qBAAsB,SAAQ,0BAAgB;IAChD,IAAI,GAAG,iCAAiC,CAAC;CACnD;AAFD,sDAEC;AAED;;;;GAIG;AACH,MAAa,wBAAyB,SAAQ,0BAAgB;IACnD,IAAI,GAAG,qCAAqC,CAAC;CACvD;AAFD,4DAEC;AAED;;;;GAIG;AACH,MAAa,mBAAoB,SAAQ,0BAAgB;IAC9C,IAAI,GAAG,+BAA+B,CAAC;CACjD;AAFD,kDAEC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Validation-related errors
3
+ *
4
+ * Errors that occur during benchmark file structure and data validation.
5
+ */
6
+ import { ModestBenchError } from "./base.cjs";
7
+ /**
8
+ * Schema validation failed
9
+ *
10
+ * Thrown when data fails to validate against a Zod schema or other schema
11
+ * validation.
12
+ */
13
+ export declare class SchemaValidationError extends ModestBenchError {
14
+ readonly code = "ERR_MB_VALIDATION_SCHEMA_FAILED";
15
+ }
16
+ /**
17
+ * Invalid benchmark structure
18
+ *
19
+ * Thrown when a benchmark file has an invalid or unexpected structure.
20
+ */
21
+ export declare class StructureValidationError extends ModestBenchError {
22
+ readonly code = "ERR_MB_VALIDATION_STRUCTURE_INVALID";
23
+ }
24
+ /**
25
+ * Type validation failed
26
+ *
27
+ * Thrown when data fails type validation checks.
28
+ */
29
+ export declare class TypeValidationError extends ModestBenchError {
30
+ readonly code = "ERR_MB_VALIDATION_TYPE_FAILED";
31
+ }
32
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/errors/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,mBAAkB;AAE7C;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,gBAAgB;IACzD,QAAQ,CAAC,IAAI,qCAAqC;CACnD;AAED;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,gBAAgB;IAC5D,QAAQ,CAAC,IAAI,yCAAyC;CACvD;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,gBAAgB;IACvD,QAAQ,CAAC,IAAI,mCAAmC;CACjD"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Validation-related errors
3
+ *
4
+ * Errors that occur during benchmark file structure and data validation.
5
+ */
6
+ import { ModestBenchError } from "./base.js";
7
+ /**
8
+ * Schema validation failed
9
+ *
10
+ * Thrown when data fails to validate against a Zod schema or other schema
11
+ * validation.
12
+ */
13
+ export declare class SchemaValidationError extends ModestBenchError {
14
+ readonly code = "ERR_MB_VALIDATION_SCHEMA_FAILED";
15
+ }
16
+ /**
17
+ * Invalid benchmark structure
18
+ *
19
+ * Thrown when a benchmark file has an invalid or unexpected structure.
20
+ */
21
+ export declare class StructureValidationError extends ModestBenchError {
22
+ readonly code = "ERR_MB_VALIDATION_STRUCTURE_INVALID";
23
+ }
24
+ /**
25
+ * Type validation failed
26
+ *
27
+ * Thrown when data fails type validation checks.
28
+ */
29
+ export declare class TypeValidationError extends ModestBenchError {
30
+ readonly code = "ERR_MB_VALIDATION_TYPE_FAILED";
31
+ }
32
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/errors/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,kBAAkB;AAE7C;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,gBAAgB;IACzD,QAAQ,CAAC,IAAI,qCAAqC;CACnD;AAED;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,gBAAgB;IAC5D,QAAQ,CAAC,IAAI,yCAAyC;CACvD;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,gBAAgB;IACvD,QAAQ,CAAC,IAAI,mCAAmC;CACjD"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Validation-related errors
3
+ *
4
+ * Errors that occur during benchmark file structure and data validation.
5
+ */
6
+ import { ModestBenchError } from "./base.js";
7
+ /**
8
+ * Schema validation failed
9
+ *
10
+ * Thrown when data fails to validate against a Zod schema or other schema
11
+ * validation.
12
+ */
13
+ export class SchemaValidationError extends ModestBenchError {
14
+ code = 'ERR_MB_VALIDATION_SCHEMA_FAILED';
15
+ }
16
+ /**
17
+ * Invalid benchmark structure
18
+ *
19
+ * Thrown when a benchmark file has an invalid or unexpected structure.
20
+ */
21
+ export class StructureValidationError extends ModestBenchError {
22
+ code = 'ERR_MB_VALIDATION_STRUCTURE_INVALID';
23
+ }
24
+ /**
25
+ * Type validation failed
26
+ *
27
+ * Thrown when data fails type validation checks.
28
+ */
29
+ export class TypeValidationError extends ModestBenchError {
30
+ code = 'ERR_MB_VALIDATION_TYPE_FAILED';
31
+ }
32
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/errors/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,kBAAkB;AAE7C;;;;;GAKG;AACH,MAAM,OAAO,qBAAsB,SAAQ,gBAAgB;IAChD,IAAI,GAAG,iCAAiC,CAAC;CACnD;AAED;;;;GAIG;AACH,MAAM,OAAO,wBAAyB,SAAQ,gBAAgB;IACnD,IAAI,GAAG,qCAAqC,CAAC;CACvD;AAED;;;;GAIG;AACH,MAAM,OAAO,mBAAoB,SAAQ,gBAAgB;IAC9C,IAAI,GAAG,+BAA+B,CAAC;CACjD"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * Base Formatter Interface
4
+ *
5
+ * Defines the contract for history command formatters. Each formatter
6
+ * transforms processed data into human-readable or machine-readable output.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/formatters/history/base.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Base Formatter Interface
3
+ *
4
+ * Defines the contract for history command formatters. Each formatter
5
+ * transforms processed data into human-readable or machine-readable output.
6
+ */
7
+ /**
8
+ * Formatter interface for history command output
9
+ *
10
+ * @template TData - The data type this formatter accepts
11
+ */
12
+ export interface HistoryFormatter<TData> {
13
+ /**
14
+ * Format data as CSV (optional, not all commands support CSV)
15
+ */
16
+ formatCsv?(data: TData): string;
17
+ /**
18
+ * Format data for human-readable terminal output
19
+ */
20
+ formatHuman(data: TData): string;
21
+ /**
22
+ * Format data as JSON
23
+ */
24
+ formatJson(data: TData): string;
25
+ }
26
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/formatters/history/base.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,WAAW,gBAAgB,CAAC,KAAK;IACrC;;OAEG;IACH,SAAS,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAEhC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAEjC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;CACjC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Base Formatter Interface
3
+ *
4
+ * Defines the contract for history command formatters. Each formatter
5
+ * transforms processed data into human-readable or machine-readable output.
6
+ */
7
+ /**
8
+ * Formatter interface for history command output
9
+ *
10
+ * @template TData - The data type this formatter accepts
11
+ */
12
+ export interface HistoryFormatter<TData> {
13
+ /**
14
+ * Format data as CSV (optional, not all commands support CSV)
15
+ */
16
+ formatCsv?(data: TData): string;
17
+ /**
18
+ * Format data for human-readable terminal output
19
+ */
20
+ formatHuman(data: TData): string;
21
+ /**
22
+ * Format data as JSON
23
+ */
24
+ formatJson(data: TData): string;
25
+ }
26
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/formatters/history/base.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,WAAW,gBAAgB,CAAC,KAAK;IACrC;;OAEG;IACH,SAAS,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAEhC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAEjC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;CACjC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Base Formatter Interface
3
+ *
4
+ * Defines the contract for history command formatters. Each formatter
5
+ * transforms processed data into human-readable or machine-readable output.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/formatters/history/base.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ /**
3
+ * Compare Formatter
4
+ *
5
+ * Formats benchmark run comparison results in human and JSON formats.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.HistoryCompareFormatter = void 0;
9
+ const ansi_js_1 = require("../../utils/ansi.cjs");
10
+ const ansi_js_2 = require("../../utils/ansi.cjs");
11
+ /**
12
+ * Formatter for history compare command
13
+ */
14
+ class HistoryCompareFormatter {
15
+ /**
16
+ * Format as human-readable comparison
17
+ */
18
+ formatHuman(data) {
19
+ const lines = [];
20
+ lines.push((0, ansi_js_1.colorize)('brightMagenta', (0, ansi_js_1.colorize)('bold', 'Comparing runs:')));
21
+ lines.push(` ${(0, ansi_js_1.colorize)('brightCyan', ansi_js_2.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('brightWhite', (0, ansi_js_1.colorize)('bold', 'Run 1'))} ${(0, ansi_js_1.colorize)('dim', data.run1.id)} (${(0, ansi_js_1.colorize)('white', data.run1.startTime.toLocaleString())})`);
22
+ lines.push(` ${(0, ansi_js_1.colorize)('brightCyan', ansi_js_2.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('brightWhite', (0, ansi_js_1.colorize)('bold', 'Run 2'))} ${(0, ansi_js_1.colorize)('dim', data.run2.id)} (${(0, ansi_js_1.colorize)('white', data.run2.startTime.toLocaleString())})`);
23
+ lines.push('');
24
+ lines.push((0, ansi_js_1.colorize)('cyan', 'Summary comparison:'));
25
+ lines.push('');
26
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_2.ansiChars.smallSquare)} Files: ${(0, ansi_js_1.colorize)('brightWhite', String(data.run1.summary.totalFiles))} vs ${(0, ansi_js_1.colorize)('brightWhite', String(data.run2.summary.totalFiles))}`);
27
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_2.ansiChars.smallSquare)} Tasks: ${(0, ansi_js_1.colorize)('brightWhite', String(data.run1.summary.totalTasks))} vs ${(0, ansi_js_1.colorize)('brightWhite', String(data.run2.summary.totalTasks))}`);
28
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_2.ansiChars.smallSquare)} Passed: ${(0, ansi_js_1.colorize)('brightCyan', String(data.run1.summary.passedTasks))} vs ${(0, ansi_js_1.colorize)('brightCyan', String(data.run2.summary.passedTasks))}`);
29
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_2.ansiChars.smallSquare)} Failed: ${(0, ansi_js_1.colorize)('brightRed', (0, ansi_js_1.colorize)('bold', String(data.run1.summary.failedTasks)))} vs ${(0, ansi_js_1.colorize)('brightRed', (0, ansi_js_1.colorize)('bold', String(data.run2.summary.failedTasks)))}`);
30
+ lines.push('');
31
+ // Detailed task comparison
32
+ if (data.tasksInBoth.length > 0) {
33
+ lines.push((0, ansi_js_1.colorize)('cyan', 'Task-by-task comparison:'));
34
+ lines.push('');
35
+ for (const comparison of data.tasksInBoth) {
36
+ const mean1 = comparison.run1.mean / 1000000; // Convert to ms
37
+ const mean2 = comparison.run2.mean / 1000000;
38
+ const changeSign = comparison.percentChange >= 0 ? '+' : '';
39
+ const changeStr = `${changeSign}${comparison.percentChange.toFixed(1)}%`;
40
+ lines.push(` ${(0, ansi_js_1.colorize)('brightWhite', `${comparison.suite} › ${comparison.task}`)}`);
41
+ // Mean - highlight higher (slower/worse) number
42
+ const meanHigher = mean2 > mean1;
43
+ const mean1Str = meanHigher
44
+ ? (0, ansi_js_1.colorize)('magenta', `${mean1.toFixed(3)}ms`)
45
+ : (0, ansi_js_1.colorize)('brightMagenta', `${mean1.toFixed(3)}ms`);
46
+ const mean2Str = meanHigher
47
+ ? (0, ansi_js_1.colorize)('brightMagenta', `${mean2.toFixed(3)}ms`)
48
+ : (0, ansi_js_1.colorize)('magenta', `${mean2.toFixed(3)}ms`);
49
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_2.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('white', 'Mean:')} ${mean1Str} ${(0, ansi_js_1.colorize)('dim', '→')} ${mean2Str} ${(0, ansi_js_1.colorize)('dim', `(${(0, ansi_js_1.colorize)('white', changeStr)}`)}`);
50
+ // Min - highlight higher number
51
+ const min1 = comparison.run1.min / 1000000;
52
+ const min2 = comparison.run2.min / 1000000;
53
+ const minHigher = min2 > min1;
54
+ const min1Str = minHigher
55
+ ? (0, ansi_js_1.colorize)('magenta', `${min1.toFixed(3)}ms`)
56
+ : (0, ansi_js_1.colorize)('brightMagenta', `${min1.toFixed(3)}ms`);
57
+ const min2Str = minHigher
58
+ ? (0, ansi_js_1.colorize)('brightMagenta', `${min2.toFixed(3)}ms`)
59
+ : (0, ansi_js_1.colorize)('magenta', `${min2.toFixed(3)}ms`);
60
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_2.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('white', 'Min:')} ${min1Str} ${(0, ansi_js_1.colorize)('dim', '→')} ${min2Str}`);
61
+ // Max - highlight higher number
62
+ const max1 = comparison.run1.max / 1000000;
63
+ const max2 = comparison.run2.max / 1000000;
64
+ const maxHigher = max2 > max1;
65
+ const max1Str = maxHigher
66
+ ? (0, ansi_js_1.colorize)('magenta', `${max1.toFixed(3)}ms`)
67
+ : (0, ansi_js_1.colorize)('brightMagenta', `${max1.toFixed(3)}ms`);
68
+ const max2Str = maxHigher
69
+ ? (0, ansi_js_1.colorize)('brightMagenta', `${max2.toFixed(3)}ms`)
70
+ : (0, ansi_js_1.colorize)('magenta', `${max2.toFixed(3)}ms`);
71
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_2.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('white', 'Max:')} ${max1Str} ${(0, ansi_js_1.colorize)('dim', '→')} ${max2Str}`);
72
+ // Iterations - highlight higher number
73
+ const iter1 = comparison.run1.iterations;
74
+ const iter2 = comparison.run2.iterations;
75
+ const iterHigher = iter2 > iter1;
76
+ const iter1Str = iterHigher
77
+ ? (0, ansi_js_1.colorize)('brightWhite', String(iter1))
78
+ : (0, ansi_js_1.colorize)('bold', (0, ansi_js_1.colorize)('brightWhite', String(iter1)));
79
+ const iter2Str = iterHigher
80
+ ? (0, ansi_js_1.colorize)('bold', (0, ansi_js_1.colorize)('brightWhite', String(iter2)))
81
+ : (0, ansi_js_1.colorize)('brightWhite', String(iter2));
82
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_2.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('white', 'Iterations:')} ${iter1Str} ${(0, ansi_js_1.colorize)('dim', 'vs')} ${iter2Str}`);
83
+ // CV (Coefficient of Variation) - shows measurement consistency
84
+ const cv1 = comparison.run1.cv * 100;
85
+ const cv2 = comparison.run2.cv * 100;
86
+ const cvHigher = cv2 > cv1;
87
+ const cv1Str = cvHigher
88
+ ? (0, ansi_js_1.colorize)('magenta', `${cv1.toFixed(2)}%`)
89
+ : (0, ansi_js_1.colorize)('brightMagenta', `${cv1.toFixed(2)}%`);
90
+ const cv2Str = cvHigher
91
+ ? (0, ansi_js_1.colorize)('brightMagenta', `${cv2.toFixed(2)}%`)
92
+ : (0, ansi_js_1.colorize)('magenta', `${cv2.toFixed(2)}%`);
93
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_2.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('white', 'CV:')} ${cv1Str} ${(0, ansi_js_1.colorize)('dim', '→')} ${cv2Str}`);
94
+ lines.push('');
95
+ }
96
+ }
97
+ if (data.tasksOnlyInRun1.length > 0) {
98
+ lines.push((0, ansi_js_1.colorize)('cyan', `Tasks only in run 1 (${data.tasksOnlyInRun1.length}):`));
99
+ for (const task of data.tasksOnlyInRun1) {
100
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_2.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('brightWhite', `${task.suite} › ${task.task}`)}`);
101
+ }
102
+ lines.push('');
103
+ }
104
+ if (data.tasksOnlyInRun2.length > 0) {
105
+ lines.push((0, ansi_js_1.colorize)('cyan', `Tasks only in run 2 (${data.tasksOnlyInRun2.length}):`));
106
+ for (const task of data.tasksOnlyInRun2) {
107
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_2.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('brightWhite', `${task.suite} › ${task.task}`)}`);
108
+ }
109
+ lines.push('');
110
+ }
111
+ return lines.join('\n');
112
+ }
113
+ /**
114
+ * Format as JSON
115
+ */
116
+ formatJson(data) {
117
+ return JSON.stringify({
118
+ run1: data.run1,
119
+ run2: data.run2,
120
+ taskComparisons: data.tasksInBoth,
121
+ tasksOnlyInRun1: data.tasksOnlyInRun1,
122
+ tasksOnlyInRun2: data.tasksOnlyInRun2,
123
+ }, null, 2);
124
+ }
125
+ }
126
+ exports.HistoryCompareFormatter = HistoryCompareFormatter;
127
+ //# sourceMappingURL=compare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../../src/formatters/history/compare.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Compare Formatter
3
+ *
4
+ * Formats benchmark run comparison results in human and JSON formats.
5
+ */
6
+ import type { CompareResult } from "../../services/history/models.cjs";
7
+ import type { HistoryFormatter } from "./base.cjs";
8
+ /**
9
+ * Formatter for history compare command
10
+ */
11
+ export declare class HistoryCompareFormatter implements HistoryFormatter<CompareResult> {
12
+ /**
13
+ * Format as human-readable comparison
14
+ */
15
+ formatHuman(data: CompareResult): string;
16
+ /**
17
+ * Format as JSON
18
+ */
19
+ formatJson(data: CompareResult): string;
20
+ }
21
+ //# sourceMappingURL=compare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../../src/formatters/history/compare.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,0CAAyC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAkB;AAKlD;;GAEG;AACH,qBAAa,uBACX,YAAW,gBAAgB,CAAC,aAAa,CAAC;IAE1C;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM;IAoJxC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM;CAaxC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Compare Formatter
3
+ *
4
+ * Formats benchmark run comparison results in human and JSON formats.
5
+ */
6
+ import type { CompareResult } from "../../services/history/models.js";
7
+ import type { HistoryFormatter } from "./base.js";
8
+ /**
9
+ * Formatter for history compare command
10
+ */
11
+ export declare class HistoryCompareFormatter implements HistoryFormatter<CompareResult> {
12
+ /**
13
+ * Format as human-readable comparison
14
+ */
15
+ formatHuman(data: CompareResult): string;
16
+ /**
17
+ * Format as JSON
18
+ */
19
+ formatJson(data: CompareResult): string;
20
+ }
21
+ //# sourceMappingURL=compare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../../src/formatters/history/compare.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,yCAAyC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB;AAKlD;;GAEG;AACH,qBAAa,uBACX,YAAW,gBAAgB,CAAC,aAAa,CAAC;IAE1C;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM;IAoJxC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM;CAaxC"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Compare Formatter
3
+ *
4
+ * Formats benchmark run comparison results in human and JSON formats.
5
+ */
6
+ import { colorize } from "../../utils/ansi.js";
7
+ import { ansiChars } from "../../utils/ansi.js";
8
+ /**
9
+ * Formatter for history compare command
10
+ */
11
+ export class HistoryCompareFormatter {
12
+ /**
13
+ * Format as human-readable comparison
14
+ */
15
+ formatHuman(data) {
16
+ const lines = [];
17
+ lines.push(colorize('brightMagenta', colorize('bold', 'Comparing runs:')));
18
+ lines.push(` ${colorize('brightCyan', ansiChars.bullet)} ${colorize('brightWhite', colorize('bold', 'Run 1'))} ${colorize('dim', data.run1.id)} (${colorize('white', data.run1.startTime.toLocaleString())})`);
19
+ lines.push(` ${colorize('brightCyan', ansiChars.bullet)} ${colorize('brightWhite', colorize('bold', 'Run 2'))} ${colorize('dim', data.run2.id)} (${colorize('white', data.run2.startTime.toLocaleString())})`);
20
+ lines.push('');
21
+ lines.push(colorize('cyan', 'Summary comparison:'));
22
+ lines.push('');
23
+ lines.push(` ${colorize('dim', ansiChars.smallSquare)} Files: ${colorize('brightWhite', String(data.run1.summary.totalFiles))} vs ${colorize('brightWhite', String(data.run2.summary.totalFiles))}`);
24
+ lines.push(` ${colorize('dim', ansiChars.smallSquare)} Tasks: ${colorize('brightWhite', String(data.run1.summary.totalTasks))} vs ${colorize('brightWhite', String(data.run2.summary.totalTasks))}`);
25
+ lines.push(` ${colorize('dim', ansiChars.smallSquare)} Passed: ${colorize('brightCyan', String(data.run1.summary.passedTasks))} vs ${colorize('brightCyan', String(data.run2.summary.passedTasks))}`);
26
+ lines.push(` ${colorize('dim', ansiChars.smallSquare)} Failed: ${colorize('brightRed', colorize('bold', String(data.run1.summary.failedTasks)))} vs ${colorize('brightRed', colorize('bold', String(data.run2.summary.failedTasks)))}`);
27
+ lines.push('');
28
+ // Detailed task comparison
29
+ if (data.tasksInBoth.length > 0) {
30
+ lines.push(colorize('cyan', 'Task-by-task comparison:'));
31
+ lines.push('');
32
+ for (const comparison of data.tasksInBoth) {
33
+ const mean1 = comparison.run1.mean / 1000000; // Convert to ms
34
+ const mean2 = comparison.run2.mean / 1000000;
35
+ const changeSign = comparison.percentChange >= 0 ? '+' : '';
36
+ const changeStr = `${changeSign}${comparison.percentChange.toFixed(1)}%`;
37
+ lines.push(` ${colorize('brightWhite', `${comparison.suite} › ${comparison.task}`)}`);
38
+ // Mean - highlight higher (slower/worse) number
39
+ const meanHigher = mean2 > mean1;
40
+ const mean1Str = meanHigher
41
+ ? colorize('magenta', `${mean1.toFixed(3)}ms`)
42
+ : colorize('brightMagenta', `${mean1.toFixed(3)}ms`);
43
+ const mean2Str = meanHigher
44
+ ? colorize('brightMagenta', `${mean2.toFixed(3)}ms`)
45
+ : colorize('magenta', `${mean2.toFixed(3)}ms`);
46
+ lines.push(` ${colorize('dim', ansiChars.bullet)} ${colorize('white', 'Mean:')} ${mean1Str} ${colorize('dim', '→')} ${mean2Str} ${colorize('dim', `(${colorize('white', changeStr)}`)}`);
47
+ // Min - highlight higher number
48
+ const min1 = comparison.run1.min / 1000000;
49
+ const min2 = comparison.run2.min / 1000000;
50
+ const minHigher = min2 > min1;
51
+ const min1Str = minHigher
52
+ ? colorize('magenta', `${min1.toFixed(3)}ms`)
53
+ : colorize('brightMagenta', `${min1.toFixed(3)}ms`);
54
+ const min2Str = minHigher
55
+ ? colorize('brightMagenta', `${min2.toFixed(3)}ms`)
56
+ : colorize('magenta', `${min2.toFixed(3)}ms`);
57
+ lines.push(` ${colorize('dim', ansiChars.bullet)} ${colorize('white', 'Min:')} ${min1Str} ${colorize('dim', '→')} ${min2Str}`);
58
+ // Max - highlight higher number
59
+ const max1 = comparison.run1.max / 1000000;
60
+ const max2 = comparison.run2.max / 1000000;
61
+ const maxHigher = max2 > max1;
62
+ const max1Str = maxHigher
63
+ ? colorize('magenta', `${max1.toFixed(3)}ms`)
64
+ : colorize('brightMagenta', `${max1.toFixed(3)}ms`);
65
+ const max2Str = maxHigher
66
+ ? colorize('brightMagenta', `${max2.toFixed(3)}ms`)
67
+ : colorize('magenta', `${max2.toFixed(3)}ms`);
68
+ lines.push(` ${colorize('dim', ansiChars.bullet)} ${colorize('white', 'Max:')} ${max1Str} ${colorize('dim', '→')} ${max2Str}`);
69
+ // Iterations - highlight higher number
70
+ const iter1 = comparison.run1.iterations;
71
+ const iter2 = comparison.run2.iterations;
72
+ const iterHigher = iter2 > iter1;
73
+ const iter1Str = iterHigher
74
+ ? colorize('brightWhite', String(iter1))
75
+ : colorize('bold', colorize('brightWhite', String(iter1)));
76
+ const iter2Str = iterHigher
77
+ ? colorize('bold', colorize('brightWhite', String(iter2)))
78
+ : colorize('brightWhite', String(iter2));
79
+ lines.push(` ${colorize('dim', ansiChars.bullet)} ${colorize('white', 'Iterations:')} ${iter1Str} ${colorize('dim', 'vs')} ${iter2Str}`);
80
+ // CV (Coefficient of Variation) - shows measurement consistency
81
+ const cv1 = comparison.run1.cv * 100;
82
+ const cv2 = comparison.run2.cv * 100;
83
+ const cvHigher = cv2 > cv1;
84
+ const cv1Str = cvHigher
85
+ ? colorize('magenta', `${cv1.toFixed(2)}%`)
86
+ : colorize('brightMagenta', `${cv1.toFixed(2)}%`);
87
+ const cv2Str = cvHigher
88
+ ? colorize('brightMagenta', `${cv2.toFixed(2)}%`)
89
+ : colorize('magenta', `${cv2.toFixed(2)}%`);
90
+ lines.push(` ${colorize('dim', ansiChars.bullet)} ${colorize('white', 'CV:')} ${cv1Str} ${colorize('dim', '→')} ${cv2Str}`);
91
+ lines.push('');
92
+ }
93
+ }
94
+ if (data.tasksOnlyInRun1.length > 0) {
95
+ lines.push(colorize('cyan', `Tasks only in run 1 (${data.tasksOnlyInRun1.length}):`));
96
+ for (const task of data.tasksOnlyInRun1) {
97
+ lines.push(` ${colorize('dim', ansiChars.bullet)} ${colorize('brightWhite', `${task.suite} › ${task.task}`)}`);
98
+ }
99
+ lines.push('');
100
+ }
101
+ if (data.tasksOnlyInRun2.length > 0) {
102
+ lines.push(colorize('cyan', `Tasks only in run 2 (${data.tasksOnlyInRun2.length}):`));
103
+ for (const task of data.tasksOnlyInRun2) {
104
+ lines.push(` ${colorize('dim', ansiChars.bullet)} ${colorize('brightWhite', `${task.suite} › ${task.task}`)}`);
105
+ }
106
+ lines.push('');
107
+ }
108
+ return lines.join('\n');
109
+ }
110
+ /**
111
+ * Format as JSON
112
+ */
113
+ formatJson(data) {
114
+ return JSON.stringify({
115
+ run1: data.run1,
116
+ run2: data.run2,
117
+ taskComparisons: data.tasksInBoth,
118
+ tasksOnlyInRun1: data.tasksOnlyInRun1,
119
+ tasksOnlyInRun2: data.tasksOnlyInRun2,
120
+ }, null, 2);
121
+ }
122
+ }
123
+ //# sourceMappingURL=compare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../../src/formatters/history/compare.ts"],"names":[],"mappings":"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"}