Vite dev server gets a /api/log middleware (POST appends to game-test.log, DELETE clears it). ZoomTestScene writes a zoom event with before/after state on every scroll, plus a full snapshot every 2 seconds. Log entries are newline-delimited JSON.
48 lines
1.1 KiB
TypeScript
48 lines
1.1 KiB
TypeScript
import { defineConfig } from 'vite'
|
|
import { resolve } from 'path'
|
|
import fs from 'fs'
|
|
|
|
const LOG_FILE = resolve(__dirname, 'game-test.log')
|
|
|
|
export default defineConfig({
|
|
server: {
|
|
port: 3000,
|
|
host: true,
|
|
},
|
|
plugins: [
|
|
{
|
|
name: 'game-logger',
|
|
configureServer(server) {
|
|
server.middlewares.use('/api/log', (req, res) => {
|
|
if (req.method === 'POST') {
|
|
let body = ''
|
|
req.on('data', chunk => { body += chunk })
|
|
req.on('end', () => {
|
|
fs.appendFileSync(LOG_FILE, body + '\n', 'utf8')
|
|
res.writeHead(200)
|
|
res.end('ok')
|
|
})
|
|
} else if (req.method === 'DELETE') {
|
|
fs.writeFileSync(LOG_FILE, '', 'utf8')
|
|
res.writeHead(200)
|
|
res.end('cleared')
|
|
} else {
|
|
res.writeHead(405)
|
|
res.end()
|
|
}
|
|
})
|
|
},
|
|
},
|
|
],
|
|
build: {
|
|
outDir: 'dist',
|
|
assetsInlineLimit: 0,
|
|
rollupOptions: {
|
|
input: {
|
|
main: resolve(__dirname, 'index.html'),
|
|
test: resolve(__dirname, 'test.html'),
|
|
},
|
|
},
|
|
},
|
|
})
|