All files / packages/design-system/scripts/validation/plugins css-normalizer.js

100% Statements 8/8
100% Branches 4/4
100% Functions 4/4
100% Lines 8/8

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68                      9x           31x                                     3x 1x     2x                             2x 1x     1x                
/**
 * CSS Normalizer Plugin
 * Normalizes CSS content for more meaningful comparisons
 */
 
/**
 * Normalize CSS content by standardizing whitespace and formatting
 * @param {string} css - CSS content
 * @returns {string} Normalized CSS
 */
export function normalizeCSS(css) {
  return (
    css
      // Normalize line endings
      .replace(/\r\n/g, '\n')
      // Remove trailing whitespace from lines
      .split('\n')
      .map((line) => line.trimEnd())
      .join('\n')
      // Normalize multiple blank lines to single blank line
      .replace(/\n{3,}/g, '\n\n')
      // Trim leading/trailing whitespace
      .trim()
  );
}
 
/**
 * Plugin hook: beforeCompare
 * Normalizes both baseline and current content before comparison
 * @param {string} baseline - Baseline content
 * @param {string} current - Current content
 * @param {string} filePath - File path
 * @returns {Object} Normalized content
 */
export function beforeCompare(baseline, current, filePath) {
  // Only process CSS files
  if (!filePath.endsWith('.css')) {
    return null;
  }
 
  return {
    baseline: normalizeCSS(baseline),
    current: normalizeCSS(current),
  };
}
 
/**
 * Plugin hook: beforeCapture
 * Normalizes content before capturing baseline
 * @param {string} content - Content to normalize
 * @param {string} filePath - File path
 * @returns {string} Normalized content
 */
export function beforeCapture(content, filePath) {
  // Only process CSS files
  if (!filePath.endsWith('.css')) {
    return content;
  }
 
  return normalizeCSS(content);
}
 
export default {
  name: 'css-normalizer',
  beforeCompare,
  beforeCapture,
};