vite.config.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { defineConfig } from "vite"
  2. import solidPlugin from "vite-plugin-solid"
  3. import { iconsSpritesheet } from "vite-plugin-icons-spritesheet"
  4. import fs from "fs"
  5. export default defineConfig({
  6. plugins: [
  7. solidPlugin(),
  8. providerIconsPlugin(),
  9. iconsSpritesheet([
  10. {
  11. withTypes: true,
  12. inputDir: "src/assets/icons/file-types",
  13. outputDir: "src/components/file-icons",
  14. formatter: "prettier",
  15. },
  16. {
  17. withTypes: true,
  18. inputDir: "src/assets/icons/provider",
  19. outputDir: "src/components/provider-icons",
  20. formatter: "prettier",
  21. iconNameTransformer: (iconName) => iconName,
  22. },
  23. ]),
  24. ],
  25. server: { port: 3001 },
  26. build: {
  27. target: "esnext",
  28. },
  29. worker: {
  30. format: "es",
  31. },
  32. })
  33. function providerIconsPlugin() {
  34. return {
  35. name: "provider-icons-plugin",
  36. configureServer() {
  37. fetchProviderIcons()
  38. },
  39. buildStart() {
  40. fetchProviderIcons()
  41. },
  42. }
  43. }
  44. async function fetchProviderIcons() {
  45. const providers = await fetch("https://models.dev/api.json")
  46. .then((res) => res.json())
  47. .then((json) => Object.keys(json))
  48. await Promise.all(
  49. providers.map((provider) =>
  50. fetch(`https://models.dev/logos/${provider}.svg`)
  51. .then((res) => res.text())
  52. .then((svg) => fs.writeFileSync(`./src/assets/icons/provider/${provider}.svg`, svg)),
  53. ),
  54. )
  55. }