import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import path from 'path' import { fileURLToPath } from 'url' import pkg from './package.json' with { type: 'json' } const __dirname = path.dirname(fileURLToPath(import.meta.url)) export default defineConfig({ plugins: [vue()], define: { appName: JSON.stringify(pkg.name), appVersion: JSON.stringify(pkg.version), }, // `base: ''` makes Vite's preload helper resolve dynamic chunks and their // CSS deps via `import.meta.url` instead of the document root, so the bundle // works regardless of where NC mounts the app (e.g. /custom_apps/aiquila/js/). base: '', build: { outDir: 'js/dist', emptyOutDir: true, // Vite auto-injects CSS only for dynamically imported chunks; entry // stylesheets have to be linked by the host page. The manifest is how // lib/Template/ViteAssets.php finds them. Written to js/dist/manifest.json // rather than Vite's default js/dist/.vite/ so packaging cannot drop it // as a dotfile. manifest: 'manifest.json', // `vendor-nextcloud-vue` alone is ~800 KB and is the floor we can't shrink // without dropping @nextcloud/vue; raise the warning so other regressions // stay visible. chunkSizeWarningLimit: 1000, rollupOptions: { input: { 'aiquila-main': path.resolve(__dirname, 'src/main.js'), 'aiquila-dashboard': path.resolve(__dirname, 'src/dashboard.js'), 'aiquila-admin': path.resolve(__dirname, 'src/admin.js'), 'aiquila-personal': path.resolve(__dirname, 'src/personal.js'), }, output: { format: 'es', entryFileNames: '[name].js', chunkFileNames: '[name]-[hash].js', manualChunks(id) { if (!id.includes('node_modules')) return if (id.includes('@nextcloud/vue')) return 'vendor-nextcloud-vue' if (id.includes('vue-material-design-icons') || id.includes('@mdi/')) { return 'vendor-icons' } // highlight.js is left out on purpose: src/utils/markdown.js // imports its core and each grammar dynamically, and pinning // it here would merge them back into one eagerly loaded chunk. if (id.includes('/marked/')) return 'vendor-markdown' }, }, }, }, resolve: { alias: { '@': path.resolve(__dirname, 'src'), }, }, })