2023-10-20 16:15:28 +03:00
|
|
|
/// <reference types="vitest" />
|
|
|
|
import vue from '@vitejs/plugin-vue'
|
|
|
|
import { fileURLToPath, URL } from 'node:url'
|
2022-12-08 11:19:29 +03:00
|
|
|
import { defineConfig, loadEnv } from 'vite'
|
2023-10-20 16:15:28 +03:00
|
|
|
import vuetify from 'vite-plugin-vuetify'
|
2022-11-15 11:36:54 +03:00
|
|
|
import { VitePWA } from 'vite-plugin-pwa'
|
2023-10-20 16:15:28 +03:00
|
|
|
import { resolve } from 'node:path'
|
2022-11-15 11:36:54 +03:00
|
|
|
|
2023-10-20 16:15:28 +03:00
|
|
|
// https://vitejs.dev/config/
|
2023-11-08 21:06:11 +03:00
|
|
|
export default defineConfig(({ command, mode }) => {
|
2023-10-20 16:15:28 +03:00
|
|
|
const env = loadEnv(mode, process.cwd())
|
|
|
|
const qBittorrentPort = env.VITE_QBITTORRENT_PORT ?? '8080'
|
|
|
|
const proxyTarget = env.VITE_QBITTORRENT_TARGET ?? 'http://127.0.0.1'
|
|
|
|
|
2023-11-08 21:06:11 +03:00
|
|
|
const version = command === 'build' ? process.env.npm_package_version : JSON.stringify(process.env.npm_package_version)
|
2022-12-08 11:19:29 +03:00
|
|
|
|
|
|
|
return {
|
2023-01-24 19:10:59 +03:00
|
|
|
base: './',
|
|
|
|
build: {
|
|
|
|
target: 'esnext',
|
2023-10-20 16:15:28 +03:00
|
|
|
outDir: './vuetorrent/public',
|
2023-01-24 19:10:59 +03:00
|
|
|
rollupOptions: {
|
|
|
|
output: {
|
|
|
|
manualChunks: {
|
2023-11-09 16:39:08 +03:00
|
|
|
// apexcharts: ['apexcharts', 'vue3-apexcharts'],
|
2023-11-09 06:26:41 +03:00
|
|
|
faker: ['@faker-js/faker'],
|
|
|
|
vue: ['vue', 'vue-router', 'vue-i18n', 'vue3-toastify', 'vuedraggable', 'pinia', 'pinia-plugin-persist'],
|
|
|
|
vuetify: ['vuetify']
|
2023-01-24 19:10:59 +03:00
|
|
|
}
|
|
|
|
}
|
2023-10-20 16:15:28 +03:00
|
|
|
}
|
2023-01-24 19:10:59 +03:00
|
|
|
},
|
|
|
|
define: {
|
|
|
|
'import.meta.env.VITE_PACKAGE_VERSION': version,
|
|
|
|
'process.env': {}
|
2022-12-08 11:19:29 +03:00
|
|
|
},
|
|
|
|
plugins: [
|
|
|
|
vue(),
|
2023-10-20 16:15:28 +03:00
|
|
|
vuetify(),
|
2022-12-08 11:19:29 +03:00
|
|
|
VitePWA({
|
2023-07-15 11:43:44 +03:00
|
|
|
includeAssets: ['favicon.ico', 'icon.svg', 'icon-192.png', 'icon-512.png', 'robots.txt'],
|
2022-12-08 11:19:29 +03:00
|
|
|
manifest: {
|
|
|
|
name: 'VueTorrent',
|
|
|
|
short_name: 'VueTorrent',
|
|
|
|
theme_color: '#597566',
|
|
|
|
start_url: '.',
|
|
|
|
background_color: '#000',
|
|
|
|
icons: [
|
2023-07-15 11:43:44 +03:00
|
|
|
{ src: './icon-192.png', type: 'image/png', sizes: '192x192' },
|
|
|
|
{ src: './icon-512.png', type: 'image/png', sizes: '512x512' }
|
2022-12-08 11:19:29 +03:00
|
|
|
]
|
|
|
|
},
|
|
|
|
// Other options
|
|
|
|
registerType: 'autoUpdate',
|
|
|
|
base: './',
|
|
|
|
useCredentials: true,
|
|
|
|
workbox: {
|
2023-11-09 06:26:41 +03:00
|
|
|
maximumFileSizeToCacheInBytes: 10_000_000,
|
2022-12-08 11:19:29 +03:00
|
|
|
skipWaiting: true,
|
2023-08-11 14:17:10 +03:00
|
|
|
globPatterns: ['**/*.{js,css,html,ico,png,svg,woff,woff2}']
|
2022-11-15 11:36:54 +03:00
|
|
|
}
|
2022-12-08 11:19:29 +03:00
|
|
|
})
|
|
|
|
],
|
2023-01-24 19:10:59 +03:00
|
|
|
publicDir: './public',
|
|
|
|
resolve: {
|
|
|
|
alias: {
|
2023-10-20 16:15:28 +03:00
|
|
|
'@': fileURLToPath(new URL('./src', import.meta.url))
|
|
|
|
}
|
2022-11-15 11:36:54 +03:00
|
|
|
},
|
2022-12-08 11:19:29 +03:00
|
|
|
server: {
|
2023-02-19 14:28:31 +03:00
|
|
|
host: '0.0.0.0',
|
|
|
|
port: 3000,
|
2022-12-08 11:19:29 +03:00
|
|
|
proxy: {
|
2023-10-20 16:15:28 +03:00
|
|
|
'/api': {
|
|
|
|
target: `${proxyTarget}:${qBittorrentPort}`,
|
|
|
|
secure: false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
test: {
|
|
|
|
environment: 'jsdom',
|
|
|
|
setupFiles: [resolve(__dirname, 'tests/setup.ts')],
|
|
|
|
coverage: {
|
|
|
|
reportsDirectory: './tests/unit/coverage'
|
|
|
|
},
|
|
|
|
server: {
|
|
|
|
deps: {
|
|
|
|
inline: ['vuetify']
|
|
|
|
}
|
2022-12-08 11:19:29 +03:00
|
|
|
}
|
2022-11-15 11:36:54 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|