import-icons.mjs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #!/usr/bin/env node
  2. import { readFileSync, writeFileSync } from 'node:fs';
  3. import { join, dirname } from 'node:path';
  4. import { fileURLToPath } from 'node:url';
  5. const __dirname = dirname(fileURLToPath(import.meta.url))
  6. const iconsTags = JSON.parse(readFileSync(join(__dirname, '../node_modules/@tabler/icons/icons.json'), 'utf8'));
  7. const { version } = JSON.parse(readFileSync(join(__dirname, '../node_modules/@tabler/icons/package.json'), 'utf8'))
  8. const prepareSvgFile = (svg) => {
  9. return svg.replace(/\n/g, '').replace(/>\s+</g, '><').replace(/\s+/g, ' ')
  10. }
  11. let svgList = {}
  12. for (let iconName in iconsTags) {
  13. let iconData = iconsTags[iconName]
  14. svgList[iconName] = {
  15. name: iconName,
  16. svg: {
  17. outline: iconData.styles.outline ? prepareSvgFile(readFileSync(join(__dirname, `../node_modules/@tabler/icons/icons/outline/${iconName}.svg`), 'utf8')) : null,
  18. filled: iconData.styles.filled ? prepareSvgFile(readFileSync(join(__dirname, `../node_modules/@tabler/icons/icons/filled/${iconName}.svg`), 'utf8')) : null,
  19. }
  20. }
  21. }
  22. writeFileSync(
  23. join(__dirname, `../pages/_data/icons-info.json`),
  24. JSON.stringify({
  25. version,
  26. count: Object.values(svgList).reduce((acc, icon) => {
  27. return acc + (icon.svg.outline ? 1 : 0) + (icon.svg.filled ? 1 : 0)
  28. }, 0)
  29. })
  30. )
  31. writeFileSync(join(__dirname, `../pages/_data/icons.json`), JSON.stringify(svgList))