postcss-atrule-bem
Version:
Transpile BEM Components to valid CSS
100 lines (81 loc) • 2.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
function childValidated(child, parent, VALID_CHILDREN) {
return VALID_CHILDREN[parent.name].indexOf(child.name) !== -1;
}
function cleanChildren(container, VALID_RULES) {
var clone = container.clone();
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
var _loop = function _loop() {
var rule = _step.value;
rule.nodes.reduce(function (a, c) {
if (c.type !== 'atrule') return a;
if (c.__atrulebem__ && !c.__atrulebem__.valid) return a;
if (VALID_RULES.indexOf(c.name) === -1) return a;
a.push(c);
return a;
}, []).forEach(function (_) {
return rule.removeChild(_);
});
};
for (var _iterator = clone.nodes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
_loop();
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return clone;
}
function getPrefix(type, ELEMENT, MODIFIER, OPTIONS) {
switch (type) {
case ELEMENT:
return OPTIONS.separators.element;
case MODIFIER:
return OPTIONS.separators.modifier;
default:
return '.';
}
}
function generateSelector(_ref, ELEMENT, MODIFIER, OPTIONS) {
var name = _ref.name,
params = _ref.params;
var prefix = getPrefix(name, ELEMENT, MODIFIER, OPTIONS);
return params.split(',').reduce(function (all, curr) {
return [].concat(all, '' + prefix + curr.trim());
}, []);
}
function prependAonB(a, b) {
var MERGED = [];
var aL = a.length;
var bL = b.length;
var aC = 0;
for (; aC < aL; aC++) {
var aCurr = a[aC];
var bC = 0;
for (; bC < bL; bC++) {
var bCurr = b[bC];
MERGED.push('' + aCurr + bCurr);
}
}
return MERGED;
}
exports.cleanChildren = cleanChildren;
exports.childValidated = childValidated;
exports.generateSelector = generateSelector;
exports.prependAonB = prependAonB;