const fs = require('fs'); const os = require('os'); const path = require('path'); const cachedListPath = path.join(__dirname, '../public/app/core/icons/cached.json'); const iconsList = require(cachedListPath); const iconsBundleJsTemplatePath = path.join(__dirname, '../public/app/core/icons/iconBundle.ts.template'); const iconsBundleJsPath = path.join(__dirname, '../public/app/core/icons/iconBundle.ts'); const iconsBundleJsTemplate = fs.readFileSync(iconsBundleJsTemplatePath).toString(); const importsStatements = []; const cacheStatements = []; const grafanaIconsPublicPath = '../../../img/icons/'; function generateIconBundle({ outputPath, verbose = false }) { const modulePrefix = 'u'; let moduleNameCount = 1000; for (iconEntry of iconsList) { // skip empty and commented if (iconEntry === '' || iconEntry.startsWith('#')) { continue; } importsStatements.push( `import ${modulePrefix}${moduleNameCount} from '${grafanaIconsPublicPath}${iconEntry}.svg';` ); cacheStatements.push(` cacheItem(${modulePrefix}${moduleNameCount}, resolvePath('${iconEntry}.svg'));`); moduleNameCount++; } const output = iconsBundleJsTemplate .replace('//{{imports}}', importsStatements.join('\n')) .replace('//{{cacheItems}}', cacheStatements.join('\n')); fs.writeFileSync(outputPath, output); if (verbose) { console.log('The iconsBundle file was successfully written.'); console.log(`The file is located at ${outputPath}`); } return outputPath; } // if invoked directly if (require.main === module) { generateIconBundle({ outputPath: iconsBundleJsPath, verbose: true }); } module.exports = generateIconBundle;