Files
Sanctification/spikes/card-harness/vite.config.mjs
2026-09-11 21:19:08 -07:00

42 lines
1.4 KiB
JavaScript

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()],
})