All files / packages/sds-metadata/src/generators slds-delta.ts

0% Statements 0/18
0% Branches 0/4
0% Functions 0/5
0% Lines 0/18

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                                                                                                                       
import { SLDS_PLUS_CSS_PATH, SLDS_CSS_PATH, SLDS_DELTA_FILENAME } from "../constants.js";
import { StylingHooksProcessor } from "../processors/index.js";
import { parseForSelectors } from "./all-selectors-list.js";
import { getDeprecatedStylingHooks, parseForStylingHooks } from "./all-styling-hooks.js";
import { SLDSDelta, SLDSDeltaEntry, SupportedFileFormat } from "../types.js";
import { writeData } from "../services/file-service.js";
 
export async function generateSLDSDelta(outputDir: string = process.cwd(), format: SupportedFileFormat = 'csv') {
    try {
        // Process both files in parallel
        const [sldsSelectors, sldsPlusSelectors, sldsStylingHooks, sldsPlusStylingHooks] = await Promise.all([
            parseForSelectors(SLDS_CSS_PATH),
            parseForSelectors(SLDS_PLUS_CSS_PATH),
            parseForStylingHooks(SLDS_CSS_PATH),
            parseForStylingHooks(SLDS_PLUS_CSS_PATH)
        ]);
 
        // difference between sldsSelectors and sldsPlusSelectors
        const deprecatedClasses = sldsSelectors.filter(selector => {
            return !sldsPlusSelectors.includes(selector);
        });
        
        const deprecatedStylingHooks = getDeprecatedStylingHooks(sldsStylingHooks, sldsPlusStylingHooks);
 
        const stylingHooksProcessor = new StylingHooksProcessor();
        deprecatedStylingHooks.forEach(stylingHook => {
            stylingHooksProcessor.resolveTokenName(stylingHook);
        });
        const stylingHooksDelta = stylingHooksProcessor.getResults();
 
        const sldsDelta: SLDSDelta = format === 'csv' ? {
            "Name": "Type"
        } : {};
        deprecatedClasses.forEach(selector => {
            sldsDelta[selector] = "SLDS Classes";
        });
        const hookTypeToEntry: Record<string, SLDSDeltaEntry> = {
            "global": "Global Styling Hooks",
            "component": "Component Styling Hooks",
            "kinetics": "Kinetics Styling Hooks",
        }
        Object.entries(stylingHooksDelta).forEach(([hookType, hooks]) => {
            hooks.forEach(hook => {
                if (hookType !== 'shared') {
                    sldsDelta[hook] = hookTypeToEntry[hookType];
                }
            });
        });
        await writeData(SLDS_DELTA_FILENAME, sldsDelta, outputDir, format, {
            delimiter: {
                field: "@"                
            },
            prependHeader: false,
            arrayIndexesAsKeys: false
        });
    } catch (error) {
        console.error('Error processing CSS files:', error);
        throw error;
    }
}