From 10ec525d7bc21a95c9c8dd40f2e06c6c328c4446 Mon Sep 17 00:00:00 2001 From: Bart Veneman Date: Mon, 22 Apr 2019 22:02:51 +0200 Subject: [PATCH] add prefixed keyframes analysis --- readme.md | 4 ++++ src/analyzer/atrules/keyframes.js | 23 +++++++++++------------ test/analyzer/atrules/keyframes.js | 15 ++++++++------- test/analyzer/index.js | 4 ++++ 4 files changed, 27 insertions(+), 19 deletions(-) diff --git a/readme.md b/readme.md index c0881da..04fec1c 100644 --- a/readme.md +++ b/readme.md @@ -53,6 +53,10 @@ analyze('foo{}') // 'atrules.keyframes.total': 0, // 'atrules.keyframes.totalUnique': 0, // 'atrules.keyframes.unique': [], +// 'atrules.keyframes.prefixed.total': 0, +// 'atrules.keyframes.prefixed.totalUnique': 0, +// 'atrules.keyframes.prefixed.unique': [], +// 'atrules.keyframes.prefixed.share': 0, // 'atrules.mediaqueries.total': 0, // 'atrules.mediaqueries.totalUnique': 0, // 'atrules.mediaqueries.unique': [], diff --git a/src/analyzer/atrules/keyframes.js b/src/analyzer/atrules/keyframes.js index ebdb2bc..b28aca3 100644 --- a/src/analyzer/atrules/keyframes.js +++ b/src/analyzer/atrules/keyframes.js @@ -1,20 +1,19 @@ +const isVendorPrefixed = require('is-vendor-prefixed') const uniquer = require('../../utils/uniquer') module.exports = atRules => { - const all = atRules - .filter(rule => { - return [ - 'keyframes', - '-moz-keyframes', - '-webkit-keyframes', - '-ms-keyframes', - '-o-keyframes' - ].includes(rule.type) - }) - .map(rule => rule.params) + const all = atRules.filter(rule => rule.type.includes('keyframes')) + const prefixed = all + .filter(rule => isVendorPrefixed(rule.type)) + .map(rule => `@${rule.type} ${rule.params}`) return { total: all.length, - ...uniquer(all) + ...uniquer(all.map(rule => rule.params)), + prefixed: { + total: prefixed.length, + ...uniquer(prefixed), + share: prefixed.length === 0 ? 0 : all.length / prefixed.length + } } } diff --git a/test/analyzer/atrules/keyframes.js b/test/analyzer/atrules/keyframes.js index 2f11330..f8116b2 100644 --- a/test/analyzer/atrules/keyframes.js +++ b/test/analyzer/atrules/keyframes.js @@ -36,7 +36,8 @@ test('it responds with the correct structure', t => [ prefixed: { total: 0, totalUnique: 0, - unique: [] + unique: [], + share: 0 } }) ]) @@ -85,6 +86,7 @@ test('it finds all vendor prefixed keyframes', t => { t.is(actual.total, 4) t.is(actual.totalUnique, 4) + t.is(actual.share, 1) t.deepEqual(actual.unique, [ { count: 1, @@ -120,7 +122,8 @@ test('it does not report non-vendor prefixed keyframes as prefixed', t => { t.is(actual.total, 0) t.is(actual.totalUnique, 0) - t.is(actual.unique, []) + t.is(actual.share, 0) + t.deepEqual(actual.unique, []) }) test('it does not report non-@keyframes atrules as @keyframes', t => { @@ -135,9 +138,7 @@ test('it does not report non-@keyframes atrules as @keyframes', t => { } ]) - t.deepEqual(actual, { - total: 0, - totalUnique: 0, - unique: [] - }) + t.is(actual.total, 0) + t.is(actual.totalUnique, 0) + t.deepEqual(actual.unique, []) }) diff --git a/test/analyzer/index.js b/test/analyzer/index.js index 1c6c415..9d66bd5 100644 --- a/test/analyzer/index.js +++ b/test/analyzer/index.js @@ -33,6 +33,10 @@ test('Returns the correct analysis object structure', async t => { 'atrules.keyframes.total': 0, 'atrules.keyframes.totalUnique': 0, 'atrules.keyframes.unique': [], + 'atrules.keyframes.prefixed.total': 0, + 'atrules.keyframes.prefixed.totalUnique': 0, + 'atrules.keyframes.prefixed.unique': [], + 'atrules.keyframes.prefixed.share': 0, 'atrules.mediaqueries.total': 0, 'atrules.mediaqueries.totalUnique': 0, 'atrules.mediaqueries.unique': [],