feat: major dependency upgrades, remove Redis, fix mongoose 9 types

Dependencies upgraded:
- svelte 5.38→5.55, @sveltejs/kit 2.37→2.56, adapter-node 5.3→5.5
- mongoose 8→9, sharp 0.33→0.34, typescript 5→6
- lucide-svelte → @lucide/svelte 1.7 (Svelte 5 native package)
- vite 7→8 with rolldown (build time 33s→14s)
- Removed terser (esbuild/oxc default minifier is 20-100x faster)

Infrastructure:
- Removed Redis/ioredis cache layer — MongoDB handles caching natively
- Deleted src/lib/server/cache.ts and all cache.get/set/invalidate usage
- Removed redis-cli from deploy workflow, Redis env vars from .env.example

Mongoose 9 migration:
- Replaced deprecated `new: true` with `returnDocument: 'after'` (16 files)
- Fixed strict query filter types for ObjectId/paymentId fields
- Fixed season param type (string→number) in recipe API
- Removed unused @ts-expect-error in WorkoutSession model
This commit is contained in:
2026-04-06 12:20:59 +02:00
parent 6f53fe3b7b
commit 1fa2e350d7
68 changed files with 981 additions and 1743 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
<script>
import { themeStore } from '$lib/stores/theme.svelte';
import { Sun, Moon, SunMoon } from 'lucide-svelte';
import { Sun, Moon, SunMoon } from '@lucide/svelte';
</script>
<style>
+1 -1
View File
@@ -1,5 +1,5 @@
<script>
import { X } from 'lucide-svelte';
import { X } from '@lucide/svelte';
import { getToasts } from '$lib/js/toast.svelte';
const toasts = getToasts();
@@ -2,7 +2,7 @@
import { browser } from '$app/environment';
import { getAngelusStreak, getCurrentTimeSlot, type TimeSlot } from '$lib/stores/angelusStreak.svelte';
import StreakAura from '$lib/components/faith/StreakAura.svelte';
import { Coffee, Sun, Moon } from 'lucide-svelte';
import { Coffee, Sun, Moon } from '@lucide/svelte';
import { tick, onMount } from 'svelte';
let burst = $state(false);
@@ -1,6 +1,6 @@
<script>
import { getFilterOptions, searchExercises, translateTerm } from '$lib/data/exercises';
import { Search, X } from 'lucide-svelte';
import { Search, X } from '@lucide/svelte';
import { page } from '$app/stores';
import { detectFitnessLang, t } from '$lib/js/fitnessI18n';
+1 -1
View File
@@ -1,7 +1,7 @@
<script>
import { page } from '$app/stores';
import { browser } from '$app/environment';
import { Heart, ExternalLink, ScanBarcode, X } from 'lucide-svelte';
import { Heart, ExternalLink, ScanBarcode, X } from '@lucide/svelte';
import { detectFitnessLang, fitnessSlugs, t } from '$lib/js/fitnessI18n';
/**
@@ -1,7 +1,7 @@
<script>
import { page } from '$app/stores';
import { getExerciseById, getExerciseMetrics } from '$lib/data/exercises';
import { Clock, Weight, Trophy, Route, Gauge, Flame } from 'lucide-svelte';
import { Clock, Weight, Trophy, Route, Gauge, Flame } from '@lucide/svelte';
import { detectFitnessLang, fitnessSlugs } from '$lib/js/fitnessI18n';
const lang = $derived(detectFitnessLang($page.url.pathname));
+1 -1
View File
@@ -1,5 +1,5 @@
<script>
import { Check, X } from 'lucide-svelte';
import { Check, X } from '@lucide/svelte';
import { METRIC_LABELS } from '$lib/data/exercises';
import RestTimer from './RestTimer.svelte';
import { page } from '$app/stores';
@@ -1,5 +1,5 @@
<script>
import { Cloud, CloudOff, RefreshCw, AlertTriangle } from 'lucide-svelte';
import { Cloud, CloudOff, RefreshCw, AlertTriangle } from '@lucide/svelte';
/** @type {{ status: string }} */
let { status } = $props();
@@ -1,6 +1,6 @@
<script>
import { getExerciseById } from '$lib/data/exercises';
import { EllipsisVertical, MapPin } from 'lucide-svelte';
import { EllipsisVertical, MapPin } from '@lucide/svelte';
import { page } from '$app/stores';
import { detectFitnessLang, t } from '$lib/js/fitnessI18n';
+1 -1
View File
@@ -1,6 +1,6 @@
<script>
import { goto } from '$app/navigation';
import { Play, Pause } from 'lucide-svelte';
import { Play, Pause } from '@lucide/svelte';
import SyncIndicator from '$lib/components/fitness/SyncIndicator.svelte';
import { page } from '$app/stores';
import { detectFitnessLang, t } from '$lib/js/fitnessI18n';
@@ -1,5 +1,5 @@
<script>
import { UtensilsCrossed, X } from 'lucide-svelte';
import { UtensilsCrossed, X } from '@lucide/svelte';
import { toast } from '$lib/js/toast.svelte';
let {
@@ -1,5 +1,5 @@
<script>
import { ChevronLeft, ChevronRight } from 'lucide-svelte';
import { ChevronLeft, ChevronRight } from '@lucide/svelte';
import { getStickerById } from '$lib/utils/stickers';
import {
startOfMonth, endOfMonth, startOfWeek, endOfWeek,
+1 -1
View File
@@ -1,6 +1,6 @@
<script>
import { X, Sparkles, Wind, Bath, UtensilsCrossed, CookingPot, WashingMachine,
Flower2, Droplets, Leaf, ShoppingCart, Trash2, Shirt, Brush } from 'lucide-svelte';
Flower2, Droplets, Leaf, ShoppingCart, Trash2, Shirt, Brush } from '@lucide/svelte';
import ProfilePicture from '$lib/components/cospend/ProfilePicture.svelte';
import Toggle from '$lib/components/Toggle.svelte';