uxinspect 0.2.0 → 0.11.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 (493) hide show
  1. package/README.md +332 -22
  2. package/dist/a11y-filter.d.ts +15 -0
  3. package/dist/a11y-filter.d.ts.map +1 -0
  4. package/dist/a11y-filter.js +107 -0
  5. package/dist/a11y-filter.js.map +1 -0
  6. package/dist/ab-compare.d.ts +23 -0
  7. package/dist/ab-compare.d.ts.map +1 -0
  8. package/dist/ab-compare.js +340 -0
  9. package/dist/ab-compare.js.map +1 -0
  10. package/dist/ai-codegen.d.ts +30 -0
  11. package/dist/ai-codegen.d.ts.map +1 -0
  12. package/dist/ai-codegen.js +296 -0
  13. package/dist/ai-codegen.js.map +1 -0
  14. package/dist/ai-triage.d.ts +26 -0
  15. package/dist/ai-triage.d.ts.map +1 -0
  16. package/dist/ai-triage.js +207 -0
  17. package/dist/ai-triage.js.map +1 -0
  18. package/dist/amp.d.ts +32 -0
  19. package/dist/amp.d.ts.map +1 -0
  20. package/dist/amp.js +179 -0
  21. package/dist/amp.js.map +1 -0
  22. package/dist/animation-audit.d.ts +25 -0
  23. package/dist/animation-audit.d.ts.map +1 -0
  24. package/dist/animation-audit.js +296 -0
  25. package/dist/animation-audit.js.map +1 -0
  26. package/dist/api.d.ts +3 -0
  27. package/dist/api.d.ts.map +1 -0
  28. package/dist/api.js +85 -0
  29. package/dist/api.js.map +1 -0
  30. package/dist/aria-audit.d.ts +20 -0
  31. package/dist/aria-audit.d.ts.map +1 -0
  32. package/dist/aria-audit.js +445 -0
  33. package/dist/aria-audit.js.map +1 -0
  34. package/dist/assertions.d.ts +30 -0
  35. package/dist/assertions.d.ts.map +1 -0
  36. package/dist/assertions.js +342 -0
  37. package/dist/assertions.js.map +1 -0
  38. package/dist/autofix.d.ts +40 -0
  39. package/dist/autofix.d.ts.map +1 -0
  40. package/dist/autofix.js +244 -0
  41. package/dist/autofix.js.map +1 -0
  42. package/dist/badge.d.ts +27 -0
  43. package/dist/badge.d.ts.map +1 -0
  44. package/dist/badge.js +183 -0
  45. package/dist/badge.js.map +1 -0
  46. package/dist/baseline-drift.d.ts +43 -0
  47. package/dist/baseline-drift.d.ts.map +1 -0
  48. package/dist/baseline-drift.js +208 -0
  49. package/dist/baseline-drift.js.map +1 -0
  50. package/dist/bdd.d.ts +31 -0
  51. package/dist/bdd.d.ts.map +1 -0
  52. package/dist/bdd.js +316 -0
  53. package/dist/bdd.js.map +1 -0
  54. package/dist/bisect.d.ts +32 -0
  55. package/dist/bisect.d.ts.map +1 -0
  56. package/dist/bisect.js +253 -0
  57. package/dist/bisect.js.map +1 -0
  58. package/dist/budget-diff.d.ts +37 -0
  59. package/dist/budget-diff.d.ts.map +1 -0
  60. package/dist/budget-diff.js +273 -0
  61. package/dist/budget-diff.js.map +1 -0
  62. package/dist/budget-file.d.ts +15 -0
  63. package/dist/budget-file.d.ts.map +1 -0
  64. package/dist/budget-file.js +185 -0
  65. package/dist/budget-file.js.map +1 -0
  66. package/dist/bundle-size.d.ts +36 -0
  67. package/dist/bundle-size.d.ts.map +1 -0
  68. package/dist/bundle-size.js +347 -0
  69. package/dist/bundle-size.js.map +1 -0
  70. package/dist/cache-headers.d.ts +33 -0
  71. package/dist/cache-headers.d.ts.map +1 -0
  72. package/dist/cache-headers.js +270 -0
  73. package/dist/cache-headers.js.map +1 -0
  74. package/dist/canonical-audit.d.ts +19 -0
  75. package/dist/canonical-audit.d.ts.map +1 -0
  76. package/dist/canonical-audit.js +196 -0
  77. package/dist/canonical-audit.js.map +1 -0
  78. package/dist/chaos.d.ts +38 -0
  79. package/dist/chaos.d.ts.map +1 -0
  80. package/dist/chaos.js +348 -0
  81. package/dist/chaos.js.map +1 -0
  82. package/dist/cli.js +201 -23
  83. package/dist/cli.js.map +1 -1
  84. package/dist/clickjacking-audit.d.ts +18 -0
  85. package/dist/clickjacking-audit.d.ts.map +1 -0
  86. package/dist/clickjacking-audit.js +231 -0
  87. package/dist/clickjacking-audit.js.map +1 -0
  88. package/dist/cls-culprit.d.ts +36 -0
  89. package/dist/cls-culprit.d.ts.map +1 -0
  90. package/dist/cls-culprit.js +203 -0
  91. package/dist/cls-culprit.js.map +1 -0
  92. package/dist/cls-timeline.d.ts +30 -0
  93. package/dist/cls-timeline.d.ts.map +1 -0
  94. package/dist/cls-timeline.js +61 -0
  95. package/dist/cls-timeline.js.map +1 -0
  96. package/dist/codegen-converter.d.ts +19 -0
  97. package/dist/codegen-converter.d.ts.map +1 -0
  98. package/dist/codegen-converter.js +464 -0
  99. package/dist/codegen-converter.js.map +1 -0
  100. package/dist/compression.d.ts +14 -0
  101. package/dist/compression.d.ts.map +1 -0
  102. package/dist/compression.js +150 -0
  103. package/dist/compression.js.map +1 -0
  104. package/dist/console-errors.d.ts +24 -0
  105. package/dist/console-errors.d.ts.map +1 -0
  106. package/dist/console-errors.js +96 -0
  107. package/dist/console-errors.js.map +1 -0
  108. package/dist/content-quality.d.ts +34 -0
  109. package/dist/content-quality.d.ts.map +1 -0
  110. package/dist/content-quality.js +124 -0
  111. package/dist/content-quality.js.map +1 -0
  112. package/dist/contract-openapi.d.ts +74 -0
  113. package/dist/contract-openapi.d.ts.map +1 -0
  114. package/dist/contract-openapi.js +305 -0
  115. package/dist/contract-openapi.js.map +1 -0
  116. package/dist/cookie-banner.d.ts +27 -0
  117. package/dist/cookie-banner.d.ts.map +1 -0
  118. package/dist/cookie-banner.js +285 -0
  119. package/dist/cookie-banner.js.map +1 -0
  120. package/dist/cookie-flags-audit.d.ts +35 -0
  121. package/dist/cookie-flags-audit.d.ts.map +1 -0
  122. package/dist/cookie-flags-audit.js +167 -0
  123. package/dist/cookie-flags-audit.js.map +1 -0
  124. package/dist/cpu-throttle.d.ts +34 -0
  125. package/dist/cpu-throttle.d.ts.map +1 -0
  126. package/dist/cpu-throttle.js +149 -0
  127. package/dist/cpu-throttle.js.map +1 -0
  128. package/dist/crawl.d.ts +29 -0
  129. package/dist/crawl.d.ts.map +1 -0
  130. package/dist/crawl.js +153 -0
  131. package/dist/crawl.js.map +1 -0
  132. package/dist/critical-css.d.ts +25 -0
  133. package/dist/critical-css.d.ts.map +1 -0
  134. package/dist/critical-css.js +353 -0
  135. package/dist/critical-css.js.map +1 -0
  136. package/dist/cross-browser.d.ts +44 -0
  137. package/dist/cross-browser.d.ts.map +1 -0
  138. package/dist/cross-browser.js +300 -0
  139. package/dist/cross-browser.js.map +1 -0
  140. package/dist/csrf-audit.d.ts +33 -0
  141. package/dist/csrf-audit.d.ts.map +1 -0
  142. package/dist/csrf-audit.js +276 -0
  143. package/dist/csrf-audit.js.map +1 -0
  144. package/dist/css-coverage.d.ts +20 -0
  145. package/dist/css-coverage.d.ts.map +1 -0
  146. package/dist/css-coverage.js +91 -0
  147. package/dist/css-coverage.js.map +1 -0
  148. package/dist/csv-exporter.d.ts +34 -0
  149. package/dist/csv-exporter.d.ts.map +1 -0
  150. package/dist/csv-exporter.js +241 -0
  151. package/dist/csv-exporter.js.map +1 -0
  152. package/dist/dark-mode-audit.d.ts +31 -0
  153. package/dist/dark-mode-audit.d.ts.map +1 -0
  154. package/dist/dark-mode-audit.js +236 -0
  155. package/dist/dark-mode-audit.js.map +1 -0
  156. package/dist/dead-images.d.ts +18 -0
  157. package/dist/dead-images.d.ts.map +1 -0
  158. package/dist/dead-images.js +236 -0
  159. package/dist/dead-images.js.map +1 -0
  160. package/dist/deadclicks.d.ts +19 -0
  161. package/dist/deadclicks.d.ts.map +1 -0
  162. package/dist/deadclicks.js +109 -0
  163. package/dist/deadclicks.js.map +1 -0
  164. package/dist/discord-formatter.d.ts +39 -0
  165. package/dist/discord-formatter.d.ts.map +1 -0
  166. package/dist/discord-formatter.js +191 -0
  167. package/dist/discord-formatter.js.map +1 -0
  168. package/dist/dom-audit.d.ts +23 -0
  169. package/dist/dom-audit.d.ts.map +1 -0
  170. package/dist/dom-audit.js +111 -0
  171. package/dist/dom-audit.js.map +1 -0
  172. package/dist/driver.d.ts.map +1 -1
  173. package/dist/driver.js +10 -0
  174. package/dist/driver.js.map +1 -1
  175. package/dist/error-page-audit.d.ts +26 -0
  176. package/dist/error-page-audit.d.ts.map +1 -0
  177. package/dist/error-page-audit.js +219 -0
  178. package/dist/error-page-audit.js.map +1 -0
  179. package/dist/event-listener-audit.d.ts +22 -0
  180. package/dist/event-listener-audit.d.ts.map +1 -0
  181. package/dist/event-listener-audit.js +156 -0
  182. package/dist/event-listener-audit.js.map +1 -0
  183. package/dist/exposed-paths.d.ts +21 -0
  184. package/dist/exposed-paths.d.ts.map +1 -0
  185. package/dist/exposed-paths.js +116 -0
  186. package/dist/exposed-paths.js.map +1 -0
  187. package/dist/favicon-audit.d.ts +28 -0
  188. package/dist/favicon-audit.d.ts.map +1 -0
  189. package/dist/favicon-audit.js +358 -0
  190. package/dist/favicon-audit.js.map +1 -0
  191. package/dist/flaky-detector.d.ts +32 -0
  192. package/dist/flaky-detector.d.ts.map +1 -0
  193. package/dist/flaky-detector.js +254 -0
  194. package/dist/flaky-detector.js.map +1 -0
  195. package/dist/flaky.d.ts +28 -0
  196. package/dist/flaky.d.ts.map +1 -0
  197. package/dist/flaky.js +106 -0
  198. package/dist/flaky.js.map +1 -0
  199. package/dist/focus-trap-audit.d.ts +29 -0
  200. package/dist/focus-trap-audit.d.ts.map +1 -0
  201. package/dist/focus-trap-audit.js +285 -0
  202. package/dist/focus-trap-audit.js.map +1 -0
  203. package/dist/font-loading.d.ts +29 -0
  204. package/dist/font-loading.d.ts.map +1 -0
  205. package/dist/font-loading.js +216 -0
  206. package/dist/font-loading.js.map +1 -0
  207. package/dist/forms-audit.d.ts +23 -0
  208. package/dist/forms-audit.d.ts.map +1 -0
  209. package/dist/forms-audit.js +147 -0
  210. package/dist/forms-audit.js.map +1 -0
  211. package/dist/github-annotations.d.ts +17 -0
  212. package/dist/github-annotations.d.ts.map +1 -0
  213. package/dist/github-annotations.js +264 -0
  214. package/dist/github-annotations.js.map +1 -0
  215. package/dist/graphql.d.ts +60 -0
  216. package/dist/graphql.d.ts.map +1 -0
  217. package/dist/graphql.js +188 -0
  218. package/dist/graphql.js.map +1 -0
  219. package/dist/har-waterfall.d.ts +37 -0
  220. package/dist/har-waterfall.d.ts.map +1 -0
  221. package/dist/har-waterfall.js +376 -0
  222. package/dist/har-waterfall.js.map +1 -0
  223. package/dist/heading-hierarchy.d.ts +20 -0
  224. package/dist/heading-hierarchy.d.ts.map +1 -0
  225. package/dist/heading-hierarchy.js +112 -0
  226. package/dist/heading-hierarchy.js.map +1 -0
  227. package/dist/headless-detect.d.ts +22 -0
  228. package/dist/headless-detect.d.ts.map +1 -0
  229. package/dist/headless-detect.js +167 -0
  230. package/dist/headless-detect.js.map +1 -0
  231. package/dist/history-timeline.d.ts +13 -0
  232. package/dist/history-timeline.d.ts.map +1 -0
  233. package/dist/history-timeline.js +327 -0
  234. package/dist/history-timeline.js.map +1 -0
  235. package/dist/hreflang-audit.d.ts +26 -0
  236. package/dist/hreflang-audit.d.ts.map +1 -0
  237. package/dist/hreflang-audit.js +273 -0
  238. package/dist/hreflang-audit.js.map +1 -0
  239. package/dist/hydration-audit.d.ts +21 -0
  240. package/dist/hydration-audit.d.ts.map +1 -0
  241. package/dist/hydration-audit.js +277 -0
  242. package/dist/hydration-audit.js.map +1 -0
  243. package/dist/image-audit.d.ts +41 -0
  244. package/dist/image-audit.d.ts.map +1 -0
  245. package/dist/image-audit.js +229 -0
  246. package/dist/image-audit.js.map +1 -0
  247. package/dist/index.d.ts +119 -0
  248. package/dist/index.d.ts.map +1 -1
  249. package/dist/index.js +708 -2
  250. package/dist/index.js.map +1 -1
  251. package/dist/init-wizard.d.ts +33 -0
  252. package/dist/init-wizard.d.ts.map +1 -0
  253. package/dist/init-wizard.js +289 -0
  254. package/dist/init-wizard.js.map +1 -0
  255. package/dist/inp-audit.d.ts +26 -0
  256. package/dist/inp-audit.d.ts.map +1 -0
  257. package/dist/inp-audit.js +202 -0
  258. package/dist/inp-audit.js.map +1 -0
  259. package/dist/js-coverage.d.ts +20 -0
  260. package/dist/js-coverage.d.ts.map +1 -0
  261. package/dist/js-coverage.js +81 -0
  262. package/dist/js-coverage.js.map +1 -0
  263. package/dist/json-schema.d.ts +27 -0
  264. package/dist/json-schema.d.ts.map +1 -0
  265. package/dist/json-schema.js +284 -0
  266. package/dist/json-schema.js.map +1 -0
  267. package/dist/keyboard.d.ts +21 -0
  268. package/dist/keyboard.d.ts.map +1 -0
  269. package/dist/keyboard.js +119 -0
  270. package/dist/keyboard.js.map +1 -0
  271. package/dist/lang-audit.d.ts +24 -0
  272. package/dist/lang-audit.d.ts.map +1 -0
  273. package/dist/lang-audit.js +141 -0
  274. package/dist/lang-audit.js.map +1 -0
  275. package/dist/lcp-element.d.ts +22 -0
  276. package/dist/lcp-element.d.ts.map +1 -0
  277. package/dist/lcp-element.js +240 -0
  278. package/dist/lcp-element.js.map +1 -0
  279. package/dist/longtasks.d.ts +38 -0
  280. package/dist/longtasks.d.ts.map +1 -0
  281. package/dist/longtasks.js +97 -0
  282. package/dist/longtasks.js.map +1 -0
  283. package/dist/mailbox.d.ts +35 -0
  284. package/dist/mailbox.d.ts.map +1 -0
  285. package/dist/mailbox.js +207 -0
  286. package/dist/mailbox.js.map +1 -0
  287. package/dist/media-audit.d.ts +20 -0
  288. package/dist/media-audit.d.ts.map +1 -0
  289. package/dist/media-audit.js +182 -0
  290. package/dist/media-audit.js.map +1 -0
  291. package/dist/metrics-exporter.d.ts +23 -0
  292. package/dist/metrics-exporter.d.ts.map +1 -0
  293. package/dist/metrics-exporter.js +297 -0
  294. package/dist/metrics-exporter.js.map +1 -0
  295. package/dist/mixed-content.d.ts +19 -0
  296. package/dist/mixed-content.d.ts.map +1 -0
  297. package/dist/mixed-content.js +86 -0
  298. package/dist/mixed-content.js.map +1 -0
  299. package/dist/motion-prefs.d.ts +21 -0
  300. package/dist/motion-prefs.d.ts.map +1 -0
  301. package/dist/motion-prefs.js +170 -0
  302. package/dist/motion-prefs.js.map +1 -0
  303. package/dist/open-graph.d.ts +40 -0
  304. package/dist/open-graph.d.ts.map +1 -0
  305. package/dist/open-graph.js +200 -0
  306. package/dist/open-graph.js.map +1 -0
  307. package/dist/orphan-assets.d.ts +17 -0
  308. package/dist/orphan-assets.d.ts.map +1 -0
  309. package/dist/orphan-assets.js +174 -0
  310. package/dist/orphan-assets.js.map +1 -0
  311. package/dist/page-object.d.ts +18 -0
  312. package/dist/page-object.d.ts.map +1 -0
  313. package/dist/page-object.js +346 -0
  314. package/dist/page-object.js.map +1 -0
  315. package/dist/pagination-audit.d.ts +24 -0
  316. package/dist/pagination-audit.d.ts.map +1 -0
  317. package/dist/pagination-audit.js +285 -0
  318. package/dist/pagination-audit.js.map +1 -0
  319. package/dist/passive-security.d.ts +19 -0
  320. package/dist/passive-security.d.ts.map +1 -0
  321. package/dist/passive-security.js +149 -0
  322. package/dist/passive-security.js.map +1 -0
  323. package/dist/pr-comment.d.ts +13 -0
  324. package/dist/pr-comment.d.ts.map +1 -0
  325. package/dist/pr-comment.js +316 -0
  326. package/dist/pr-comment.js.map +1 -0
  327. package/dist/precommit.d.ts +24 -0
  328. package/dist/precommit.d.ts.map +1 -0
  329. package/dist/precommit.js +239 -0
  330. package/dist/precommit.js.map +1 -0
  331. package/dist/prerender-audit.d.ts +22 -0
  332. package/dist/prerender-audit.d.ts.map +1 -0
  333. package/dist/prerender-audit.js +158 -0
  334. package/dist/prerender-audit.js.map +1 -0
  335. package/dist/print-audit.d.ts +21 -0
  336. package/dist/print-audit.d.ts.map +1 -0
  337. package/dist/print-audit.js +281 -0
  338. package/dist/print-audit.js.map +1 -0
  339. package/dist/protocol-audit.d.ts +17 -0
  340. package/dist/protocol-audit.d.ts.map +1 -0
  341. package/dist/protocol-audit.js +128 -0
  342. package/dist/protocol-audit.js.map +1 -0
  343. package/dist/reading-level.d.ts +37 -0
  344. package/dist/reading-level.d.ts.map +1 -0
  345. package/dist/reading-level.js +220 -0
  346. package/dist/reading-level.js.map +1 -0
  347. package/dist/redirects.d.ts +24 -0
  348. package/dist/redirects.d.ts.map +1 -0
  349. package/dist/redirects.js +119 -0
  350. package/dist/redirects.js.map +1 -0
  351. package/dist/report.d.ts +1 -1
  352. package/dist/report.d.ts.map +1 -1
  353. package/dist/report.js +736 -1
  354. package/dist/report.js.map +1 -1
  355. package/dist/reporter-plugin.d.ts +32 -0
  356. package/dist/reporter-plugin.d.ts.map +1 -0
  357. package/dist/reporter-plugin.js +120 -0
  358. package/dist/reporter-plugin.js.map +1 -0
  359. package/dist/resource-hints.d.ts +23 -0
  360. package/dist/resource-hints.d.ts.map +1 -0
  361. package/dist/resource-hints.js +225 -0
  362. package/dist/resource-hints.js.map +1 -0
  363. package/dist/retire.d.ts +22 -0
  364. package/dist/retire.d.ts.map +1 -0
  365. package/dist/retire.js +140 -0
  366. package/dist/retire.js.map +1 -0
  367. package/dist/retry.d.ts +20 -0
  368. package/dist/retry.d.ts.map +1 -0
  369. package/dist/retry.js +120 -0
  370. package/dist/retry.js.map +1 -0
  371. package/dist/robots-audit.d.ts +24 -0
  372. package/dist/robots-audit.d.ts.map +1 -0
  373. package/dist/robots-audit.js +206 -0
  374. package/dist/robots-audit.js.map +1 -0
  375. package/dist/rum.d.ts +35 -0
  376. package/dist/rum.d.ts.map +1 -0
  377. package/dist/rum.js +219 -0
  378. package/dist/rum.js.map +1 -0
  379. package/dist/schedule.d.ts +30 -0
  380. package/dist/schedule.d.ts.map +1 -0
  381. package/dist/schedule.js +238 -0
  382. package/dist/schedule.js.map +1 -0
  383. package/dist/secret-scan.d.ts +24 -0
  384. package/dist/secret-scan.d.ts.map +1 -0
  385. package/dist/secret-scan.js +202 -0
  386. package/dist/secret-scan.js.map +1 -0
  387. package/dist/service-worker.d.ts +26 -0
  388. package/dist/service-worker.d.ts.map +1 -0
  389. package/dist/service-worker.js +179 -0
  390. package/dist/service-worker.js.map +1 -0
  391. package/dist/shard.d.ts +14 -0
  392. package/dist/shard.d.ts.map +1 -0
  393. package/dist/shard.js +72 -0
  394. package/dist/shard.js.map +1 -0
  395. package/dist/sitemap-flows.d.ts +13 -0
  396. package/dist/sitemap-flows.d.ts.map +1 -0
  397. package/dist/sitemap-flows.js +157 -0
  398. package/dist/sitemap-flows.js.map +1 -0
  399. package/dist/sitemap.d.ts +27 -0
  400. package/dist/sitemap.d.ts.map +1 -0
  401. package/dist/sitemap.js +137 -0
  402. package/dist/sitemap.js.map +1 -0
  403. package/dist/slack-formatter.d.ts +35 -0
  404. package/dist/slack-formatter.d.ts.map +1 -0
  405. package/dist/slack-formatter.js +193 -0
  406. package/dist/slack-formatter.js.map +1 -0
  407. package/dist/sourcemap-scan.d.ts +24 -0
  408. package/dist/sourcemap-scan.d.ts.map +1 -0
  409. package/dist/sourcemap-scan.js +232 -0
  410. package/dist/sourcemap-scan.js.map +1 -0
  411. package/dist/sri-audit.d.ts +23 -0
  412. package/dist/sri-audit.d.ts.map +1 -0
  413. package/dist/sri-audit.js +180 -0
  414. package/dist/sri-audit.js.map +1 -0
  415. package/dist/storage-audit.d.ts +28 -0
  416. package/dist/storage-audit.d.ts.map +1 -0
  417. package/dist/storage-audit.js +263 -0
  418. package/dist/storage-audit.js.map +1 -0
  419. package/dist/storybook.d.ts +48 -0
  420. package/dist/storybook.d.ts.map +1 -0
  421. package/dist/storybook.js +191 -0
  422. package/dist/storybook.js.map +1 -0
  423. package/dist/structured-data.d.ts +25 -0
  424. package/dist/structured-data.d.ts.map +1 -0
  425. package/dist/structured-data.js +164 -0
  426. package/dist/structured-data.js.map +1 -0
  427. package/dist/svg-audit.d.ts +20 -0
  428. package/dist/svg-audit.d.ts.map +1 -0
  429. package/dist/svg-audit.js +213 -0
  430. package/dist/svg-audit.js.map +1 -0
  431. package/dist/table-audit.d.ts +18 -0
  432. package/dist/table-audit.d.ts.map +1 -0
  433. package/dist/table-audit.js +188 -0
  434. package/dist/table-audit.js.map +1 -0
  435. package/dist/teams-formatter.d.ts +66 -0
  436. package/dist/teams-formatter.d.ts.map +1 -0
  437. package/dist/teams-formatter.js +194 -0
  438. package/dist/teams-formatter.js.map +1 -0
  439. package/dist/third-party.d.ts +35 -0
  440. package/dist/third-party.d.ts.map +1 -0
  441. package/dist/third-party.js +175 -0
  442. package/dist/third-party.js.map +1 -0
  443. package/dist/tls.d.ts +33 -0
  444. package/dist/tls.d.ts.map +1 -0
  445. package/dist/tls.js +122 -0
  446. package/dist/tls.js.map +1 -0
  447. package/dist/touchtargets.d.ts +22 -0
  448. package/dist/touchtargets.d.ts.map +1 -0
  449. package/dist/touchtargets.js +80 -0
  450. package/dist/touchtargets.js.map +1 -0
  451. package/dist/tracker-sniff.d.ts +25 -0
  452. package/dist/tracker-sniff.d.ts.map +1 -0
  453. package/dist/tracker-sniff.js +355 -0
  454. package/dist/tracker-sniff.js.map +1 -0
  455. package/dist/types.d.ts +265 -1
  456. package/dist/types.d.ts.map +1 -1
  457. package/dist/visual-mask.d.ts +33 -0
  458. package/dist/visual-mask.d.ts.map +1 -0
  459. package/dist/visual-mask.js +102 -0
  460. package/dist/visual-mask.js.map +1 -0
  461. package/dist/visual-ssim.d.ts +26 -0
  462. package/dist/visual-ssim.d.ts.map +1 -0
  463. package/dist/visual-ssim.js +153 -0
  464. package/dist/visual-ssim.js.map +1 -0
  465. package/dist/watch-mode.d.ts +10 -0
  466. package/dist/watch-mode.d.ts.map +1 -0
  467. package/dist/watch-mode.js +156 -0
  468. package/dist/watch-mode.js.map +1 -0
  469. package/dist/web-worker-audit.d.ts +27 -0
  470. package/dist/web-worker-audit.d.ts.map +1 -0
  471. package/dist/web-worker-audit.js +324 -0
  472. package/dist/web-worker-audit.js.map +1 -0
  473. package/dist/webfonts.d.ts +26 -0
  474. package/dist/webfonts.d.ts.map +1 -0
  475. package/dist/webfonts.js +244 -0
  476. package/dist/webfonts.js.map +1 -0
  477. package/dist/webhook-reporter.d.ts +20 -0
  478. package/dist/webhook-reporter.d.ts.map +1 -0
  479. package/dist/webhook-reporter.js +124 -0
  480. package/dist/webhook-reporter.js.map +1 -0
  481. package/dist/websocket.d.ts +39 -0
  482. package/dist/websocket.d.ts.map +1 -0
  483. package/dist/websocket.js +233 -0
  484. package/dist/websocket.js.map +1 -0
  485. package/dist/worker-runtime.d.ts +129 -0
  486. package/dist/worker-runtime.d.ts.map +1 -0
  487. package/dist/worker-runtime.js +414 -0
  488. package/dist/worker-runtime.js.map +1 -0
  489. package/dist/zindex-audit.d.ts +28 -0
  490. package/dist/zindex-audit.d.ts.map +1 -0
  491. package/dist/zindex-audit.js +291 -0
  492. package/dist/zindex-audit.js.map +1 -0
  493. package/package.json +10 -2
