@askviraj/linter 1.1.2 → 1.1.4
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/README.md +1 -0
- package/node_modules/eslint-plugin-yml/lib/index.mjs +125 -21
- package/node_modules/eslint-plugin-yml/package.json +7 -7
- 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
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __defProp = Object.defineProperty;
|
|
2
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -116,7 +117,7 @@ var AdapterInterface = class {
|
|
|
116
117
|
/**
|
|
117
118
|
* Get source location for a node (optional, for linting)
|
|
118
119
|
* @param {any} node - Element node
|
|
119
|
-
* @returns {
|
|
120
|
+
* @returns {SourceLocation | null}
|
|
120
121
|
*/
|
|
121
122
|
getLocation(node) {
|
|
122
123
|
return null;
|
|
@@ -131,8 +132,12 @@ var AdapterInterface = class {
|
|
|
131
132
|
}
|
|
132
133
|
};
|
|
133
134
|
function validateAdapter(adapter) {
|
|
135
|
+
if (!adapter || typeof adapter !== "object") {
|
|
136
|
+
throw new Error("Adapter must be an object");
|
|
137
|
+
}
|
|
134
138
|
for (const method of REQUIRED_METHODS) {
|
|
135
|
-
if (typeof
|
|
139
|
+
if (typeof /** @type {Record<string, any>} */
|
|
140
|
+
adapter[method] !== "function") {
|
|
136
141
|
throw new Error(`Adapter missing required method: ${method}()`);
|
|
137
142
|
}
|
|
138
143
|
}
|
|
@@ -142,6 +147,7 @@ function validateAdapter(adapter) {
|
|
|
142
147
|
var BrowserAdapter = class extends AdapterInterface {
|
|
143
148
|
/**
|
|
144
149
|
* Check if node is an Element (not text, comment, etc.)
|
|
150
|
+
* @override
|
|
145
151
|
* @param {any} node - The node to check
|
|
146
152
|
* @returns {boolean}
|
|
147
153
|
*/
|
|
@@ -151,6 +157,7 @@ var BrowserAdapter = class extends AdapterInterface {
|
|
|
151
157
|
}
|
|
152
158
|
/**
|
|
153
159
|
* Get the tag name of an element (lowercase)
|
|
160
|
+
* @override
|
|
154
161
|
* @param {any} node - Element node
|
|
155
162
|
* @returns {string} - Tag name like 'meta', 'link', 'script'
|
|
156
163
|
*/
|
|
@@ -158,10 +165,13 @@ var BrowserAdapter = class extends AdapterInterface {
|
|
|
158
165
|
if (!node || !node.tagName) {
|
|
159
166
|
return "";
|
|
160
167
|
}
|
|
161
|
-
|
|
168
|
+
const name = node.tagName.toLowerCase();
|
|
169
|
+
if (name === "static-head") return "head";
|
|
170
|
+
return name;
|
|
162
171
|
}
|
|
163
172
|
/**
|
|
164
173
|
* Get attribute value from element
|
|
174
|
+
* @override
|
|
165
175
|
* @param {any} node - Element node
|
|
166
176
|
* @param {string} attrName - Attribute name (case-insensitive)
|
|
167
177
|
* @returns {string | null} - Attribute value or null if not found
|
|
@@ -174,6 +184,7 @@ var BrowserAdapter = class extends AdapterInterface {
|
|
|
174
184
|
}
|
|
175
185
|
/**
|
|
176
186
|
* Check if element has a specific attribute
|
|
187
|
+
* @override
|
|
177
188
|
* @param {any} node - Element node
|
|
178
189
|
* @param {string} attrName - Attribute name (case-insensitive)
|
|
179
190
|
* @returns {boolean} - True if attribute exists
|
|
@@ -186,6 +197,7 @@ var BrowserAdapter = class extends AdapterInterface {
|
|
|
186
197
|
}
|
|
187
198
|
/**
|
|
188
199
|
* Get all attribute names for an element
|
|
200
|
+
* @override
|
|
189
201
|
* @param {any} node - Element node
|
|
190
202
|
* @returns {string[]} - Array of attribute names
|
|
191
203
|
*/
|
|
@@ -197,6 +209,7 @@ var BrowserAdapter = class extends AdapterInterface {
|
|
|
197
209
|
}
|
|
198
210
|
/**
|
|
199
211
|
* Get text content of a node (for inline scripts/styles)
|
|
212
|
+
* @override
|
|
200
213
|
* @param {any} node - Element node
|
|
201
214
|
* @returns {string} - Text content
|
|
202
215
|
*/
|
|
@@ -208,17 +221,33 @@ var BrowserAdapter = class extends AdapterInterface {
|
|
|
208
221
|
}
|
|
209
222
|
/**
|
|
210
223
|
* Get child elements of a node
|
|
224
|
+
* @override
|
|
211
225
|
* @param {any} node - Parent node
|
|
212
226
|
* @returns {any[]} - Array of child element nodes (excluding text/comment nodes)
|
|
213
227
|
*/
|
|
214
228
|
getChildren(node) {
|
|
215
|
-
if (!node
|
|
229
|
+
if (!node) {
|
|
230
|
+
return [];
|
|
231
|
+
}
|
|
232
|
+
if (this.getTagName(node) === "noscript") {
|
|
233
|
+
const content = node.innerHTML || "";
|
|
234
|
+
if (content.trim()) {
|
|
235
|
+
const doc = node.ownerDocument || (typeof document !== "undefined" ? document : null);
|
|
236
|
+
if (doc) {
|
|
237
|
+
const temp = doc.createElement("div");
|
|
238
|
+
temp.innerHTML = content;
|
|
239
|
+
return Array.from(temp.children);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if (!node.children) {
|
|
216
244
|
return [];
|
|
217
245
|
}
|
|
218
246
|
return Array.from(node.children);
|
|
219
247
|
}
|
|
220
248
|
/**
|
|
221
249
|
* Get parent element of a node
|
|
250
|
+
* @override
|
|
222
251
|
* @param {any} node - Child node
|
|
223
252
|
* @returns {any | null} - Parent element node, or null if no parent
|
|
224
253
|
*/
|
|
@@ -230,6 +259,7 @@ var BrowserAdapter = class extends AdapterInterface {
|
|
|
230
259
|
}
|
|
231
260
|
/**
|
|
232
261
|
* Get sibling elements of a node
|
|
262
|
+
* @override
|
|
233
263
|
* @param {any} node - Element node
|
|
234
264
|
* @returns {any[]} - Array of sibling element nodes (excluding the node itself)
|
|
235
265
|
*/
|
|
@@ -249,6 +279,7 @@ var BrowserAdapter = class extends AdapterInterface {
|
|
|
249
279
|
* Browser DOM elements don't have source location information,
|
|
250
280
|
* so this always returns null.
|
|
251
281
|
*
|
|
282
|
+
* @override
|
|
252
283
|
* @param {any} node - Element node
|
|
253
284
|
* @returns {null}
|
|
254
285
|
*/
|
|
@@ -257,6 +288,7 @@ var BrowserAdapter = class extends AdapterInterface {
|
|
|
257
288
|
}
|
|
258
289
|
/**
|
|
259
290
|
* Stringify element for logging/debugging
|
|
291
|
+
* @override
|
|
260
292
|
* @param {any} node - Element node
|
|
261
293
|
* @returns {string} - String representation like "<meta charset='utf-8'>"
|
|
262
294
|
*/
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -50,8 +51,12 @@ var REQUIRED_METHODS = [
|
|
|
50
51
|
"stringify"
|
|
51
52
|
];
|
|
52
53
|
function validateAdapter(adapter) {
|
|
54
|
+
if (!adapter || typeof adapter !== "object") {
|
|
55
|
+
throw new Error("Adapter must be an object");
|
|
56
|
+
}
|
|
53
57
|
for (const method of REQUIRED_METHODS) {
|
|
54
|
-
if (typeof
|
|
58
|
+
if (typeof /** @type {Record<string, any>} */
|
|
59
|
+
adapter[method] !== "function") {
|
|
55
60
|
throw new Error(`Adapter missing required method: ${method}()`);
|
|
56
61
|
}
|
|
57
62
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __defProp = Object.defineProperty;
|
|
2
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -40,18 +41,6 @@ var ElementWeights = {
|
|
|
40
41
|
PREFETCH_PRERENDER: 1,
|
|
41
42
|
OTHER: 0
|
|
42
43
|
};
|
|
43
|
-
var ElementDetectors = {
|
|
44
|
-
META: isMeta,
|
|
45
|
-
TITLE: isTitle,
|
|
46
|
-
PRECONNECT: isPreconnect,
|
|
47
|
-
ASYNC_SCRIPT: isAsyncScript,
|
|
48
|
-
IMPORT_STYLES: isImportStyles,
|
|
49
|
-
SYNC_SCRIPT: isSyncScript,
|
|
50
|
-
SYNC_STYLES: isSyncStyles,
|
|
51
|
-
PRELOAD: isPreload,
|
|
52
|
-
DEFER_SCRIPT: isDeferScript,
|
|
53
|
-
PREFETCH_PRERENDER: isPrefetchPrerender
|
|
54
|
-
};
|
|
55
44
|
var META_HTTP_EQUIV_KEYWORDS = [
|
|
56
45
|
"accept-ch",
|
|
57
46
|
"content-security-policy",
|
|
@@ -99,6 +88,10 @@ function isAsyncScript(element, adapter) {
|
|
|
99
88
|
function isImportStyles(element, adapter) {
|
|
100
89
|
const importRe = /@import/;
|
|
101
90
|
if (adapter.getTagName(element) === "style") {
|
|
91
|
+
const media = adapter.getAttribute(element, "media");
|
|
92
|
+
if (media && media.toLowerCase().trim() === "print") {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
102
95
|
return importRe.test(adapter.getTextContent(element));
|
|
103
96
|
}
|
|
104
97
|
return false;
|
|
@@ -128,11 +121,21 @@ function isSyncScript(element, adapter) {
|
|
|
128
121
|
function isSyncStyles(element, adapter) {
|
|
129
122
|
const tagName = adapter.getTagName(element);
|
|
130
123
|
if (tagName === "style") {
|
|
124
|
+
const media = adapter.getAttribute(element, "media");
|
|
125
|
+
if (media && media.toLowerCase().trim() === "print") {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
131
128
|
return true;
|
|
132
129
|
}
|
|
133
130
|
if (tagName === "link") {
|
|
134
131
|
const rel = adapter.getAttribute(element, "rel");
|
|
135
|
-
|
|
132
|
+
if (rel?.toLowerCase() === "stylesheet") {
|
|
133
|
+
const media = adapter.getAttribute(element, "media");
|
|
134
|
+
if (media && media.toLowerCase().trim() === "print") {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
136
139
|
}
|
|
137
140
|
return false;
|
|
138
141
|
}
|
|
@@ -192,6 +195,18 @@ function isMetaCSP(element, adapter) {
|
|
|
192
195
|
const httpEquivLower = httpEquiv.toLowerCase();
|
|
193
196
|
return httpEquivLower === "content-security-policy" || httpEquivLower === "content-security-policy-report-only";
|
|
194
197
|
}
|
|
198
|
+
var ElementDetectors = {
|
|
199
|
+
META: isMeta,
|
|
200
|
+
TITLE: isTitle,
|
|
201
|
+
PRECONNECT: isPreconnect,
|
|
202
|
+
ASYNC_SCRIPT: isAsyncScript,
|
|
203
|
+
IMPORT_STYLES: isImportStyles,
|
|
204
|
+
SYNC_SCRIPT: isSyncScript,
|
|
205
|
+
SYNC_STYLES: isSyncStyles,
|
|
206
|
+
PRELOAD: isPreload,
|
|
207
|
+
DEFER_SCRIPT: isDeferScript,
|
|
208
|
+
PREFETCH_PRERENDER: isPrefetchPrerender
|
|
209
|
+
};
|
|
195
210
|
function getWeight(element, adapter) {
|
|
196
211
|
for (let [id, detector] of Object.entries(ElementDetectors)) {
|
|
197
212
|
if (detector(element, adapter)) {
|
|
@@ -266,6 +281,16 @@ function getValidationWarnings(head, adapter) {
|
|
|
266
281
|
}
|
|
267
282
|
children.forEach((element) => {
|
|
268
283
|
if (isValidElement(element, adapter)) {
|
|
284
|
+
const elementChildren = adapter.getChildren(element);
|
|
285
|
+
elementChildren.forEach((child) => {
|
|
286
|
+
if (!isValidElement(child, adapter)) {
|
|
287
|
+
validationWarnings.push({
|
|
288
|
+
ruleId: "no-invalid-head-elements",
|
|
289
|
+
warning: `${adapter.getTagName(child).toUpperCase()} elements are not allowed in the <head>`,
|
|
290
|
+
element
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
});
|
|
269
294
|
return;
|
|
270
295
|
}
|
|
271
296
|
validationWarnings.push({
|
|
@@ -315,7 +340,7 @@ function getCustomValidations(element, adapter, parentElement = null) {
|
|
|
315
340
|
};
|
|
316
341
|
results.forEach((result) => {
|
|
317
342
|
if (result.warnings) {
|
|
318
|
-
combined.warnings
|
|
343
|
+
combined.warnings?.push(...result.warnings);
|
|
319
344
|
}
|
|
320
345
|
if (result.payload) {
|
|
321
346
|
Object.assign(combined.payload, result.payload);
|
|
@@ -381,25 +406,26 @@ function validateOriginTrial(element, adapter) {
|
|
|
381
406
|
try {
|
|
382
407
|
metadata.payload = decodeOriginTrialToken(token);
|
|
383
408
|
} catch {
|
|
384
|
-
metadata.warnings
|
|
409
|
+
metadata.warnings?.push("Invalid origin trial token: invalid token");
|
|
385
410
|
return metadata;
|
|
386
411
|
}
|
|
387
412
|
if (metadata.payload.expiry < /* @__PURE__ */ new Date()) {
|
|
388
|
-
metadata.warnings
|
|
413
|
+
metadata.warnings?.push("Invalid origin trial token: expired");
|
|
389
414
|
}
|
|
390
415
|
if (typeof document !== "undefined" && document.location && document.location.href) {
|
|
391
416
|
if (!isSameOrigin(metadata.payload.origin, document.location.href)) {
|
|
392
417
|
const subdomain = isSubdomain(metadata.payload.origin, document.location.href);
|
|
393
418
|
if (subdomain && !metadata.payload.isSubdomain) {
|
|
394
|
-
metadata.warnings
|
|
419
|
+
metadata.warnings?.push("Invalid origin trial token: invalid subdomain");
|
|
395
420
|
} else if (!subdomain && !metadata.payload.isThirdParty) {
|
|
396
|
-
metadata.warnings
|
|
421
|
+
metadata.warnings?.push("Invalid origin trial token: invalid third-party origin");
|
|
397
422
|
}
|
|
398
423
|
}
|
|
399
424
|
}
|
|
400
425
|
return metadata;
|
|
401
426
|
}
|
|
402
427
|
function decodeOriginTrialToken(token) {
|
|
428
|
+
if (!token) throw new Error("Missing token");
|
|
403
429
|
const buffer = new Uint8Array([...atob(token)].map((a) => a.charCodeAt(0)));
|
|
404
430
|
const view = new DataView(buffer.buffer);
|
|
405
431
|
const length = view.getUint32(65, false);
|
|
@@ -411,9 +437,9 @@ function isSameOrigin(a, b) {
|
|
|
411
437
|
return new URL(a).origin === new URL(b).origin;
|
|
412
438
|
}
|
|
413
439
|
function isSubdomain(a, b) {
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
return
|
|
440
|
+
const urlA = new URL(a);
|
|
441
|
+
const urlB = new URL(b);
|
|
442
|
+
return urlB.host.endsWith(`.${urlA.host}`);
|
|
417
443
|
}
|
|
418
444
|
function isDefaultStyle(element, adapter) {
|
|
419
445
|
if (adapter.getTagName(element) !== "meta") return false;
|
|
@@ -594,7 +620,7 @@ function validateContentType(element, adapter) {
|
|
|
594
620
|
}
|
|
595
621
|
function validateHttpEquiv(element, adapter) {
|
|
596
622
|
const warnings = [];
|
|
597
|
-
const type = adapter.getAttribute(element, "http-equiv")
|
|
623
|
+
const type = adapter.getAttribute(element, "http-equiv")?.toLowerCase() || "";
|
|
598
624
|
const content = adapter.getAttribute(element, "content")?.toLowerCase();
|
|
599
625
|
switch (type) {
|
|
600
626
|
case "content-security-policy":
|
|
@@ -776,14 +802,16 @@ function validateMetaViewport(element, adapter) {
|
|
|
776
802
|
warnings.push(`Invalid maximum zoom level "${maxScale}". Values must be between 0.1 and 10.`);
|
|
777
803
|
}
|
|
778
804
|
if (maxScale < 2) {
|
|
779
|
-
warnings.push(
|
|
805
|
+
warnings.push(
|
|
806
|
+
`Disabling zoom levels under 2x can cause accessibility issues. Found "maximum-scale=${directives["maximum-scale"]}".`
|
|
807
|
+
);
|
|
780
808
|
}
|
|
781
809
|
}
|
|
782
810
|
if ("user-scalable" in directives) {
|
|
783
811
|
const userScalable = directives["user-scalable"];
|
|
784
812
|
if (userScalable == "no" || userScalable == "0") {
|
|
785
813
|
warnings.push(
|
|
786
|
-
`Disabling zooming can cause accessibility issues to users with visual impairments. Found "
|
|
814
|
+
`Disabling zooming can cause accessibility issues to users with visual impairments. Found "user-scalable=${userScalable}".`
|
|
787
815
|
);
|
|
788
816
|
}
|
|
789
817
|
if (!["0", "1", "yes", "no"].includes(userScalable)) {
|
|
@@ -826,6 +854,7 @@ function validateMetaViewport(element, adapter) {
|
|
|
826
854
|
return false;
|
|
827
855
|
}
|
|
828
856
|
if (directive == "viewport-fit") {
|
|
857
|
+
return false;
|
|
829
858
|
}
|
|
830
859
|
return true;
|
|
831
860
|
}).forEach((directive) => {
|
|
@@ -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,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})}}()})();
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
init();
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* @returns {Promise<chrome.scripting.InjectionTarget>}
|
|
5
|
+
*/
|
|
3
6
|
async function getCurrentTab() {
|
|
4
7
|
let [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
|
|
5
|
-
|
|
8
|
+
if (!tab) {
|
|
9
|
+
[tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true });
|
|
10
|
+
}
|
|
11
|
+
return { tabId: tab?.id || 0 };
|
|
6
12
|
}
|
|
7
13
|
|
|
14
|
+
/**
|
|
15
|
+
* @returns {Promise<void>}
|
|
16
|
+
*/
|
|
8
17
|
async function init() {
|
|
9
|
-
await chrome.storage.local.remove("data");
|
|
10
|
-
|
|
11
|
-
await chrome.scripting.executeScript({
|
|
12
|
-
target: await getCurrentTab(),
|
|
13
|
-
files: ["capo.js"],
|
|
14
|
-
});
|
|
15
|
-
|
|
16
18
|
chrome.storage.onChanged.addListener((changes) => {
|
|
17
19
|
console.log("Storage changed", changes);
|
|
18
20
|
const { data } = changes;
|
|
@@ -20,57 +22,93 @@ async function init() {
|
|
|
20
22
|
print(data.newValue);
|
|
21
23
|
}
|
|
22
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
|
+
}
|
|
23
37
|
}
|
|
24
38
|
|
|
39
|
+
/**
|
|
40
|
+
* @param {any} result
|
|
41
|
+
*/
|
|
25
42
|
function print(result) {
|
|
26
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
|
+
|
|
27
50
|
let frag = document.createDocumentFragment();
|
|
28
51
|
for (let r of result.actual) {
|
|
29
52
|
frag.appendChild(getCapoHeadElement(r));
|
|
30
53
|
}
|
|
31
|
-
|
|
54
|
+
if (actualEl) actualEl.appendChild(frag);
|
|
32
55
|
|
|
33
|
-
result.sorted = result.actual.sort((a, b) => {
|
|
56
|
+
result.sorted = result.actual.slice().sort((/** @type {any} */ a, /** @type {any} */ b) => {
|
|
34
57
|
return b.weight - a.weight;
|
|
35
58
|
});
|
|
36
59
|
frag = document.createDocumentFragment();
|
|
37
60
|
for (let r of result.sorted) {
|
|
38
61
|
frag.appendChild(getCapoHeadElement(r));
|
|
39
62
|
}
|
|
40
|
-
|
|
63
|
+
if (sortedEl) sortedEl.appendChild(frag);
|
|
41
64
|
document.body.addEventListener("click", handleCapoClick);
|
|
42
65
|
}
|
|
43
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
|
+
*/
|
|
44
77
|
function getCapoHeadElement({
|
|
45
78
|
weight,
|
|
46
79
|
color,
|
|
47
80
|
selector,
|
|
48
|
-
|
|
81
|
+
html,
|
|
49
82
|
isValid,
|
|
50
83
|
customValidations,
|
|
51
84
|
}) {
|
|
52
85
|
const span = document.createElement("span");
|
|
53
86
|
span.classList.add("capo-head-element");
|
|
54
87
|
span.classList.toggle("invalid", !isValid);
|
|
55
|
-
span.dataset.weight = weight;
|
|
88
|
+
span.dataset.weight = String(weight);
|
|
56
89
|
span.style.backgroundColor = color;
|
|
57
90
|
span.dataset.selector = selector;
|
|
58
|
-
span.dataset.
|
|
91
|
+
span.dataset.html = html;
|
|
59
92
|
span.dataset.customValidations = JSON.stringify(customValidations);
|
|
60
93
|
span.title = `[${weight + 1}] ${selector}`;
|
|
61
94
|
return span;
|
|
62
95
|
}
|
|
63
96
|
|
|
97
|
+
/**
|
|
98
|
+
* @param {MouseEvent} event
|
|
99
|
+
*/
|
|
64
100
|
async function handleCapoClick(event) {
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
const
|
|
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");
|
|
68
106
|
|
|
69
107
|
await chrome.storage.local.set({
|
|
70
108
|
click: JSON.stringify({
|
|
71
109
|
weight,
|
|
72
110
|
selector,
|
|
73
|
-
|
|
111
|
+
html,
|
|
74
112
|
isValid,
|
|
75
113
|
customValidations,
|
|
76
114
|
}),
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
"service_worker": "background.js"
|
|
18
|
+
},
|
|
19
|
+
"content_security_policy": {
|
|
20
|
+
"extension_pages": "default-src 'self'; style-src 'self';"
|
|
21
|
+
},
|
|
22
|
+
"icons": {
|
|
23
|
+
"128": "images/icon128.png",
|
|
24
|
+
"256": "images/icon256.png"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -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)}()})();
|
|
Binary file
|