Files
Monkey-Test/WebDriverAgent/Inspector/node_modules/cssnano/index.js
T
2019-01-25 17:01:52 +08:00

100 lines
3.7 KiB
JavaScript

'use strict';
var decamelize = require('decamelize');
var defined = require('defined');
var postcss = require('postcss');
var warnOnce = require('./lib/warnOnce');
var processors = {
postcssFilterPlugins: function () {
return require('postcss-filter-plugins')({silent: true});
},
postcssDiscardComments: {fn: require('postcss-discard-comments'), ns: 'comments'},
autoprefixer: require('autoprefixer-core'),
postcssZindex: {fn: require('postcss-zindex')},
postcssMinifyFontWeight: require('postcss-minify-font-weight'),
postcssConvertValues: require('postcss-convert-values'),
postcssCalc: {fn: require('postcss-calc')},
postcssColormin: require('postcss-colormin'),
postcssOrderedValues: require('postcss-ordered-values'),
filterOptimiser: require('./lib/filterOptimiser'),
postcssMinifySelectors: require('postcss-minify-selectors'),
postcssSingleCharset: require('postcss-single-charset'),
// font-family should be run before discard-unused
postcssFontFamily: {fn: require('postcss-font-family'), ns: 'fonts'},
postcssDiscardUnused: {fn: require('postcss-discard-unused'), ns: 'unused'},
postcssNormalizeUrl: {fn: require('postcss-normalize-url'), ns: 'urls'},
core: require('./lib/core'),
// Optimisations after this are sensitive to previous optimisations in
// the pipe, such as whitespace normalising/selector re-ordering
postcssMergeIdents: {fn: require('postcss-merge-idents'), ns: 'idents'},
postcssReduceIdents: {fn: require('postcss-reduce-idents'), ns: 'idents'},
postcssMergeLonghand: require('postcss-merge-longhand'),
postcssDiscardDuplicates: require('postcss-discard-duplicates'),
functionOptimiser: require('./lib/functionOptimiser'),
postcssMergeRules: {fn: require('postcss-merge-rules'), ns: 'merge'},
postcssDiscardEmpty: require('postcss-discard-empty'),
postcssUniqueSelectors: require('postcss-unique-selectors'),
styleCache: require('./lib/styleCache')
};
var cssnano = postcss.plugin('cssnano', function (options) {
options = options || {};
var proc = postcss();
var plugins = Object.keys(processors);
var len = plugins.length;
var i = 0;
while (i < len) {
var plugin = plugins[i++];
var processor = processors[plugin];
var method = processor;
var shortName = plugin.replace('postcss', '');
shortName = shortName.slice(0, 1).toLowerCase() + shortName.slice(1);
if (typeof processor !== 'function') {
if (typeof options[processor.ns] !== 'undefined') {
warnOnce('The ' + processor.ns + ' option is deprecated. ' +
'Please use options.' + shortName + ' instead.');
options[plugin] = options[processor.ns];
}
method = processor.fn;
}
var opts = defined(
options[shortName],
options[plugin],
options[decamelize(plugin, '-')],
{}
);
if (opts === false || opts.disable) {
continue;
}
if (plugin === 'autoprefixer') {
opts.add = false;
}
proc.use(method(opts));
}
return proc;
});
module.exports = cssnano;
module.exports.process = function (css, options) {
options = options || {};
options.map = options.map || (options.sourcemap ? true : null);
var result = postcss([cssnano(options)]).process(css, options);
// return a css string if inline/no sourcemap.
if (options.map === null || options.map === true || (options.map && options.map.inline)) {
return result.css;
}
// otherwise return an object of css & map
return result;
};