package/README.md CHANGED
@@ -2,8 +2,9 @@
2
2
 
3
3
  > All-in-one UI/UX testing — tests like a real human, every click, every screen, every accessibility rule, in one CLI.
4
4
 
5
- [![npm](https://img.shields.io/npm/v/uxinspect.svg)](https://npmjs.com/package/uxinspect)
6
- [![license](https://img.shields.io/npm/l/uxinspect.svg)](LICENSE)
5
+ [![npm](https://img.shields.io/npm/v/uxinspect.svg?color=10B981)](https://npmjs.com/package/uxinspect)
6
+ [![license](https://img.shields.io/npm/l/uxinspect.svg?color=10B981)](LICENSE)
7
+ [![checks](https://img.shields.io/badge/checks-38-10B981)](#checks)
7
8
 
8
9
  ## What it does
9
10
 
@@ -57,7 +58,7 @@ export default {
57
58
  ],
58
59
  checks: { a11y: true, visual: true, perf: true, explore: true },
59
60
  parallel: true,
60
- reporters: ['html', 'json', 'junit', 'sarif'],
61
+ reporters: ['html', 'json', 'junit', 'sarif', 'allure', 'tap'],
61
62
  ai: { enabled: true },
62
63
  } satisfies InspectConfig;
63
64
  ```
@@ -79,25 +80,331 @@ const result = await inspect({
79
80
  if (!result.passed) process.exit(1);
80
81
  ```
81
82
 
82
- ## CLI options
83
+ ## Programmatic helpers
84
+
85
+ Composable helpers that sit alongside `inspect()` for specialized flows and integrations.
86
+
87
+ ### `flaky` — retry with flake detection
88
+
89
+ Re-runs a block until it passes, classifies intermittent failures as flakes.
90
+
91
+ ```ts
92
+ import { retryWithFlakeDetection, inspect } from 'uxinspect';
93
+
94
+ const result = await retryWithFlakeDetection(
95
+ () => inspect(config),
96
+ { maxAttempts: 3 },
97
+ );
98
+ ```
99
+
100
+ ### `websocket` — WebSocket flow support
101
+
102
+ Drive WebSocket endpoints with a step-based flow.
103
+
104
+ ```ts
105
+ import { runWebSocketFlow } from 'uxinspect';
106
+
107
+ await runWebSocketFlow({
108
+ url: 'wss://example.com/socket',
109
+ steps: [
110
+ { send: '{"type":"ping"}' },
111
+ { expect: { contains: 'pong' } },
112
+ ],
113
+ });
114
+ ```
115
+
116
+ ### `graphql` — GraphQL flow support
117
+
118
+ Query/mutation steps with variable interpolation and assertions.
119
+
120
+ ```ts
121
+ import { runGraphQLFlow } from 'uxinspect';
122
+
123
+ await runGraphQLFlow({
124
+ endpoint: 'https://example.com/graphql',
125
+ steps: [
126
+ { query: '{ viewer { id } }', expect: { path: 'data.viewer.id' } },
127
+ ],
128
+ });
129
+ ```
130
+
131
+ ### `service-worker` — Service Worker audit
132
+
133
+ Checks registration, scope, cache strategy, and update flow.
134
+
135
+ ```ts
136
+ import { auditServiceWorker } from 'uxinspect';
137
+
138
+ const report = await auditServiceWorker(page);
139
+ ```
140
+
141
+ ### `rum` — Real User Monitoring
142
+
143
+ Collect field metrics from a page, or inject the RUM client script into production.
144
+
145
+ ```ts
146
+ import { collectRUM, rumClientScript } from 'uxinspect';
147
+
148
+ const metrics = await collectRUM(page);
149
+
150
+ // In your production HTML:
151
+ // <script>${rumClientScript()}</script>
152
+ ```
153
+
154
+ ### `github-annotations` — GitHub Actions PR annotations
155
+
156
+ Emits `::error` / `::warning` workflow commands so findings surface as inline PR annotations.
157
+
158
+ ```ts
159
+ import { emitGitHubAnnotations } from 'uxinspect';
160
+
161
+ emitGitHubAnnotations(result);
162
+ ```
163
+
164
+ ### `amp` — AMP HTML validation
165
+
166
+ Validates AMP markup on the current page.
167
+
168
+ ```ts
169
+ import { validateAmp } from 'uxinspect';
170
+
171
+ const ampReport = await validateAmp(page);
172
+ ```
173
+
174
+ ### `bdd` — Gherkin feature file runner
175
+
176
+ Parse Gherkin syntax, map steps to flows, and hand them to `inspect()`.
177
+
178
+ ```ts
179
+ import { readFileSync } from 'node:fs';
180
+ import { parseFeature, featureToFlows, builtinSteps, inspect } from 'uxinspect';
181
+
182
+ const feature = parseFeature(readFileSync('login.feature', 'utf8'));
183
+ const flows = featureToFlows(feature, builtinSteps);
184
+ await inspect({ url: 'https://example.com', flows });
185
+ ```
186
+
187
+ ### `mailbox` — email intercept for signup flows
188
+
189
+ Wait for a verification email during a test run.
190
+
191
+ ```ts
192
+ import { waitForEmail } from 'uxinspect';
193
+
194
+ const email = await waitForEmail(
195
+ { provider: 'mailpit', baseUrl: 'https://mail.example.com' },
196
+ { subjectContains: 'Verify' },
197
+ );
198
+ ```
199
+
200
+ ## Checks
201
+
202
+ 100+ built-in audits. 65+ wired into `inspect()` single-run (enable via `checks` or `--all`); all available as library imports.
203
+
204
+ ### Accessibility & UX
205
+
206
+ | Check | Key | One-liner |
207
+ |---|---|---|
208
+ | Accessibility | `a11y` | WCAG violations via axe-core on every viewport |
209
+ | Keyboard | `keyboard` | Focus trap, tab order, visible focus rings |
210
+ | Touch targets | `touchTargets` | WCAG 2.5.5 / 2.5.8 target-size (44/24 px) audit |
211
+ | Dead clicks | `deadClicks` | Flags elements that look clickable but do nothing |
212
+ | Motion prefs | `motionPrefs` | `prefers-reduced-motion`, dark-mode, print, forced-colors |
213
+ | Forms | `forms` | Label, autocomplete, required, validation audit |
214
+
215
+ ```ts
216
+ checks: {
217
+ a11y: true,
218
+ keyboard: true,
219
+ touchTargets: true,
220
+ deadClicks: true,
221
+ motionPrefs: true,
222
+ forms: true,
223
+ }
224
+ ```
225
+
226
+ ### Performance
227
+
228
+ | Check | Key | One-liner |
229
+ |---|---|---|
230
+ | Lighthouse | `perf` | Core Web Vitals + Lighthouse scoring |
231
+ | Long tasks | `longTasks` | Long tasks, LoAF attribution, INP capture |
232
+ | CLS timeline | `clsTimeline` | Layout shift timeline with node attribution |
233
+ | Bundle size | `bundleSize` | JS/CSS byte budget + duplicate package detection |
234
+ | Webfonts | `webfonts` | `font-display`, FOIT/FOUT, oversize font files |
235
+ | Images | `imageAudit` | Alt text, lazy-load, modern format, intrinsic dims |
236
+ | Resource hints | `resourceHints` | `preload` / `prefetch` / `preconnect` audit |
237
+ | Cache headers | `cacheHeaders` | `Cache-Control`, `ETag`, `immutable` audit |
238
+ | Compression | `compression` | gzip / brotli + HTTP/2 / HTTP/3 negotiation |
239
+
240
+ ```ts
241
+ checks: {
242
+ perf: true,
243
+ longTasks: true,
244
+ clsTimeline: true,
245
+ bundleSize: true,
246
+ webfonts: true,
247
+ imageAudit: true,
248
+ resourceHints: true,
249
+ cacheHeaders: true,
250
+ compression: true,
251
+ }
252
+ ```
253
+
254
+ ### Security
255
+
256
+ | Check | Key | One-liner |
257
+ |---|---|---|
258
+ | Headers | `security` | CSP, HSTS, X-Frame-Options, Referrer-Policy, etc. |
259
+ | Passive smells | `passiveSecurity` | Surface-level security red flags |
260
+ | Retire.js | `retire` | Vulnerable JS library scan (12 lib signatures) |
261
+ | TLS | `tls` | Socket audit: protocol, cipher, cert chain |
262
+ | Exposed paths | `exposedPaths` | Sensitive path scan (35 signatures) |
263
+ | Mixed content | `mixedContent` | Insecure resources on HTTPS pages |
264
+
265
+ ```ts
266
+ checks: {
267
+ security: true,
268
+ passiveSecurity: true,
269
+ retire: true,
270
+ tls: true,
271
+ exposedPaths: true,
272
+ mixedContent: true,
273
+ }
274
+ ```
275
+
276
+ ### SEO & Content
277
+
278
+ | Check | Key | One-liner |
279
+ |---|---|---|
280
+ | SEO | `seo` | Meta tags, heading structure, canonical |
281
+ | Sitemap | `sitemap` | `sitemap.xml` fetch + schema validation |
282
+ | Robots | `robotsAudit` | `robots.txt` + meta robots + `X-Robots-Tag` |
283
+ | Structured data | `structuredData` | JSON-LD, microdata, `hreflang` |
284
+ | Open Graph | `openGraph` | OpenGraph + Twitter Card validation |
285
+ | Content quality | `contentQuality` | Flesch-Kincaid readability + duplicate detection |
286
+ | Links | `links` | Broken link check across crawled pages |
287
+
288
+ ```ts
289
+ checks: {
290
+ seo: true,
291
+ sitemap: true,
292
+ robotsAudit: true,
293
+ structuredData: true,
294
+ openGraph: true,
295
+ contentQuality: true,
296
+ links: true,
297
+ }
298
+ ```
299
+
300
+ ### Network & Infra
301
+
302
+ | Check | Key | One-liner |
303
+ |---|---|---|
304
+ | PWA | `pwa` | Manifest + service worker audit |
305
+ | Redirects | `redirects` | Redirect chain length + loop detection |
306
+ | Crawl | `crawl` | BFS site crawl with configurable depth |
307
+ | Third-party | `thirdParty` | Tracker / ad / analytics script analysis |
308
+
309
+ ```ts
310
+ checks: {
311
+ pwa: true,
312
+ redirects: true,
313
+ crawl: true,
314
+ thirdParty: true,
315
+ }
316
+ ```
317
+
318
+ ### Visual
319
+
320
+ | Check | Key | One-liner |
321
+ |---|---|---|
322
+ | Visual diff | `visual` | Pixelmatch diff against stored baselines |
323
+
324
+ ```ts
325
+ checks: { visual: true }
326
+ ```
327
+
328
+ ### Privacy & Compliance
329
+
330
+ | Check | Key | One-liner |
331
+ |---|---|---|
332
+ | Cookie banner | `cookieBanner` | GDPR consent popup detection |
333
+ | Console errors | `consoleErrors` | Browser console capture across the run |
334
+
335
+ ```ts
336
+ checks: {
337
+ cookieBanner: true,
338
+ consoleErrors: true,
339
+ }
340
+ ```
341
+
342
+ ### Exploration
343
+
344
+ | Check | Key | One-liner |
345
+ |---|---|---|
346
+ | Explore | `explore` | Heuristic automated crawling + interaction |
347
+ | AI | `ai` | Keyless AI instructions (Playwright role/text locators) |
348
+
349
+ ```ts
350
+ checks: {
351
+ explore: true,
352
+ ai: true,
353
+ }
354
+ ```
355
+
356
+ ## CLI flags
357
+
358
+ Every check has a matching flag. Use `--all` to turn them all on, or pick individually. Flags are boolean; prefix with `--no-` to disable (e.g. `--no-a11y`).
359
+
360
+ ### Core flags
83
361
 
84
362
  | Flag | Default | Description |
85
363
  |------|---------|-------------|
86
364
  | `--url` | required | URL to inspect |
87
- | `--config` | — | Config file (`.ts`/`.js`/`.json`) |
88
- | `--a11y` | `true` | Accessibility audit |
89
- | `--perf` | `false` | Performance audit |
90
- | `--visual` | `true` | Visual diff against baseline |
91
- | `--explore` | `false` | Auto-click every interactive element |
365
+ | `--config` | — | Config file (`.ts` / `.js` / `.json`) |
92
366
  | `--out` | `./uxinspect-report` | Report directory |
93
367
  | `--baselines` | `./uxinspect-baselines` | Visual baseline directory |
94
- | `--ai` | `false` | Enable keyless AI flow steps |
95
368
  | `--headed` | `false` | Run with visible browser |
96
369
  | `--parallel` | `false` | Run flows in parallel |
97
370
  | `--storage-state` | — | Path to auth storageState JSON |
98
- | `--reporters` | `html,json` | Comma list: `html`, `json`, `junit`, `sarif` |
99
- | `--publish` | — | Dashboard URL to upload report (e.g. `https://dash.example.com`) |
371
+ | `--reporters` | `html,json` | Comma list: `html`, `json`, `junit`, `sarif`, `allure`, `tap` |
372
+ | `--publish` | — | Dashboard URL to upload report |
100
373
  | `--publish-token` | — | Bearer token for dashboard upload |
374
+ | `--all` | `false` | Enable every check below |
375
+
376
+ ### Check flags
377
+
378
+ | Category | Flag |
379
+ |---|---|
380
+ | Accessibility & UX | `--a11y` `--keyboard` `--touch-targets` `--dead-clicks` `--motion-prefs` `--forms` |
381
+ | Performance | `--perf` `--long-tasks` `--cls-timeline` `--bundle-size` `--webfonts` `--image-audit` `--resource-hints` `--cache-headers` `--compression` |
382
+ | Security | `--security` `--passive-security` `--retire` `--tls` `--exposed-paths` `--mixed-content` |
383
+ | SEO & Content | `--seo` `--sitemap` `--robots-audit` `--structured-data` `--open-graph` `--content-quality` `--links` |
384
+ | Network & Infra | `--pwa` `--redirects` `--crawl` `--third-party` |
385
+ | Visual | `--visual` |
386
+ | Privacy & Compliance | `--cookie-banner` `--console-errors` |
387
+ | Exploration | `--explore` `--ai` |
388
+
389
+ Example:
390
+
391
+ ```bash
392
+ uxinspect run --url https://example.com --all
393
+ uxinspect run --url https://example.com --a11y --perf --retire --seo --visual
394
+ ```
395
+
396
+ ## Reporters
397
+
398
+ Pick any combination via `reporters: [...]` or `--reporters html,json,...`.
399
+
400
+ | Reporter | Output | Use |
401
+ |---|---|---|
402
+ | `html` | `report.html` | Human-readable dashboard with screenshots |
403
+ | `json` | `report.json` | Machine-readable full result tree |
404
+ | `junit` | `junit.xml` | CI test result ingestion |
405
+ | `sarif` | `report.sarif` | Code scanning / security tab ingestion |
406
+ | `allure` | `allure-results/` | Directory for the Allure UI |
407
+ | `tap` | `report.tap` | TAP 14 stream for TAP-compatible tooling |
101
408
 
102
409
  ## AI without keys
103
410
 
@@ -136,17 +443,20 @@ uxinspect report ./uxinspect-report --port 4173
136
443
 
137
444
  ## How it compares
138
445
 
139
- | Capability | uxinspect | Cypress | Visual SaaS | A11y plugin |
446
+ | Capability | uxinspect | E2E frameworks | Visual SaaS | A11y plugins |
140
447
  |---|:-:|:-:|:-:|:-:|
141
- | Real-user clicks | | | — | — |
142
- | Multi-browser | | partial | — | — |
143
- | Accessibility | | plugin | — | |
144
- | Performance | | — | — | — |
145
- | Visual diff | | plugin | paid | — |
146
- | Auto-explore | | — | — | — |
147
- | AI helpers | | — | — | — |
148
- | One report | | — | — | — |
149
- | Open source | MIT | mixed | | |
448
+ | Real-user clicks | yes | yes | — | — |
449
+ | Multi-browser | yes | partial | — | — |
450
+ | Accessibility | yes | plugin | — | yes |
451
+ | Performance | yes | — | — | — |
452
+ | Visual diff | yes | plugin | paid | — |
453
+ | Security headers | yes | — | — | — |
454
+ | Vuln JS scan | yes | — | — | — |
455
+ | SEO / structured data | yes | — | — | — |
456
+ | Auto-explore | yes | | | |
457
+ | AI helpers | yes | — | — | — |
458
+ | One report | yes | — | — | — |
459
+ | Open source | MIT | mixed | no | yes |
150
460
 
151
461
  ## License
152
462
 
@@ -0,0 +1,15 @@
1
+ import type { Page } from 'playwright';
2
+ import type { A11yResult, A11yViolation } from './types.js';
3
+ export type WcagLevel = 'wcag2a' | 'wcag2aa' | 'wcag2aaa' | 'wcag21a' | 'wcag21aa' | 'wcag22aa' | 'best-practice';
4
+ export interface A11yFilterOptions {
5
+ include?: WcagLevel[];
6
+ excludeBestPractice?: boolean;
7
+ runOnlyRules?: string[];
8
+ disableRules?: string[];
9
+ elementExclude?: string[];
10
+ impactMinimum?: 'minor' | 'moderate' | 'serious' | 'critical';
11
+ }
12
+ export declare const WCAG_TAG_GROUPS: Record<string, WcagLevel[]>;
13
+ export declare function filterViolationsByImpact(violations: A11yViolation[], minimum: A11yFilterOptions['impactMinimum']): A11yViolation[];
14
+ export declare function runFilteredA11y(page: Page, opts: A11yFilterOptions): Promise<A11yResult>;
15
+ //# sourceMappingURL=a11y-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a11y-filter.d.ts","sourceRoot":"","sources":["../src/a11y-filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,SAAS,GACT,UAAU,GACV,SAAS,GACT,UAAU,GACV,UAAU,GACV,eAAe,CAAC;AAEpB,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;CAC/D;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAcvD,CAAC;AAwEF,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,aAAa,EAAE,EAC3B,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAAC,GAC1C,aAAa,EAAE,CAIjB;AAmBD,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,UAAU,CAAC,CAsCrB"}
@@ -0,0 +1,107 @@
1
+ export const WCAG_TAG_GROUPS = {
2
+ a: ['wcag2a', 'wcag21a'],
3
+ aa: ['wcag2aa', 'wcag21aa', 'wcag22aa'],
4
+ aaa: ['wcag2aaa'],
5
+ all: ['wcag2a', 'wcag2aa', 'wcag2aaa', 'wcag21a', 'wcag21aa', 'wcag22aa'],
6
+ allWithBestPractice: [
7
+ 'wcag2a',
8
+ 'wcag2aa',
9
+ 'wcag2aaa',
10
+ 'wcag21a',
11
+ 'wcag21aa',
12
+ 'wcag22aa',
13
+ 'best-practice',
14
+ ],
15
+ };
16
+ const DEFAULT_TAGS = ['wcag2a', 'wcag2aa', 'wcag21aa', 'wcag22aa'];
17
+ const IMPACT_ORDER = {
18
+ minor: 0,
19
+ moderate: 1,
20
+ serious: 2,
21
+ critical: 3,
22
+ };
23
+ async function loadAxeBuilder() {
24
+ try {
25
+ const mod = (await import('@axe-core/playwright'));
26
+ return mod.AxeBuilder ?? mod.default ?? null;
27
+ }
28
+ catch {
29
+ return null;
30
+ }
31
+ }
32
+ function normalizeImpact(impact) {
33
+ if (impact === 'critical' || impact === 'serious' || impact === 'moderate' || impact === 'minor') {
34
+ return impact;
35
+ }
36
+ return 'minor';
37
+ }
38
+ function toViolation(v) {
39
+ return {
40
+ id: v.id,
41
+ impact: normalizeImpact(v.impact),
42
+ description: v.description,
43
+ help: v.help,
44
+ helpUrl: v.helpUrl,
45
+ nodes: v.nodes.map((n) => ({
46
+ html: n.html,
47
+ target: Array.isArray(n.target) ? n.target.filter((t) => typeof t === 'string') : [],
48
+ })),
49
+ };
50
+ }
51
+ export function filterViolationsByImpact(violations, minimum) {
52
+ if (!minimum)
53
+ return violations;
54
+ const threshold = IMPACT_ORDER[minimum];
55
+ return violations.filter((v) => IMPACT_ORDER[v.impact] >= threshold);
56
+ }
57
+ function resolveTags(opts) {
58
+ const base = opts.include && opts.include.length > 0 ? [...opts.include] : [...DEFAULT_TAGS];
59
+ const excludeBP = opts.excludeBestPractice ?? true;
60
+ const hasBP = base.includes('best-practice');
61
+ if (!excludeBP && !hasBP) {
62
+ base.push('best-practice');
63
+ }
64
+ if (excludeBP && hasBP) {
65
+ return base.filter((t) => t !== 'best-practice');
66
+ }
67
+ return base;
68
+ }
69
+ function emptyResult(page) {
70
+ return { page: page.url(), violations: [], passed: true };
71
+ }
72
+ export async function runFilteredA11y(page, opts) {
73
+ const AxeBuilder = await loadAxeBuilder();
74
+ if (!AxeBuilder) {
75
+ return emptyResult(page);
76
+ }
77
+ try {
78
+ let builder = new AxeBuilder({ page });
79
+ if (opts.runOnlyRules && opts.runOnlyRules.length > 0) {
80
+ builder = builder.withRules(opts.runOnlyRules);
81
+ }
82
+ else {
83
+ const tags = resolveTags(opts);
84
+ builder = builder.withTags(tags);
85
+ }
86
+ if (opts.disableRules && opts.disableRules.length > 0) {
87
+ builder = builder.disableRules(opts.disableRules);
88
+ }
89
+ if (opts.elementExclude && opts.elementExclude.length > 0) {
90
+ for (const selector of opts.elementExclude) {
91
+ builder = builder.exclude(selector);
92
+ }
93
+ }
94
+ const result = await builder.analyze();
95
+ const mapped = result.violations.map(toViolation);
96
+ const filtered = filterViolationsByImpact(mapped, opts.impactMinimum);
97
+ return {
98
+ page: page.url(),
99
+ violations: filtered,
100
+ passed: filtered.length === 0,
101
+ };
102
+ }
103
+ catch {
104
+ return emptyResult(page);
105
+ }
106
+ }
107
+ //# sourceMappingURL=a11y-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a11y-filter.js","sourceRoot":"","sources":["../src/a11y-filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { InspectResult } from './types.js';
2
+ export interface Diff {
3
+ check: string;
4
+ delta: string;
5
+ aValue: string | number;
6
+ bValue: string | number;
7
+ direction: 'regression' | 'improvement';
8
+ severity: 'minor' | 'major' | 'critical';
9
+ }
10
+ export interface CompareResult {
11
+ labelA: string;
12
+ labelB: string;
13
+ regressions: Diff[];
14
+ improvements: Diff[];
15
+ unchanged: number;
16
+ summary: {
17
+ regressedChecks: number;
18
+ improvedChecks: number;
19
+ };
20
+ passed: boolean;
21
+ }
22
+ export declare function compareInspect(a: InspectResult, b: InspectResult): CompareResult;
23
+ //# sourceMappingURL=ab-compare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ab-compare.d.ts","sourceRoot":"","sources":["../src/ab-compare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,IAAI;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,SAAS,EAAE,YAAY,GAAG,aAAa,CAAC;IACxC,QAAQ,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,IAAI,EAAE,CAAC;IACpB,YAAY,EAAE,IAAI,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,MAAM,EAAE,OAAO,CAAC;CACjB;AA0QD,wBAAgB,cAAc,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa,CA+EhF"}