Skip to content

Commit 7dc6a0d

Browse files
authored
[WIP] Adds css value hacks analysis (#69)
* Adds css value hacks analysis * Adds css property hacks analysis
1 parent bce5aac commit 7dc6a0d

File tree

21 files changed

+357
-88
lines changed

21 files changed

+357
-88
lines changed

.prettierignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
**/*.css

package-lock.json

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

package.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,26 @@
2828
"space": true,
2929
"semicolon": false
3030
},
31+
"prettier": {
32+
"semi": false,
33+
"singleQuote": true,
34+
"bracketSpacing": false,
35+
"overrides": [
36+
{
37+
"files": "*.json",
38+
"options": {
39+
"useTabs": false
40+
}
41+
}
42+
]
43+
},
3144
"dependencies": {
3245
"color-sorter": "^2.2.0",
3346
"css-color-names": "^1.0.0",
47+
"css-property-browser-h4cks-analyzer": "^1.0.1",
3448
"css-shorthand-expand": "^1.2.0",
3549
"css-unit-sort": "^1.1.1",
50+
"css-value-browser-h4cks-analyzer": "^1.0.1",
3651
"path": "^0.12.7",
3752
"postcss": "^7.0.2",
3853
"postcss-values-parser": "^2.0.0",

src/analyzer/index.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ module.exports = input => {
1515
input,
1616
rules,
1717
selectors,
18-
declarations
18+
declarations,
19+
properties,
20+
values
1921
)
2022

2123
resolve({
@@ -27,8 +29,8 @@ module.exports = input => {
2729
properties,
2830
values
2931
})
30-
} catch (err) {
31-
reject(err)
32+
} catch (error) {
33+
reject(error)
3234
}
3335
})
3436
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const isBrowserHack = require('css-property-browser-h4cks-analyzer')
2+
const uniquer = require('../../utils/uniquer')
3+
4+
module.exports = properties => {
5+
const all = properties.filter(isBrowserHack)
6+
const {unique, totalUnique} = uniquer(all)
7+
8+
return {
9+
total: all.length,
10+
unique,
11+
totalUnique
12+
}
13+
}

src/analyzer/properties/index.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1-
const uniquer = require('../../utils/uniquer')
1+
const uniquer = require('../../utils/uniquer.js')
22

33
module.exports = declarations => {
4-
const all = declarations
5-
.map(declaration => declaration.property)
4+
const all = declarations.map(declaration => declaration.property)
65

7-
const prefixed = require('./prefixed')(all)
6+
const prefixed = require('./prefixed.js')(all)
7+
const browserhacks = require('./browserhacks.js')(all)
88

99
return {
1010
total: all.length,
1111
...uniquer(all),
12-
prefixed
12+
prefixed,
13+
browserhacks
1314
}
1415
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
module.exports = (properties, values) => {
2+
const {total, totalUnique} = [properties, values]
3+
.map(metric => metric.browserhacks)
4+
.reduce(
5+
(totals, current) => {
6+
totals.total += current.total
7+
totals.totalUnique += current.totalUnique
8+
return totals
9+
},
10+
{
11+
total: 0,
12+
totalUnique: 0
13+
}
14+
)
15+
16+
return {
17+
total,
18+
totalUnique
19+
}
20+
}

src/analyzer/stylesheets/index.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
module.exports = (raw, rules, selectors, declarations) => {
1+
module.exports = (raw, rules, selectors, declarations, properties, values) => {
22
const size = Buffer.byteLength(raw, 'utf8')
3-
const simplicity = require('./simplicity')(rules, selectors)
4-
const cohesion = require('./cohesion')(rules, declarations)
3+
const simplicity = require('./simplicity.js')(rules, selectors)
4+
const cohesion = require('./cohesion.js')(rules, declarations)
5+
const browserhacks = require('./browserhacks.js')(properties, values)
56

67
return {
78
size,
89
simplicity,
9-
cohesion
10+
cohesion,
11+
browserhacks
1012
}
1113
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
const isBrowserHack = require('css-value-browser-h4cks-analyzer')
2+
const uniquer = require('../../utils/uniquer')
3+
4+
module.exports = declarations => {
5+
const all = declarations
6+
.filter(declaration => isBrowserHack(declaration.value))
7+
.map(declaration => declaration.value)
8+
9+
const {unique, totalUnique} = uniquer(all)
10+
11+
return {
12+
total: all.length,
13+
unique,
14+
totalUnique
15+
}
16+
}

src/analyzer/values/index.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,18 @@ module.exports = declarations => {
22
const all = declarations
33
.map(declaration => declaration.value)
44

5-
const prefixed = require('./prefixed')(all)
6-
const fontsizes = require('./font-sizes')(declarations)
7-
const fontfamilies = require('./font-families')(declarations)
8-
const colors = require('./colors')(declarations)
5+
const prefixed = require('./prefixed.js')(all)
6+
const fontsizes = require('./font-sizes.js')(declarations)
7+
const fontfamilies = require('./font-families.js')(declarations)
8+
const colors = require('./colors.js')(declarations)
9+
const browserhacks = require('./browserhacks.js')(declarations)
910

1011
return {
1112
total: all.length,
1213
prefixed,
1314
fontsizes,
1415
fontfamilies,
15-
colors
16+
colors,
17+
browserhacks
1618
}
1719
}

0 commit comments

Comments
 (0)