import { defineConfig } from 'vite'; import { cpSync, mkdirSync, readdirSync, createReadStream, statSync } from 'node:fs'; import { resolve } from 'node:path'; import { collectLicenses } from './scripts/licenses.mjs'; import { piBrowser } from './scripts/pi-browser.mjs'; export default defineConfig({ base: './', worker: { format: 'es' }, optimizeDeps: { exclude: ['@earendil-works/pi-tui'], include: ['events', 'buffer'] }, resolve: { alias: { '@huggingface/transformers': resolve('node_modules/@huggingface/transformers/dist/transformers.web.js') } }, server: { proxy: { '/models': 'http://127.0.0.1:8765' } }, preview: { proxy: { '/models': 'http://127.0.0.1:8765' } }, plugins: [piBrowser(), { name: 'local-ort-runtime', configureServer(server) { server.middlewares.use('/runtime', (req, res, next) => { const name = req.url.split('?')[0]; if (!/^\/ort-wasm-[\w.-]+\.(wasm|mjs)$/.test(name)) return next(); const file = resolve('node_modules/onnxruntime-web/dist', name.slice(1)); try { res.setHeader('Content-Type', name.endsWith('.wasm') ? 'application/wasm' : 'text/javascript'); res.setHeader('Content-Length', statSync(file).size); createReadStream(file).pipe(res); } catch { res.statusCode = 404; res.end(); } }); }, async closeBundle() { mkdirSync('dist/runtime', { recursive: true }); for (const file of readdirSync('node_modules/onnxruntime-web/dist')) { if (/^ort-wasm-.*\.(wasm|mjs)$/.test(file)) cpSync('node_modules/onnxruntime-web/dist/' + file, 'dist/runtime/' + file); } await collectLicenses(); }, }], });