@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.
- package/node_modules/{synckit → @astrojs/compiler-binding}/LICENSE +1 -1
- package/node_modules/@astrojs/compiler-binding/browser.js +1 -0
- package/node_modules/@astrojs/compiler-binding/index.d.ts +337 -0
- package/node_modules/@astrojs/compiler-binding/index.js +599 -0
- package/node_modules/@astrojs/compiler-binding/package.json +83 -0
- package/node_modules/@astrojs/compiler-binding/webcontainer-fallback.cjs +23 -0
- package/node_modules/@astrojs/compiler-binding-linux-x64-gnu/README.md +3 -0
- package/node_modules/@astrojs/compiler-binding-linux-x64-gnu/astro.linux-x64-gnu.node +0 -0
- package/node_modules/@astrojs/compiler-binding-linux-x64-gnu/package.json +40 -0
- package/node_modules/{parse5 → @astrojs/compiler-rs}/LICENSE +7 -5
- package/node_modules/@astrojs/compiler-rs/README.md +62 -0
- package/node_modules/@astrojs/compiler-rs/async.d.ts +1 -0
- package/node_modules/@astrojs/compiler-rs/dist/async.d.mts +9 -0
- package/node_modules/@astrojs/compiler-rs/dist/async.mjs +1 -0
- package/node_modules/@astrojs/compiler-rs/dist/index.d.mts +9 -0
- package/node_modules/@astrojs/compiler-rs/dist/index.mjs +1 -0
- package/node_modules/@astrojs/compiler-rs/dist/shared.d.mts +45 -0
- package/node_modules/@astrojs/compiler-rs/dist/shared.mjs +1 -0
- package/node_modules/@astrojs/compiler-rs/dist/types.d.mts +94 -0
- package/node_modules/@astrojs/compiler-rs/dist/types.mjs +1 -0
- package/node_modules/@astrojs/compiler-rs/dist/utils.d.mts +4 -0
- package/node_modules/@astrojs/compiler-rs/dist/utils.mjs +1 -0
- package/node_modules/@astrojs/compiler-rs/package.json +55 -0
- package/node_modules/@astrojs/compiler-rs/types.d.ts +1 -0
- package/node_modules/@eslint/config-helpers/README.md +2 -2
- package/node_modules/@eslint/config-helpers/dist/cjs/index.cjs +27 -26
- package/node_modules/@eslint/config-helpers/dist/cjs/index.d.cts +13 -12
- package/node_modules/@eslint/config-helpers/dist/cjs/types.cts +4 -2
- package/node_modules/@eslint/config-helpers/dist/esm/index.d.ts +13 -12
- package/node_modules/@eslint/config-helpers/dist/esm/index.js +27 -26
- package/node_modules/@eslint/config-helpers/dist/esm/types.d.ts +2 -0
- package/node_modules/@eslint/config-helpers/dist/esm/types.ts +4 -2
- package/node_modules/@eslint/config-helpers/package.json +1 -1
- package/node_modules/@eslint/css/README.md +2 -2
- package/node_modules/@eslint/css/dist/build/rules.d.ts +75 -21
- package/node_modules/@eslint/css/dist/build/rules.js +15 -15
- package/node_modules/@eslint/css/dist/data/baseline-data.js +256 -32
- package/node_modules/@eslint/css/dist/index.js +1 -1
- package/node_modules/@eslint/css/dist/rules/font-family-fallbacks.d.ts +15 -15
- package/node_modules/@eslint/css/dist/rules/font-family-fallbacks.js +2 -5
- package/node_modules/@eslint/css/dist/rules/no-duplicate-imports.d.ts +18 -18
- package/node_modules/@eslint/css/dist/rules/no-duplicate-imports.js +9 -12
- package/node_modules/@eslint/css/dist/rules/no-duplicate-keyframe-selectors.d.ts +14 -14
- package/node_modules/@eslint/css/dist/rules/no-duplicate-keyframe-selectors.js +2 -3
- package/node_modules/@eslint/css/dist/rules/no-empty-blocks.d.ts +14 -14
- package/node_modules/@eslint/css/dist/rules/no-empty-blocks.js +2 -3
- package/node_modules/@eslint/css/dist/rules/no-important.d.ts +16 -16
- package/node_modules/@eslint/css/dist/rules/no-important.js +2 -3
- package/node_modules/@eslint/css/dist/rules/no-invalid-at-rule-placement.d.ts +16 -16
- package/node_modules/@eslint/css/dist/rules/no-invalid-at-rule-placement.js +2 -3
- package/node_modules/@eslint/css/dist/rules/no-invalid-at-rules.d.ts +21 -21
- package/node_modules/@eslint/css/dist/rules/no-invalid-at-rules.js +2 -3
- package/node_modules/@eslint/css/dist/rules/no-invalid-named-grid-areas.d.ts +16 -16
- package/node_modules/@eslint/css/dist/rules/no-invalid-named-grid-areas.js +2 -3
- package/node_modules/@eslint/css/dist/rules/no-invalid-properties.d.ts +18 -18
- package/node_modules/@eslint/css/dist/rules/no-invalid-properties.js +2 -3
- package/node_modules/@eslint/css/dist/rules/no-unmatchable-selectors.d.ts +14 -14
- package/node_modules/@eslint/css/dist/rules/no-unmatchable-selectors.js +2 -3
- package/node_modules/@eslint/css/dist/rules/prefer-logical-properties.d.ts +22 -19
- package/node_modules/@eslint/css/dist/rules/prefer-logical-properties.js +66 -23
- package/node_modules/@eslint/css/dist/rules/relative-font-units.d.ts +16 -16
- package/node_modules/@eslint/css/dist/rules/relative-font-units.js +13 -7
- package/node_modules/@eslint/css/dist/rules/selector-complexity.d.ts +17 -17
- package/node_modules/@eslint/css/dist/rules/selector-complexity.js +2 -3
- package/node_modules/@eslint/css/dist/rules/use-baseline.d.ts +22 -22
- package/node_modules/@eslint/css/dist/rules/use-baseline.js +2 -3
- package/node_modules/@eslint/css/dist/rules/use-layers.d.ts +18 -18
- package/node_modules/@eslint/css/dist/rules/use-layers.js +3 -4
- package/node_modules/@eslint/css/package.json +7 -12
- package/node_modules/@eslint/css-tree/README.md +2 -2
- package/node_modules/@eslint/css-tree/dist/csstree.esm.js +1 -1
- package/node_modules/@eslint/css-tree/dist/csstree.js +1 -1
- package/node_modules/@eslint/css-tree/dist/data.cjs +4 -1
- package/node_modules/@eslint/css-tree/dist/data.js +4 -1
- package/node_modules/@eslint/css-tree/dist/version.cjs +1 -1
- package/node_modules/@eslint/css-tree/dist/version.js +1 -1
- package/node_modules/@eslint/css-tree/package.json +3 -3
- package/node_modules/@eslint/json/README.md +2 -2
- package/node_modules/@eslint/json/dist/index.js +1 -1
- package/node_modules/@eslint/json/package.json +4 -9
- package/node_modules/@eslint/markdown/README.md +3 -3
- package/node_modules/@eslint/markdown/dist/build/rules.d.ts +105 -27
- package/node_modules/@eslint/markdown/dist/build/rules.js +21 -21
- package/node_modules/@eslint/markdown/dist/index.d.ts +2 -2
- package/node_modules/@eslint/markdown/dist/index.js +4 -4
- package/node_modules/@eslint/markdown/dist/processor.d.ts +4 -9
- package/node_modules/@eslint/markdown/dist/processor.js +12 -15
- package/node_modules/@eslint/markdown/dist/rules/fenced-code-language.d.ts +17 -17
- package/node_modules/@eslint/markdown/dist/rules/fenced-code-language.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/fenced-code-meta.d.ts +17 -17
- package/node_modules/@eslint/markdown/dist/rules/fenced-code-meta.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/heading-increment.d.ts +16 -16
- package/node_modules/@eslint/markdown/dist/rules/heading-increment.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/no-bare-urls.d.ts +14 -14
- package/node_modules/@eslint/markdown/dist/rules/no-bare-urls.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/no-duplicate-definitions.d.ts +17 -17
- package/node_modules/@eslint/markdown/dist/rules/no-duplicate-definitions.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/no-duplicate-headings.d.ts +15 -15
- package/node_modules/@eslint/markdown/dist/rules/no-duplicate-headings.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/no-empty-definitions.d.ts +17 -17
- package/node_modules/@eslint/markdown/dist/rules/no-empty-definitions.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/no-empty-images.d.ts +14 -14
- package/node_modules/@eslint/markdown/dist/rules/no-empty-images.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/no-empty-links.d.ts +14 -14
- package/node_modules/@eslint/markdown/dist/rules/no-empty-links.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/no-html.d.ts +15 -15
- package/node_modules/@eslint/markdown/dist/rules/no-html.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/no-invalid-label-refs.d.ts +14 -14
- package/node_modules/@eslint/markdown/dist/rules/no-invalid-label-refs.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/no-missing-atx-heading-space.d.ts +17 -17
- package/node_modules/@eslint/markdown/dist/rules/no-missing-atx-heading-space.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/no-missing-label-refs.d.ts +16 -16
- package/node_modules/@eslint/markdown/dist/rules/no-missing-label-refs.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/no-missing-link-fragments.d.ts +16 -16
- package/node_modules/@eslint/markdown/dist/rules/no-missing-link-fragments.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/no-multiple-h1.d.ts +16 -16
- package/node_modules/@eslint/markdown/dist/rules/no-multiple-h1.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/no-reference-like-urls.d.ts +15 -15
- package/node_modules/@eslint/markdown/dist/rules/no-reference-like-urls.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/no-reversed-media-syntax.d.ts +15 -15
- package/node_modules/@eslint/markdown/dist/rules/no-reversed-media-syntax.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/no-space-in-emphasis.d.ts +17 -17
- package/node_modules/@eslint/markdown/dist/rules/no-space-in-emphasis.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/no-unused-definitions.d.ts +17 -17
- package/node_modules/@eslint/markdown/dist/rules/no-unused-definitions.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/require-alt-text.d.ts +14 -14
- package/node_modules/@eslint/markdown/dist/rules/require-alt-text.js +2 -3
- package/node_modules/@eslint/markdown/dist/rules/table-column-count.d.ts +17 -17
- package/node_modules/@eslint/markdown/dist/rules/table-column-count.js +2 -3
- package/node_modules/@eslint/markdown/package.json +5 -10
- package/node_modules/@eslint-community/eslint-utils/index.js +1 -1
- package/node_modules/@eslint-community/eslint-utils/index.js.map +1 -1
- package/node_modules/@eslint-community/eslint-utils/index.mjs +1 -1
- package/node_modules/@eslint-community/eslint-utils/index.mjs.map +1 -1
- package/node_modules/@eslint-community/eslint-utils/package.json +12 -7
- package/node_modules/@html-eslint/core/dist/index.js +1 -0
- package/node_modules/@html-eslint/core/dist/index.js.map +1 -1
- package/node_modules/@html-eslint/core/dist/index.mjs +1 -0
- package/node_modules/@html-eslint/core/dist/index.mjs.map +1 -1
- package/node_modules/@html-eslint/core/package.json +3 -3
- package/node_modules/@html-eslint/eslint-plugin/lib/rules/require-content.js +20 -1
- package/node_modules/@html-eslint/eslint-plugin/lib/rules/require-input-label.js +110 -8
- package/node_modules/@html-eslint/eslint-plugin/lib/rules/utils/node.js +13 -0
- package/node_modules/@html-eslint/eslint-plugin/package.json +7 -7
- package/node_modules/@html-eslint/eslint-plugin/types/rules/require-content.d.ts.map +1 -1
- package/node_modules/@html-eslint/eslint-plugin/types/rules/require-input-label.d.ts.map +1 -1
- package/node_modules/@html-eslint/eslint-plugin/types/rules/utils/node.d.ts +7 -0
- package/node_modules/@html-eslint/eslint-plugin/types/rules/utils/node.d.ts.map +1 -1
- package/node_modules/@html-eslint/parser/lib/parser.js +0 -1
- package/node_modules/@html-eslint/parser/package.json +4 -4
- package/node_modules/@html-eslint/parser/types/parser.d.ts.map +1 -1
- package/node_modules/@html-eslint/template-parser/package.json +3 -3
- package/node_modules/@html-eslint/template-syntax-parser/package.json +3 -3
- package/node_modules/@html-eslint/types/package.json +2 -2
- package/node_modules/@rviscomi/capo.js/README.md +4 -4
- package/node_modules/@rviscomi/capo.js/dist/adapters/adapter.cjs +7 -2
- package/node_modules/@rviscomi/capo.js/dist/adapters/browser.cjs +31 -3
- package/node_modules/@rviscomi/capo.js/dist/adapters/index.cjs +36 -4
- package/node_modules/@rviscomi/capo.js/dist/adapters/test-suite.cjs +6 -1
- package/node_modules/@rviscomi/capo.js/dist/analyzer.cjs +53 -24
- package/node_modules/@rviscomi/capo.js/dist/chrome/README.md +53 -0
- package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/capo.html +1 -1
- package/node_modules/@rviscomi/capo.js/dist/chrome/capo.js +3 -0
- package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/chrome.js +56 -18
- package/node_modules/@rviscomi/capo.js/dist/chrome/manifest.json +26 -0
- package/node_modules/@rviscomi/capo.js/dist/chrome/options/options.js +1 -0
- package/node_modules/@rviscomi/capo.js/dist/chrome.zip +0 -0
- package/node_modules/@rviscomi/capo.js/dist/firefox/README.md +53 -0
- package/node_modules/@rviscomi/capo.js/dist/firefox/background.js +7 -0
- package/node_modules/@rviscomi/capo.js/dist/firefox/capo.css +59 -0
- package/node_modules/@rviscomi/capo.js/dist/firefox/capo.html +12 -0
- package/node_modules/@rviscomi/capo.js/dist/firefox/capo.js +3 -0
- package/node_modules/@rviscomi/capo.js/dist/firefox/chrome.js +120 -0
- package/node_modules/@rviscomi/capo.js/dist/firefox/images/icon128.png +0 -0
- package/node_modules/@rviscomi/capo.js/dist/firefox/manifest.json +39 -0
- package/node_modules/@rviscomi/capo.js/dist/firefox/options/options.css +81 -0
- package/node_modules/@rviscomi/capo.js/dist/firefox/options/options.html +43 -0
- package/node_modules/@rviscomi/capo.js/dist/firefox/options/options.js +1 -0
- package/node_modules/@rviscomi/capo.js/dist/firefox/styles/open-props.css +291 -0
- package/node_modules/@rviscomi/capo.js/dist/firefox.zip +0 -0
- package/node_modules/@rviscomi/capo.js/dist/index.cjs +93 -33
- package/node_modules/@rviscomi/capo.js/dist/lib/colors.cjs +1 -0
- package/node_modules/@rviscomi/capo.js/dist/lib/io.cjs +137 -28
- package/node_modules/@rviscomi/capo.js/dist/lib/options.cjs +61 -0
- package/node_modules/@rviscomi/capo.js/dist/lib/rules.cjs +28 -13
- package/node_modules/@rviscomi/capo.js/dist/lib/validation.cjs +31 -16
- package/node_modules/@rviscomi/capo.js/dist/source.zip +0 -0
- package/node_modules/@rviscomi/capo.js/dist/types/adapters/adapter.d.ts +105 -0
- package/node_modules/@rviscomi/capo.js/dist/types/adapters/browser.d.ts +107 -0
- package/node_modules/@rviscomi/capo.js/dist/types/adapters/index.d.ts +7 -0
- package/node_modules/@rviscomi/capo.js/dist/types/adapters/test-suite.d.ts +52 -0
- package/node_modules/@rviscomi/capo.js/dist/types/analyzer.d.ts +195 -0
- package/node_modules/@rviscomi/capo.js/dist/types/index.d.ts +29 -0
- package/node_modules/@rviscomi/capo.js/dist/types/lib/colors.d.ts +20 -0
- package/node_modules/@rviscomi/capo.js/dist/types/lib/io.d.ts +166 -0
- package/node_modules/@rviscomi/capo.js/dist/types/lib/options.d.ts +114 -0
- package/node_modules/@rviscomi/capo.js/dist/types/lib/rules.d.ts +111 -0
- package/node_modules/@rviscomi/capo.js/dist/types/lib/validation.d.ts +61 -0
- package/node_modules/@rviscomi/capo.js/dist/types/src/adapters/adapter.d.ts +105 -0
- package/node_modules/@rviscomi/capo.js/dist/types/src/adapters/browser.d.ts +107 -0
- package/node_modules/@rviscomi/capo.js/dist/types/src/adapters/index.d.ts +7 -0
- package/node_modules/@rviscomi/capo.js/dist/types/src/adapters/test-suite.d.ts +52 -0
- package/node_modules/@rviscomi/capo.js/dist/types/src/analyzer.d.ts +195 -0
- package/node_modules/@rviscomi/capo.js/dist/types/src/index.d.ts +13 -0
- package/node_modules/@rviscomi/capo.js/dist/types/src/lib/colors.d.ts +20 -0
- package/node_modules/@rviscomi/capo.js/dist/types/src/lib/io.d.ts +166 -0
- package/node_modules/@rviscomi/capo.js/dist/types/src/lib/options.d.ts +114 -0
- package/node_modules/@rviscomi/capo.js/dist/types/src/lib/rules.d.ts +111 -0
- package/node_modules/@rviscomi/capo.js/dist/types/src/lib/validation.d.ts +61 -0
- package/node_modules/@rviscomi/capo.js/package.json +34 -16
- package/node_modules/@rviscomi/capo.js/src/adapters/adapter.js +16 -5
- package/node_modules/@rviscomi/capo.js/src/adapters/browser.js +30 -4
- package/node_modules/@rviscomi/capo.js/src/adapters/test-suite.js +11 -10
- package/node_modules/@rviscomi/capo.js/src/analyzer.js +47 -25
- package/node_modules/@rviscomi/capo.js/src/extension/README.md +53 -0
- package/node_modules/@rviscomi/capo.js/src/extension/background.js +7 -0
- package/node_modules/@rviscomi/capo.js/src/extension/capo.css +59 -0
- package/node_modules/@rviscomi/capo.js/src/extension/capo.html +12 -0
- package/node_modules/@rviscomi/capo.js/src/extension/capo.js +93 -0
- package/node_modules/@rviscomi/capo.js/src/extension/chrome.js +120 -0
- package/node_modules/@rviscomi/capo.js/src/extension/images/icon128.png +0 -0
- package/node_modules/@rviscomi/capo.js/src/extension/images/icon256.png +0 -0
- package/node_modules/@rviscomi/capo.js/{crx → src/extension}/manifest.json +1 -1
- package/node_modules/@rviscomi/capo.js/src/extension/options/options.css +81 -0
- package/node_modules/@rviscomi/capo.js/src/extension/options/options.html +43 -0
- package/node_modules/@rviscomi/capo.js/src/extension/options.js +87 -0
- package/node_modules/@rviscomi/capo.js/src/extension/styles/open-props.css +291 -0
- package/node_modules/@rviscomi/capo.js/src/index.js +10 -0
- package/node_modules/@rviscomi/capo.js/src/lib/colors.js +14 -0
- package/node_modules/@rviscomi/capo.js/src/lib/io.js +171 -32
- package/node_modules/@rviscomi/capo.js/src/lib/options.js +82 -1
- package/node_modules/@rviscomi/capo.js/src/lib/rules.js +120 -43
- package/node_modules/@rviscomi/capo.js/src/lib/validation.js +211 -86
- package/node_modules/@rviscomi/capo.js/src/web/capo.js +5 -8
- package/node_modules/@types/hast/README.md +2 -2
- package/node_modules/@types/hast/index.d.ts +642 -0
- package/node_modules/@types/hast/package.json +9 -3
- package/node_modules/@typescript-eslint/eslint-plugin/dist/configs/eslintrc/all.d.ts +0 -4
- package/node_modules/@typescript-eslint/eslint-plugin/dist/configs/eslintrc/all.js +0 -4
- package/node_modules/@typescript-eslint/eslint-plugin/dist/configs/flat/all.js +0 -4
- package/node_modules/@typescript-eslint/eslint-plugin/dist/index.d.ts +0 -4
- package/node_modules/@typescript-eslint/eslint-plugin/dist/index.js +47 -0
- package/node_modules/@typescript-eslint/eslint-plugin/dist/raw-plugin.d.ts +0 -4
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-ts-comment.js +4 -4
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/method-signature-style.d.ts +1 -1
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/method-signature-style.js +23 -10
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-base-to-string.js +1 -1
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loop-func.js +16 -2
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-promises.js +41 -3
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-restricted-imports.js +12 -0
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-shadow.d.ts +1 -1
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-shadow.js +5 -4
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-this-alias.js +1 -1
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-parameter-property-assignment.js +1 -1
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-template-expression.js +2 -2
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-assertion.js +5 -1
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-vars.js +1 -1
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-string-starts-ends-with.js +2 -1
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-array-sort-compare.js +1 -1
- package/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unbound-method.js +36 -9
- package/node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore/index.js +11 -2
- package/node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore/legacy.js +11 -2
- package/node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore/package.json +1 -1
- package/node_modules/@typescript-eslint/eslint-plugin/package.json +22 -11
- package/node_modules/@typescript-eslint/parser/dist/index.js +47 -0
- package/node_modules/@typescript-eslint/parser/dist/parser.js +11 -6
- package/node_modules/@typescript-eslint/parser/package.json +9 -7
- package/node_modules/@typescript-eslint/project-service/package.json +7 -5
- package/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.js +2 -2
- package/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts +1 -0
- package/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js +1 -0
- package/node_modules/@typescript-eslint/scope-manager/package.json +8 -6
- package/node_modules/@typescript-eslint/tsconfig-utils/package.json +5 -3
- package/node_modules/@typescript-eslint/type-utils/package.json +9 -7
- package/node_modules/@typescript-eslint/types/dist/generated/ast-spec.d.ts +10 -0
- package/node_modules/@typescript-eslint/types/dist/parser-options.d.ts +13 -0
- package/node_modules/@typescript-eslint/types/package.json +5 -3
- package/node_modules/@typescript-eslint/typescript-estree/dist/check-syntax-errors.js +22 -6
- package/node_modules/@typescript-eslint/typescript-estree/dist/convert.js +5 -4
- package/node_modules/@typescript-eslint/typescript-estree/dist/getImportClausePhaseModifier.d.ts +4 -0
- package/node_modules/@typescript-eslint/typescript-estree/dist/getImportClausePhaseModifier.js +56 -0
- package/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/createParseSettings.js +1 -1
- package/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/warnAboutTSVersion.d.ts +1 -1
- package/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/warnAboutTSVersion.js +27 -18
- package/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.d.ts +8 -0
- package/node_modules/@typescript-eslint/typescript-estree/package.json +9 -7
- package/node_modules/@typescript-eslint/utils/dist/ts-eslint/Rule.d.ts +1 -1
- package/node_modules/@typescript-eslint/utils/package.json +8 -6
- package/node_modules/@typescript-eslint/visitor-keys/package.json +6 -4
- package/node_modules/acorn/CHANGELOG.md +12 -0
- package/node_modules/acorn/README.md +5 -0
- package/node_modules/acorn/dist/acorn.d.mts +8 -0
- package/node_modules/acorn/dist/acorn.d.ts +8 -0
- package/node_modules/acorn/dist/acorn.js +16 -7
- package/node_modules/acorn/dist/acorn.mjs +16 -7
- package/node_modules/acorn/package.json +1 -1
- package/node_modules/astro-eslint-parser/lib/index.d.mts +113 -18
- package/node_modules/astro-eslint-parser/lib/index.mjs +871 -1172
- package/node_modules/astro-eslint-parser/package.json +7 -9
- package/node_modules/brace-expansion/README.md +11 -0
- package/node_modules/brace-expansion/dist/commonjs/index.d.ts +2 -0
- package/node_modules/brace-expansion/dist/commonjs/index.d.ts.map +1 -1
- package/node_modules/brace-expansion/dist/commonjs/index.js +162 -84
- package/node_modules/brace-expansion/dist/commonjs/index.js.map +1 -1
- package/node_modules/brace-expansion/dist/esm/index.d.ts +2 -0
- package/node_modules/brace-expansion/dist/esm/index.d.ts.map +1 -1
- package/node_modules/brace-expansion/dist/esm/index.js +161 -83
- package/node_modules/brace-expansion/dist/esm/index.js.map +1 -1
- package/node_modules/brace-expansion/package.json +2 -2
- package/node_modules/eslint/README.md +2 -2
- package/node_modules/eslint/lib/cli-engine/formatters/html.js +1 -1
- package/node_modules/eslint/lib/languages/js/index.js +1 -1
- package/node_modules/eslint/lib/linter/code-path-analysis/debug-helpers.js +1 -1
- package/node_modules/eslint/lib/linter/vfile.js +1 -1
- package/node_modules/eslint/lib/rules/class-methods-use-this.js +6 -5
- package/node_modules/eslint/lib/rules/complexity.js +1 -1
- package/node_modules/eslint/lib/rules/eqeqeq.js +26 -6
- package/node_modules/eslint/lib/rules/func-name-matching.js +3 -3
- package/node_modules/eslint/lib/rules/generator-star-spacing.js +4 -6
- package/node_modules/eslint/lib/rules/indent.js +4 -6
- package/node_modules/eslint/lib/rules/key-spacing.js +5 -7
- package/node_modules/eslint/lib/rules/max-len.js +1 -1
- package/node_modules/eslint/lib/rules/max-nested-callbacks.js +11 -1
- package/node_modules/eslint/lib/rules/no-compare-neg-zero.js +91 -8
- package/node_modules/eslint/lib/rules/no-control-regex.js +3 -0
- package/node_modules/eslint/lib/rules/no-implicit-coercion.js +22 -8
- package/node_modules/eslint/lib/rules/no-invalid-regexp.js +3 -1
- package/node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js +5 -7
- package/node_modules/eslint/lib/rules/no-promise-executor-return.js +5 -7
- package/node_modules/eslint/lib/rules/no-script-url.js +4 -6
- package/node_modules/eslint/lib/rules/no-shadow.js +14 -20
- package/node_modules/eslint/lib/rules/no-unreachable-loop.js +8 -4
- package/node_modules/eslint/lib/rules/prefer-numeric-literals.js +14 -6
- package/node_modules/eslint/lib/rules/prefer-object-has-own.js +4 -6
- package/node_modules/eslint/lib/rules/prefer-object-spread.js +9 -1
- package/node_modules/eslint/lib/rules/prefer-template.js +1 -1
- package/node_modules/eslint/lib/rules/preserve-caught-error.js +268 -116
- package/node_modules/eslint/lib/rules/quotes.js +1 -1
- package/node_modules/eslint/lib/rules/radix.js +58 -57
- package/node_modules/eslint/lib/rules/use-isnan.js +20 -12
- package/node_modules/eslint/lib/rules/utils/ast-utils.js +1 -1
- package/node_modules/eslint/lib/shared/serialization.js +1 -1
- package/node_modules/eslint/lib/shared/translate-cli-options.js +3 -3
- package/node_modules/eslint/lib/types/config-api.d.ts +8 -1
- package/node_modules/eslint/lib/types/index.d.ts +3 -6
- package/node_modules/eslint/lib/types/rules.d.ts +17 -9
- package/node_modules/eslint/package.json +7 -7
- package/node_modules/eslint-plugin-astro/README.md +10 -2
- package/node_modules/eslint-plugin-astro/lib/index.d.mts +0 -1
- package/node_modules/eslint-plugin-astro/lib/index.mjs +76 -637
- package/node_modules/eslint-plugin-astro/package.json +11 -11
- package/node_modules/eslint-plugin-toml/README.md +2 -0
- package/node_modules/eslint-plugin-toml/lib/index.d.mts +6 -5
- package/node_modules/eslint-plugin-toml/lib/index.mjs +32 -3
- package/node_modules/eslint-plugin-toml/package.json +7 -7
- package/node_modules/eslint-plugin-yml/lib/index.mjs +49 -19
- package/node_modules/eslint-plugin-yml/package.json +2 -2
- package/node_modules/flatted/golang/pkg/flatted/flatted.go +16 -14
- package/node_modules/flatted/package.json +10 -5
- package/node_modules/flatted/types/index.d.ts +1 -1
- package/node_modules/globals/globals.json +105 -33
- package/node_modules/globals/index.d.ts +105 -33
- package/node_modules/globals/package.json +2 -2
- package/node_modules/mdn-data/css/properties.json +64 -16
- package/node_modules/mdn-data/css/properties.schema.json +1 -7
- package/node_modules/mdn-data/css/syntaxes.json +1 -1
- package/node_modules/mdn-data/l10n/css.json +3 -62
- package/node_modules/mdn-data/package.json +1 -1
- package/node_modules/minimatch/package.json +9 -9
- package/node_modules/nanoid/non-secure/index.cjs +2 -2
- package/node_modules/nanoid/non-secure/index.js +2 -2
- package/node_modules/nanoid/package.json +1 -1
- package/node_modules/picomatch/README.md +15 -21
- package/node_modules/picomatch/lib/parse.js +39 -9
- package/node_modules/picomatch/lib/picomatch.js +14 -2
- package/node_modules/picomatch/package.json +3 -2
- package/node_modules/postcss/README.md +1 -2
- package/node_modules/postcss/lib/container.js +81 -34
- package/node_modules/postcss/lib/fromJSON.js +65 -26
- package/node_modules/postcss/lib/input.js +7 -1
- package/node_modules/postcss/lib/lazy-result.js +77 -14
- package/node_modules/postcss/lib/list.js +1 -0
- package/node_modules/postcss/lib/node.d.ts +2 -2
- package/node_modules/postcss/lib/node.js +90 -52
- package/node_modules/postcss/lib/postcss.d.ts +4 -1
- package/node_modules/postcss/lib/previous-map.js +6 -3
- package/node_modules/postcss/lib/processor.js +1 -1
- package/node_modules/postcss/lib/root.js +16 -1
- package/node_modules/postcss/lib/stringifier.js +112 -25
- package/node_modules/postcss/lib/warning.js +10 -0
- package/node_modules/postcss/package.json +2 -2
- package/node_modules/typescript-eslint/dist/index.js +47 -0
- package/node_modules/typescript-eslint/package.json +14 -6
- package/node_modules/yaml-eslint-parser/lib/chunk-CfYAbeIz.mjs +13 -0
- package/node_modules/yaml-eslint-parser/lib/index.d.mts +2 -2
- package/node_modules/yaml-eslint-parser/lib/index.mjs +164 -157
- package/node_modules/yaml-eslint-parser/package.json +17 -18
- package/package.json +23 -23
- package/node_modules/@astrojs/compiler/LICENSE +0 -53
- package/node_modules/@astrojs/compiler/README.md +0 -72
- package/node_modules/@astrojs/compiler/dist/astro.wasm +0 -0
- package/node_modules/@astrojs/compiler/dist/browser/index.cjs +0 -2
- package/node_modules/@astrojs/compiler/dist/browser/index.d.ts +0 -11
- package/node_modules/@astrojs/compiler/dist/browser/index.js +0 -1
- package/node_modules/@astrojs/compiler/dist/browser/utils.cjs +0 -3
- package/node_modules/@astrojs/compiler/dist/browser/utils.d.ts +0 -29
- package/node_modules/@astrojs/compiler/dist/browser/utils.js +0 -3
- package/node_modules/@astrojs/compiler/dist/browser/wasm_exec.cjs +0 -2
- package/node_modules/@astrojs/compiler/dist/browser/wasm_exec.d.ts +0 -37
- package/node_modules/@astrojs/compiler/dist/browser/wasm_exec.js +0 -1
- package/node_modules/@astrojs/compiler/dist/chunk-QR6QDSEV.js +0 -2
- package/node_modules/@astrojs/compiler/dist/chunk-W5DTLHV4.js +0 -1
- package/node_modules/@astrojs/compiler/dist/node/index.cjs +0 -1
- package/node_modules/@astrojs/compiler/dist/node/index.d.ts +0 -12
- package/node_modules/@astrojs/compiler/dist/node/index.js +0 -1
- package/node_modules/@astrojs/compiler/dist/node/sync.cjs +0 -1
- package/node_modules/@astrojs/compiler/dist/node/sync.d.ts +0 -16
- package/node_modules/@astrojs/compiler/dist/node/sync.js +0 -1
- package/node_modules/@astrojs/compiler/dist/node/utils.cjs +0 -3
- package/node_modules/@astrojs/compiler/dist/node/utils.d.ts +0 -29
- package/node_modules/@astrojs/compiler/dist/node/utils.js +0 -3
- package/node_modules/@astrojs/compiler/dist/node/wasm_exec.cjs +0 -1
- package/node_modules/@astrojs/compiler/dist/node/wasm_exec.d.ts +0 -37
- package/node_modules/@astrojs/compiler/dist/node/wasm_exec.js +0 -1
- package/node_modules/@astrojs/compiler/dist/shared/ast.cjs +0 -1
- package/node_modules/@astrojs/compiler/dist/shared/ast.d.ts +0 -74
- package/node_modules/@astrojs/compiler/dist/shared/ast.js +0 -0
- package/node_modules/@astrojs/compiler/dist/shared/diagnostics.cjs +0 -1
- package/node_modules/@astrojs/compiler/dist/shared/diagnostics.d.ts +0 -18
- package/node_modules/@astrojs/compiler/dist/shared/diagnostics.js +0 -1
- package/node_modules/@astrojs/compiler/dist/shared/types.cjs +0 -1
- package/node_modules/@astrojs/compiler/dist/shared/types.d.ts +0 -153
- package/node_modules/@astrojs/compiler/dist/shared/types.js +0 -1
- package/node_modules/@astrojs/compiler/package.json +0 -58
- package/node_modules/@astrojs/compiler/sync.d.ts +0 -1
- package/node_modules/@astrojs/compiler/types.d.ts +0 -1
- package/node_modules/@astrojs/compiler/utils.d.ts +0 -1
- package/node_modules/@pkgr/core/index.d.cts +0 -3
- package/node_modules/@pkgr/core/lib/constants.d.ts +0 -6
- package/node_modules/@pkgr/core/lib/constants.js +0 -9
- package/node_modules/@pkgr/core/lib/constants.js.map +0 -1
- package/node_modules/@pkgr/core/lib/helpers.d.ts +0 -19
- package/node_modules/@pkgr/core/lib/helpers.js +0 -67
- package/node_modules/@pkgr/core/lib/helpers.js.map +0 -1
- package/node_modules/@pkgr/core/lib/index.cjs +0 -91
- package/node_modules/@pkgr/core/lib/index.d.ts +0 -2
- package/node_modules/@pkgr/core/lib/index.js +0 -3
- package/node_modules/@pkgr/core/lib/index.js.map +0 -1
- package/node_modules/@pkgr/core/package.json +0 -38
- package/node_modules/@rviscomi/capo.js/crx/README.md +0 -10
- package/node_modules/@rviscomi/capo.js/crx/capo.js +0 -3
- package/node_modules/@rviscomi/capo.js/crx/options/options.js +0 -1
- package/node_modules/@rviscomi/capo.js/docs/.vscode/extensions.json +0 -4
- package/node_modules/@rviscomi/capo.js/docs/.vscode/launch.json +0 -11
- package/node_modules/@rviscomi/capo.js/docs/README.md +0 -51
- package/node_modules/@rviscomi/capo.js/docs/astro.config.mjs +0 -82
- package/node_modules/@rviscomi/capo.js/docs/package-lock.json +0 -7439
- package/node_modules/@rviscomi/capo.js/docs/package.json +0 -21
- package/node_modules/@rviscomi/capo.js/docs/public/capo-social-alt.webp +0 -0
- package/node_modules/@rviscomi/capo.js/docs/public/capo-social.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/public/capo-social.webp +0 -0
- package/node_modules/@rviscomi/capo.js/docs/public/favicon.svg +0 -13
- package/node_modules/@rviscomi/capo.js/docs/src/assets/bookmarklet-setup.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/bookmarklet.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/capo-chrome.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/capo-extension.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/capo800.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/crx-console-expanded.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/crx-console-interactive.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/crx-console.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/crx-hover-validation.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/crx-menu.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/crx-options-dark.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/crx-options-light.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/crx-store.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/custom-palette.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/developer-mode.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/devtools-console.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/devtools-snippet.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/devtools-sources.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/houston.webp +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/load-unpacked.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/validation-areas.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/validation-base.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/validation-crx-stripes.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/validation-csp.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/validation-invalid-element.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/validation-origin-trial.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/assets/validation-title.png +0 -0
- package/node_modules/@rviscomi/capo.js/docs/src/components/CapoClient.astro +0 -165
- package/node_modules/@rviscomi/capo.js/docs/src/components/CapoOptions.astro +0 -10
- package/node_modules/@rviscomi/capo.js/docs/src/components/CapoPalette.astro +0 -26
- package/node_modules/@rviscomi/capo.js/docs/src/components/InlineCapoIcon.astro +0 -15
- package/node_modules/@rviscomi/capo.js/docs/src/components/InlineCapoWeightBars.astro +0 -39
- package/node_modules/@rviscomi/capo.js/docs/src/components/VirtualConsole.astro +0 -11
- package/node_modules/@rviscomi/capo.js/docs/src/content/config.ts +0 -7
- package/node_modules/@rviscomi/capo.js/docs/src/content/docs/developer/contributing.mdx +0 -8
- package/node_modules/@rviscomi/capo.js/docs/src/content/docs/developer/crx-local.mdx +0 -28
- package/node_modules/@rviscomi/capo.js/docs/src/content/docs/developer/custom-adapters.mdx +0 -273
- package/node_modules/@rviscomi/capo.js/docs/src/content/docs/index.mdx +0 -108
- package/node_modules/@rviscomi/capo.js/docs/src/content/docs/migration-v2.mdx +0 -62
- package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/actionability.mdx +0 -6
- package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/assessment-mode.mdx +0 -29
- package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/config.mdx +0 -195
- package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/demo.mdx +0 -9
- package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/extension.mdx +0 -116
- package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/performance.mdx +0 -6
- package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/quick-start.mdx +0 -26
- package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/rules.mdx +0 -202
- package/node_modules/@rviscomi/capo.js/docs/src/content/docs/user/validation.mdx +0 -197
- package/node_modules/@rviscomi/capo.js/docs/src/env.d.ts +0 -2
- package/node_modules/@rviscomi/capo.js/docs/src/lib/VirtualConsole.js +0 -190
- package/node_modules/@rviscomi/capo.js/docs/src/lib/capo.js +0 -1533
- package/node_modules/@rviscomi/capo.js/docs/src/styles/custom.css +0 -7
- package/node_modules/@rviscomi/capo.js/docs/src/styles/virtual-console.css +0 -131
- package/node_modules/@rviscomi/capo.js/docs/tests/VirtualConsole.test.js +0 -108
- package/node_modules/@rviscomi/capo.js/docs/tsconfig.json +0 -3
- package/node_modules/@rviscomi/capo.js/src/crx/capo.js +0 -62
- package/node_modules/@rviscomi/capo.js/src/crx/options.js +0 -69
- package/node_modules/astrojs-compiler-sync/LICENSE +0 -53
- package/node_modules/astrojs-compiler-sync/README.md +0 -3
- package/node_modules/astrojs-compiler-sync/browser/index.d.ts +0 -6
- package/node_modules/astrojs-compiler-sync/browser/index.js +0 -76
- package/node_modules/astrojs-compiler-sync/browser/wasm_exec.js +0 -665
- package/node_modules/astrojs-compiler-sync/lib/astrojs-compiler-worker.js +0 -5
- package/node_modules/astrojs-compiler-sync/lib/compiler-sync.cjs +0 -31
- package/node_modules/astrojs-compiler-sync/lib/index.cjs +0 -30
- package/node_modules/astrojs-compiler-sync/lib/index.d.cts +0 -3
- package/node_modules/astrojs-compiler-sync/lib/index.d.ts +0 -14
- package/node_modules/astrojs-compiler-sync/lib/index.js +0 -18
- package/node_modules/astrojs-compiler-sync/package.json +0 -100
- package/node_modules/entities/LICENSE +0 -11
- package/node_modules/entities/dist/decode-codepoint.d.ts +0 -8
- package/node_modules/entities/dist/decode-codepoint.d.ts.map +0 -1
- package/node_modules/entities/dist/decode-codepoint.js +0 -46
- package/node_modules/entities/dist/decode-codepoint.js.map +0 -1
- package/node_modules/entities/dist/decode.d.ts +0 -194
- package/node_modules/entities/dist/decode.d.ts.map +0 -1
- package/node_modules/entities/dist/decode.js +0 -544
- package/node_modules/entities/dist/decode.js.map +0 -1
- package/node_modules/entities/dist/encode.d.ts +0 -24
- package/node_modules/entities/dist/encode.d.ts.map +0 -1
- package/node_modules/entities/dist/encode.js +0 -90
- package/node_modules/entities/dist/encode.js.map +0 -1
- package/node_modules/entities/dist/escape.d.ts +0 -48
- package/node_modules/entities/dist/escape.d.ts.map +0 -1
- package/node_modules/entities/dist/escape.js +0 -132
- package/node_modules/entities/dist/escape.js.map +0 -1
- package/node_modules/entities/dist/generated/decode-data-html.d.ts +0 -3
- package/node_modules/entities/dist/generated/decode-data-html.d.ts.map +0 -1
- package/node_modules/entities/dist/generated/decode-data-html.js +0 -5
- package/node_modules/entities/dist/generated/decode-data-html.js.map +0 -1
- package/node_modules/entities/dist/generated/decode-data-xml.d.ts +0 -3
- package/node_modules/entities/dist/generated/decode-data-xml.d.ts.map +0 -1
- package/node_modules/entities/dist/generated/decode-data-xml.js +0 -5
- package/node_modules/entities/dist/generated/decode-data-xml.js.map +0 -1
- package/node_modules/entities/dist/generated/encode-html.d.ts +0 -5
- package/node_modules/entities/dist/generated/encode-html.d.ts.map +0 -1
- package/node_modules/entities/dist/generated/encode-html.js +0 -12
- package/node_modules/entities/dist/generated/encode-html.js.map +0 -1
- package/node_modules/entities/dist/index.d.ts +0 -89
- package/node_modules/entities/dist/index.d.ts.map +0 -1
- package/node_modules/entities/dist/index.js +0 -91
- package/node_modules/entities/dist/index.js.map +0 -1
- package/node_modules/entities/dist/internal/bin-trie-flags.d.ts +0 -17
- package/node_modules/entities/dist/internal/bin-trie-flags.d.ts.map +0 -1
- package/node_modules/entities/dist/internal/bin-trie-flags.js +0 -18
- package/node_modules/entities/dist/internal/bin-trie-flags.js.map +0 -1
- package/node_modules/entities/dist/internal/decode-shared.d.ts +0 -7
- package/node_modules/entities/dist/internal/decode-shared.d.ts.map +0 -1
- package/node_modules/entities/dist/internal/decode-shared.js +0 -17
- package/node_modules/entities/dist/internal/decode-shared.js.map +0 -1
- package/node_modules/entities/dist/internal/encode-shared.d.ts +0 -33
- package/node_modules/entities/dist/internal/encode-shared.d.ts.map +0 -1
- package/node_modules/entities/dist/internal/encode-shared.js +0 -93
- package/node_modules/entities/dist/internal/encode-shared.js.map +0 -1
- package/node_modules/entities/package.json +0 -83
- package/node_modules/entities/readme.md +0 -131
- package/node_modules/entities/src/decode-codepoint.ts +0 -50
- package/node_modules/entities/src/decode.ts +0 -671
- package/node_modules/entities/src/encode.ts +0 -95
- package/node_modules/entities/src/escape.ts +0 -160
- package/node_modules/entities/src/generated/decode-data-html.ts +0 -7
- package/node_modules/entities/src/generated/decode-data-xml.ts +0 -7
- package/node_modules/entities/src/generated/encode-html.ts +0 -18
- package/node_modules/entities/src/index.ts +0 -162
- package/node_modules/entities/src/internal/bin-trie-flags.ts +0 -16
- package/node_modules/entities/src/internal/decode-shared.ts +0 -18
- package/node_modules/entities/src/internal/encode-shared.ts +0 -123
- package/node_modules/parse5/README.md +0 -38
- package/node_modules/parse5/dist/common/doctype.d.ts +0 -4
- package/node_modules/parse5/dist/common/doctype.js +0 -114
- package/node_modules/parse5/dist/common/error-codes.d.ts +0 -67
- package/node_modules/parse5/dist/common/error-codes.js +0 -63
- package/node_modules/parse5/dist/common/foreign-content.d.ts +0 -9
- package/node_modules/parse5/dist/common/foreign-content.js +0 -228
- package/node_modules/parse5/dist/common/html.d.ts +0 -289
- package/node_modules/parse5/dist/common/html.js +0 -523
- package/node_modules/parse5/dist/common/token.d.ts +0 -84
- package/node_modules/parse5/dist/common/token.js +0 -20
- package/node_modules/parse5/dist/common/unicode.d.ts +0 -42
- package/node_modules/parse5/dist/common/unicode.js +0 -62
- package/node_modules/parse5/dist/index.d.ts +0 -71
- package/node_modules/parse5/dist/index.js +0 -42
- package/node_modules/parse5/dist/parser/formatting-element-list.d.ts +0 -36
- package/node_modules/parse5/dist/parser/formatting-element-list.js +0 -110
- package/node_modules/parse5/dist/parser/index.d.ts +0 -221
- package/node_modules/parse5/dist/parser/index.js +0 -3245
- package/node_modules/parse5/dist/parser/open-element-stack.d.ts +0 -53
- package/node_modules/parse5/dist/parser/open-element-stack.js +0 -324
- package/node_modules/parse5/dist/serializer/index.d.ts +0 -60
- package/node_modules/parse5/dist/serializer/index.js +0 -168
- package/node_modules/parse5/dist/tokenizer/index.d.ts +0 -247
- package/node_modules/parse5/dist/tokenizer/index.js +0 -2712
- package/node_modules/parse5/dist/tokenizer/preprocessor.d.ts +0 -36
- package/node_modules/parse5/dist/tokenizer/preprocessor.js +0 -196
- package/node_modules/parse5/dist/tree-adapters/default.d.ts +0 -84
- package/node_modules/parse5/dist/tree-adapters/default.js +0 -173
- package/node_modules/parse5/dist/tree-adapters/interface.d.ts +0 -255
- package/node_modules/parse5/dist/tree-adapters/interface.js +0 -1
- package/node_modules/parse5/package.json +0 -53
- package/node_modules/synckit/README.md +0 -256
- package/node_modules/synckit/lib/common.d.ts +0 -5
- package/node_modules/synckit/lib/common.js +0 -22
- package/node_modules/synckit/lib/common.js.map +0 -1
- package/node_modules/synckit/lib/constants.d.ts +0 -38
- package/node_modules/synckit/lib/constants.js +0 -54
- package/node_modules/synckit/lib/constants.js.map +0 -1
- package/node_modules/synckit/lib/helpers.d.ts +0 -27
- package/node_modules/synckit/lib/helpers.js +0 -411
- package/node_modules/synckit/lib/helpers.js.map +0 -1
- package/node_modules/synckit/lib/index.cjs +0 -588
- package/node_modules/synckit/lib/index.d.cts +0 -138
- package/node_modules/synckit/lib/index.d.ts +0 -7
- package/node_modules/synckit/lib/index.js +0 -68
- package/node_modules/synckit/lib/index.js.map +0 -1
- package/node_modules/synckit/lib/types.d.ts +0 -48
- package/node_modules/synckit/lib/types.js +0 -2
- package/node_modules/synckit/lib/types.js.map +0 -1
- package/node_modules/synckit/package.json +0 -45
- package/node_modules/yaml-eslint-parser/lib/chunk-15K8U1wQ.mjs +0 -18
- /package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/background.js +0 -0
- /package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/capo.css +0 -0
- /package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/images/icon128.png +0 -0
- /package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/images/icon256.png +0 -0
- /package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/options/options.css +0 -0
- /package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/options/options.html +0 -0
- /package/node_modules/@rviscomi/capo.js/{crx → dist/chrome}/styles/open-props.css +0 -0
- /package/node_modules/@rviscomi/capo.js/{docs/src/assets/capo256.png → dist/firefox/images/icon256.png} +0 -0
- /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,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,"""):"";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
|
+
}
|
|
Binary file
|
|
@@ -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><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><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)}()})();
|