import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import { VitePWA } from 'vite-plugin-pwa' import UnoCSS from 'unocss/vite' import { fileURLToPath } from 'node:url' export default defineConfig({ resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, plugins: [ UnoCSS(), vue(), VitePWA({ registerType: 'autoUpdate', includeAssets: ['icons/*.png', 'icons/*.svg'], manifest: { name: 'Coffee Map', short_name: 'Coffee', description: 'Track coffee shops you want to visit', theme_color: '#6f4e37', background_color: '#fdf6ec', display: 'standalone', orientation: 'portrait', start_url: '/', icons: [ { src: 'icons/icon-192.png', sizes: '192x192', type: 'image/png', }, { src: 'icons/icon-512.png', sizes: '512x512', type: 'image/png', }, { src: 'icons/icon-512.png', sizes: '512x512', type: 'image/png', purpose: 'maskable', }, ], }, workbox: { globPatterns: ['**/*.{js,css,html,ico,png,svg,woff2}'], runtimeCaching: [ { // Cache OpenFreeMap tiles urlPattern: /^https:\/\/tiles\.openfreemap\.org\/.*/i, handler: 'CacheFirst', options: { cacheName: 'map-tiles', expiration: { maxEntries: 500, maxAgeSeconds: 60 * 60 * 24 * 30 }, cacheableResponse: { statuses: [0, 200] }, }, }, ], }, }), ], })