svgs.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. const fs = require('fs');
  2. const startPath = 'src/Assets/Svgs';
  3. const rootRoute = '~/Assets/Svgs';
  4. const findSvg = (render = (route, name) => {}, importRender = (route, name) => {}, path = startPath, route = '') => {
  5. const currentRoute = (route ? route : '/');
  6. const names = fs.readdirSync(path, { withFileTypes: true })
  7. .filter(file => file.isFile() && file.name.endsWith('.svg'))
  8. .map(file => {
  9. let name = file.name.replace('.svg', '');
  10. return {
  11. name: name,
  12. filename: file.name,
  13. routePath: rootRoute + route + '/' + file.name,
  14. importName: ('svgs' + route + '/' + name).replace(/[\/\-]/g, '_')
  15. };
  16. });
  17. if(names.length > 0) {
  18. render(currentRoute, names);
  19. importRender(currentRoute, names);
  20. }
  21. let result = '';
  22. const list = fs.readdirSync(path, { withFileTypes: true })
  23. .filter(dir => dir.isDirectory())
  24. .map(dir => dir.name);
  25. for(let dir of list) {
  26. findSvg(render, importRender, path + '/' + dir, route + '/' + dir);
  27. }
  28. }
  29. /* Generate Svgs */
  30. const generateSvgs = () => {
  31. let svgs = '';
  32. let importers = '';
  33. findSvg((route, names) => {
  34. let svg = '';
  35. svg += `\t\t'${route}': {\n`;
  36. for(name of names) {
  37. svg += `\t\t\t'${name.name}': ${name.importName},\n`;
  38. }
  39. svg += `\t\t},\n`;
  40. svgs += svg;
  41. }, (route, names) => {
  42. for(name of names) {
  43. importers += `import ${name.importName} from '${name.routePath}';\n`;
  44. }
  45. });
  46. const string = `
  47. ${importers}
  48. export const Svgs = {
  49. ${svgs}
  50. };
  51. `;
  52. fs.writeFileSync('src/Generated/Svgs.js', string, 'utf8');
  53. }
  54. generateSvgs();