UNPKG

react-saasify-chrisvxd

Version:

React components for Saasify web clients.

60 lines (48 loc) 2.04 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = minifyCss; var _helpers = require('../helpers'); var _cssnano = require('cssnano'); var _cssnano2 = _interopRequireDefault(_cssnano); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var postcssOptions = { // Prevent the following warning from being shown: // > Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. // > Set it to CSS file path or to `undefined` to prevent this warning. from: undefined }; /** Minify CSS with cssnano */ function minifyCss(tree, options, cssnanoOptions) { var promises = []; tree.walk(function (node) { if ((0, _helpers.isStyleNode)(node)) { promises.push(processStyleNode(node, cssnanoOptions)); } else if (node.attrs && node.attrs.style) { promises.push(processStyleAttr(node, cssnanoOptions)); } return node; }); return Promise.all(promises).then(function () { return tree; }); } function processStyleNode(styleNode, cssnanoOptions) { var css = (0, _helpers.extractCssFromStyleNode)(styleNode); return _cssnano2.default.process(css, postcssOptions, cssnanoOptions).then(function (result) { return styleNode.content = [result.css]; }); } function processStyleAttr(node, cssnanoOptions) { // CSS "color: red;" is invalid. Therefore it should be wrapped inside some selector: // a{color: red;} var wrapperStart = 'a{'; var wrapperEnd = '}'; var wrappedStyle = wrapperStart + (node.attrs.style || '') + wrapperEnd; return _cssnano2.default.process(wrappedStyle, postcssOptions, cssnanoOptions).then(function (result) { var minifiedCss = result.css; // Remove wrapperStart at the start and wrapperEnd at the end of minifiedCss node.attrs.style = minifiedCss.substring(wrapperStart.length, minifiedCss.length - wrapperEnd.length); }); }