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
@@ -0,0 +1,414 @@
1
+ /**
2
+ * worker-runtime — browserless subset of uxinspect checks.
3
+ * Runs on any Fetch API environment using only fetch, URL, Headers.
4
+ * No browser, no keys, no third-party deps.
5
+ */
6
+ const DEFAULT_USER_AGENT = 'uxinspect-worker/1';
7
+ const DEFAULT_TIMEOUT_MS = 10_000;
8
+ const MAX_REDIRECT_HOPS = 20;
9
+ const DEFAULT_EXPOSED_CONCURRENCY = 5;
10
+ const BUNDLE_BUDGET = 1_500_000;
11
+ const DEFAULT_EXPOSED_PATHS = [
12
+ '.env', '.git/config', '.htaccess', 'backup.zip', 'wp-admin/',
13
+ 'phpinfo.php', '.DS_Store', 'package-lock.json', 'debug.log', '.svn/',
14
+ ];
15
+ const REQUIRED_SECURITY_HEADERS = [
16
+ 'strict-transport-security', 'content-security-policy', 'x-frame-options',
17
+ 'x-content-type-options', 'referrer-policy', 'permissions-policy',
18
+ ];
19
+ function buildDeps(opts) {
20
+ return {
21
+ fetchImpl: opts.fetchImpl ?? globalThis.fetch.bind(globalThis),
22
+ userAgent: opts.userAgent ?? DEFAULT_USER_AGENT,
23
+ timeoutMs: opts.timeoutMs ?? DEFAULT_TIMEOUT_MS,
24
+ };
25
+ }
26
+ async function doFetch(deps, input, init = {}) {
27
+ const headers = init.headers instanceof Headers
28
+ ? init.headers
29
+ : new Headers(init.headers);
30
+ if (!headers.has('user-agent'))
31
+ headers.set('user-agent', deps.userAgent);
32
+ return deps.fetchImpl(input, {
33
+ ...init,
34
+ headers,
35
+ signal: init.signal ?? AbortSignal.timeout(deps.timeoutMs),
36
+ });
37
+ }
38
+ function resolveUrl(base, href) {
39
+ try {
40
+ return new URL(href, base).toString();
41
+ }
42
+ catch {
43
+ return null;
44
+ }
45
+ }
46
+ function attr(html, tagRe, attrName) {
47
+ const m = html.match(tagRe);
48
+ if (!m)
49
+ return null;
50
+ const am = m[0].match(new RegExp(`${attrName}\\s*=\\s*(?:"([^"]*)"|'([^']*)'|([^\\s>]+))`, 'i'));
51
+ if (!am)
52
+ return null;
53
+ return am[1] ?? am[2] ?? am[3] ?? null;
54
+ }
55
+ export function extractMeta(html) {
56
+ const titleMatch = html.match(/<title[^>]*>([\s\S]*?)<\/title>/i);
57
+ return {
58
+ title: titleMatch ? titleMatch[1].trim() : '',
59
+ description: attr(html, /<meta[^>]+name\s*=\s*["']description["'][^>]*>/i, 'content') ?? '',
60
+ ogTitle: attr(html, /<meta[^>]+property\s*=\s*["']og:title["'][^>]*>/i, 'content') ?? '',
61
+ ogImage: attr(html, /<meta[^>]+property\s*=\s*["']og:image["'][^>]*>/i, 'content') ?? '',
62
+ ogDescription: attr(html, /<meta[^>]+property\s*=\s*["']og:description["'][^>]*>/i, 'content') ?? '',
63
+ twitterCard: attr(html, /<meta[^>]+name\s*=\s*["']twitter:card["'][^>]*>/i, 'content') ?? '',
64
+ canonical: attr(html, /<link[^>]+rel\s*=\s*["']canonical["'][^>]*>/i, 'href'),
65
+ };
66
+ }
67
+ export function extractAssets(html, baseUrl) {
68
+ const js = [];
69
+ const css = [];
70
+ const images = [];
71
+ const scriptRe = /<script\b[^>]*\bsrc\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s>]+))[^>]*>/gi;
72
+ let m;
73
+ while ((m = scriptRe.exec(html)) !== null) {
74
+ const abs = resolveUrl(baseUrl, m[1] ?? m[2] ?? m[3]);
75
+ if (abs)
76
+ js.push(abs);
77
+ }
78
+ const linkRe = /<link\b[^>]*>/gi;
79
+ while ((m = linkRe.exec(html)) !== null) {
80
+ const tag = m[0];
81
+ const relAttr = tag.match(/\brel\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s>]+))/i);
82
+ const rel = (relAttr?.[1] ?? relAttr?.[2] ?? relAttr?.[3] ?? '').toLowerCase();
83
+ if (!rel.split(/\s+/).includes('stylesheet'))
84
+ continue;
85
+ const hrefAttr = tag.match(/\bhref\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s>]+))/i);
86
+ const href = hrefAttr?.[1] ?? hrefAttr?.[2] ?? hrefAttr?.[3];
87
+ if (!href)
88
+ continue;
89
+ const abs = resolveUrl(baseUrl, href);
90
+ if (abs)
91
+ css.push(abs);
92
+ }
93
+ const imgRe = /<img\b[^>]*\bsrc\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s>]+))[^>]*>/gi;
94
+ while ((m = imgRe.exec(html)) !== null) {
95
+ const abs = resolveUrl(baseUrl, m[1] ?? m[2] ?? m[3]);
96
+ if (abs)
97
+ images.push(abs);
98
+ }
99
+ return { js, css, images };
100
+ }
101
+ async function runConcurrent(tasks, concurrency) {
102
+ const results = new Array(tasks.length);
103
+ let idx = 0;
104
+ const n = Math.max(1, Math.min(concurrency, tasks.length));
105
+ const workers = [];
106
+ for (let w = 0; w < n; w++) {
107
+ workers.push((async () => {
108
+ while (idx < tasks.length) {
109
+ const i = idx++;
110
+ results[i] = await tasks[i]();
111
+ }
112
+ })());
113
+ }
114
+ await Promise.all(workers);
115
+ return results;
116
+ }
117
+ async function checkRedirects(deps, url) {
118
+ const chain = [];
119
+ let current = url;
120
+ let hops = 0;
121
+ let finalStatus = 0;
122
+ for (let i = 0; i < MAX_REDIRECT_HOPS; i++) {
123
+ let res;
124
+ try {
125
+ res = await doFetch(deps, current, { method: 'GET', redirect: 'manual' });
126
+ }
127
+ catch {
128
+ break;
129
+ }
130
+ finalStatus = res.status;
131
+ if (res.status >= 300 && res.status < 400) {
132
+ const loc = res.headers.get('location');
133
+ if (!loc)
134
+ break;
135
+ const next = resolveUrl(current, loc);
136
+ if (!next || next === current)
137
+ break;
138
+ chain.push({ from: current, to: next, status: res.status });
139
+ current = next;
140
+ hops++;
141
+ continue;
142
+ }
143
+ break;
144
+ }
145
+ const passed = hops <= 3 && (finalStatus === 0 || finalStatus < 400);
146
+ return { hops, finalUrl: current, chain, passed };
147
+ }
148
+ async function checkRobots(deps, url) {
149
+ const robotsUrl = `${new URL(url).origin}/robots.txt`;
150
+ const allows = [];
151
+ const disallows = [];
152
+ const sitemaps = [];
153
+ let present = false;
154
+ try {
155
+ const res = await doFetch(deps, robotsUrl, { method: 'GET' });
156
+ if (res.status === 200) {
157
+ present = true;
158
+ const body = await res.text();
159
+ for (const rawLine of body.split(/\r?\n/)) {
160
+ const line = rawLine.trim();
161
+ if (!line || line.startsWith('#'))
162
+ continue;
163
+ const sep = line.indexOf(':');
164
+ if (sep < 0)
165
+ continue;
166
+ const key = line.slice(0, sep).trim().toLowerCase();
167
+ const value = line.slice(sep + 1).trim();
168
+ if (!value)
169
+ continue;
170
+ if (key === 'allow')
171
+ allows.push(value);
172
+ else if (key === 'disallow')
173
+ disallows.push(value);
174
+ else if (key === 'sitemap')
175
+ sitemaps.push(value);
176
+ }
177
+ }
178
+ }
179
+ catch { /* absent */ }
180
+ return { present, allows, disallows, sitemaps, passed: present };
181
+ }
182
+ async function checkSitemap(deps, url, sitemapUrls) {
183
+ const candidates = sitemapUrls.length > 0 ? sitemapUrls : [`${new URL(url).origin}/sitemap.xml`];
184
+ for (const candidate of candidates) {
185
+ try {
186
+ const res = await doFetch(deps, candidate, { method: 'GET' });
187
+ if (res.status !== 200)
188
+ continue;
189
+ const body = await res.text();
190
+ const urlCount = (body.match(/<url\b/gi)?.length ?? 0) + (body.match(/<sitemap\b/gi)?.length ?? 0);
191
+ if (urlCount > 0 || /<urlset\b/i.test(body) || /<sitemapindex\b/i.test(body)) {
192
+ return { present: true, urlCount, passed: urlCount > 0 };
193
+ }
194
+ }
195
+ catch { /* try next */ }
196
+ }
197
+ return { present: false, urlCount: 0, passed: false };
198
+ }
199
+ async function checkSecurity(deps, url) {
200
+ const headers = {};
201
+ const missing = [];
202
+ try {
203
+ const res = await doFetch(deps, url, { method: 'GET', redirect: 'follow' });
204
+ res.headers.forEach((v, k) => { headers[k.toLowerCase()] = v; });
205
+ }
206
+ catch {
207
+ return { headers, missing: [...REQUIRED_SECURITY_HEADERS], passed: false };
208
+ }
209
+ for (const h of REQUIRED_SECURITY_HEADERS)
210
+ if (!headers[h])
211
+ missing.push(h);
212
+ return { headers, missing, passed: missing.length === 0 };
213
+ }
214
+ function normaliseUrl(u) {
215
+ try {
216
+ const parsed = new URL(u);
217
+ parsed.hash = '';
218
+ const out = parsed.toString();
219
+ return out.endsWith('/') ? out.slice(0, -1) : out;
220
+ }
221
+ catch {
222
+ return u;
223
+ }
224
+ }
225
+ function collectInsecure(html) {
226
+ const insecure = new Set();
227
+ const re = /\b(?:src|href)\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s>]+))/gi;
228
+ let m;
229
+ while ((m = re.exec(html)) !== null) {
230
+ const val = m[1] ?? m[2] ?? m[3];
231
+ if (val && /^http:\/\//i.test(val))
232
+ insecure.add(val);
233
+ }
234
+ return [...insecure];
235
+ }
236
+ async function checkExposedPaths(deps, url, extra, concurrency) {
237
+ const base = new URL(url).origin;
238
+ const paths = [...DEFAULT_EXPOSED_PATHS, ...extra.map((p) => p.replace(/^\//, ''))];
239
+ const tasks = paths.map((p) => async () => {
240
+ try {
241
+ const res = await doFetch(deps, `${base}/${p}`, { method: 'HEAD', redirect: 'manual' });
242
+ if (res.status === 200 || res.status === 206)
243
+ return { path: p, status: res.status };
244
+ return null;
245
+ }
246
+ catch {
247
+ return null;
248
+ }
249
+ });
250
+ const raw = await runConcurrent(tasks, concurrency);
251
+ const found = raw.filter((r) => r !== null);
252
+ return { found, passed: found.length === 0 };
253
+ }
254
+ async function bundleSizes(deps, assets) {
255
+ const targets = [...assets.js, ...assets.css];
256
+ let totalJs = 0;
257
+ let totalCss = 0;
258
+ let cacheable = 0;
259
+ let noCache = 0;
260
+ let maxAgeSum = 0;
261
+ let maxAgeCount = 0;
262
+ const tasks = targets.map((href, i) => async () => {
263
+ try {
264
+ const res = await doFetch(deps, href, { method: 'HEAD' });
265
+ const len = Number.parseInt(res.headers.get('content-length') ?? '0', 10);
266
+ const size = Number.isFinite(len) && len > 0 ? len : 0;
267
+ if (i < assets.js.length)
268
+ totalJs += size;
269
+ else
270
+ totalCss += size;
271
+ const cc = (res.headers.get('cache-control') ?? '').toLowerCase();
272
+ if (!cc || /no-store|no-cache/.test(cc)) {
273
+ noCache++;
274
+ }
275
+ else {
276
+ const ma = cc.match(/max-age\s*=\s*(\d+)/);
277
+ const age = ma ? Number.parseInt(ma[1], 10) : 0;
278
+ if (age > 0 || /public|immutable/.test(cc))
279
+ cacheable++;
280
+ else
281
+ noCache++;
282
+ if (age > 0) {
283
+ maxAgeSum += age;
284
+ maxAgeCount++;
285
+ }
286
+ }
287
+ }
288
+ catch { /* skip */ }
289
+ });
290
+ await runConcurrent(tasks, 5);
291
+ return {
292
+ bundle: {
293
+ totalJsBytes: totalJs,
294
+ totalCssBytes: totalCss,
295
+ fileCount: targets.length,
296
+ passed: totalJs + totalCss <= BUNDLE_BUDGET,
297
+ },
298
+ cache: {
299
+ cacheable,
300
+ noCache,
301
+ maxAgeAvg: maxAgeCount > 0 ? Math.round(maxAgeSum / maxAgeCount) : 0,
302
+ passed: targets.length === 0 ? true : cacheable >= noCache,
303
+ },
304
+ };
305
+ }
306
+ function compressionFrom(headers) {
307
+ const encoding = (headers.get('content-encoding') ?? '').toLowerCase();
308
+ return {
309
+ gzip: /gzip/.test(encoding),
310
+ brotli: /\bbr\b/.test(encoding),
311
+ encoding,
312
+ passed: /gzip/.test(encoding) || /\bbr\b/.test(encoding),
313
+ };
314
+ }
315
+ export async function runWorkerRuntime(opts) {
316
+ const deps = buildDeps(opts);
317
+ const checks = opts.checks ?? {};
318
+ const startedAt = new Date();
319
+ let primaryHtml = '';
320
+ let primaryHeaders = new Headers();
321
+ try {
322
+ const res = await doFetch(deps, opts.url, {
323
+ method: 'GET',
324
+ redirect: 'follow',
325
+ headers: { 'accept-encoding': 'gzip, br' },
326
+ });
327
+ primaryHeaders = res.headers;
328
+ const ct = (res.headers.get('content-type') ?? '').toLowerCase();
329
+ if (ct.includes('text/html') || ct.includes('xml'))
330
+ primaryHtml = await res.text();
331
+ }
332
+ catch {
333
+ primaryHtml = '';
334
+ }
335
+ const meta = extractMeta(primaryHtml);
336
+ const assets = extractAssets(primaryHtml, opts.url);
337
+ const result = {
338
+ url: opts.url,
339
+ startedAt: startedAt.toISOString(),
340
+ finishedAt: startedAt.toISOString(),
341
+ durationMs: 0,
342
+ passed: true,
343
+ };
344
+ if (checks.redirects)
345
+ result.redirects = await checkRedirects(deps, opts.url);
346
+ let robotsSitemaps = [];
347
+ if (checks.robotsAudit) {
348
+ result.robotsAudit = await checkRobots(deps, opts.url);
349
+ robotsSitemaps = result.robotsAudit.sitemaps;
350
+ }
351
+ if (checks.sitemap)
352
+ result.sitemap = await checkSitemap(deps, opts.url, robotsSitemaps);
353
+ if (checks.security)
354
+ result.security = await checkSecurity(deps, opts.url);
355
+ if (checks.canonical) {
356
+ const canonical = meta.canonical;
357
+ const matchesUrl = canonical ? normaliseUrl(canonical) === normaliseUrl(opts.url) : false;
358
+ result.canonical = { canonical, matchesUrl, passed: canonical !== null && matchesUrl };
359
+ }
360
+ if (checks.exposedPaths) {
361
+ const cfg = typeof checks.exposedPaths === 'object' ? checks.exposedPaths : {};
362
+ result.exposedPaths = await checkExposedPaths(deps, opts.url, cfg.extraPaths ?? [], cfg.concurrency ?? DEFAULT_EXPOSED_CONCURRENCY);
363
+ }
364
+ if (checks.mixedContent) {
365
+ const httpsPage = opts.url.toLowerCase().startsWith('https://');
366
+ const insecure = httpsPage ? collectInsecure(primaryHtml) : [];
367
+ result.mixedContent = { httpsPage, insecure, passed: !httpsPage || insecure.length === 0 };
368
+ }
369
+ if (checks.meta) {
370
+ result.meta = {
371
+ title: meta.title,
372
+ description: meta.description,
373
+ ogTitle: meta.ogTitle,
374
+ ogImage: meta.ogImage,
375
+ twitterCard: meta.twitterCard,
376
+ };
377
+ }
378
+ if (checks.bundleSize || checks.cacheHeaders) {
379
+ const { bundle, cache } = await bundleSizes(deps, assets);
380
+ if (checks.bundleSize)
381
+ result.bundleSize = bundle;
382
+ if (checks.cacheHeaders)
383
+ result.cacheHeaders = cache;
384
+ }
385
+ if (checks.openGraph) {
386
+ const hasOgTitle = meta.ogTitle.length > 0;
387
+ const hasOgImage = meta.ogImage.length > 0;
388
+ const hasOgDescription = meta.ogDescription.length > 0;
389
+ result.openGraph = {
390
+ hasOgTitle, hasOgImage, hasOgDescription,
391
+ passed: hasOgTitle && hasOgImage && hasOgDescription,
392
+ };
393
+ }
394
+ if (checks.compression)
395
+ result.compression = compressionFrom(primaryHeaders);
396
+ const finishedAt = new Date();
397
+ result.finishedAt = finishedAt.toISOString();
398
+ result.durationMs = finishedAt.getTime() - startedAt.getTime();
399
+ result.passed = [
400
+ result.redirects?.passed,
401
+ result.robotsAudit?.passed,
402
+ result.sitemap?.passed,
403
+ result.security?.passed,
404
+ result.canonical?.passed,
405
+ result.exposedPaths?.passed,
406
+ result.mixedContent?.passed,
407
+ result.bundleSize?.passed,
408
+ result.openGraph?.passed,
409
+ result.cacheHeaders?.passed,
410
+ result.compression?.passed,
411
+ ].every((v) => v === undefined || v === true);
412
+ return result;
413
+ }
414
+ //# sourceMappingURL=worker-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-runtime.js","sourceRoot":"","sources":["../src/worker-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { Page } from 'playwright';
2
+ export type ZIndexIssueKind = 'modal-below-overlay' | 'conflicting-stacking-context' | 'fixed-header-covers-modal' | 'z-index-overflow' | 'negative-z-index-hidden' | 'missing-z-index-on-fixed';
3
+ export interface StackingEntry {
4
+ selector: string;
5
+ role: string | null;
6
+ zIndex: number;
7
+ position: string;
8
+ stackingContext: boolean;
9
+ visible: boolean;
10
+ insideDialog: boolean;
11
+ covered: boolean;
12
+ coveringSelector?: string;
13
+ }
14
+ export interface ZIndexIssue {
15
+ kind: ZIndexIssueKind;
16
+ selector: string;
17
+ detail: string;
18
+ }
19
+ export interface ZIndexAuditResult {
20
+ page: string;
21
+ entries: StackingEntry[];
22
+ issues: ZIndexIssue[];
23
+ maxZIndex: number;
24
+ stackingContextCount: number;
25
+ passed: boolean;
26
+ }
27
+ export declare function auditZIndex(page: Page): Promise<ZIndexAuditResult>;
28
+ //# sourceMappingURL=zindex-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zindex-audit.d.ts","sourceRoot":"","sources":["../src/zindex-audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAKvC,MAAM,MAAM,eAAe,GACvB,qBAAqB,GACrB,8BAA8B,GAC9B,2BAA2B,GAC3B,kBAAkB,GAClB,yBAAyB,GACzB,0BAA0B,CAAC;AAE/B,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;CACjB;AAoCD,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6SxE"}