mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender-pwa.git
synced 2025-07-16 17:48:51 +02:00
114 lines
3.4 KiB
TypeScript
114 lines
3.4 KiB
TypeScript
//Calendar implementation for the HTWK Leipzig timetable. Evaluation and display of the individual dates in iCal format.
|
|
//Copyright (C) 2024 HTWKalender support@htwkalender.de
|
|
|
|
//This program is free software: you can redistribute it and/or modify
|
|
//it under the terms of the GNU Affero General Public License as published by
|
|
//the Free Software Foundation, either version 3 of the License, or
|
|
//(at your option) any later version.
|
|
|
|
//This program is distributed in the hope that it will be useful,
|
|
//but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
//GNU Affero General Public License for more details.
|
|
|
|
//You should have received a copy of the GNU Affero General Public License
|
|
//along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
import { defineConfig } from "vite";
|
|
import vue from "@vitejs/plugin-vue";
|
|
import { fileURLToPath } from "node:url";
|
|
import { VitePWA } from 'vite-plugin-pwa';
|
|
import basicSsl from '@vitejs/plugin-basic-ssl'
|
|
|
|
export default defineConfig({
|
|
plugins: [
|
|
vue(),
|
|
basicSsl(),
|
|
VitePWA({
|
|
mode: 'development',
|
|
base: '/',
|
|
injectRegister: 'auto',
|
|
includeAssets: ['favicon.ico', 'apple-touch-icon.png', 'mask-icon.svg'],
|
|
manifest: {
|
|
name: 'HTWKalender',
|
|
short_name: 'HTWKalender',
|
|
description: 'Calendar implementation for the HTWK Leipzig timetable. Evaluation and display of the individual dates in iCal format.',
|
|
theme_color: '#FFFFFF',
|
|
background_color: '#FFFFFF',
|
|
display: 'standalone',
|
|
start_url: '/',
|
|
icons: [
|
|
{
|
|
src: "/pwa-192x192.png",
|
|
sizes: "192x192",
|
|
type: "image/png",
|
|
purpose: "any"
|
|
},
|
|
{
|
|
src: "/pwa-512x512.png",
|
|
sizes: "512x512",
|
|
type: "image/png",
|
|
purpose: "any"
|
|
},
|
|
{
|
|
src: "/pwa-maskable-192x192.png",
|
|
sizes: "192x192",
|
|
type: "image/png",
|
|
purpose: "maskable"
|
|
},
|
|
{
|
|
src: "/pwa-maskable-512x512.png",
|
|
sizes: "512x512",
|
|
type: "image/png",
|
|
purpose: "maskable"
|
|
}
|
|
],
|
|
},
|
|
registerType: 'autoUpdate',
|
|
workbox: {
|
|
globPatterns: ['**/*.{js,css,html,ico,png,svg,json,vue,txt,woff2}'],
|
|
cleanupOutdatedCaches: true,
|
|
runtimeCaching: [
|
|
{
|
|
urlPattern: /^https?.*/,
|
|
handler: 'NetworkFirst',
|
|
options: {
|
|
cacheName: 'https-calls',
|
|
expiration: {
|
|
maxEntries: 150,
|
|
maxAgeSeconds: 30 * 12 * 60 * 60, // 1 month
|
|
},
|
|
networkTimeoutSeconds: 10, // fall back to cache if api does not response within 10 seconds
|
|
},
|
|
},
|
|
],
|
|
},
|
|
devOptions: {
|
|
enabled: true,
|
|
/* when using generateSW the PWA plugin will switch to classic */
|
|
type: 'module',
|
|
navigateFallback: 'index.html',
|
|
suppressWarnings: true,
|
|
}
|
|
})],
|
|
resolve: {
|
|
alias: {
|
|
"@": fileURLToPath(new URL("./src", import.meta.url)),
|
|
},
|
|
},
|
|
server: {
|
|
host: true,
|
|
port: 8000,
|
|
watch: {
|
|
usePolling: true,
|
|
},
|
|
proxy: {
|
|
"/api": {
|
|
target: "http://localhost:8090/api",
|
|
changeOrigin: true,
|
|
rewrite: (path) => path.replace(/^\/api/, ""),
|
|
},
|
|
},
|
|
},
|
|
});
|