All files / packages/sds-metadata/src/generators generate-icons.ts

0% Statements 0/17
0% Branches 0/8
0% Functions 0/5
0% Lines 0/15

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                                                                     
import fs from 'fs/promises';
import { join, basename } from 'path';
import kebabCase from 'lodash.kebabcase';
import { ICONS_METADATA_DIR_PATH , ICONS_METADATA_FILENAME, ICONS_RAW_JSON } from '../constants.js';
import { readJSON, writeData } from '../services/file-service.js';
import { IconsMetadata, IconsRawJson, SupportedFileFormat } from '../types.js';
 
 
export async function generateIcons(outputDir: string = process.cwd(), format: SupportedFileFormat = 'json') {
    const iconsRawJSON:IconsRawJson[] = await readJSON(ICONS_RAW_JSON);
    const iconsMetadataFiles = (await fs.readdir(ICONS_METADATA_DIR_PATH)).filter(file => file.endsWith('.json'));
    const iconsMetadataArr:IconsMetadata[] = await Promise.all(iconsMetadataFiles.map(async file => readJSON(join(ICONS_METADATA_DIR_PATH, file))));
    const iconsMetadataByCategory = iconsMetadataArr.reduce<Record<string, IconsMetadata>>((acc, curr, index) => {
        const baseName = basename(iconsMetadataFiles[index], '-icons-metadata.json');
        acc[baseName] = curr;
        return acc;
    }, {});
 
    iconsRawJSON.forEach(category => {
        category.icons.forEach(icon => {
            const iconMetadata = iconsMetadataByCategory[category.name];
            if (iconMetadata && icon.symbol in iconMetadata) {
                icon.synonyms = iconMetadata[icon.symbol].synonyms || [];
            }        
            if(icon.sprite !== 'doctype') {
                icon.className = `slds-icon-${icon.sprite}`;
                icon.className += '-'+(icon.sprite === 'custom'?icon.symbol:kebabCase(icon.symbol));
            }
            // hardcoded to true for now
            icon.visible = true;
        });
    });
    
    await writeData(ICONS_METADATA_FILENAME, iconsRawJSON, outputDir, format);
}