import { defineConfig } from "vite" import solidPlugin from "vite-plugin-solid" import { iconsSpritesheet } from "vite-plugin-icons-spritesheet" import fs from "fs" export default defineConfig({ plugins: [ solidPlugin(), providerIconsPlugin(), iconsSpritesheet([ { withTypes: true, inputDir: "src/assets/icons/file-types", outputDir: "src/components/file-icons", formatter: "prettier", }, { withTypes: true, inputDir: "src/assets/icons/provider", outputDir: "src/components/provider-icons", formatter: "prettier", iconNameTransformer: (iconName) => iconName, }, ]), ], server: { port: 3001 }, build: { target: "esnext", }, worker: { format: "es", }, }) function providerIconsPlugin() { return { name: "provider-icons-plugin", configureServer() { fetchProviderIcons() }, buildStart() { fetchProviderIcons() }, } } async function fetchProviderIcons() { const providers = await fetch("https://models.dev/api.json") .then((res) => res.json()) .then((json) => Object.keys(json)) await Promise.all( providers.map((provider) => fetch(`https://models.dev/logos/${provider}.svg`) .then((res) => res.text()) .then((svg) => fs.writeFileSync(`./src/assets/icons/provider/${provider}.svg`, svg)), ), ) }