build-icon.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /**
  2. * Convert svg elements into React components
  3. */
  4. const { resolve } = require('path');
  5. const build = require('../../../scripts/build-svg');
  6. // Semi Icon
  7. const entryDir = resolve(__dirname, '../src/svgs');
  8. const outDir = resolve(__dirname, '../src/icons');
  9. const customTemplate = ({ template }, opts, { imports, interfaces, componentName, props, jsx, exports }) => {
  10. const plugins = ['jsx'];
  11. if (opts.typescript) {
  12. plugins.push('typescript');
  13. }
  14. const typeScriptTpl = template.smart({ plugins });
  15. return typeScriptTpl.ast`${imports}
  16. import { convertIcon } from '../components/Icon';
  17. ${interfaces}
  18. function ${componentName}(${props}) {
  19. return ${jsx};
  20. }
  21. const IconComponent = convertIcon(${componentName}, '${opts.iconType}');
  22. export default IconComponent;
  23. `;
  24. };
  25. const svgoPlugins = [
  26. // {
  27. // name: 'convertColors',
  28. // params: { currentColor: /^(?!url|none)./ },
  29. // },
  30. {
  31. name: 'cleanupListOfValues',
  32. active: true,
  33. },
  34. {
  35. name: 'removeStyleElement',
  36. active: true,
  37. },
  38. {
  39. name: 'removeViewBox',
  40. active: false,
  41. },
  42. {
  43. name: 'removeDimensions',
  44. active: true,
  45. },
  46. ];
  47. // Semi icon library decolor
  48. build(entryDir, outDir, 'Icon', '', svgoPlugins, { typescript: true, icon: true, template: customTemplate });