Files
arboretum/packages/web/vite.config.ts
Johan LEROY 75efecf93f feat(p8): vue IDE /workspace (arbre + Monaco + diff + terminal)
- backend: garde-fou conflit d'édition par mtime (GET renvoie mtime, PUT refuse en 409 STALE_FILE si baseMtime périmé)
- lib: wt-key (base64url du chemin worktree), diff-parse (parseur pur du diff unifié → hunks)
- composables: useMonaco (import dynamique → chunk isolé), useWorkspaceLayout (largeurs/panneau persistés)
- components/workspace: GitStatusBadge, FileTree+FileTreeNode (lazy fs/list includeFiles), ChangedFilesPanel, DiffViewer (coloration +/-), MonacoEditor (Ctrl+S + bannière conflit reload/overwrite)
- views/WorkspaceView: 3 colonnes desktop redimensionnables + SegmentedControl mobile, header live (GitStatusBadge), watchWorktree → refresh diff/changements, terminal de la session corrélée
- router meta 'ide' + route /workspace/:repoId/:wt ; App.vue plein écran sans AppShell ; WorktreeCard bouton « Ouvrir l'IDE »
- deps: monaco-editor (lazy, vendor-monaco isolé, 0 impact bundle initial) ; vite manualChunks
- i18n EN+FR (workspace/editor/diff/git) ; tests diff-parse + wt-key ; acceptance-p8.mjs (mtime/409 + diff)
2026-06-27 13:47:10 +02:00

39 lines
1.2 KiB
TypeScript

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import tailwindcss from '@tailwindcss/vite';
const DAEMON_HTTP = 'http://127.0.0.1:7317';
const DAEMON_WS = 'ws://127.0.0.1:7317';
export default defineConfig({
plugins: [vue(), tailwindcss()],
build: {
rollupOptions: {
output: {
// Monaco (lourd) isolé dans son propre chunk ; chargé uniquement à l'ouverture d'un fichier
// (import dynamique via composables/useMonaco) → zéro impact sur le bundle initial.
manualChunks: (id) => (id.includes('monaco-editor') ? 'vendor-monaco' : undefined),
},
},
},
server: {
proxy: {
// L'Origin est réécrite vers celle du daemon : son check Origin strict
// rejetterait sinon l'origine du serveur de dev Vite.
'/api': {
target: DAEMON_HTTP,
configure: (proxy) => {
proxy.on('proxyReq', (proxyReq) => proxyReq.setHeader('origin', DAEMON_HTTP));
},
},
'/ws': {
target: DAEMON_WS,
ws: true,
configure: (proxy) => {
proxy.on('proxyReqWs', (proxyReq) => proxyReq.setHeader('origin', DAEMON_HTTP));
},
},
},
},
});