UNPKG

react-saasify-chrisvxd

Version:

React components for Saasify web clients.

75 lines (59 loc) 2.31 kB
'use strict'; 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); }); }); }