react-saasify-chrisvxd
Version:
React components for Saasify web clients.
75 lines (59 loc) • 2.31 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
exports.default = removeUnusedCss;
var _helpers = require('../helpers');
var _uncss = require('uncss');
var _uncss2 = _interopRequireDefault(_uncss);
var _posthtmlRender = require('posthtml-render');
var _posthtmlRender2 = _interopRequireDefault(_posthtmlRender);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// These options must be set and shouldn't be overriden to ensure uncss doesn't look at linked stylesheets.
var uncssOptions = {
ignoreSheets: [/\s*/],
stylesheets: []
};
/** Remove unused CSS using uncss */
function removeUnusedCss(tree, options, uncssOptions) {
var promises = [];
var html = (0, _posthtmlRender2.default)(tree);
tree.walk(function (node) {
if ((0, _helpers.isStyleNode)(node)) {
promises.push(processStyleNode(html, node, uncssOptions));
}
return node;
});
return Promise.all(promises).then(function () {
return tree;
});
}
function processStyleNode(html, styleNode, uncssOptions) {
var css = (0, _helpers.extractCssFromStyleNode)(styleNode);
return runUncss(html, css, uncssOptions).then(function (css) {
// uncss may have left some style tags empty
if (css.trim().length === 0) {
styleNode.tag = false;
styleNode.content = [];
return;
}
styleNode.content = [css];
});
}
function runUncss(html, css, userOptions) {
if ((typeof userOptions === 'undefined' ? 'undefined' : _typeof(userOptions)) !== 'object') {
userOptions = {};
}
var options = Object.assign({}, userOptions, uncssOptions);
return new Promise(function (resolve, reject) {
options.raw = css;
(0, _uncss2.default)(html, options, function (error, output) {
if (error) {
reject(error);
return;
}
resolve(output);
});
});
}
;