UNPKG

grunt-cache-bust-alt

Version:

An alternative version of Bust static assets from the cache using content hashing

55 lines (43 loc) 1.88 kB
'use strict'; var css = require('css'); var flatten = require('flatten'); var utils = require('./utils'); module.exports = function(data) { var paths = []; var cssObj = css.parse(data); var filterDeclarations = function(declaration) { var hasBackgroundUrl = (/background/).test(declaration.property) && (/url/).test(declaration.value); var hasContentUrl = (/content/).test(declaration.property) && (/url/).test(declaration.value); var hasSrcUrl = (/src/).test(declaration.property) && (/url/).test(declaration.value); var dataImage = (/data\:image\//).test(declaration.value); // Check if it has a background property, and if so, check that it contains a URL return (hasBackgroundUrl || hasContentUrl || hasSrcUrl) && !dataImage; }; var extractDeclaration = function(declaration) { return declaration.value.split(',') .map(function(val) { var matches = val.match(/url\(["']?(.*?)['"]?\)/); if (matches) { return matches[1]; } }); }; // Loop through each stylesheet rules cssObj.stylesheet.rules.forEach(function(rule) { var mediaQueryDeclarations = rule.type !== 'media' ? [] : rule.rules.reduce(function(acc, rule) { if (rule.declarations) { return acc.concat(rule.declarations); } return acc; }, []); var declarations = (rule.declarations || []).concat(mediaQueryDeclarations); // Loop through all declarations if (declarations && declarations.length > 0) { var foundDeclarations = declarations .filter(filterDeclarations) .map(extractDeclaration); paths = paths.concat(foundDeclarations); } }); return flatten(paths); };