Reorganize the URL space so all machinery lives under /_/: the Vite build (now with assetsDir: '', two ES-module entries and hashed shared assets: style.css, pygments.css, banner.svg, fonts moved from pagerite/static to frontend/src/assets) is served at /_/assets via frontend.route(app, "/_/assets") with cached="/", and the admin shell moves to /_/admin, leaving only "_" as a reserved top-level slug. A /favicon.ico route serves the file Vite copies from frontend/public. In dev, Vite proxies content pages and /_/admin to the backend. Editor changes: drop the noisy status line for a save-error indicator, reconnect the WebSocket with exponential backoff, and re-establish the connection from send() when it has dropped. The socket connects when an editor is opened (they mount on pen click), not before.
42 lines
1.4 KiB
JavaScript
42 lines
1.4 KiB
JavaScript
import { fileURLToPath, URL } from 'node:url'
|
|
import fastapiVue from './vite-plugin-fastapi.js'
|
|
|
|
import { defineConfig } from 'vite'
|
|
import vue from '@vitejs/plugin-vue'
|
|
import vueDevTools from 'vite-plugin-vue-devtools'
|
|
|
|
const backendUrl = process.env.PAGERITE_BACKEND_URL || 'http://localhost:3200'
|
|
|
|
// Proxy content pages (/slug, /path/to/slug) to the FastAPI backend in dev.
|
|
// Excludes Vite internals (/@..., /src, /node_modules, /__...) and the
|
|
// backend's /_ prefix. /_/api and /_/f are handled by the fastapi-vue plugin;
|
|
// /_/admin is proxied explicitly below.
|
|
const CONTENT_PROXY = '^\\/(?!_|@|src|node_modules|__)(?:[^./?]+(?:\\/[^./?]+)*)?(?:\\?.*)?$'
|
|
|
|
// https://vite.dev/config/
|
|
export default defineConfig({
|
|
plugins: [
|
|
fastapiVue({ paths: ["/_/api", "/_/f"] }),
|
|
vue(),
|
|
vueDevTools(),
|
|
],
|
|
server: {
|
|
proxy: {
|
|
"/_/admin": { target: backendUrl, changeOrigin: false },
|
|
[CONTENT_PROXY]: { target: backendUrl, changeOrigin: false },
|
|
},
|
|
},
|
|
build: {
|
|
// Emit hashed assets at the root of frontend-build so the backend can
|
|
// serve them under /_/assets/{file} without a nested /assets directory.
|
|
manifest: true,
|
|
assetsDir: '',
|
|
rollupOptions: {
|
|
input: {
|
|
main: fileURLToPath(new URL('./src/main.js', import.meta.url)),
|
|
pagerite: fileURLToPath(new URL('./src/pagerite.js', import.meta.url)),
|
|
},
|
|
},
|
|
},
|
|
})
|