import { defineConfig, loadEnv } from 'vite' import react from '@vitejs/plugin-react' import path from 'path' import { VitePWA } from 'vite-plugin-pwa' // import { fetchTenantNames } from './src/services/tenants' export default defineConfig(async ({ mode }) => { const env = loadEnv(mode, process.cwd(), '') const apiUrl = env.VITE_API_URL const baseDomains = ['sozsoft.com', 'dev.sozsoft.com', '.sozsoft.com'] // const tenantNames = (await fetchTenantNames(apiUrl)).map((n) => n.trim().toLowerCase()) // const tenantHosts = tenantNames.map((t) => `${t}.sozsoft.com`) const tenantHosts: string[] = [] const allowedHosts = Array.from(new Set(['localhost', ...baseDomains, ...tenantHosts])) console.log('> [vite] allowedHosts:', allowedHosts) return { plugins: [ react(), VitePWA({ // Deploy'dan sonra otomatik güncelle registerType: 'autoUpdate', // Kayıt kodunu otomatik enjekte et (virtual:pwa-register yazmadan da çalışır) injectRegister: 'auto', // Dev ortamında SW'yi aç, prod'da kapalı tut (build edilmiş SW prod'da zaten aktif olur) devOptions: { enabled: mode !== 'production' }, workbox: { // Büyük asset'leri de cache'leyebil maximumFileSizeToCacheInBytes: 10 * 1024 * 1024, // EN KRİTİK: yeni SW beklemeden kontrolü alsın clientsClaim: true, skipWaiting: true, // Eski workbox cache'lerini temizle cleanupOutdatedCaches: true, // SPA fallback'i API çağrılarına uygulama navigateFallbackDenylist: [/^\/api\//], }, manifest: { name: 'Platform', theme_color: '#FF99C8', background_color: '#f0e7db', display: 'standalone', icons: [ { src: '/img/logo/logo-400.png', sizes: '400x400', type: 'image/png', purpose: 'any', }, ], }, }), ], server: { open: true, port: 3000, }, assetsInclude: ['**/*.md'], resolve: { alias: { '@': path.join(__dirname, 'src'), inferno: 'inferno/dist/index.esm.js', 'devextreme/ui': 'devextreme/esm/ui', }, }, build: { outDir: 'dist', sourcemap: false, }, preview: { host: '0.0.0.0', port: 80, open: false, // Hesaplanan allowedHosts'u kullan allowedHosts, }, define: { 'process.env': {}, }, } })