@askviraj/linter 1.1.2 → 1.1.3

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 (650) hide show
  1. package/node_modules/{synckit → @astrojs/compiler-binding}/LICENSE +1 -1
  2. package/node_modules/@astrojs/compiler-binding/browser.js +1 -0
  3. package/node_modules/@astrojs/compiler-binding/index.d.ts +337 -0
  4. package/node_modules/@astrojs/compiler-binding/index.js +599 -0
  5. package/node_modules/@astrojs/compiler-binding/package.json +83 -0
  6. package/node_modules/@astrojs/compiler-binding/webcontainer-fallback.cjs +23 -0
  7. package/node_modules/@astrojs/compiler-binding-linux-x64-gnu/README.md +3 -0
  8. package/node_modules/@astrojs/compiler-binding-linux-x64-gnu/astro.linux-x64-gnu.node +0 -0
  9. package/node_modules/@astrojs/compiler-binding-linux-x64-gnu/package.json +40 -0
  10. package/node_modules/{parse5 → @astrojs/compiler-rs}/LICENSE +7 -5
  11. package/node_modules/@astrojs/compiler-rs/README.md +62 -0
  12. package/node_modules/@astrojs/compiler-rs/async.d.ts +1 -0
  13. package/node_modules/@astrojs/compiler-rs/dist/async.d.mts +9 -0
  14. package/node_modules/@astrojs/compiler-rs/dist/async.mjs +1 -0
  15. package/node_modules/@astrojs/compiler-rs/dist/index.d.mts +9 -0
  16. package/node_modules/@astrojs/compiler-rs/dist/index.mjs +1 -0
  17. package/node_modules/@astrojs/compiler-rs/dist/shared.d.mts +45 -0
  18. package/node_modules/@astrojs/compiler-rs/dist/shared.mjs +1 -0
  19. package/node_modules/@astrojs/compiler-rs/dist/types.d.mts +94 -0
  20. package/node_modules/@astrojs/compiler-rs/dist/types.mjs +1 -0
  21. package/node_modules/@astrojs/compiler-rs/dist/utils.d.mts +4 -0
  22. package/node_modules/@astrojs/compiler-rs/dist/utils.mjs +1 -0
  23. package/node_modules/@astrojs/compiler-rs/package.json +55 -0
  24. package/node_modules/@astrojs/compiler-rs/types.d.ts +1 -0
  25. package/node_modules/@eslint/config-helpers/README.md +2 -2
  26. package/node_modules/@eslint/config-helpers/dist/cjs/index.cjs +27 -26
  27. package/node_modules/@eslint/config-helpers/dist/cjs/index.d.cts +13 -12
  28. package/node_modules/@eslint/config-helpers/dist/cjs/types.cts +4 -2
  29. package/node_modules/@eslint/config-helpers/dist/esm/index.d.ts +13 -12
  30. package/node_modules/@eslint/config-helpers/dist/esm/index.js +27 -26
  31. package/node_modules/@eslint/config-helpers/dist/esm/types.d.ts +2 -0
  32. package/node_modules/@eslint/config-helpers/dist/esm/types.ts +4 -2
  33. package/node_modules/@eslint/config-helpers/package.json +1 -1
  34. package/node_modules/@eslint/css/README.md +2 -2
  35. package/node_modules/@eslint/css/dist/build/rules.d.ts +75 -21
  36. package/node_modules/@eslint/css/dist/build/rules.js +15 -15
  37. package/node_modules/@eslint/css/dist/data/baseline-data.js +256 -32
  38. package/node_modules/@eslint/css/dist/index.js +1 -1
  39. package/node_modules/@eslint/css/dist/rules/font-family-fallbacks.d.ts +15 -15
  40. package/node_modules/@eslint/css/dist/rules/font-family-fallbacks.js +2 -5
  41. package/node_modules/@eslint/css/dist/rules/no-duplicate-imports.d.ts +18 -18
  42. package/node_modules/@eslint/css/dist/rules/no-duplicate-imports.js +9 -12
  43. package/node_modules/@eslint/css/dist/rules/no-duplicate-keyframe-selectors.d.ts +14 -14
  44. package/node_modules/@eslint/css/dist/rules/no-duplicate-keyframe-selectors.js +2 -3
  45. package/node_modules/@eslint/css/dist/rules/no-empty-blocks.d.ts +14 -14
  46. package/node_modules/@eslint/css/dist/rules/no-empty-blocks.js +2 -3
  47. package/node_modules/@eslint/css/dist/rules/no-important.d.ts +16 -16
  48. package/node_modules/@eslint/css/dist/rules/no-important.js +2 -3
  49. package/node_modules/@eslint/css/dist/rules/no-invalid-at-rule-placement.d.ts +16 -16
  50. package/node_modules/@eslint/css/dist/rules/no-invalid-at-rule-placement.js +2 -3
  51. package/node_modules/@eslint/css/dist/rules/no-invalid-at-rules.d.ts +21 -21
  52. package/node_modules/@eslint/css/dist/rules/no-invalid-at-rules.js +2 -3
  53. package/node_modules/@eslint/css/dist/rules/no-invalid-named-grid-areas.d.ts +16 -16
  54. package/node_modules/@eslint/css/dist/rules/no-invalid-named-grid-areas.js +2 -3
  55. package/node_modules/@eslint/css/dist/rules/no-invalid-properties.d.ts +18 -18
  56. package/node_modules/@eslint/css/dist/rules/no-invalid-properties.js +2 -3
  57. package/node_modules/@eslint/css/dist/rules/no-unmatchable-selectors.d.ts +14 -14
  58. package/node_modules/@eslint/css/dist/rules/no-unmatchable-selectors.js +2 -3
  59. package/node_modules/@eslint/css/dist/rules/prefer-logical-properties.d.ts +22 -19
  60. package/node_modules/@eslint/css/dist/rules/prefer-logical-properties.js +66 -23
  61. package/node_modules/@eslint/css/dist/rules/relative-font-units.d.ts +16 -16
  62. package/node_modules/@eslint/css/dist/rules/relative-font-units.js +13 -7
  63. package/node_modules/@eslint/css/dist/rules/selector-complexity.d.ts +17 -17
  64. package/node_modules/@eslint/css/dist/rules/selector-complexity.js +2 -3
  65. package/node_modules/@eslint/css/dist/rules/use-baseline.d.ts +22 -22
  66. package/node_modules/@eslint/css/dist/rules/use-baseline.js +2 -3
  67. package/node_modules/@eslint/css/dist/rules/use-layers.d.ts +18 -18
  68. package/node_modules/@eslint/css/dist/rules/use-layers.js +3 -4
  69. package/node_modules/@eslint/css/package.json +7 -12
  70. package/node_modules/@eslint/css-tree/README.md +2 -2
  71. package/node_modules/@eslint/css-tree/dist/csstree.esm.js +1 -1
  72. package/node_modules/@eslint/css-tree/dist/csstree.js +1 -1
  73. package/node_modules/@eslint/css-tree/dist/data.cjs +4 -1
  74. package/node_modules/@eslint/css-tree/dist/data.js +4 -1
  75. package/node_modules/@eslint/css-tree/dist/version.cjs +1 -1
  76. package/node_modules/@eslint/css-tree/dist/version.js +1 -1
  77. package/node_modules/@eslint/css-tree/package.json +3 -3
  78. package/node_modules/@eslint/json/README.md +2 -2
  79. package/node_modules/@eslint/json/dist/index.js +1 -1
  80. package/node_modules/@eslint/json/package.json +4 -9
  81. package/node_modules/@eslint/markdown/README.md +3 -3
  82. package/node_modules/@eslint/markdown/dist/build/rules.d.ts +105 -27
  83. package/node_modules/@eslint/markdown/dist/build/rules.js +21 -21
  84. package/node_modules/@eslint/markdown/dist/index.d.ts +2 -2
  85. package/node_modules/@eslint/markdown/dist/index.js +4 -4
  86. package/node_modules/@eslint/markdown/dist/processor.d.ts +4 -9
  87. package/node_modules/@eslint/markdown/dist/processor.js +12 -15
  88. package/node_modules/@eslint/markdown/dist/rules/fenced-code-language.d.ts +17 -17
  89. package/node_modules/@eslint/markdown/dist/rules/fenced-code-language.js +2 -3
  90. package/node_modules/@eslint/markdown/dist/rules/fenced-code-meta.d.ts +17 -17
  91. package/node_modules/@eslint/markdown/dist/rules/fenced-code-meta.js +2 -3
  92. package/node_modules/@eslint/markdown/dist/rules/heading-increment.d.ts +16 -16
  93. package/node_modules/@eslint/markdown/dist/rules/heading-increment.js +2 -3
  94. package/node_modules/@eslint/markdown/dist/rules/no-bare-urls.d.ts +14 -14
  95. package/node_modules/@eslint/markdown/dist/rules/no-bare-urls.js +2 -3
  96. package/node_modules/@eslint/markdown/dist/rules/no-duplicate-definitions.d.ts +17 -17
  97. package/node_modules/@eslint/markdown/dist/rules/no-duplicate-definitions.js +2 -3
  98. package/node_modules/@eslint/markdown/dist/rules/no-duplicate-headings.d.ts +15 -15
  99. package/node_modules/@eslint/markdown/dist/rules/no-duplicate-headings.js +2 -3
  100. package/node_modules/@eslint/markdown/dist/rules/no-empty-definitions.d.ts +17 -17
  101. package/node_modules/@eslint/markdown/dist/rules/no-empty-definitions.js +2 -3
  102. package/node_modules/@eslint/markdown/dist/rules/no-empty-images.d.ts +14 -14
  103. package/node_modules/@eslint/markdown/dist/rules/no-empty-images.js +2 -3
  104. package/node_modules/@eslint/markdown/dist/rules/no-empty-links.d.ts +14 -14
  105. package/node_modules/@eslint/markdown/dist/rules/no-empty-links.js +2 -3
  106. package/node_modules/@eslint/markdown/dist/rules/no-html.d.ts +15 -15
  107. package/node_modules/@eslint/markdown/dist/rules/no-html.js +2 -3
  108. package/node_modules/@eslint/markdown/dist/rules/no-invalid-label-refs.d.ts +14 -14
  109. package/node_modules/@eslint/markdown/dist/rules/no-invalid-label-refs.js +2 -3
  110. package/node_modules/@eslint/markdown/dist/rules/no-missing-atx-heading-space.d.ts +17 -17
  111. package/node_modules/@eslint/markdown/dist/rules/no-missing-atx-heading-space.js +2 -3
  112. package/node_modules/@eslint/markdown/dist/rules/no-missing-label-refs.d.ts +16 -16
  113. package/node_modules/@eslint/markdown/dist/rules/no-missing-label-refs.js +2 -3
  114. package/node_modules/@eslint/markdown/dist/rules/no-missing-link-fragments.d.ts +16 -16
  115. package/node_modules/@eslint/markdown/dist/rules/no-missing-link-fragments.js +2 -3
  116. package/node_modules/@eslint/markdown/dist/rules/no-multiple-h1.d.ts +16 -16
  117. package/node_modules/@eslint/markdown/dist/rules/no-multiple-h1.js +2 -3
  118. package/node_modules/@eslint/markdown/dist/rules/no-reference-like-urls.d.ts +15 -15
  119. package/node_modules/@eslint/markdown/dist/rules/no-reference-like-urls.js +2 -3
  120. package/node_modules/@eslint/markdown/dist/rules/no-reversed-media-syntax.d.ts +15 -15
  121. package/node_modules/@eslint/markdown/dist/rules/no-reversed-media-syntax.js +2 -3
  122. package/node_modules/@eslint/markdown/dist/rules/no-space-in-emphasis.d.ts +17 -17
  123. package/node_modules/@eslint/markdown/dist/rules/no-space-in-emphasis.js +2 -3
  124. package/node_modules/@eslint/markdown/dist/rules/no-unused-definitions.d.ts +17 -17
  125. package/node_modules/@eslint/markdown/dist/rules/no-unused-definitions.js +2 -3
  126. package/node_modules/@eslint/markdown/dist/rules/require-alt-text.d.ts +14 -14
  127. package/node_modules/@eslint/markdown/dist/rules/require-alt-text.js +2 -3
  128. package/node_modules/@eslint/markdown/dist/rules/table-column-count.d.ts +17 -17
  129. package/node_modules/@eslint/markdown/dist/rules/table-column-count.js +2 -3
  130. package/node_modules/@eslint/markdown/package.json +5 -10
  131. package/node_modules/@eslint-community/eslint-utils/index.js +1 -1
  132. package/node_modules/@eslint-community/eslint-utils/index.js.map +1 -1
  133. package/node_modules/@eslint-community/eslint-utils/index.mjs +1 -1
  134. package/node_modules/@eslint-community/eslint-utils/index.mjs.map +1 -1
  135. package/node_modules/@eslint-community/eslint-utils/package.json +12 -7
  136. package/node_modules/@html-eslint/core/dist/index.js +1 -0
  137. package/node_modules/@html-eslint/core/dist/index.js.map +1 -1
  138. package/node_modules/@html-eslint/core/dist/index.mjs +1 -0
  139. package/node_modules/@html-eslint/core/dist/index.mjs.map +1 -1
  140. package/node_modules/@html-eslint/core/package.json +3 -3
  141. package/node_modules/@html-eslint/eslint-plugin/lib/rules/require-content.js +20 -1
  142. package/node_modules/@html-eslint/eslint-plugin/lib/rules/require-input-label.js +110 -8
  143. package/node_modules/@html-eslint/eslint-plugin/lib/rules/utils/node.js +13 -0
  144. package/node_modules/@html-eslint/eslint-plugin/package.json +7 -7
  145. package/node_modules/@html-eslint/eslint-plugin/types/rules/require-content.d.ts.map +1 -1
  146. package/node_modules/@html-eslint/eslint-plugin/types/rules/require-input-label.d.ts.map +1 -1
  147. package/node_modules/@html-eslint/eslint-plugin/types/rules/utils/node.d.ts +7 -0
  148. package/node_modules/@html-eslint/eslint-plugin/types/rules/utils/node.d.ts.map +1 -1
  149. package/node_modules/@html-eslint/parser/lib/parser.js +0 -1
  150. package/node_modules/@html-eslint/parser/package.json +4 -4
  151. package/node_modules/@html-eslint/parser/types/parser.d.ts.map +1 -1
  152. package/node_modules/@html-eslint/template-parser/package.json +3 -3
  153. package/node_modules/@html-eslint/template-syntax-parser/package.json +3 -3
  154. package/node_modules/@html-eslint/types/package.json +2 -2
  155. package/node_modules/@rviscomi/capo.js/README.md +4 -4
  156. package/node_modules/@rviscomi/capo.js/dist/adapters/adapter.cjs +7 -2
  157. package/node_modules/@rviscomi/capo.js/dist/adapters/browser.cjs +31 -3
  158. package/node_modules/@rviscomi/capo.js/dist/adapters/index.cjs +36 -4
  159. package/node_modules/@rviscomi/capo.js/dist/adapters/test-suite.cjs +6 -1
  160. package/node_modules/@rviscomi/capo.js/dist/analyzer.cjs +53 -24
  161. package/node_modules/@rviscomi/capo.js/dist/chrome/README.md +53 -0
  162. package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/capo.html +1 -1
  163. package/node_modules/@rviscomi/capo.js/dist/chrome/capo.js +3 -0
  164. package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/chrome.js +56 -18
  165. package/node_modules/@rviscomi/capo.js/dist/chrome/manifest.json +26 -0
  166. package/node_modules/@rviscomi/capo.js/dist/chrome/options/options.js +1 -0
  167. package/node_modules/@rviscomi/capo.js/dist/chrome.zip +0 -0
  168. package/node_modules/@rviscomi/capo.js/dist/firefox/README.md +53 -0
  169. package/node_modules/@rviscomi/capo.js/dist/firefox/background.js +7 -0
  170. package/node_modules/@rviscomi/capo.js/dist/firefox/capo.css +59 -0
  171. package/node_modules/@rviscomi/capo.js/dist/firefox/capo.html +12 -0
  172. package/node_modules/@rviscomi/capo.js/dist/firefox/capo.js +3 -0
  173. package/node_modules/@rviscomi/capo.js/dist/firefox/chrome.js +120 -0
  174. package/node_modules/@rviscomi/capo.js/dist/firefox/images/icon128.png +0 -0
  175. package/node_modules/@rviscomi/capo.js/dist/firefox/manifest.json +39 -0
  176. package/node_modules/@rviscomi/capo.js/dist/firefox/options/options.css +81 -0
  177. package/node_modules/@rviscomi/capo.js/dist/firefox/options/options.html +43 -0
  178. package/node_modules/@rviscomi/capo.js/dist/firefox/options/options.js +1 -0
  179. package/node_modules/@rviscomi/capo.js/dist/firefox/styles/open-props.css +291 -0
  180. package/node_modules/@rviscomi/capo.js/dist/firefox.zip +0 -0
  181. package/node_modules/@rviscomi/capo.js/dist/index.cjs +93 -33
  182. package/node_modules/@rviscomi/capo.js/dist/lib/colors.cjs +1 -0
  183. package/node_modules/@rviscomi/capo.js/dist/lib/io.cjs +137 -28
  184. package/node_modules/@rviscomi/capo.js/dist/lib/options.cjs +61 -0
  185. package/node_modules/@rviscomi/capo.js/dist/lib/rules.cjs +28 -13
  186. package/node_modules/@rviscomi/capo.js/dist/lib/validation.cjs +31 -16
  187. package/node_modules/@rviscomi/capo.js/dist/source.zip +0 -0
  188. package/node_modules/@rviscomi/capo.js/dist/types/adapters/adapter.d.ts +105 -0
  189. package/node_modules/@rviscomi/capo.js/dist/types/adapters/browser.d.ts +107 -0
  190. package/node_modules/@rviscomi/capo.js/dist/types/adapters/index.d.ts +7 -0
  191. package/node_modules/@rviscomi/capo.js/dist/types/adapters/test-suite.d.ts +52 -0
  192. package/node_modules/@rviscomi/capo.js/dist/types/analyzer.d.ts +195 -0
  193. package/node_modules/@rviscomi/capo.js/dist/types/index.d.ts +29 -0
  194. package/node_modules/@rviscomi/capo.js/dist/types/lib/colors.d.ts +20 -0
  195. package/node_modules/@rviscomi/capo.js/dist/types/lib/io.d.ts +166 -0
  196. package/node_modules/@rviscomi/capo.js/dist/types/lib/options.d.ts +114 -0
  197. package/node_modules/@rviscomi/capo.js/dist/types/lib/rules.d.ts +111 -0
  198. package/node_modules/@rviscomi/capo.js/dist/types/lib/validation.d.ts +61 -0
  199. package/node_modules/@rviscomi/capo.js/dist/types/src/adapters/adapter.d.ts +105 -0
  200. package/node_modules/@rviscomi/capo.js/dist/types/src/adapters/browser.d.ts +107 -0
  201. package/node_modules/@rviscomi/capo.js/dist/types/src/adapters/index.d.ts +7 -0
  202. package/node_modules/@rviscomi/capo.js/dist/types/src/adapters/test-suite.d.ts +52 -0
  203. package/node_modules/@rviscomi/capo.js/dist/types/src/analyzer.d.ts +195 -0
  204. package/node_modules/@rviscomi/capo.js/dist/types/src/index.d.ts +13 -0
  205. package/node_modules/@rviscomi/capo.js/dist/types/src/lib/colors.d.ts +20 -0
  206. package/node_modules/@rviscomi/capo.js/dist/types/src/lib/io.d.ts +166 -0
  207. package/node_modules/@rviscomi/capo.js/dist/types/src/lib/options.d.ts +114 -0
  208. package/node_modules/@rviscomi/capo.js/dist/types/src/lib/rules.d.ts +111 -0
  209. package/node_modules/@rviscomi/capo.js/dist/types/src/lib/validation.d.ts +61 -0
  210. package/node_modules/@rviscomi/capo.js/package.json +34 -16
  211. package/node_modules/@rviscomi/capo.js/src/adapters/adapter.js +16 -5
  212. package/node_modules/@rviscomi/capo.js/src/adapters/browser.js +30 -4
  213. package/node_modules/@rviscomi/capo.js/src/adapters/test-suite.js +11 -10
  214. package/node_modules/@rviscomi/capo.js/src/analyzer.js +47 -25
  215. package/node_modules/@rviscomi/capo.js/src/extension/README.md +53 -0
  216. package/node_modules/@rviscomi/capo.js/src/extension/background.js +7 -0
  217. package/node_modules/@rviscomi/capo.js/src/extension/capo.css +59 -0
  218. package/node_modules/@rviscomi/capo.js/src/extension/capo.html +12 -0
  219. package/node_modules/@rviscomi/capo.js/src/extension/capo.js +93 -0
  220. package/node_modules/@rviscomi/capo.js/src/extension/chrome.js +120 -0
  221. package/node_modules/@rviscomi/capo.js/src/extension/images/icon128.png +0 -0
  222. package/node_modules/@rviscomi/capo.js/src/extension/images/icon256.png +0 -0
  223. package/node_modules/@rviscomi/capo.js/{crx → src/extension}/manifest.json +1 -1
  224. package/node_modules/@rviscomi/capo.js/src/extension/options/options.css +81 -0
  225. package/node_modules/@rviscomi/capo.js/src/extension/options/options.html +43 -0
  226. package/node_modules/@rviscomi/capo.js/src/extension/options.js +87 -0
  227. package/node_modules/@rviscomi/capo.js/src/extension/styles/open-props.css +291 -0
  228. package/node_modules/@rviscomi/capo.js/src/index.js +10 -0
  229. package/node_modules/@rviscomi/capo.js/src/lib/colors.js +14 -0
  230. package/node_modules/@rviscomi/capo.js/src/lib/io.js +171 -32
  231. package/node_modules/@rviscomi/capo.js/src/lib/options.js +82 -1
  232. package/node_modules/@rviscomi/capo.js/src/lib/rules.js +120 -43
  233. package/node_modules/@rviscomi/capo.js/src/lib/validation.js +211 -86
  234. package/node_modules/@rviscomi/capo.js/src/web/capo.js +5 -8
  235. package/node_modules/@types/hast/README.md +2 -2
  236. package/node_modules/@types/hast/index.d.ts +642 -0
  237. package/node_modules/@types/hast/package.json +9 -3
  238. package/node_modules/@typescript-eslint/eslint-plugin/dist/configs/eslintrc/all.d.ts +0 -4
  239. package/node_modules/@typescript-eslint/eslint-plugin/dist/configs/eslintrc/all.js +0 -4
  240. package/node_modules/@typescript-eslint/eslint-plugin/dist/configs/flat/all.js +0 -4
  241. package/node_modules/@typescript-eslint/eslint-plugin/dist/index.d.ts +0 -4
  242. package/node_modules/@typescript-eslint/eslint-plugin/dist/index.js +47 -0
  243. package/node_modules/@typescript-eslint/eslint-plugin/dist/raw-plugin.d.ts +0 -4
  244. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-ts-comment.js +4 -4
  245. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/method-signature-style.d.ts +1 -1
  246. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/method-signature-style.js +23 -10
  247. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-base-to-string.js +1 -1
  248. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loop-func.js +16 -2
  249. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-promises.js +41 -3
  250. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-restricted-imports.js +12 -0
  251. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-shadow.d.ts +1 -1
  252. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-shadow.js +5 -4
  253. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-this-alias.js +1 -1
  254. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-parameter-property-assignment.js +1 -1
  255. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-template-expression.js +2 -2
  256. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-assertion.js +5 -1
  257. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-vars.js +1 -1
  258. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-string-starts-ends-with.js +2 -1
  259. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-array-sort-compare.js +1 -1
  260. package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unbound-method.js +36 -9
  261. package/node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore/index.js +11 -2
  262. package/node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore/legacy.js +11 -2
  263. package/node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore/package.json +1 -1
  264. package/node_modules/@typescript-eslint/eslint-plugin/package.json +22 -11
  265. package/node_modules/@typescript-eslint/parser/dist/index.js +47 -0
  266. package/node_modules/@typescript-eslint/parser/dist/parser.js +11 -6
  267. package/node_modules/@typescript-eslint/parser/package.json +9 -7
  268. package/node_modules/@typescript-eslint/project-service/package.json +7 -5
  269. package/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.js +2 -2
  270. package/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts +1 -0
  271. package/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js +1 -0
  272. package/node_modules/@typescript-eslint/scope-manager/package.json +8 -6
  273. package/node_modules/@typescript-eslint/tsconfig-utils/package.json +5 -3
  274. package/node_modules/@typescript-eslint/type-utils/package.json +9 -7
  275. package/node_modules/@typescript-eslint/types/dist/generated/ast-spec.d.ts +10 -0
  276. package/node_modules/@typescript-eslint/types/dist/parser-options.d.ts +13 -0
  277. package/node_modules/@typescript-eslint/types/package.json +5 -3
  278. package/node_modules/@typescript-eslint/typescript-estree/dist/check-syntax-errors.js +22 -6
  279. package/node_modules/@typescript-eslint/typescript-estree/dist/convert.js +5 -4
  280. package/node_modules/@typescript-eslint/typescript-estree/dist/getImportClausePhaseModifier.d.ts +4 -0
  281. package/node_modules/@typescript-eslint/typescript-estree/dist/getImportClausePhaseModifier.js +56 -0
  282. package/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/createParseSettings.js +1 -1
  283. package/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/warnAboutTSVersion.d.ts +1 -1
  284. package/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/warnAboutTSVersion.js +27 -18
  285. package/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.d.ts +8 -0
  286. package/node_modules/@typescript-eslint/typescript-estree/package.json +9 -7
  287. package/node_modules/@typescript-eslint/utils/dist/ts-eslint/Rule.d.ts +1 -1
  288. package/node_modules/@typescript-eslint/utils/package.json +8 -6
  289. package/node_modules/@typescript-eslint/visitor-keys/package.json +6 -4
  290. package/node_modules/acorn/CHANGELOG.md +12 -0
  291. package/node_modules/acorn/README.md +5 -0
  292. package/node_modules/acorn/dist/acorn.d.mts +8 -0
  293. package/node_modules/acorn/dist/acorn.d.ts +8 -0
  294. package/node_modules/acorn/dist/acorn.js +16 -7
  295. package/node_modules/acorn/dist/acorn.mjs +16 -7
  296. package/node_modules/acorn/package.json +1 -1
  297. package/node_modules/astro-eslint-parser/lib/index.d.mts +113 -18
  298. package/node_modules/astro-eslint-parser/lib/index.mjs +871 -1172
  299. package/node_modules/astro-eslint-parser/package.json +7 -9
  300. package/node_modules/brace-expansion/README.md +11 -0
  301. package/node_modules/brace-expansion/dist/commonjs/index.d.ts +2 -0
  302. package/node_modules/brace-expansion/dist/commonjs/index.d.ts.map +1 -1
  303. package/node_modules/brace-expansion/dist/commonjs/index.js +162 -84
  304. package/node_modules/brace-expansion/dist/commonjs/index.js.map +1 -1
  305. package/node_modules/brace-expansion/dist/esm/index.d.ts +2 -0
  306. package/node_modules/brace-expansion/dist/esm/index.d.ts.map +1 -1
  307. package/node_modules/brace-expansion/dist/esm/index.js +161 -83
  308. package/node_modules/brace-expansion/dist/esm/index.js.map +1 -1
  309. package/node_modules/brace-expansion/package.json +2 -2
  310. package/node_modules/eslint/README.md +2 -2
  311. package/node_modules/eslint/lib/cli-engine/formatters/html.js +1 -1
  312. package/node_modules/eslint/lib/languages/js/index.js +1 -1
  313. package/node_modules/eslint/lib/linter/code-path-analysis/debug-helpers.js +1 -1
  314. package/node_modules/eslint/lib/linter/vfile.js +1 -1
  315. package/node_modules/eslint/lib/rules/class-methods-use-this.js +6 -5
  316. package/node_modules/eslint/lib/rules/complexity.js +1 -1
  317. package/node_modules/eslint/lib/rules/eqeqeq.js +26 -6
  318. package/node_modules/eslint/lib/rules/func-name-matching.js +3 -3
  319. package/node_modules/eslint/lib/rules/generator-star-spacing.js +4 -6
  320. package/node_modules/eslint/lib/rules/indent.js +4 -6
  321. package/node_modules/eslint/lib/rules/key-spacing.js +5 -7
  322. package/node_modules/eslint/lib/rules/max-len.js +1 -1
  323. package/node_modules/eslint/lib/rules/max-nested-callbacks.js +11 -1
  324. package/node_modules/eslint/lib/rules/no-compare-neg-zero.js +91 -8
  325. package/node_modules/eslint/lib/rules/no-control-regex.js +3 -0
  326. package/node_modules/eslint/lib/rules/no-implicit-coercion.js +22 -8
  327. package/node_modules/eslint/lib/rules/no-invalid-regexp.js +3 -1
  328. package/node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js +5 -7
  329. package/node_modules/eslint/lib/rules/no-promise-executor-return.js +5 -7
  330. package/node_modules/eslint/lib/rules/no-script-url.js +4 -6
  331. package/node_modules/eslint/lib/rules/no-shadow.js +14 -20
  332. package/node_modules/eslint/lib/rules/no-unreachable-loop.js +8 -4
  333. package/node_modules/eslint/lib/rules/prefer-numeric-literals.js +14 -6
  334. package/node_modules/eslint/lib/rules/prefer-object-has-own.js +4 -6
  335. package/node_modules/eslint/lib/rules/prefer-object-spread.js +9 -1
  336. package/node_modules/eslint/lib/rules/prefer-template.js +1 -1
  337. package/node_modules/eslint/lib/rules/preserve-caught-error.js +268 -116
  338. package/node_modules/eslint/lib/rules/quotes.js +1 -1
  339. package/node_modules/eslint/lib/rules/radix.js +58 -57
  340. package/node_modules/eslint/lib/rules/use-isnan.js +20 -12
  341. package/node_modules/eslint/lib/rules/utils/ast-utils.js +1 -1
  342. package/node_modules/eslint/lib/shared/serialization.js +1 -1
  343. package/node_modules/eslint/lib/shared/translate-cli-options.js +3 -3
  344. package/node_modules/eslint/lib/types/config-api.d.ts +8 -1
  345. package/node_modules/eslint/lib/types/index.d.ts +3 -6
  346. package/node_modules/eslint/lib/types/rules.d.ts +17 -9
  347. package/node_modules/eslint/package.json +7 -7
  348. package/node_modules/eslint-plugin-astro/README.md +10 -2
  349. package/node_modules/eslint-plugin-astro/lib/index.d.mts +0 -1
  350. package/node_modules/eslint-plugin-astro/lib/index.mjs +76 -637
  351. package/node_modules/eslint-plugin-astro/package.json +11 -11
  352. package/node_modules/eslint-plugin-toml/README.md +2 -0
  353. package/node_modules/eslint-plugin-toml/lib/index.d.mts +6 -5
  354. package/node_modules/eslint-plugin-toml/lib/index.mjs +32 -3
  355. package/node_modules/eslint-plugin-toml/package.json +7 -7
  356. package/node_modules/eslint-plugin-yml/lib/index.mjs +49 -19
  357. package/node_modules/eslint-plugin-yml/package.json +2 -2
  358. package/node_modules/flatted/golang/pkg/flatted/flatted.go +16 -14
  359. package/node_modules/flatted/package.json +10 -5
  360. package/node_modules/flatted/types/index.d.ts +1 -1
  361. package/node_modules/globals/globals.json +105 -33
  362. package/node_modules/globals/index.d.ts +105 -33
  363. package/node_modules/globals/package.json +2 -2
  364. package/node_modules/mdn-data/css/properties.json +64 -16
  365. package/node_modules/mdn-data/css/properties.schema.json +1 -7
  366. package/node_modules/mdn-data/css/syntaxes.json +1 -1
  367. package/node_modules/mdn-data/l10n/css.json +3 -62
  368. package/node_modules/mdn-data/package.json +1 -1
  369. package/node_modules/minimatch/package.json +9 -9
  370. package/node_modules/nanoid/non-secure/index.cjs +2 -2
  371. package/node_modules/nanoid/non-secure/index.js +2 -2
  372. package/node_modules/nanoid/package.json +1 -1
  373. package/node_modules/picomatch/README.md +15 -21
  374. package/node_modules/picomatch/lib/parse.js +39 -9
  375. package/node_modules/picomatch/lib/picomatch.js +14 -2
  376. package/node_modules/picomatch/package.json +3 -2
  377. package/node_modules/postcss/README.md +1 -2
  378. package/node_modules/postcss/lib/container.js +81 -34
  379. package/node_modules/postcss/lib/fromJSON.js +65 -26
  380. package/node_modules/postcss/lib/input.js +7 -1
  381. package/node_modules/postcss/lib/lazy-result.js +77 -14
  382. package/node_modules/postcss/lib/list.js +1 -0
  383. package/node_modules/postcss/lib/node.d.ts +2 -2
  384. package/node_modules/postcss/lib/node.js +90 -52
  385. package/node_modules/postcss/lib/postcss.d.ts +4 -1
  386. package/node_modules/postcss/lib/previous-map.js +6 -3
  387. package/node_modules/postcss/lib/processor.js +1 -1
  388. package/node_modules/postcss/lib/root.js +16 -1
  389. package/node_modules/postcss/lib/stringifier.js +112 -25
  390. package/node_modules/postcss/lib/warning.js +10 -0
  391. package/node_modules/postcss/package.json +2 -2
  392. package/node_modules/typescript-eslint/dist/index.js +47 -0
  393. package/node_modules/typescript-eslint/package.json +14 -6
  394. package/node_modules/yaml-eslint-parser/lib/chunk-CfYAbeIz.mjs +13 -0
  395. package/node_modules/yaml-eslint-parser/lib/index.d.mts +2 -2
  396. package/node_modules/yaml-eslint-parser/lib/index.mjs +164 -157
  397. package/node_modules/yaml-eslint-parser/package.json +17 -18
  398. package/package.json +23 -23
  399. package/node_modules/@astrojs/compiler/LICENSE +0 -53
  400. package/node_modules/@astrojs/compiler/README.md +0 -72
  401. package/node_modules/@astrojs/compiler/dist/astro.wasm +0 -0
  402. package/node_modules/@astrojs/compiler/dist/browser/index.cjs +0 -2
  403. package/node_modules/@astrojs/compiler/dist/browser/index.d.ts +0 -11
  404. package/node_modules/@astrojs/compiler/dist/browser/index.js +0 -1
  405. package/node_modules/@astrojs/compiler/dist/browser/utils.cjs +0 -3
  406. package/node_modules/@astrojs/compiler/dist/browser/utils.d.ts +0 -29
  407. package/node_modules/@astrojs/compiler/dist/browser/utils.js +0 -3
  408. package/node_modules/@astrojs/compiler/dist/browser/wasm_exec.cjs +0 -2
  409. package/node_modules/@astrojs/compiler/dist/browser/wasm_exec.d.ts +0 -37
  410. package/node_modules/@astrojs/compiler/dist/browser/wasm_exec.js +0 -1
  411. package/node_modules/@astrojs/compiler/dist/chunk-QR6QDSEV.js +0 -2
  412. package/node_modules/@astrojs/compiler/dist/chunk-W5DTLHV4.js +0 -1
  413. package/node_modules/@astrojs/compiler/dist/node/index.cjs +0 -1
  414. package/node_modules/@astrojs/compiler/dist/node/index.d.ts +0 -12
  415. package/node_modules/@astrojs/compiler/dist/node/index.js +0 -1
  416. package/node_modules/@astrojs/compiler/dist/node/sync.cjs +0 -1
  417. package/node_modules/@astrojs/compiler/dist/node/sync.d.ts +0 -16
  418. package/node_modules/@astrojs/compiler/dist/node/sync.js +0 -1
  419. package/node_modules/@astrojs/compiler/dist/node/utils.cjs +0 -3
  420. package/node_modules/@astrojs/compiler/dist/node/utils.d.ts +0 -29
  421. package/node_modules/@astrojs/compiler/dist/node/utils.js +0 -3
  422. package/node_modules/@astrojs/compiler/dist/node/wasm_exec.cjs +0 -1
  423. package/node_modules/@astrojs/compiler/dist/node/wasm_exec.d.ts +0 -37
  424. package/node_modules/@astrojs/compiler/dist/node/wasm_exec.js +0 -1
  425. package/node_modules/@astrojs/compiler/dist/shared/ast.cjs +0 -1
  426. package/node_modules/@astrojs/compiler/dist/shared/ast.d.ts +0 -74
  427. package/node_modules/@astrojs/compiler/dist/shared/ast.js +0 -0
  428. package/node_modules/@astrojs/compiler/dist/shared/diagnostics.cjs +0 -1
  429. package/node_modules/@astrojs/compiler/dist/shared/diagnostics.d.ts +0 -18
  430. package/node_modules/@astrojs/compiler/dist/shared/diagnostics.js +0 -1
  431. package/node_modules/@astrojs/compiler/dist/shared/types.cjs +0 -1
  432. package/node_modules/@astrojs/compiler/dist/shared/types.d.ts +0 -153
  433. package/node_modules/@astrojs/compiler/dist/shared/types.js +0 -1
  434. package/node_modules/@astrojs/compiler/package.json +0 -58
  435. package/node_modules/@astrojs/compiler/sync.d.ts +0 -1
  436. package/node_modules/@astrojs/compiler/types.d.ts +0 -1
  437. package/node_modules/@astrojs/compiler/utils.d.ts +0 -1
  438. package/node_modules/@pkgr/core/index.d.cts +0 -3
  439. package/node_modules/@pkgr/core/lib/constants.d.ts +0 -6
  440. package/node_modules/@pkgr/core/lib/constants.js +0 -9
  441. package/node_modules/@pkgr/core/lib/constants.js.map +0 -1
  442. package/node_modules/@pkgr/core/lib/helpers.d.ts +0 -19
  443. package/node_modules/@pkgr/core/lib/helpers.js +0 -67
  444. package/node_modules/@pkgr/core/lib/helpers.js.map +0 -1
  445. package/node_modules/@pkgr/core/lib/index.cjs +0 -91
  446. package/node_modules/@pkgr/core/lib/index.d.ts +0 -2
  447. package/node_modules/@pkgr/core/lib/index.js +0 -3
  448. package/node_modules/@pkgr/core/lib/index.js.map +0 -1
  449. package/node_modules/@pkgr/core/package.json +0 -38
  450. package/node_modules/@rviscomi/capo.js/crx/README.md +0 -10
  451. package/node_modules/@rviscomi/capo.js/crx/capo.js +0 -3
  452. package/node_modules/@rviscomi/capo.js/crx/options/options.js +0 -1
  453. package/node_modules/@rviscomi/capo.js/docs/.vscode/extensions.json +0 -4
  454. package/node_modules/@rviscomi/capo.js/docs/.vscode/launch.json +0 -11
  455. package/node_modules/@rviscomi/capo.js/docs/README.md +0 -51
  456. package/node_modules/@rviscomi/capo.js/docs/astro.config.mjs +0 -82
  457. package/node_modules/@rviscomi/capo.js/docs/package-lock.json +0 -7439
  458. package/node_modules/@rviscomi/capo.js/docs/package.json +0 -21
  459. package/node_modules/@rviscomi/capo.js/docs/public/capo-social-alt.webp +0 -0
  460. package/node_modules/@rviscomi/capo.js/docs/public/capo-social.png +0 -0
  461. package/node_modules/@rviscomi/capo.js/docs/public/capo-social.webp +0 -0
  462. package/node_modules/@rviscomi/capo.js/docs/public/favicon.svg +0 -13
  463. package/node_modules/@rviscomi/capo.js/docs/src/assets/bookmarklet-setup.png +0 -0
  464. package/node_modules/@rviscomi/capo.js/docs/src/assets/bookmarklet.png +0 -0
  465. package/node_modules/@rviscomi/capo.js/docs/src/assets/capo-chrome.png +0 -0
  466. package/node_modules/@rviscomi/capo.js/docs/src/assets/capo-extension.png +0 -0
  467. package/node_modules/@rviscomi/capo.js/docs/src/assets/capo800.png +0 -0
  468. package/node_modules/@rviscomi/capo.js/docs/src/assets/crx-console-expanded.png +0 -0
  469. package/node_modules/@rviscomi/capo.js/docs/src/assets/crx-console-interactive.png +0 -0
  470. package/node_modules/@rviscomi/capo.js/docs/src/assets/crx-console.png +0 -0
  471. package/node_modules/@rviscomi/capo.js/docs/src/assets/crx-hover-validation.png +0 -0
  472. package/node_modules/@rviscomi/capo.js/docs/src/assets/crx-menu.png +0 -0
  473. package/node_modules/@rviscomi/capo.js/docs/src/assets/crx-options-dark.png +0 -0
  474. package/node_modules/@rviscomi/capo.js/docs/src/assets/crx-options-light.png +0 -0
  475. package/node_modules/@rviscomi/capo.js/docs/src/assets/crx-store.png +0 -0
  476. package/node_modules/@rviscomi/capo.js/docs/src/assets/custom-palette.png +0 -0
  477. package/node_modules/@rviscomi/capo.js/docs/src/assets/developer-mode.png +0 -0
  478. package/node_modules/@rviscomi/capo.js/docs/src/assets/devtools-console.png +0 -0
  479. package/node_modules/@rviscomi/capo.js/docs/src/assets/devtools-snippet.png +0 -0
  480. package/node_modules/@rviscomi/capo.js/docs/src/assets/devtools-sources.png +0 -0
  481. package/node_modules/@rviscomi/capo.js/docs/src/assets/houston.webp +0 -0
  482. package/node_modules/@rviscomi/capo.js/docs/src/assets/load-unpacked.png +0 -0
  483. package/node_modules/@rviscomi/capo.js/docs/src/assets/validation-areas.png +0 -0
  484. package/node_modules/@rviscomi/capo.js/docs/src/assets/validation-base.png +0 -0
  485. package/node_modules/@rviscomi/capo.js/docs/src/assets/validation-crx-stripes.png +0 -0
  486. package/node_modules/@rviscomi/capo.js/docs/src/assets/validation-csp.png +0 -0
  487. package/node_modules/@rviscomi/capo.js/docs/src/assets/validation-invalid-element.png +0 -0
  488. package/node_modules/@rviscomi/capo.js/docs/src/assets/validation-origin-trial.png +0 -0
  489. package/node_modules/@rviscomi/capo.js/docs/src/assets/validation-title.png +0 -0
  490. package/node_modules/@rviscomi/capo.js/docs/src/components/CapoClient.astro +0 -165
  491. package/node_modules/@rviscomi/capo.js/docs/src/components/CapoOptions.astro +0 -10
  492. package/node_modules/@rviscomi/capo.js/docs/src/components/CapoPalette.astro +0 -26
  493. package/node_modules/@rviscomi/capo.js/docs/src/components/InlineCapoIcon.astro +0 -15
  494. package/node_modules/@rviscomi/capo.js/docs/src/components/InlineCapoWeightBars.astro +0 -39
  495. package/node_modules/@rviscomi/capo.js/docs/src/components/VirtualConsole.astro +0 -11
  496. package/node_modules/@rviscomi/capo.js/docs/src/content/config.ts +0 -7
  497. package/node_modules/@rviscomi/capo.js/docs/src/content/docs/developer/contributing.mdx +0 -8
  498. package/node_modules/@rviscomi/capo.js/docs/src/content/docs/developer/crx-local.mdx +0 -28
  499. package/node_modules/@rviscomi/capo.js/docs/src/content/docs/developer/custom-adapters.mdx +0 -273
  500. package/node_modules/@rviscomi/capo.js/docs/src/content/docs/index.mdx +0 -108
  501. package/node_modules/@rviscomi/capo.js/docs/src/content/docs/migration-v2.mdx +0 -62
  502. package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/actionability.mdx +0 -6
  503. package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/assessment-mode.mdx +0 -29
  504. package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/config.mdx +0 -195
  505. package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/demo.mdx +0 -9
  506. package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/extension.mdx +0 -116
  507. package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/performance.mdx +0 -6
  508. package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/quick-start.mdx +0 -26
  509. package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/rules.mdx +0 -202
  510. package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/validation.mdx +0 -197
  511. package/node_modules/@rviscomi/capo.js/docs/src/env.d.ts +0 -2
  512. package/node_modules/@rviscomi/capo.js/docs/src/lib/VirtualConsole.js +0 -190
  513. package/node_modules/@rviscomi/capo.js/docs/src/lib/capo.js +0 -1533
  514. package/node_modules/@rviscomi/capo.js/docs/src/styles/custom.css +0 -7
  515. package/node_modules/@rviscomi/capo.js/docs/src/styles/virtual-console.css +0 -131
  516. package/node_modules/@rviscomi/capo.js/docs/tests/VirtualConsole.test.js +0 -108
  517. package/node_modules/@rviscomi/capo.js/docs/tsconfig.json +0 -3
  518. package/node_modules/@rviscomi/capo.js/src/crx/capo.js +0 -62
  519. package/node_modules/@rviscomi/capo.js/src/crx/options.js +0 -69
  520. package/node_modules/astrojs-compiler-sync/LICENSE +0 -53
  521. package/node_modules/astrojs-compiler-sync/README.md +0 -3
  522. package/node_modules/astrojs-compiler-sync/browser/index.d.ts +0 -6
  523. package/node_modules/astrojs-compiler-sync/browser/index.js +0 -76
  524. package/node_modules/astrojs-compiler-sync/browser/wasm_exec.js +0 -665
  525. package/node_modules/astrojs-compiler-sync/lib/astrojs-compiler-worker.js +0 -5
  526. package/node_modules/astrojs-compiler-sync/lib/compiler-sync.cjs +0 -31
  527. package/node_modules/astrojs-compiler-sync/lib/index.cjs +0 -30
  528. package/node_modules/astrojs-compiler-sync/lib/index.d.cts +0 -3
  529. package/node_modules/astrojs-compiler-sync/lib/index.d.ts +0 -14
  530. package/node_modules/astrojs-compiler-sync/lib/index.js +0 -18
  531. package/node_modules/astrojs-compiler-sync/package.json +0 -100
  532. package/node_modules/entities/LICENSE +0 -11
  533. package/node_modules/entities/dist/decode-codepoint.d.ts +0 -8
  534. package/node_modules/entities/dist/decode-codepoint.d.ts.map +0 -1
  535. package/node_modules/entities/dist/decode-codepoint.js +0 -46
  536. package/node_modules/entities/dist/decode-codepoint.js.map +0 -1
  537. package/node_modules/entities/dist/decode.d.ts +0 -194
  538. package/node_modules/entities/dist/decode.d.ts.map +0 -1
  539. package/node_modules/entities/dist/decode.js +0 -544
  540. package/node_modules/entities/dist/decode.js.map +0 -1
  541. package/node_modules/entities/dist/encode.d.ts +0 -24
  542. package/node_modules/entities/dist/encode.d.ts.map +0 -1
  543. package/node_modules/entities/dist/encode.js +0 -90
  544. package/node_modules/entities/dist/encode.js.map +0 -1
  545. package/node_modules/entities/dist/escape.d.ts +0 -48
  546. package/node_modules/entities/dist/escape.d.ts.map +0 -1
  547. package/node_modules/entities/dist/escape.js +0 -132
  548. package/node_modules/entities/dist/escape.js.map +0 -1
  549. package/node_modules/entities/dist/generated/decode-data-html.d.ts +0 -3
  550. package/node_modules/entities/dist/generated/decode-data-html.d.ts.map +0 -1
  551. package/node_modules/entities/dist/generated/decode-data-html.js +0 -5
  552. package/node_modules/entities/dist/generated/decode-data-html.js.map +0 -1
  553. package/node_modules/entities/dist/generated/decode-data-xml.d.ts +0 -3
  554. package/node_modules/entities/dist/generated/decode-data-xml.d.ts.map +0 -1
  555. package/node_modules/entities/dist/generated/decode-data-xml.js +0 -5
  556. package/node_modules/entities/dist/generated/decode-data-xml.js.map +0 -1
  557. package/node_modules/entities/dist/generated/encode-html.d.ts +0 -5
  558. package/node_modules/entities/dist/generated/encode-html.d.ts.map +0 -1
  559. package/node_modules/entities/dist/generated/encode-html.js +0 -12
  560. package/node_modules/entities/dist/generated/encode-html.js.map +0 -1
  561. package/node_modules/entities/dist/index.d.ts +0 -89
  562. package/node_modules/entities/dist/index.d.ts.map +0 -1
  563. package/node_modules/entities/dist/index.js +0 -91
  564. package/node_modules/entities/dist/index.js.map +0 -1
  565. package/node_modules/entities/dist/internal/bin-trie-flags.d.ts +0 -17
  566. package/node_modules/entities/dist/internal/bin-trie-flags.d.ts.map +0 -1
  567. package/node_modules/entities/dist/internal/bin-trie-flags.js +0 -18
  568. package/node_modules/entities/dist/internal/bin-trie-flags.js.map +0 -1
  569. package/node_modules/entities/dist/internal/decode-shared.d.ts +0 -7
  570. package/node_modules/entities/dist/internal/decode-shared.d.ts.map +0 -1
  571. package/node_modules/entities/dist/internal/decode-shared.js +0 -17
  572. package/node_modules/entities/dist/internal/decode-shared.js.map +0 -1
  573. package/node_modules/entities/dist/internal/encode-shared.d.ts +0 -33
  574. package/node_modules/entities/dist/internal/encode-shared.d.ts.map +0 -1
  575. package/node_modules/entities/dist/internal/encode-shared.js +0 -93
  576. package/node_modules/entities/dist/internal/encode-shared.js.map +0 -1
  577. package/node_modules/entities/package.json +0 -83
  578. package/node_modules/entities/readme.md +0 -131
  579. package/node_modules/entities/src/decode-codepoint.ts +0 -50
  580. package/node_modules/entities/src/decode.ts +0 -671
  581. package/node_modules/entities/src/encode.ts +0 -95
  582. package/node_modules/entities/src/escape.ts +0 -160
  583. package/node_modules/entities/src/generated/decode-data-html.ts +0 -7
  584. package/node_modules/entities/src/generated/decode-data-xml.ts +0 -7
  585. package/node_modules/entities/src/generated/encode-html.ts +0 -18
  586. package/node_modules/entities/src/index.ts +0 -162
  587. package/node_modules/entities/src/internal/bin-trie-flags.ts +0 -16
  588. package/node_modules/entities/src/internal/decode-shared.ts +0 -18
  589. package/node_modules/entities/src/internal/encode-shared.ts +0 -123
  590. package/node_modules/parse5/README.md +0 -38
  591. package/node_modules/parse5/dist/common/doctype.d.ts +0 -4
  592. package/node_modules/parse5/dist/common/doctype.js +0 -114
  593. package/node_modules/parse5/dist/common/error-codes.d.ts +0 -67
  594. package/node_modules/parse5/dist/common/error-codes.js +0 -63
  595. package/node_modules/parse5/dist/common/foreign-content.d.ts +0 -9
  596. package/node_modules/parse5/dist/common/foreign-content.js +0 -228
  597. package/node_modules/parse5/dist/common/html.d.ts +0 -289
  598. package/node_modules/parse5/dist/common/html.js +0 -523
  599. package/node_modules/parse5/dist/common/token.d.ts +0 -84
  600. package/node_modules/parse5/dist/common/token.js +0 -20
  601. package/node_modules/parse5/dist/common/unicode.d.ts +0 -42
  602. package/node_modules/parse5/dist/common/unicode.js +0 -62
  603. package/node_modules/parse5/dist/index.d.ts +0 -71
  604. package/node_modules/parse5/dist/index.js +0 -42
  605. package/node_modules/parse5/dist/parser/formatting-element-list.d.ts +0 -36
  606. package/node_modules/parse5/dist/parser/formatting-element-list.js +0 -110
  607. package/node_modules/parse5/dist/parser/index.d.ts +0 -221
  608. package/node_modules/parse5/dist/parser/index.js +0 -3245
  609. package/node_modules/parse5/dist/parser/open-element-stack.d.ts +0 -53
  610. package/node_modules/parse5/dist/parser/open-element-stack.js +0 -324
  611. package/node_modules/parse5/dist/serializer/index.d.ts +0 -60
  612. package/node_modules/parse5/dist/serializer/index.js +0 -168
  613. package/node_modules/parse5/dist/tokenizer/index.d.ts +0 -247
  614. package/node_modules/parse5/dist/tokenizer/index.js +0 -2712
  615. package/node_modules/parse5/dist/tokenizer/preprocessor.d.ts +0 -36
  616. package/node_modules/parse5/dist/tokenizer/preprocessor.js +0 -196
  617. package/node_modules/parse5/dist/tree-adapters/default.d.ts +0 -84
  618. package/node_modules/parse5/dist/tree-adapters/default.js +0 -173
  619. package/node_modules/parse5/dist/tree-adapters/interface.d.ts +0 -255
  620. package/node_modules/parse5/dist/tree-adapters/interface.js +0 -1
  621. package/node_modules/parse5/package.json +0 -53
  622. package/node_modules/synckit/README.md +0 -256
  623. package/node_modules/synckit/lib/common.d.ts +0 -5
  624. package/node_modules/synckit/lib/common.js +0 -22
  625. package/node_modules/synckit/lib/common.js.map +0 -1
  626. package/node_modules/synckit/lib/constants.d.ts +0 -38
  627. package/node_modules/synckit/lib/constants.js +0 -54
  628. package/node_modules/synckit/lib/constants.js.map +0 -1
  629. package/node_modules/synckit/lib/helpers.d.ts +0 -27
  630. package/node_modules/synckit/lib/helpers.js +0 -411
  631. package/node_modules/synckit/lib/helpers.js.map +0 -1
  632. package/node_modules/synckit/lib/index.cjs +0 -588
  633. package/node_modules/synckit/lib/index.d.cts +0 -138
  634. package/node_modules/synckit/lib/index.d.ts +0 -7
  635. package/node_modules/synckit/lib/index.js +0 -68
  636. package/node_modules/synckit/lib/index.js.map +0 -1
  637. package/node_modules/synckit/lib/types.d.ts +0 -48
  638. package/node_modules/synckit/lib/types.js +0 -2
  639. package/node_modules/synckit/lib/types.js.map +0 -1
  640. package/node_modules/synckit/package.json +0 -45
  641. package/node_modules/yaml-eslint-parser/lib/chunk-15K8U1wQ.mjs +0 -18
  642. /package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/background.js +0 -0
  643. /package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/capo.css +0 -0
  644. /package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/images/icon128.png +0 -0
  645. /package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/images/icon256.png +0 -0
  646. /package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/options/options.css +0 -0
  647. /package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/options/options.html +0 -0
  648. /package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/styles/open-props.css +0 -0
  649. /package/node_modules/@rviscomi/capo.js/{docs/src/assets/capo256.png → dist/firefox/images/icon256.png} +0 -0
  650. /package/node_modules/eslint-plugin-toml/lib/{chunk-CfYAbeIz.mjs → rolldown-runtime-D7D4PA-g.mjs} +0 -0
