56 lines
1.8 KiB
JavaScript
56 lines
1.8 KiB
JavaScript
import { fileURLToPath, URL } from 'node:url'
|
|
|
|
import { defineConfig } from 'vite'
|
|
import { resolve } from 'node:path'
|
|
import vue from '@vitejs/plugin-vue'
|
|
|
|
// https://vite.dev/config/
|
|
export default defineConfig(({ command, mode }) => ({
|
|
plugins: [
|
|
vue(),
|
|
],
|
|
resolve: {
|
|
alias: {
|
|
'@': fileURLToPath(new URL('./src', import.meta.url))
|
|
},
|
|
},
|
|
// Use absolute paths at dev, deploy under /auth/
|
|
base: command === 'build' ? '/auth/' : '/',
|
|
server: {
|
|
port: 4403,
|
|
proxy: {
|
|
'/auth/': {
|
|
target: 'http://localhost:4402',
|
|
ws: true,
|
|
changeOrigin: false,
|
|
// We proxy API + WS under /auth/, but want Vite to serve the SPA entrypoints
|
|
// and static assets so that HMR works. Bypass tells http-proxy to skip
|
|
// proxying when we return a (possibly rewritten) local path.
|
|
bypass(req) {
|
|
const rawUrl = req.url || ''
|
|
// Strip query/hash to match path-only for SPA entrypoints with query params (e.g. ?reset=token)
|
|
const url = rawUrl.split('?')[0].split('#')[0]
|
|
// Bypass only root SPA entrypoints + static assets so Vite serves them for HMR.
|
|
// Admin API endpoints (e.g., /auth/admin/orgs) must still hit backend.
|
|
if (url === '/auth/' || url === '/auth') return '/'
|
|
if (url === '/auth/admin' || url === '/auth/admin/') return '/admin/'
|
|
if (url.startsWith('/auth/assets/')) return url.replace(/^\/auth/, '')
|
|
// Everything else (including /auth/admin/* APIs) should proxy.
|
|
}
|
|
}
|
|
}
|
|
},
|
|
build: {
|
|
outDir: '../passkey/frontend-build',
|
|
emptyOutDir: true,
|
|
assetsDir: 'assets',
|
|
rollupOptions: {
|
|
input: {
|
|
index: resolve(__dirname, 'index.html'),
|
|
admin: resolve(__dirname, 'admin/index.html')
|
|
},
|
|
output: {}
|
|
}
|
|
}
|
|
}))
|