UNPKG

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
"use strict"; 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