@@ -0,0 +1,53 @@
1
+ # Capo Browser Extension Source Code
2
+
3
+ This directory contains the source code for the Capo browser extension (available for Chrome and Firefox).
4
+
5
+ ## Build Instructions
6
+
7
+ This extension is built from source using Node.js and Parcel. Follow these steps to produce the exact binary package submitted for verification.
8
+
9
+ ### Requirements
10
+
11
+ - **Operating System:** macOS, Linux, or Windows.
12
+ - **Environment:**
13
+ - **Node.js:** v18.0.0 or higher (v22.x recommended).
14
+ - **npm:** v9.0.0 or higher (v10.x recommended).
15
+
16
+ ### 1. Installation of Prerequisites
17
+
18
+ If Node.js and npm are not installed:
19
+ - **macOS (via Homebrew):** `brew install node`
20
+ - **Windows / Linux:** Download the installer from [nodejs.org](https://nodejs.org/).
21
+
22
+ Verify installation:
23
+ ```bash
24
+ node -v
25
+ npm -v
26
+ ```
27
+
28
+ ### 2. Install Project Dependencies
29
+
30
+ Run the following command from the root of the source code directory to install all required development and build dependencies:
31
+
32
+ ```bash
33
+ npm install
34
+ ```
35
+
36
+ ### 3. Execute the Build Script
37
+
38
+ Run the build script to compile and package the extension:
39
+
40
+ ```bash
41
+ npm run build
42
+ ```
43
+
44
+ This runs:
45
+ - `npm run build:cjs`: Compiles CommonJS bundles using `esbuild`.
46
+ - `parcel build`: Compiles, bundles, and minifies the extension source code (`src/extension/capo.js` and `src/extension/options.js`) using `Parcel`.
47
+ - `node scripts/build-extension.js`: Copies static files, generates the Firefox-compatible manifest, and packages them.
48
+
49
+ ### 4. Locate Build Outputs
50
+
51
+ Once the build is complete:
52
+ - The compiled Firefox extension files will be in `dist/firefox/`.
53
+ - The final zip package submitted to Mozilla is located at `dist/firefox.zip`.
@@ -0,0 +1,7 @@
1
+ chrome.runtime.onInstalled.addListener(function (details) {
2
+ if (details.reason == "install") {
3
+ chrome.tabs.create({
4
+ url: "https://rviscomi.github.io/capo.js/user/extension/?utm_source=installed&utm_medium=extension&utm_campaign=capo",
5
+ });
6
+ }
7
+ });
@@ -0,0 +1,59 @@
1
+ body {
2
+ padding: 0;
3
+ margin: 0;
4
+ height: 60px;
5
+ background-color: #ccc;
6
+ }
7
+
8
+ .capo-container {
9
+ display: flex;
10
+ align-content: stretch;
11
+ width: 600px;
12
+ }
13
+
14
+ .capo-head-element {
15
+ content: '';
16
+ width: 100%;
17
+ height: 30px;
18
+ box-sizing: border-box;
19
+ }
20
+ .capo-head-element.invalid {
21
+ background-image: repeating-linear-gradient(
22
+ 45deg,
23
+ rgba(0, 0, 0, 0),
24
+ rgba(0, 0, 0, 0) 3px,
25
+ rgba(255, 0, 0, 0.3) 3px,
26
+ rgba(255, 0, 0, 0.3) 6px
27
+ );
28
+ }
29
+ .capo-head-element.invalid:is(
30
+ [data-weight="10"],
31
+ [data-weight="9"],
32
+ [data-weight="8"],
33
+ [data-weight="7"]
34
+ ) {
35
+ background-image: repeating-linear-gradient(
36
+ 45deg,
37
+ rgba(255, 255, 255, 0.3),
38
+ rgba(255, 255, 255, 0.3) 3px,
39
+ rgba(0, 0, 0, 0) 3px,
40
+ rgba(0, 0, 0, 0) 6px
41
+ );
42
+ }.capo-head-element.invalid:is(
43
+ [data-weight="2"],
44
+ [data-weight="1"]
45
+ ) {
46
+ background-image: repeating-linear-gradient(
47
+ 45deg,
48
+ rgba(255, 255, 255, 0.3),
49
+ rgba(255, 255, 255, 0.3) 3px,
50
+ rgba(255, 0, 0, 0.3) 3px,
51
+ rgba(255, 0, 0, 0.3) 6px
52
+ );
53
+ }
54
+ .capo-head-element:hover {
55
+ box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.1);
56
+ }
57
+ .capo-head-element.invalid:hover {
58
+ box-shadow: inset 0 0 0 9999px rgba(255, 0, 0, 0.1);
59
+ }
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <link rel="stylesheet" href="capo.css">
5
+ </head>
6
+ <body>
7
+ <div id="actual" class="capo-container"></div>
8
+ <div id="sorted" class="capo-container"></div>
9
+
10
+ <script type="module" src="chrome.js"></script>
11
+ </body>
12
+ </html>
@@ -0,0 +1,3 @@
1
+ (()=>{let e={META:10,TITLE:9,PRECONNECT:8,ASYNC_SCRIPT:7,IMPORT_STYLES:6,SYNC_SCRIPT:5,SYNC_STYLES:4,PRELOAD:3,DEFER_SCRIPT:2,PREFETCH_PRERENDER:1,OTHER:0},t=["accept-ch","content-security-policy","content-type","default-style","delegate-ch","origin-trial","x-dns-prefetch-control"],i={META:function(e,i){let n=i.getTagName(e);if("base"===n)return!0;if("meta"!==n)return!1;if(i.hasAttribute(e,"charset"))return!0;let r=i.getAttribute(e,"name");if(r&&"viewport"===r.toLowerCase())return!0;let a=i.getAttribute(e,"http-equiv");if(a){let e=a.toLowerCase();return t.includes(e)}return!1},TITLE:function(e,t){return"title"===t.getTagName(e)},PRECONNECT:function(e,t){if("link"!==t.getTagName(e))return!1;let i=t.getAttribute(e,"rel");return i?.toLowerCase()==="preconnect"},ASYNC_SCRIPT:function(e,t){return"script"===t.getTagName(e)&&t.hasAttribute(e,"src")&&t.hasAttribute(e,"async")},IMPORT_STYLES:function(e,t){if("style"===t.getTagName(e)){let i=t.getAttribute(e,"media");return(!i||"print"!==i.toLowerCase().trim())&&/@import/.test(t.getTextContent(e))}return!1},SYNC_SCRIPT:function(e,t){if("script"!==t.getTagName(e)||t.hasAttribute(e,"src")&&t.hasAttribute(e,"defer"))return!1;if(t.hasAttribute(e,"src")){let i=t.getAttribute(e,"type");if(i&&"module"===i.toLowerCase())return!1}if(t.hasAttribute(e,"src")&&t.hasAttribute(e,"async"))return!1;let i=t.getAttribute(e,"type");return!(i&&i.toLowerCase().includes("json"))},SYNC_STYLES:function(e,t){let i=t.getTagName(e);if("style"===i){let i=t.getAttribute(e,"media");return!i||"print"!==i.toLowerCase().trim()}if("link"===i){let i=t.getAttribute(e,"rel");if(i?.toLowerCase()==="stylesheet"){let i=t.getAttribute(e,"media");return!i||"print"!==i.toLowerCase().trim()}}return!1},PRELOAD:function(e,t){if("link"!==t.getTagName(e))return!1;let i=t.getAttribute(e,"rel");if(!i)return!1;let n=i.toLowerCase();return"preload"===n||"modulepreload"===n},DEFER_SCRIPT:function(e,t){if("script"!==t.getTagName(e)||!t.hasAttribute(e,"src"))return!1;if(t.hasAttribute(e,"defer"))return!0;let i=t.getAttribute(e,"type");return!!i&&"module"===i.toLowerCase()&&!t.hasAttribute(e,"async")},PREFETCH_PRERENDER:function(e,t){if("link"!==t.getTagName(e))return!1;let i=t.getAttribute(e,"rel");if(!i)return!1;let n=i.toLowerCase();return"prefetch"===n||"dns-prefetch"===n||"prerender"===n}},n=new Set(["base","link","meta","noscript","script","style","template","title"]);function r(e,t){let i=t.getTagName(e);return!i||""===i||n.has(i.toLowerCase())}function a(e,t,i,n){for(let r of n.getChildren(e)){if(r===i)continue;let e=n.getTagName(r);if("link"===e){let e=n.getAttribute(r,"rel");if(e&&/\b(preload|modulepreload)\b/i.test(e))continue;if(n.getAttribute(r,"href")===t)return r}if("script"===e&&n.getAttribute(r,"src")===t)return r}return null}class s{isElement(e){throw Error("isElement() not implemented")}getTagName(e){throw Error("getTagName() not implemented")}getAttribute(e,t){throw Error("getAttribute() not implemented")}hasAttribute(e,t){throw Error("hasAttribute() not implemented")}getAttributeNames(e){throw Error("getAttributeNames() not implemented")}getTextContent(e){throw Error("getTextContent() not implemented")}getChildren(e){throw Error("getChildren() not implemented")}getParent(e){throw Error("getParent() not implemented")}getSiblings(e){throw Error("getSiblings() not implemented")}getLocation(e){return null}stringify(e){throw Error("stringify() not implemented")}}class o extends s{isElement(e){return!!e&&1===e.nodeType}getTagName(e){if(!e||!e.tagName)return"";let t=e.tagName.toLowerCase();return"static-head"===t?"head":t}getAttribute(e,t){return e&&"function"==typeof e.getAttribute?e.getAttribute(t):null}hasAttribute(e,t){return!!e&&"function"==typeof e.hasAttribute&&e.hasAttribute(t)}getAttributeNames(e){return e&&"function"==typeof e.getAttributeNames?e.getAttributeNames():[]}getTextContent(e){return e&&e.textContent||""}getChildren(e){if(!e)return[];if("noscript"===this.getTagName(e)){let t=e.innerHTML||"";if(t.trim()){let i=e.ownerDocument||("u">typeof document?document:null);if(i){let e=i.createElement("div");return e.innerHTML=t,Array.from(e.children)}}}return e.children?Array.from(e.children):[]}getParent(e){return e&&e.parentElement||null}getSiblings(e){if(!e)return[];let t=e.parentElement;return t?Array.from(t.children).filter(t=>t!==e):[]}getLocation(e){return null}stringify(e){if(!e||!e.nodeName)return"[invalid node]";let t=this.getTagName(e),i=this.getAttributeNames(e);if(0===i.length)return`<${t}>`;let n=i.map(t=>{let i=this.getAttribute(e,t),n=i?i.replace(/"/g,"&quot;"):"";return`${t}="${n}"`}).join(" ");return`<${t} ${n}>`}}function l(e){return[`oklch(5% .1 ${e})`,`oklch(13% .2 ${e})`,`oklch(25% .2 ${e})`,`oklch(35% .25 ${e})`,`oklch(50% .27 ${e})`,`oklch(67% .31 ${e})`,`oklch(72% .25 ${e})`,`oklch(80% .2 ${e})`,`oklch(90% .1 ${e})`,`oklch(99% .05 ${e})`,"#ccc"]}let u=["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2","#cccccc"],c={DEFAULT:u,PINK:l(320),BLUE:l(200)};class d{constructor(e,t,i="u">typeof window?window.console:console){this.document=e,this.options=t,this.console=i,this.isStaticHead=!1,this.head=null}static formatStaticHeadHTML(e){return/<head[\s>]/i.test(e)?e.replace(/(\<\/?)(head)/gi,"$1static-head"):`<static-head>${e}</static-head>`}initFromStaticHead(e){this.head=e,this.isStaticHead=!0}initFromHTML(e){let t=d.formatStaticHeadHTML(e.trim()),i=new(this.document?.defaultView?.DOMParser||DOMParser)().parseFromString(t,"text/html");this.initFromStaticHead(i.querySelector("static-head")||i.head)}async init(){if(!this.head){if(this.options.prefersDynamicAssessment()){this.head=this.document?.querySelector("head")||null;return}try{let e=await this.getStaticHTML();e=d.formatStaticHeadHTML(e);let t=new(this.document?.defaultView?.DOMParser||DOMParser)().parseFromString(e,"text/html").querySelector("static-head");t?this.initFromStaticHead(t):this.head=this.document?.head||null}catch(e){this.console.error(`${this.options.loggingPrefix}An exception occurred while getting the static <head>:`,e),this.head=this.document?.head||null}this.isStaticHead||this.console.warn(`${this.options.loggingPrefix}Unable to parse the static (server-rendered) <head>. Falling back to document.head`,this.head)}}async getStaticHTML(){let e=this.document?.location.href||"",t=await fetch(e);return await t.text()}getHead(){return this.head}stringifyElement(e){return e.getAttributeNames().reduce((t,i)=>t+=`[${CSS.escape(i)}=${JSON.stringify(e.getAttribute(i))}]`,e.nodeName)}getLoggableElement(e){if(!this.isStaticHead)return e;let t=this.document?.head||this.head;if(!t)return e;let i=this.stringifyElement(e),n=Array.from(t.querySelectorAll(i));if(0==n.length)return e;if(1==n.length)return n[0];let r=n.find(t=>{if(t.childNodes.length!==e.childNodes.length)return!1;for(let i=0;i<t.childNodes.length;i++)if(!t.childNodes[i].isEqualNode(e.childNodes[i]))return!1;return!0});return r||e}createElementFromSelector(e){let t=e.match(/^[A-Za-z]+/),i=t?t[0]:null;if(!i)return;let n=document.createElement(i);return(e.match(/\[([A-Za-z-]+)="([^"]+)"\]/g)||[]).forEach(e=>{let t=(e=e.slice(1,-1)).indexOf("="),i=e.slice(0,t),r=e.slice(t+1).slice(1,-1);n.setAttribute(i,r)}),n}logAnalysis(e){let t=this.getHead(),i=e.weights.map(t=>{let i=e.customValidations.find(e=>e.element===t.element),n=e.validationWarnings.find(e=>e.element===t.element||e.elements&&e.elements.includes(t.element));return{element:t.element,weight:t.weight,isValid:!i&&!n,customValidations:i||{}}});this.logValidationWarnings(e.validationWarnings),e.customValidations.forEach(e=>{e.warnings.length>0&&this.console.warn(`${this.options.loggingPrefix}${e.warnings[0]}`,e.element,e.payload||"")}),this.visualizeHead("Actual",t,i);let n=[...i].sort((e,t)=>t.weight-e.weight),r=t.cloneNode(!1);return n.forEach(({element:e})=>{e&&r.appendChild(e.cloneNode(!0))}),this.visualizeHead("Sorted",r,n),i}logElementFromSelector({weight:e,selector:t,html:i,isValid:n,customValidations:r={}}){let a=+e,s=this.getElementVisualization(a,n),o=this.createElementFromSelector(t),l=new(this.document?.defaultView?.DOMParser||DOMParser)().parseFromString(i||"","text/html");[...l.head.childNodes,...l.body.childNodes].forEach(e=>o.appendChild(e.cloneNode(!0))),o=this.getLoggableElement(o),this.logElement({viz:s,weight:a,element:o,isValid:n,customValidations:r})}logElement({viz:e,weight:t,element:i,isValid:n,customValidations:r={},omitPrefix:a=!1}){a||(e.visual=`${this.options.loggingPrefix}${e.visual}`);let s="log",o=[e.visual,e.style,t+1,i];if(!this.options.isValidationEnabled())return void this.console[s](...o);let{payload:l,warnings:u}=r;l&&Object.keys(l).length>0&&("string"==typeof l.expiry&&(l.expiry=new Date(l.expiry)),o.push(l)),u?.length?(s="warn",o.push("\n"+u.map(e=>` \u{274C} ${e}`).join("\n"))):!n&&(this.options.prefersDynamicAssessment()||this.isStaticHead)&&(s="warn",o.push(`
2
+ \u{274C} invalid element (${i.tagName})`)),this.console[s](...o)}logValidationWarnings(e){this.options.isValidationEnabled()&&e.forEach(({warning:e,elements:t=[],element:i})=>{t=t.map(this.getLoggableElement.bind(this)),this.console.warn(`${this.options.loggingPrefix}${e}`,...t,i||"")})}getColor(e){return this.options.palette[10-e]}getHeadVisualization(e){let t="",i=[];return e.forEach(({weight:e,isValid:n})=>{t+="%c ";let r=this.getColor(e),a="padding: 5px; margin: 4px -1px 0; display: inline-block; ";if(n)a+=`background-color: ${r};`;else{let e;a+=`background-image: ${r==(e="#cccccc")&&(e="red"),`repeating-linear-gradient(45deg, ${r}, ${r} 3px, ${e} 3px, ${e} 6px)`}`}i.push(a)}),{visual:t,styles:i}}getElementVisualization(e,t=!0){let i=`%c${Array(e+1).fill("█").join("")}`,n=this.getColor(e);return{visual:i,style:`color: ${n}`}}visualizeHead(e,t,i){let n=this.getHeadVisualization(i);this.console.groupCollapsed(`${this.options.loggingPrefix}${e} %chead%c order
3
+ ${n.visual}`,"font-family: monospace","font-family: inherit",...n.styles),i.forEach(({weight:e,element:t,isValid:i,customValidations:n})=>{let r=this.getElementVisualization(e,i);this.logElement({viz:r,weight:e,element:t,isValid:i,customValidations:n,omitPrefix:!0})}),this.console.log(`${e} %chead%c element`,"font-family: monospace","font-family: inherit",t),this.console.groupEnd()}}class h{constructor({preferredAssessmentMode:e=h.AssessmentMode.STATIC,validation:t=!0,palette:i=u,loggingPrefix:n="Capo: "}={}){this.preferredAssessmentMode=h.AssessmentMode.STATIC,this.validation=!0,this.palette=u,this.loggingPrefix="Capo: ",this.setPreferredAssessmentMode(e),this.setValidation(t),this.setPalette(i),this.setLoggingPrefix(n)}static get AssessmentMode(){return{STATIC:"static",DYNAMIC:"dynamic"}}static get Palettes(){return c}prefersStaticAssessment(){return this.preferredAssessmentMode===h.AssessmentMode.STATIC}prefersDynamicAssessment(){return this.preferredAssessmentMode===h.AssessmentMode.DYNAMIC}isValidationEnabled(){return this.validation}setPreferredAssessmentMode(e){if(!this.isValidAssessmentMode(e))throw Error(`Invalid option: preferred assessment mode, expected AssessmentMode.STATIC or AssessmentMode.DYNAMIC, got "${e}".`);this.preferredAssessmentMode=e}setPreferredAssessmentModeToStatic(e){let t=h.AssessmentMode.STATIC;e||(t=h.AssessmentMode.DYNAMIC),this.setPreferredAssessmentMode(t)}setValidation(e){if(!this.isValidValidation(e))throw Error(`Invalid option: validation, expected boolean, got "${e}".`);this.validation=e}setPalette(e){if(!this.isValidPalette(e))throw Error(`Invalid option: palette, expected [${Object.keys(c).join("|")}] or an array of colors, got "${e}".`);if("string"==typeof e){this.palette=c[e];return}this.palette=e}setLoggingPrefix(e){if(!this.isValidLoggingPrefix(e))throw Error(`Invalid option: logging prefix, expected string, got "${e}".`);this.loggingPrefix=e}isValidAssessmentMode(e){return Object.values(h.AssessmentMode).includes(e)}isValidValidation(e){return"boolean"==typeof e}isValidPalette(e){return"string"==typeof e?Object.keys(c).includes(e):!!Array.isArray(e)&&11===e.length&&e.every(e=>"string"==typeof e)}isValidLoggingPrefix(e){return"string"==typeof e}isPreferredPalette(e){return JSON.stringify(this.palette)==JSON.stringify(e)}valueOf(){return{preferredAssessmentMode:this.preferredAssessmentMode,validation:this.validation,palette:this.palette,loggingPrefix:this.loggingPrefix}}}async function g(t){await t.init();let n=function(t,n,s={}){let o,l,u,c,d,h,g,{includeValidation:m=!0,includeCustomValidations:p=!0}=s;return{weights:n.getChildren(t).filter(e=>{let t=n.getTagName(e);return t&&""!==t}).map(t=>({element:t,weight:function(t,n){for(let[r,a]of Object.entries(i))if(a(t,n))return e[r];return e.OTHER}(t,n)})),validationWarnings:m?(o=[],1!=(c=(u=(l=n.getChildren(t)).filter(e=>"title"===n.getTagName(e))).length)&&o.push({ruleId:0===c?"require-title":"no-duplicate-title",warning:`Expected exactly 1 <title> element, found ${c}`,elements:u}),1!=(d=l.filter(e=>{if("meta"!==n.getTagName(e))return!1;let t=n.getAttribute(e,"name");return t&&"viewport"===t.toLowerCase()})).length&&o.push({ruleId:0===d.length?"require-meta-viewport":"valid-meta-viewport",warning:`Expected exactly 1 <meta name=viewport> element, found ${d.length}`,elements:d}),(g=(h=l.filter(e=>"base"===n.getTagName(e))).length)>1&&o.push({ruleId:"no-duplicate-base",warning:`Expected at most 1 <base> element, found ${g}`,elements:h}),l.forEach(e=>{r(e,n)?n.getChildren(e).forEach(t=>{r(t,n)||o.push({ruleId:"no-invalid-head-elements",warning:`${n.getTagName(t).toUpperCase()} elements are not allowed in the <head>`,element:e})}):o.push({ruleId:"no-invalid-head-elements",warning:`${n.getTagName(e)} elements are not allowed in the <head>`,element:e})}),o):[],customValidations:p?function(e,t){let i=[];for(let n of t.getChildren(e)){let r=function(e,t,i=null){var n,r;let s=[];if(function(e,t){if("meta"!==t.getTagName(e))return!1;let i=t.getAttribute(e,"http-equiv");return i?.toLowerCase()==="origin-trial"}(e,t)&&s.push(function(e,t){var i,n;let r={ruleId:"no-invalid-origin-trial",payload:null,warnings:[]},a=t.getAttribute(e,"content");try{r.payload=function(e){if(!e)throw Error("Missing token");let t=new Uint8Array([...atob(e)].map(e=>e.charCodeAt(0))),i=new DataView(t.buffer).getUint32(65,!1),n=JSON.parse(new TextDecoder().decode(t.slice(69,69+i)));return n.expiry=new Date(1e3*n.expiry),n}(a)}catch{return r.warnings?.push("Invalid origin trial token: invalid token"),r}if(r.payload.expiry<new Date&&r.warnings?.push("Invalid origin trial token: expired"),"u">typeof document&&document.location&&document.location.href&&(i=r.payload.origin,n=document.location.href,new URL(i).origin!==new URL(n).origin)){let e=function(e,t){let i=new URL(e);return new URL(t).host.endsWith(`.${i.host}`)}(r.payload.origin,document.location.href);e&&!r.payload.isSubdomain?r.warnings?.push("Invalid origin trial token: invalid subdomain"):e||r.payload.isThirdParty||r.warnings?.push("Invalid origin trial token: invalid third-party origin")}return r}(e,t)),function(e,t){if("meta"!==t.getTagName(e))return!1;let i=t.getAttribute(e,"http-equiv");if(!i)return!1;let n=i.toLowerCase();return"content-security-policy"===n||"content-security-policy-report-only"===n}(e,t)&&s.push(function(e,t){let i=[],n=null,r=t.getAttribute(e,"http-equiv"),a=r?.toLowerCase();if("content-security-policy-report-only"===a)return i.push("CSP Report-Only is forbidden in meta tags"),{ruleId:"no-meta-csp",warnings:i,payload:n};"content-security-policy"===a&&i.push("meta CSP discouraged. See https://crbug.com/1458493.");let s=t.getAttribute(e,"content");if(!s)return i.push("Invalid CSP. The content attribute must be set."),{warnings:i,payload:n};let o=Object.fromEntries(s.split(/\s*;\s*/).map(e=>{let[t,...i]=e.split(" ");return[t,i.join(" ")]}));return(n=n??{}).directives=o,"report-uri"in o&&i.push("The report-uri directive is not supported. Use the Content-Security-Policy-Report-Only HTTP header instead."),"frame-ancestors"in o&&i.push("The frame-ancestors directive is not supported. Use the Content-Security-Policy HTTP header instead."),"sandbox"in o&&i.push("The sandbox directive is not supported. Use the Content-Security-Policy HTTP header instead."),{ruleId:"no-meta-csp",warnings:i,payload:n}}(e,t)),function(e,t){if("meta"!==t.getTagName(e))return!1;let i=t.getAttribute(e,"http-equiv");return i?.toLowerCase()==="default-style"}(e,t)&&s.push(function(e,t){let i=[],n=null,r=t.getAttribute(e,"content");if(e.parentElement&&e.parentElement.querySelector){let t=e.parentElement.querySelector(`link[rel~="alternate" i][rel~="stylesheet" i][title="${r}"]`);r?t||(n={alternateStylesheets:Array.from(e.parentElement.querySelectorAll('link[rel~="alternate" i][rel~="stylesheet" i]'))},i.push(`This has no effect. No alternate stylesheet found having title="${r}".`)):i.push("This has no effect. The content attribute must be set to a valid stylesheet title.")}else r||i.push("This has no effect. The content attribute must be set to a valid stylesheet title.");return i.push("Even when used correctly, the default-style method of setting a preferred stylesheet results in a flash of unstyled content. Use modern CSS features like @media rules instead."),{ruleId:"no-default-style",warnings:i,payload:n}}(e,t)),function(e,t){if("meta"!==t.getTagName(e))return!1;let i=t.getAttribute(e,"name");return i?.toLowerCase()==="viewport"}(e,t)&&s.push(function(e,t){let i=[],n=null;if(t.getSiblings(e).some(e=>{if("meta"!==t.getTagName(e))return!1;let i=t.getAttribute(e,"name");return i?.toLowerCase()==="viewport"})){let r=t.getParent(e);if(r){let a=t.getChildren(r).filter(e=>{if("meta"!==t.getTagName(e))return!1;let i=t.getAttribute(e,"name");return i?.toLowerCase()==="viewport"}).find(t=>t!==e);if(a)return n={firstMetaViewport:a},i.push("Another meta viewport element has already been declared. Having multiple viewport settings can lead to unexpected behavior."),{warnings:i,payload:n}}}let r=t.getAttribute(e,"content")?.toLowerCase();if(!r)return i.push("Invalid viewport. The content attribute must be set."),{warnings:i,payload:n};let a=Object.fromEntries(r.split(",").map(e=>{let[t,i]=e.split("=");return[t?.trim(),i?.trim()]}));if("width"in a){let e=a.width;1>Number(e)||Number(e)>1e4?i.push(`Invalid width "${e}". Numeric values must be between 1 and 10000.`):"device-width"!=e&&i.push(`Invalid width "${e}".`)}if("height"in a){let e=a.height;1>Number(e)||Number(e)>1e4?i.push(`Invalid height "${e}". Numeric values must be between 1 and 10000.`):"device-height"!=e&&i.push(`Invalid height "${e}".`)}if("initial-scale"in a){let e=Number(a["initial-scale"]);isNaN(e)&&i.push(`Invalid initial zoom level "${a["initial-scale"]}". Values must be numeric.`),(e<.1||e>10)&&i.push(`Invalid initial zoom level "${e}". Values must be between 0.1 and 10.`)}if("minimum-scale"in a){let e=Number(a["minimum-scale"]);isNaN(e)&&i.push(`Invalid minimum zoom level "${a["minimum-scale"]}". Values must be numeric.`),(e<.1||e>10)&&i.push(`Invalid minimum zoom level "${e}". Values must be between 0.1 and 10.`)}if("maximum-scale"in a){let e=Number(a["maximum-scale"]);isNaN(e)&&i.push(`Invalid maximum zoom level "${a["maximum-scale"]}". Values must be numeric.`),(e<.1||e>10)&&i.push(`Invalid maximum zoom level "${e}". Values must be between 0.1 and 10.`),e<2&&i.push(`Disabling zoom levels under 2x can cause accessibility issues. Found "maximum-scale=${a["maximum-scale"]}".`)}if("user-scalable"in a){let e=a["user-scalable"];("no"==e||"0"==e)&&i.push(`Disabling zooming can cause accessibility issues to users with visual impairments. Found "user-scalable=${e}".`),["0","1","yes","no"].includes(e)||i.push(`Unsupported value "${e}" found.`)}if("interactive-widget"in a){let e=a["interactive-widget"];["resizes-visual","resizes-content","overlays-content"].includes(e)||i.push(`Unsupported value "${e}" found.`)}if("viewport-fit"in a){let e=a["viewport-fit"],t=["auto","contain","cover"];t.includes(e)||i.push(`Unsupported value "${e}" found. Should be one of: ${t.join(", ")}.`)}"shrink-to-fit"in a&&i.push("The shrink-to-fit directive has been obsolete since iOS 9.2.\n See https://www.scottohara.me/blog/2018/12/11/shrink-to-fit.html");let s=new Set(["width","height","initial-scale","minimum-scale","maximum-scale","user-scalable","interactive-widget"]);return Object.keys(a).filter(e=>!s.has(e)&&"shrink-to-fit"!=e&&"viewport-fit"!=e).forEach(e=>{i.push(`Invalid viewport directive "${e}".`)}),{ruleId:"valid-meta-viewport",warnings:i,payload:n}}(e,t)),function(e,t){if("meta"!==t.getTagName(e))return!1;if(t.hasAttribute(e,"charset"))return!0;let i=t.getAttribute(e,"http-equiv");return i?.toLowerCase()==="content-type"}(e,t)&&s.push(function(e,t){let i=[],n=null,r=t.hasAttribute(e,"charset"),a=t.getAttribute(e,"http-equiv"),s=a?.toLowerCase()==="content-type";if((r||s)&&t.getSiblings(e).some(e=>{if("meta"!==t.getTagName(e))return!1;if(t.hasAttribute(e,"charset"))return!0;let i=t.getAttribute(e,"http-equiv");return i?.toLowerCase()==="content-type"})){let r=t.getParent(e);if(r){let a=t.getChildren(r).filter(e=>{if("meta"!==t.getTagName(e))return!1;if(t.hasAttribute(e,"charset"))return!0;let i=t.getAttribute(e,"http-equiv");return i?.toLowerCase()==="content-type"}).find(t=>t!==e);a&&((n=n??{}).encodingDeclaration=a,i.push(`There can only be one meta-based character encoding declaration per document. Already found \`${t.stringify(a)}\`.`))}}if(e.ownerDocument?.documentElement?.outerHTML&&e.outerHTML){let t=e.ownerDocument.documentElement.outerHTML.indexOf(e.outerHTML)+e.outerHTML.length;t>1024&&((n=n??{}).characterPosition=t,i.push(`The element containing the character encoding declaration must be serialized completely within the first 1024 bytes of the document. Found at byte ${t}.`))}let o=null;return o=r?t.getAttribute(e,"charset"):t.getAttribute(e,"content")?.match(/text\/html;\s*charset=(.*)/i)?.[1]?.trim(),o?.toLowerCase()!="utf-8"&&((n=n??{}).charset=o,i.push(`Documents are required to use UTF-8 encoding. Found "${o}".`)),i.length&&(i[i.length-1]+="\nLearn more: https://html.spec.whatwg.org/multipage/semantics.html#character-encoding-declaration"),{ruleId:"valid-charset",warnings:i,payload:n}}(e,t)),n=e,"meta"===(r=t).getTagName(n)&&r.hasAttribute(n,"http-equiv")&&s.push(function(e,t){let i=[],n=t.getAttribute(e,"http-equiv")?.toLowerCase()||"",r=t.getAttribute(e,"content")?.toLowerCase();switch(n){case"content-security-policy":case"content-security-policy-report-only":case"origin-trial":case"content-type":case"default-style":break;case"refresh":if(!r){i.push("This doesn't do anything. The content attribute must be set. However, using refresh is discouraged.");break}r.includes("url=")?i.push("Meta auto-redirects are discouraged. Use HTTP 3XX responses instead."):i.push("Meta auto-refreshes are discouraged unless users have the ability to disable it.");break;case"x-dns-prefetch-control":"on"==r?i.push(`DNS prefetching is enabled by default. Setting it to "${r}" has no effect.`):"off"!=r?i.push(`This is a non-standard way of disabling DNS prefetching, which is a performance optimization. Found content="${r}". Use content="off" if you have a legitimate security concern, otherwise remove it.`):i.push("This is non-standard, however most browsers support disabling speculative DNS prefetching. It should still be noted that DNS prefetching is a generally accepted performance optimization and you should only disable it if you have specific security concerns.");break;case"cache-control":case"etag":case"pragma":case"expires":case"last-modified":i.push("This doesn't do anything. Use HTTP headers for any cache directives.");break;case"x-frame-options":i.push("This doesn't do anything. Use the CSP HTTP header with the frame-ancestors directive instead.");break;case"x-ua-compatible":case"content-style-type":case"content-script-type":case"imagetoolbar":case"cleartype":case"page-enter":case"page-exit":case"site-enter":case"site-exit":case"msthemecompatible":case"window-target":i.push("This doesn't do anything. It was an Internet Explorer feature and is now deprecated.");break;case"content-language":case"language":i.push("This is non-conforming. Use the html[lang] attribute instead.");break;case"set-cookie":i.push("This is non-conforming. Use the Set-Cookie HTTP header instead.");break;case"application-name":case"author":case"description":case"generator":case"keywords":case"referrer":case"theme-color":case"color-scheme":case"viewport":case"creator":case"googlebot":case"publisher":case"robots":i.push(`This doesn't do anything. Did you mean \`meta[name=${n}]\`?`);break;case"encoding":i.push("This doesn't do anything. Did you mean `meta[charset]`?");break;case"title":i.push("This doesn't do anything. Did you mean to use the `title` tag instead?");break;case"accept-ch":case"delegate-ch":i.push("This is non-standard and may not work across browsers. Use HTTP headers instead.");break;default:i.push("This is non-standard and may not work across browsers. http-equiv is not an alternative to HTTP headers.")}return{ruleId:"no-invalid-http-equiv",warnings:i}}(e,t)),function(e,t,i=null){if("link"!==t.getTagName(e))return!1;let n=t.getAttribute(e,"rel"),r=n?.toLowerCase();if("preload"!==r&&"modulepreload"!==r)return!1;let s=t.getAttribute(e,"href");if(!s)return!1;let o=i||t.getParent(e);return!!o&&null!=a(o,s,e,t)}(e,t,i)&&s.push(function(e,t,i=null){let n=t.getAttribute(e,"href");if(!n)return{ruleId:"no-unnecessary-preload",warnings:[]};let r=i||t.getParent(e);if(!r)return{ruleId:"no-unnecessary-preload",warnings:[]};let s=a(r,n,e,t);return s?{ruleId:"no-unnecessary-preload",warnings:[`This preload has little to no effect. ${n} is already discoverable by another ${t.getTagName(s)} element.`]}:{ruleId:"no-unnecessary-preload",warnings:[]}}(e,t,i)),function(e,t){if("link"!==t.getTagName(e))return!1;let i=t.getAttribute(e,"rel");if(i?.toLowerCase()!=="preload")return!1;let n=t.getAttribute(e,"as");return n?.toLowerCase()==="font"&&!t.hasAttribute(e,"crossorigin")}(e,t)&&s.push({ruleId:"valid-font-preload",warnings:["Font preloads must have the crossorigin attribute set, even for same-origin fonts."],payload:null}),0===s.length)return{};if(1===s.length)return s[0];let o={warnings:[],payload:{},ruleId:s[0].ruleId};return s.forEach(e=>{e.warnings&&o.warnings?.push(...e.warnings),e.payload&&Object.assign(o.payload,e.payload)}),o}(n,t,e);r&&r.warnings&&r.warnings.length>0&&i.push({ruleId:r.ruleId,element:n,warnings:r.warnings,payload:r.payload})}return i}(t,n):[],headElement:t}}(t.getHead(),new o);return{actual:t.logAnalysis(n).map(({element:e,weight:i,isValid:n,customValidations:r})=>({weight:i,color:t.getColor(i),selector:t.stringifyElement(e),html:e.innerHTML,isValid:!!n,customValidations:function e(t,i){if(null==t)return t;if("object"==typeof t&&(t.nodeType||"u">typeof Element&&t instanceof Element))return i?i.stringifyElement(t):t.outerHTML||t.tagName||String(t);if(t instanceof Date)return t.toString();if(Array.isArray(t))return t.map(t=>e(t,i));if("object"==typeof t){let n={};for(let[r,a]of Object.entries(t))"element"===r&&a&&"object"==typeof a&&(a.nodeType||"u">typeof Element&&a instanceof Element)||(n[r]=e(a,i));return n}return t}(r,t)}))}}async function m(){let{options:e}=await chrome.storage.sync.get("options");return new h(e)}!async function(){let e=new d(document,await m()),{click:t}=await chrome.storage.local.get("click");if(t)e.logElementFromSelector(JSON.parse(t)),await chrome.storage.local.remove("click");else{let t=await g(e);await chrome.storage.local.set({data:t})}}()})();
@@ -0,0 +1,120 @@
1
+ init();
2
+
3
+ /**
4
+ * @returns {Promise<chrome.scripting.InjectionTarget>}
5
+ */
6
+ async function getCurrentTab() {
7
+ let [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
8
+ if (!tab) {
9
+ [tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true });
10
+ }
11
+ return { tabId: tab?.id || 0 };
12
+ }
13
+
14
+ /**
15
+ * @returns {Promise<void>}
16
+ */
17
+ async function init() {
18
+ chrome.storage.onChanged.addListener((changes) => {
19
+ console.log("Storage changed", changes);
20
+ const { data } = changes;
21
+ if (data?.newValue) {
22
+ print(data.newValue);
23
+ }
24
+ });
25
+
26
+ await chrome.storage.local.remove("data");
27
+
28
+ await chrome.scripting.executeScript({
29
+ target: await getCurrentTab(),
30
+ files: ["capo.js"],
31
+ });
32
+
33
+ const { data } = await chrome.storage.local.get("data");
34
+ if (data) {
35
+ print(data);
36
+ }
37
+ }
38
+
39
+ /**
40
+ * @param {any} result
41
+ */
42
+ function print(result) {
43
+ console.log("Data", result);
44
+ const actualEl = document.getElementById("actual");
45
+ const sortedEl = document.getElementById("sorted");
46
+
47
+ if (actualEl) actualEl.textContent = "";
48
+ if (sortedEl) sortedEl.textContent = "";
49
+
50
+ let frag = document.createDocumentFragment();
51
+ for (let r of result.actual) {
52
+ frag.appendChild(getCapoHeadElement(r));
53
+ }
54
+ if (actualEl) actualEl.appendChild(frag);
55
+
56
+ result.sorted = result.actual.slice().sort((/** @type {any} */ a, /** @type {any} */ b) => {
57
+ return b.weight - a.weight;
58
+ });
59
+ frag = document.createDocumentFragment();
60
+ for (let r of result.sorted) {
61
+ frag.appendChild(getCapoHeadElement(r));
62
+ }
63
+ if (sortedEl) sortedEl.appendChild(frag);
64
+ document.body.addEventListener("click", handleCapoClick);
65
+ }
66
+
67
+ /**
68
+ * @param {Object} params
69
+ * @param {number} params.weight
70
+ * @param {string} params.color
71
+ * @param {string} params.selector
72
+ * @param {string} params.html
73
+ * @param {boolean} params.isValid
74
+ * @param {any} params.customValidations
75
+ * @returns {HTMLSpanElement}
76
+ */
77
+ function getCapoHeadElement({
78
+ weight,
79
+ color,
80
+ selector,
81
+ html,
82
+ isValid,
83
+ customValidations,
84
+ }) {
85
+ const span = document.createElement("span");
86
+ span.classList.add("capo-head-element");
87
+ span.classList.toggle("invalid", !isValid);
88
+ span.dataset.weight = String(weight);
89
+ span.style.backgroundColor = color;
90
+ span.dataset.selector = selector;
91
+ span.dataset.html = html;
92
+ span.dataset.customValidations = JSON.stringify(customValidations);
93
+ span.title = `[${weight + 1}] ${selector}`;
94
+ return span;
95
+ }
96
+
97
+ /**
98
+ * @param {MouseEvent} event
99
+ */
100
+ async function handleCapoClick(event) {
101
+ const target = /** @type {HTMLElement} */ (event.target);
102
+ if (!target || !target.dataset) return;
103
+ const { weight, selector, html } = target.dataset;
104
+ const customValidations = JSON.parse(target.dataset.customValidations || '{}');
105
+ const isValid = !target.classList.contains("invalid");
106
+
107
+ await chrome.storage.local.set({
108
+ click: JSON.stringify({
109
+ weight,
110
+ selector,
111
+ html,
112
+ isValid,
113
+ customValidations,
114
+ }),
115
+ });
116
+ await chrome.scripting.executeScript({
117
+ target: await getCurrentTab(),
118
+ files: ["capo.js"],
119
+ });
120
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "manifest_version": 3,
3
+ "name": "Capo: get your ﹤𝚑𝚎𝚊𝚍﹥ in order",
4
+ "description": "Visualize the optimal ordering of ﹤𝚑𝚎𝚊𝚍﹥ elements on any web page",
5
+ "version": "2.2.0",
6
+ "permissions": [
7
+ "scripting",
8
+ "activeTab",
9
+ "storage"
10
+ ],
11
+ "action": {
12
+ "default_icon": "images/icon128.png",
13
+ "default_popup": "capo.html"
14
+ },
15
+ "options_page": "options/options.html",
16
+ "background": {
17
+ "scripts": [
18
+ "background.js"
19
+ ]
20
+ },
21
+ "content_security_policy": {
22
+ "extension_pages": "default-src 'self'; style-src 'self';"
23
+ },
24
+ "icons": {
25
+ "128": "images/icon128.png",
26
+ "256": "images/icon256.png"
27
+ },
28
+ "browser_specific_settings": {
29
+ "gecko": {
30
+ "id": "capo@rviscomi.github.io",
31
+ "strict_min_version": "142.0",
32
+ "data_collection_permissions": {
33
+ "required": [
34
+ "none"
35
+ ]
36
+ }
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,81 @@
1
+ :root {
2
+ --brand: #d53e4f;
3
+ }
4
+
5
+ @media (prefers-color-scheme: dark) {
6
+ :root {
7
+ --brand: #66c2a5;
8
+ --brand-5: #2a6a56;
9
+ --brand-7: #193f33;
10
+ --brand-shadow: 0 0 10px var(--brand-5), 0 0 25px var(--brand-7);
11
+ }
12
+ html {
13
+ background: var(--gray-9);
14
+ color: var(--gray-1);
15
+ }
16
+ h1 {
17
+ text-shadow: var(--brand-shadow);
18
+ }
19
+ a {
20
+ text-shadow: var(--brand-shadow);
21
+ }
22
+ }
23
+
24
+ :where(html) {
25
+ background: white;
26
+ color: var(--gray-8);
27
+ accent-color: var(--brand, var(--link));
28
+ font-family: var(--font-sans);
29
+ }
30
+
31
+ body {
32
+ display: flex;
33
+ align-items: center;
34
+ margin: 0;
35
+ padding: 0;
36
+ min-height: 100vh;
37
+ font-size: var(--font-size-2);
38
+ }
39
+
40
+ #options {
41
+ display: grid;
42
+ grid-gap: 2em 1em;
43
+ margin: 0 auto;
44
+ }
45
+
46
+ .option {
47
+ grid-column: 1 / 2;
48
+ align-self: center;
49
+ justify-self: end;
50
+ min-height: 2em;
51
+ min-width: 2em;
52
+ text-align: end;
53
+ }
54
+
55
+ label {
56
+ grid-column: 2 / 3;
57
+ align-self: center;
58
+ }
59
+
60
+ header {
61
+ grid-column: 1 / 3;
62
+ display: flex;
63
+ }
64
+
65
+ h1 {
66
+ margin: 0 0 1rem;
67
+ font-size: var(--font-size-8);
68
+ font-weight: var(--font-weight-8);
69
+ letter-spacing: var(--font-letterspacing-1);
70
+ }
71
+
72
+ footer {
73
+ grid-column: 1 / 3;
74
+ display: flex;
75
+ justify-content: space-between;
76
+ font-size: var(--font-size-0);
77
+ }
78
+
79
+ a {
80
+ color: var(--link, var(--brand));
81
+ }
@@ -0,0 +1,43 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Capo Options</title>
5
+ <link rel="stylesheet" href="../styles/open-props.css" />
6
+ <link rel="stylesheet" href="options.css" />
7
+ </head>
8
+ <body class="surface-1">
9
+ <form id="options">
10
+ <header>
11
+ <h1>Capo options</h1>
12
+ </header>
13
+ <input id="prefer-static" name="prefer-static" type="checkbox" class="option" />
14
+ <label for="prefer-static">
15
+ Prefer to evaluate the static, server-rendered
16
+ <code>&lt;head></code> (<a href="https://rviscomi.github.io/capo.js/user/config/#static-and-dynamic-evaluation"
17
+ >learn more</a
18
+ >)
19
+ </label>
20
+
21
+ <input id="validation" name="validation" type="checkbox" class="option" />
22
+ <label for="validation">
23
+ Validate the elements in the <code>&lt;head></code> (<a
24
+ href="https://rviscomi.github.io/capo.js/user/config/#validation"
25
+ >learn more</a
26
+ >)
27
+ </label>
28
+
29
+ <select id="palette" name="palette" class="option"></select>
30
+ <label for="palette">
31
+ Color palette (<a href="https://rviscomi.github.io/capo.js/user/config/#built-in-color-palettes">learn more</a>)
32
+ </label>
33
+
34
+ <footer>
35
+ <p>Options saved automatically</p>
36
+ <p>
37
+ <a href="https://rviscomi.github.io/capo.js/user/extension/">rviscomi/capo.js</a>
38
+ </p>
39
+ </footer>
40
+ </form>
41
+ <script src="options.js" type="module"></script>
42
+ </body>
43
+ </html>
@@ -0,0 +1 @@
1
+ (()=>{let e;function t(e){return[`oklch(5% .1 ${e})`,`oklch(13% .2 ${e})`,`oklch(25% .2 ${e})`,`oklch(35% .25 ${e})`,`oklch(50% .27 ${e})`,`oklch(67% .31 ${e})`,`oklch(72% .25 ${e})`,`oklch(80% .2 ${e})`,`oklch(90% .1 ${e})`,`oklch(99% .05 ${e})`,"#ccc"]}let s=["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2","#cccccc"],i={DEFAULT:s,PINK:t(320),BLUE:t(200)};class o{constructor({preferredAssessmentMode:e=o.AssessmentMode.STATIC,validation:t=!0,palette:i=s,loggingPrefix:r="Capo: "}={}){this.preferredAssessmentMode=o.AssessmentMode.STATIC,this.validation=!0,this.palette=s,this.loggingPrefix="Capo: ",this.setPreferredAssessmentMode(e),this.setValidation(t),this.setPalette(i),this.setLoggingPrefix(r)}static get AssessmentMode(){return{STATIC:"static",DYNAMIC:"dynamic"}}static get Palettes(){return i}prefersStaticAssessment(){return this.preferredAssessmentMode===o.AssessmentMode.STATIC}prefersDynamicAssessment(){return this.preferredAssessmentMode===o.AssessmentMode.DYNAMIC}isValidationEnabled(){return this.validation}setPreferredAssessmentMode(e){if(!this.isValidAssessmentMode(e))throw Error(`Invalid option: preferred assessment mode, expected AssessmentMode.STATIC or AssessmentMode.DYNAMIC, got "${e}".`);this.preferredAssessmentMode=e}setPreferredAssessmentModeToStatic(e){let t=o.AssessmentMode.STATIC;e||(t=o.AssessmentMode.DYNAMIC),this.setPreferredAssessmentMode(t)}setValidation(e){if(!this.isValidValidation(e))throw Error(`Invalid option: validation, expected boolean, got "${e}".`);this.validation=e}setPalette(e){if(!this.isValidPalette(e))throw Error(`Invalid option: palette, expected [${Object.keys(i).join("|")}] or an array of colors, got "${e}".`);if("string"==typeof e){this.palette=i[e];return}this.palette=e}setLoggingPrefix(e){if(!this.isValidLoggingPrefix(e))throw Error(`Invalid option: logging prefix, expected string, got "${e}".`);this.loggingPrefix=e}isValidAssessmentMode(e){return Object.values(o.AssessmentMode).includes(e)}isValidValidation(e){return"boolean"==typeof e}isValidPalette(e){return"string"==typeof e?Object.keys(i).includes(e):!!Array.isArray(e)&&11===e.length&&e.every(e=>"string"==typeof e)}isValidLoggingPrefix(e){return"string"==typeof e}isPreferredPalette(e){return JSON.stringify(this.palette)==JSON.stringify(e)}valueOf(){return{preferredAssessmentMode:this.preferredAssessmentMode,validation:this.validation,palette:this.palette,loggingPrefix:this.loggingPrefix}}}async function r(){e=new o((await chrome.storage.sync.get("options")).options)}async function n(t){let s,i=t.target;if(!i||!i.dataset)return;let o=i.dataset.option;switch(o){case"PREFERRED_ASSESSMENT_MODE":s=i.checked,e.setPreferredAssessmentModeToStatic(s);break;case"VALIDATION":s=i.checked,e.setValidation(s);break;case"PALETTE":s=i.value,e.setPalette(s);break;default:console.warn(`Unknown option: ${o}`);return}await chrome.storage.sync.set({options:e.valueOf()}),await chrome.storage.sync.get("options")}!async function(){let t,s,i,a;await r();t=document.getElementById("prefer-static"),s=document.getElementById("validation"),i=document.getElementById("palette"),t&&(t.checked=e.prefersStaticAssessment(),t.dataset.option="PREFERRED_ASSESSMENT_MODE"),s&&(s.checked=e.isValidationEnabled(),s.dataset.option="VALIDATION"),i&&(Object.entries(o.Palettes).forEach(([t,s])=>{let o=document.createElement("option");o.textContent=t,o.value=t,o.selected=e.isPreferredPalette(s),o.dataset.colors=JSON.stringify(s),i.appendChild(o)}),i.dataset.option="PALETTE"),(a=document.getElementById("options"))&&a.addEventListener("change",n)}()})();