Skip to content

Commit 066175f

Browse files
authored
Analyze at-supports rule browser hacks (#72)
This references #3
1 parent b8332bc commit 066175f

File tree

9 files changed

+84
-17
lines changed

9 files changed

+84
-17
lines changed

package-lock.json

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
},
4444
"dependencies": {
4545
"color-sorter": "^2.2.0",
46+
"css-at-supports-browser-h4cks-analyzer": "^1.0.0",
4647
"css-color-names": "^1.0.0",
4748
"css-media-query-browser-h4cks-analyzer": "^1.0.0",
4849
"css-property-browser-h4cks-analyzer": "^1.0.1",

src/analyzer/atrules/mediaqueries.js

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,13 @@ module.exports = atRules => {
77
.map(rule => rule.params)
88

99
const browserhacks = all.filter(isBrowserHack)
10-
const {
11-
unique: uniqueBrowserHacks,
12-
totalUnique: totalUniqueBrowserhacks
13-
} = uniquer(browserhacks)
1410

1511
return {
1612
total: all.length,
1713
...uniquer(all),
1814
browserhacks: {
1915
total: browserhacks.length,
20-
unique: uniqueBrowserHacks,
21-
totalUnique: totalUniqueBrowserhacks
16+
...uniquer(browserhacks)
2217
}
2318
}
2419
}

src/analyzer/atrules/supports.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
1+
const isBrowserHack = require('css-at-supports-browser-h4cks-analyzer')
12
const uniquer = require('../../utils/uniquer')
23

34
module.exports = atRules => {
45
const all = atRules
56
.filter(rule => rule.type === 'supports')
67
.map(rule => rule.params)
78

9+
const browserhacks = all.filter(isBrowserHack)
10+
811
return {
912
total: all.length,
10-
...uniquer(all)
13+
...uniquer(all),
14+
browserhacks: {
15+
total: browserhacks.length,
16+
...uniquer(browserhacks)
17+
}
1118
}
1219
}
Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
module.exports = (atrules, properties, values) => {
2-
const {total, totalUnique} = [atrules.mediaqueries, properties, values]
1+
module.exports = (atrules, selectors, properties, values) => {
2+
return [atrules.mediaqueries, atrules.supports, selectors, properties, values]
33
.map(metric => metric.browserhacks)
44
.reduce(
55
(totals, current) => {
@@ -12,9 +12,4 @@ module.exports = (atrules, properties, values) => {
1212
totalUnique: 0
1313
}
1414
)
15-
16-
return {
17-
total,
18-
totalUnique
19-
}
2015
}

src/analyzer/stylesheets/index.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@ module.exports = (
1010
const size = Buffer.byteLength(raw, 'utf8')
1111
const simplicity = require('./simplicity.js')(rules, selectors)
1212
const cohesion = require('./cohesion.js')(rules, declarations)
13-
const browserhacks = require('./browserhacks.js')(atrules, properties, values)
13+
const browserhacks = require('./browserhacks.js')(
14+
atrules,
15+
selectors,
16+
properties,
17+
values
18+
)
1419

1520
return {
1621
size,

test/analyzer/atrules/supports/output.json

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,15 @@
1414
"value": "(filter: blur(5px))",
1515
"count": 1
1616
}
17-
]
17+
],
18+
"browserhacks": {
19+
"total": 2,
20+
"unique": [
21+
{
22+
"value": "(-webkit-appearance:none)",
23+
"count": 2
24+
}
25+
],
26+
"totalUnique": 1
27+
}
1828
}

test/analyzer/index.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,12 @@ test('Returns the correct analysis object structure', async t => {
6161
supports: {
6262
total: 0,
6363
totalUnique: 0,
64-
unique: []
64+
unique: [],
65+
browserhacks: {
66+
total: 0,
67+
unique: [],
68+
totalUnique: 0
69+
}
6570
}
6671
},
6772
declarations: {
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
const test = require('ava')
2+
const analyze = require('../../../src/analyzer/stylesheets/browserhacks.js')
3+
4+
test('it counts the totals of browserhacks correctly', t => {
5+
const atRules = {
6+
mediaqueries: {
7+
browserhacks: {
8+
total: 1,
9+
totalUnique: 1
10+
}
11+
},
12+
supports: {
13+
browserhacks: {
14+
total: 2,
15+
totalUnique: 2
16+
}
17+
}
18+
}
19+
const selectors = {
20+
browserhacks: {
21+
total: 1,
22+
totalUnique: 1
23+
}
24+
}
25+
const properties = {
26+
browserhacks: {
27+
total: 1,
28+
totalUnique: 1
29+
}
30+
}
31+
const values = {
32+
browserhacks: {
33+
total: 1,
34+
totalUnique: 1
35+
}
36+
}
37+
const expected = {
38+
total: 6,
39+
totalUnique: 6
40+
}
41+
const actual = analyze(atRules, selectors, properties, values)
42+
43+
t.deepEqual(actual, expected)
44+
})

0 commit comments

Comments
 (0)