css-conflict-inspector
Version:
Find potential conflict in your CSS files - to avoid surprises when used in the context of Micro Frontends.
65 lines • 2.48 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.analyzeCss = void 0;
var lightningcss_1 = require("lightningcss");
var inspect_1 = require("./inspect");
var stringify_1 = require("./stringify");
function sum(penalties) {
return Math.ceil(penalties.reduce(function (s, p) { return s + p; }, 0));
}
function analyzeCss(content, options) {
if (options === void 0) { options = {}; }
var conflicts = [];
var selectors = [];
var result = (0, lightningcss_1.transform)({
code: Buffer.from(content, 'utf8'),
filename: 'style.css',
analyzeDependencies: true,
errorRecovery: true,
visitor: {
Selector: function (selector) {
var violations = [];
(0, inspect_1.inspect)(selector, violations, options);
var conflict = violations
.filter(function (v) { return v.penalty; })
.reduce(function (p, c) {
if (p && p.penalty < c.penalty) {
return __assign(__assign({}, c), { penalty: p.penalty });
}
return c;
}, undefined);
if (conflict) {
conflicts.push(conflict);
}
selectors.push((0, stringify_1.stringify)(selector));
},
},
});
var penalties = conflicts.map(function (c) { return c.penalty; });
var totalPenalty = sum(penalties);
var topThree = penalties.sort(function (a, b) { return b - a; }).filter(function (_, i) { return i < 3; });
var maxPenalty = Math.ceil(conflicts.reduce(function (p, c) { return Math.max(p, c.penalty); }, 0));
var score = Math.max(0, 100 - sum(topThree));
return {
selectors: selectors,
conflicts: conflicts,
warnings: result.warnings,
dependencies: result.dependencies,
totalPenalty: totalPenalty,
maxPenalty: maxPenalty,
score: score,
};
}
exports.analyzeCss = analyzeCss;
//# sourceMappingURL=analyze.js.map
;