All files / packages/sds-metadata/src/processors/selector-processors bem-double-dash-processor.ts

0% Statements 0/10
0% Branches 0/2
100% Functions 0/0
0% Lines 0/10

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                                                                                               
import { BaseSelectorProcessor } from "./base-processor.js";
 
export type BEMDoubleDashProcessorResult = Record<string, string>;
 
/**
 * Processor for BEM selectors with double dashes
 */
export class BEMDoubleDashProcessor extends BaseSelectorProcessor<BEMDoubleDashProcessorResult> {
  private readonly sldsPrefix = "slds-";
  private readonly doubleDashRegex = /--/g;
  private readonly replacementChar = "_";
  private selectorMap: BEMDoubleDashProcessorResult = {};
 
  /**
   * Process a selector node
   * @param selector The selector node to process
   */
  protected processSelectorNode(selector: any): void {
    // Early return if not a class selector or doesn't start with slds-
    if (
      selector.type !== "class" ||
      !selector.value.startsWith(this.sldsPrefix)
    ) {
      return;
    }
    // Check if the selector contains double dashes (BEM modifier)
    if (!selector.value.includes("--")) {
      return;
    }
 
    const selectorValue = selector.value;
 
    // Create the replacement selector by replacing double dashes with single dash
    const replacementSelector = selectorValue.replace(
      this.doubleDashRegex,
      this.replacementChar
    );
 
    // Add to our map
    this.selectorMap[selectorValue] = replacementSelector;
  }
 
  getResults(): BEMDoubleDashProcessorResult {
    // Not sorted
    return this.selectorMap;
  }
}