import { URL, fileURLToPath } from 'node:url';
import { defineConfig } from 'vite';
import { VitePWA } from 'vite-plugin-pwa';
import solid from 'vite-plugin-solid';
// '/' for local dev and the macOS app; the pages deploy workflow
// sets BASE_PATH=/physarum/ so assets resolve under the project sub-path.
const base = process.env.BASE_PATH || '/';
export default defineConfig({
base,
plugins: [
solid(),
VitePWA({
registerType: 'autoUpdate',
includeAssets: ['favicon.svg', 'icon-192.png', 'icon-512.png', 'icon-maskable.png'],
manifest: {
name: 'Physarum',
short_name: 'Physarum',
description: 'Pure ambient generative art — stigmergy simulation in WebGPU.',
theme_color: '#060709',
background_color: '#060709',
display: 'standalone',
orientation: 'any',
scope: base,
start_url: base,
icons: [
{ src: 'icon-192.png', sizes: '192x192', type: 'image/png' },
{ src: 'icon-512.png', sizes: '512x512', type: 'image/png' },
{ src: 'icon-maskable.png', sizes: '512x512', type: 'image/png', purpose: 'maskable' },
],
},
workbox: {
globPatterns: ['**/*.{js,css,html,svg,png,wgsl}'],
navigateFallback: `${base}index.html`,
runtimeCaching: [],
},
}),
],
resolve: {
alias: {
'~': fileURLToPath(new URL('./src', import.meta.url)),
},
},
assetsInclude: ['**/*.wgsl'],
build: {
target: 'es2022',
sourcemap: true,
rollupOptions: {
input: {
main: fileURLToPath(new URL('./index.html', import.meta.url)),
player: fileURLToPath(new URL('./player.html', import.meta.url)),
},
},
},
server: {
port: 5173,
open: false,
},
});