42 lines
1.4 KiB
JavaScript
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()],
|
|
})
|