You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
2.8 KiB

'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _postcss = require('postcss');
var _postcss2 = _interopRequireDefault(_postcss);
var _postcssValueParser = require('postcss-value-parser');
var _postcssValueParser2 = _interopRequireDefault(_postcssValueParser);
var _animation = require('./rules/animation');
var _animation2 = _interopRequireDefault(_animation);
var _border = require('./rules/border');
var _border2 = _interopRequireDefault(_border);
var _boxShadow = require('./rules/boxShadow');
var _boxShadow2 = _interopRequireDefault(_boxShadow);
var _flexFlow = require('./rules/flexFlow');
var _flexFlow2 = _interopRequireDefault(_flexFlow);
var _transition = require('./rules/transition');
var _transition2 = _interopRequireDefault(_transition);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/* eslint-disable quote-props */
const rules = {
'animation': _animation2.default,
'-webkit-animation': _animation2.default,
'border': _border2.default,
'border-top': _border2.default,
'border-right': _border2.default,
'border-bottom': _border2.default,
'border-left': _border2.default,
'outline': _border2.default,
'box-shadow': _boxShadow2.default,
'flex-flow': _flexFlow2.default,
'transition': _transition2.default,
'-webkit-transition': _transition2.default
};
/* eslint-enable */
// rules
function shouldAbort(parsed) {
let abort = false;
parsed.walk(({ type, value }) => {
if (type === 'comment' || type === 'function' && value.toLowerCase() === 'var' || type === 'word' && ~value.indexOf(`___CSS_LOADER_IMPORT___`)) {
abort = true;
return false;
}
});
return abort;
}
function getValue(decl) {
let { value, raws } = decl;
if (raws && raws.value && raws.value.raw) {
value = raws.value.raw;
}
return value;
}
exports.default = _postcss2.default.plugin('postcss-ordered-values', () => {
return css => {
const cache = {};
css.walkDecls(decl => {
const lowerCasedProp = decl.prop.toLowerCase();
const processor = rules[lowerCasedProp];
if (!processor) {
return;
}
const value = getValue(decl);
if (cache[value]) {
decl.value = cache[value];
return;
}
const parsed = (0, _postcssValueParser2.default)(value);
if (parsed.nodes.length < 2 || shouldAbort(parsed)) {
cache[value] = value;
return;
}
const result = processor(parsed);
decl.value = result;
cache[value] = result;
});
};
});
module.exports = exports['default'];