import { defineConfig } from 'vite' import { cardArtRoot, scanCardCatalog, writeCardCatalog } from './scripts/card-catalog.mjs' function cardCatalogPlugin() { return { name: 'card-catalog', async buildStart() { const catalog = await writeCardCatalog() if (!catalog.cards.length || catalog.errors.length) { this.error(`Invalid card catalog:\n${catalog.errors.join('\n') || 'No valid card pairs found'}`) } }, configureServer(server) { server.middlewares.use('/__card_catalog', async (_request, response) => { try { const catalog = await scanCardCatalog() response.statusCode = 200 response.setHeader('Content-Type', 'application/json') response.setHeader('Cache-Control', 'no-store') response.end(JSON.stringify(catalog)) } catch (error) { response.statusCode = 500 response.setHeader('Content-Type', 'application/json') response.end(JSON.stringify({ error: error instanceof Error ? error.message : String(error), })) } }) server.watcher.add(cardArtRoot) server.watcher.on('all', (_event, path) => { if (path.startsWith(cardArtRoot) && path.toLowerCase().endsWith('.png')) { server.ws.send({ type: 'custom', event: 'card-catalog:update' }) } }) }, } } export default defineConfig({ plugins: [cardCatalogPlugin()], })