import {promises as fs} from 'fs'; if (process.argv.length !== 4) { if (process.env.RUN_FROM && process.env.RUN_FROM === 'PNPM') { console.log('Usage: pnpm run process-icons path_to_enum_input'); } else { console.log('Usage: ts-node process-icons.ts path_for_styl_output path_to_enum_input'); } process.exit(-1); } else { run(process.argv[2], process.argv[3]); } async function run(iconComponentPath:string, iconLibraryPath:string) { const selectionFile = await fs.readFile(`${iconLibraryPath}/selection.json`); const iconFile = JSON.parse(selectionFile.toString()); const {icons} = iconFile; const {metadata} = iconFile.preferences.fontPref; const version = `${metadata.fontFamily}-v${metadata.majorVersion}.${metadata.minorVersion}`; // enter name remap here const remappedNames:{[name:string]:string} = { // 'forward2': 'fast-forward' }; const injectNames = ['right-arrow']; function remapName(name:string) { if (name in remappedNames) return remappedNames[name]; return name; } const templateFile = await fs.readFile(`${iconComponentPath}/template.styl`); const tag = `// icons generated with process-icons.ts with font ${version}`; let styl:string = `${tag}\n\n`; styl += templateFile.toString(); const iconStyls = icons.map((icon:any) => { const p = icon.properties; return ` &.${remapName(p.name)}::before\n content: "\\${p.code.toString(16)}"\n`; }); styl += iconStyls.join('\n'); await fs.writeFile(`${iconComponentPath}/icon-font.styl`, styl); let iconNames = icons.map((icon:any) => icon.properties.name); iconNames = iconNames.concat(injectNames); const iconEnum = `${tag} export enum Icons { ${iconNames.map((name: string) => ` '${remapName(name)}' = '${remapName(name)}'`).join(',\n')} } export type IconType = keyof typeof Icons; `; await fs.writeFile(`${iconComponentPath}/icon.enum.ts`, iconEnum); console.log(`processed ${iconNames.length} icons from ${iconLibraryPath} to ${iconComponentPath}/...`); // copy font files to component dir const files = ['ffwd.woff', 'ffwd.ttf']; for (const file of files) await fs.copyFile(`${iconLibraryPath}/fonts/${file}`, `${iconComponentPath}/${file.replace('ffwd', 'ffwd-icons')}`); console.log(`copied files ${files.join(', ')} to component path`); }