UNPKG

scancss

Version:

A robust CSS stylesheet statistics collector and analyzer

102 lines (72 loc) 3.96 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.handleMediaQueryParams = handleMediaQueryParams; var _postcss = require('postcss'); var _postcss2 = _interopRequireDefault(_postcss); var _cssBrowserHacks = require('../../../constants/cssBrowserHacks'); var _cssDeprecatedMediaTypes = require('../../../constants/cssDeprecatedMediaTypes'); var _reCssMediaFeature = require('../../../constants/reCssMediaFeature'); var _reCssMediaType = require('../../../constants/reCssMediaType'); var _rePrefixedString = require('../../../constants/rePrefixedString'); var _countUsage = require('../../../calculators/countUsage'); var _transformString = require('../../../converters/transformString'); var _trimExtraSpaces = require('../../../converters/trimExtraSpaces'); var _trimSpacesNearColon = require('../../../converters/trimSpacesNearColon'); var _trimSpacesNearCommas = require('../../../converters/trimSpacesNearCommas'); var _trimSpacesNearParentheses = require('../../../converters/trimSpacesNearParentheses'); var _trimTrailingZeros = require('../../../converters/trimTrailingZeros'); var _trimLeadingZeros = require('../../../converters/trimLeadingZeros'); var _isDeprecatedMediaFeature = require('../../../predicates/isDeprecatedMediaFeature'); var _handleVendorPrefix = require('../../handleVendorPrefix'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const reOnlyKeyword = /\bonly\b/g; const cssMediaBrowserHacks = _cssBrowserHacks.cssBrowserHacks.filter(hack => hack.type === 'media'); function handleMediaQueryParams(params, report, options) { _postcss2.default.list.comma(params).forEach(mediaQuery => { report.mediaQueries.total++; const cleanedMediaQuery = (0, _transformString.transformString)(mediaQuery, [_trimExtraSpaces.trimExtraSpaces, _trimSpacesNearCommas.trimSpacesNearCommas, _trimSpacesNearParentheses.trimSpacesNearParentheses, _trimSpacesNearColon.trimSpacesNearColon, _trimTrailingZeros.trimTrailingZeros, _trimLeadingZeros.trimLeadingZeros]); if (reOnlyKeyword.test(cleanedMediaQuery)) { report.mediaQueries.onlyKeyword += cleanedMediaQuery.match(reOnlyKeyword).length; } if (_reCssMediaType.reCssMediaType.test(cleanedMediaQuery)) { cleanedMediaQuery.match(_reCssMediaType.reCssMediaType).forEach(type => { report.mediaQueries.types.total++; (0, _countUsage.countUsage)(type, report.mediaQueries.types.usage); if (_cssDeprecatedMediaTypes.cssDeprecatedMediaTypes.includes(type)) { report.mediaQueries.types.deprecated.total++; (0, _countUsage.countUsage)(type, report.mediaQueries.types.deprecated.usage); } }); } if (_reCssMediaFeature.reCssMediaFeature.test(cleanedMediaQuery)) { cleanedMediaQuery.match(_reCssMediaFeature.reCssMediaFeature).forEach(feature => { if (/^(min|max)--moz-/.test(feature)) { report.mediaQueries.features.prefixed++; (0, _handleVendorPrefix.handleVendorPrefix)('-moz-', report); } else if (_rePrefixedString.rePrefixedString.test(feature)) { report.mediaQueries.features.prefixed++; (0, _handleVendorPrefix.handleVendorPrefix)(feature, report); } if ((0, _isDeprecatedMediaFeature.isDeprecatedMediaFeature)(feature)) { report.mediaQueries.features.deprecated.total++; (0, _countUsage.countUsage)(feature, report.mediaQueries.features.deprecated.usage); } report.mediaQueries.features.total++; (0, _countUsage.countUsage)(feature, report.mediaQueries.features.usage); }); } (0, _countUsage.countUsage)(cleanedMediaQuery, report.mediaQueries.usage); if (options.browserHacks) { cssMediaBrowserHacks.forEach(hack => { if (hack.regex.test(cleanedMediaQuery)) { cleanedMediaQuery.match(hack.regex).forEach(match => { report.browserHacks.total++; (0, _countUsage.countUsage)(match, report.browserHacks.usage.media); }); } }); } }); }