diff --git a/src/atrules/atrules.test.js b/src/atrules/atrules.test.js index d2ff907..498c595 100644 --- a/src/atrules/atrules.test.js +++ b/src/atrules/atrules.test.js @@ -624,6 +624,38 @@ AtRules('finds @media browserhacks', () => { assert.equal(actual, expected) }) +AtRules('finds Media Features', () => { + const fixture = ` + @media (min-width: 0) {} + @media (max-width: 0) {} + @media (hover) {} + @media (forced-colors: none) {} + @media (prefers-color-scheme: dark) {} + @media (prefers-reduced-motion: reduce) {} + @media (prefers-contrast: more) {} + + @media screen and (50px <= width <= 100px), (min-height: 100px) {} + ` + const actual = analyze(fixture).atrules.media.features + const expected = { + total: 8, + totalUnique: 8, + unique: { + 'min-width': 1, + 'max-width': 1, + 'hover': 1, + 'forced-colors': 1, + 'prefers-color-scheme': 1, + 'prefers-reduced-motion': 1, + 'prefers-contrast': 1, + 'min-height': 1, + }, + uniquenessRatio: 8 / 8, + } + + assert.equal(actual, expected) +}) + AtRules('does not crash on incomplete @media queries', () => { let css = ` @media (min-width) {} diff --git a/src/index.js b/src/index.js index ba3e56c..88b9c9e 100644 --- a/src/index.js +++ b/src/index.js @@ -119,6 +119,7 @@ export function analyze(css, options = {}) { let imports = new Collection(useLocations) let medias = new Collection(useLocations) let mediaBrowserhacks = new Collection(useLocations) + let mediaFeatures = new Collection(useLocations) let charsets = new Collection(useLocations) let supports = new Collection(useLocations) let supportsBrowserhacks = new Collection(useLocations) @@ -283,6 +284,10 @@ export function analyze(css, options = {}) { } break } + case 'Feature': { + mediaFeatures.p(node.name, node.loc) + break + } case Rule: { let prelude = node.prelude let block = node.block @@ -747,6 +752,7 @@ export function analyze(css, options = {}) { medias.c(), { browserhacks: mediaBrowserhacks.c(), + features: mediaFeatures.c(), } ), charset: charsets.c(), diff --git a/src/index.test.js b/src/index.test.js index 4397a7e..37555fd 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -110,6 +110,12 @@ Api("handles empty input gracefully", () => { unique: {}, uniquenessRatio: 0, }, + features: { + total: 0, + totalUnique: 0, + unique: {}, + uniquenessRatio: 0, + }, }, charset: { total: 0,