UNPKG

scancss

Version:

A robust CSS stylesheet statistics collector and analyzer

65 lines (51 loc) 2.02 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.handlePerformanceHacks = handlePerformanceHacks; var _postcssValuesParser = require('postcss-values-parser'); var _postcssValuesParser2 = _interopRequireDefault(_postcssValuesParser); var _countUsage = require('../../../calculators/countUsage'); var _isSafeAst = require('../../../predicates/isSafeAst'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const reTranslate3dHack = /translate3d\(\s*0\s*,\s*0\s*,\s*0\s*\)/i; const reTranslateZHack = /translateZ\(\s*0\s*\)/i; const reRotateZHack = /rotateZ\(\s*(360deg|400grad|1turn|6\.2832rad)\s*\)/i; function walkNodes(nodes, decl, report) { nodes.forEach(node => { /* istanbul ignore else */ if (node.type === 'func') { const wholeFunc = String(node); const wholeDecl = String(decl); if (reTranslate3dHack.test(wholeFunc)) { (0, _countUsage.countUsage)(wholeDecl, report.properties.performanceHacks); } if (reTranslateZHack.test(wholeFunc)) { (0, _countUsage.countUsage)(wholeDecl, report.properties.performanceHacks); } if (reRotateZHack.test(wholeFunc)) { (0, _countUsage.countUsage)(wholeDecl, report.properties.performanceHacks); } } }); } function handlePerformanceHacks(decl, report) { if (decl.prop.endsWith('transform')) { try { const ast = (0, _postcssValuesParser2.default)(decl.value).parse(); /* istanbul ignore else */ if ((0, _isSafeAst.isSafeAst)(ast)) { walkNodes(ast.nodes[0].nodes, decl, report); } } catch (err) { /* istanbul ignore next */ /* eslint-disable-next-line no-console */ console.log(`'postcss-values-parser' module error\n${err}`); } } if (decl.prop === 'will-change') { (0, _countUsage.countUsage)(String(decl), report.properties.performanceHacks); } else if (decl.prop === 'contain' && decl.value.trim() !== 'none') { (0, _countUsage.countUsage)(String(decl), report.properties.performanceHacks); } }