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);
} |