UNPKG

postcss-perfectionist

Version:
96 lines (80 loc) 3.02 kB
'use strict'; exports.__esModule = true; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; exports.maxAtRuleLength = maxAtRuleLength; exports.maxSelectorLength = maxSelectorLength; exports.maxValueLength = maxValueLength; var _postcss = require('postcss'); var _space = require('./space'); var _space2 = _interopRequireDefault(_space); var _getIndent = require('./getIndent'); var _getIndent2 = _interopRequireDefault(_getIndent); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function splitProperty(rule, prop, opts) { var _reindent$opts = _extends({ reindent: false }, opts); var breakEvery = _reindent$opts.breakEvery; var reindent = _reindent$opts.reindent; var reduce = _reindent$opts.reduce; var max = _reindent$opts.max; var property = rule[prop]; if (!max || !property) { return; } var exploded = _postcss.list.comma(property); if (property.length > max || reduce) { (function () { var indent = 0; if (typeof reindent === 'function') { indent = reindent(rule); } rule[prop] = exploded.reduce(function (lines, chunk) { if (breakEvery) { lines.push(chunk); return lines; } if (lines[lines.length - 1].length + indent <= max) { var merged = lines[lines.length - 1] + ', ' + chunk; if (indent + merged.length <= max) { lines[lines.length - 1] = merged; return lines; } } lines.push(chunk); return lines; }, [exploded.shift()]).join(',\n' + (0, _space2.default)(indent)); })(); } } function maxAtRuleLength(rule, _ref) { var max = _ref.maxAtRuleLength; return splitProperty(rule, 'params', { max: max, breakEvery: true, reindent: function reindent(r) { return r.name.length + 2; } }); } function maxSelectorLength(rule, opts) { return splitProperty(rule, 'selector', { max: opts.maxSelectorLength, reduce: true, // where possible reduce to one line reindent: function reindent(r) { return (0, _getIndent2.default)(r, opts.indentSize).length; } }); } function maxValueLength(rule, opts) { if (rule.raws.value && rule.raws.value.raw) { rule.value = rule.raws.value.raw; } return splitProperty(rule, 'value', { max: opts.maxValueLength, breakEvery: true, reindent: function reindent(r) { return (0, _getIndent2.default)(r, opts.indentSize).length + r.prop.length + 2; } }); }