diff --git a/web/eslint.config.js b/web/eslint.config.js index e457be29ba..8fc49581a9 100644 --- a/web/eslint.config.js +++ b/web/eslint.config.js @@ -129,6 +129,7 @@ export default typescriptEslint.config( '@typescript-eslint/no-floating-promises': 'error', '@typescript-eslint/no-misused-promises': 'error', '@typescript-eslint/require-await': 'error', + '@typescript-eslint/switch-exhaustiveness-check': ['error', { considerDefaultExhaustiveForUnions: true }], 'object-shorthand': ['error', 'always'], 'svelte/no-navigation-without-resolve': 'off', }, diff --git a/web/src/lib/components/asset-viewer/AssetViewer.svelte b/web/src/lib/components/asset-viewer/AssetViewer.svelte index 394c0b1d2a..f63b919633 100644 --- a/web/src/lib/components/asset-viewer/AssetViewer.svelte +++ b/web/src/lib/components/asset-viewer/AssetViewer.svelte @@ -351,6 +351,7 @@ closeViewer(); break; } + // no default } onAction?.(action); diff --git a/web/src/lib/components/share-page/IndividualSharedViewer.svelte b/web/src/lib/components/share-page/IndividualSharedViewer.svelte index 936ccb0f41..a3cf76c78e 100644 --- a/web/src/lib/components/share-page/IndividualSharedViewer.svelte +++ b/web/src/lib/components/share-page/IndividualSharedViewer.svelte @@ -69,6 +69,7 @@ await goto(Route.photos()); break; } + // no default } }; diff --git a/web/src/lib/components/shared-components/gallery-viewer/GalleryViewer.svelte b/web/src/lib/components/shared-components/gallery-viewer/GalleryViewer.svelte index ef1c2bda76..cf08afc7dc 100644 --- a/web/src/lib/components/shared-components/gallery-viewer/GalleryViewer.svelte +++ b/web/src/lib/components/shared-components/gallery-viewer/GalleryViewer.svelte @@ -316,6 +316,7 @@ } break; } + // no default } }; diff --git a/web/src/lib/components/timeline/TimelineAssetViewer.svelte b/web/src/lib/components/timeline/TimelineAssetViewer.svelte index 1b4e76d9c4..659414e363 100644 --- a/web/src/lib/components/timeline/TimelineAssetViewer.svelte +++ b/web/src/lib/components/timeline/TimelineAssetViewer.svelte @@ -140,6 +140,7 @@ break; } + // no default } }; const handleAction = (action: Action) => { @@ -195,6 +196,7 @@ }); break; } + // no default } }; const handleUndoDelete = async (assets: TimelineAsset[]) => { diff --git a/web/src/lib/managers/edit/transform-manager.svelte.ts b/web/src/lib/managers/edit/transform-manager.svelte.ts index 0de58f0a1c..dc9cf18bda 100644 --- a/web/src/lib/managers/edit/transform-manager.svelte.ts +++ b/web/src/lib/managers/edit/transform-manager.svelte.ts @@ -667,6 +667,7 @@ class TransformManager implements EditToolManager { desiredWidth = Math.max(minSize, Math.max(mouseX, 0) - x); break; } + // no default } // Height @@ -683,10 +684,14 @@ class TransformManager implements EditToolManager { desiredHeight = Math.max(minSize, Math.max(mouseY, 0) - y); break; } + // no default } // Old switch (this.resizeSide) { + case ResizeBoundary.None: { + break; + } case ResizeBoundary.Left: { const { newWidth: w, newHeight: h } = this.keepAspectRatio(desiredWidth, height); const finalWidth = clamp(w, minSize, canvas.clientWidth); diff --git a/web/src/lib/managers/timeline-manager/types.ts b/web/src/lib/managers/timeline-manager/types.ts index 715b94c47c..3bd921a657 100644 --- a/web/src/lib/managers/timeline-manager/types.ts +++ b/web/src/lib/managers/timeline-manager/types.ts @@ -72,12 +72,7 @@ export interface TrashAssets { values: string[]; } -export interface UpdateStackAssets { - type: 'update_stack_assets'; - values: string[]; -} - -export type PendingChange = AddAsset | UpdateAsset | DeleteAsset | TrashAssets | UpdateStackAssets; +export type PendingChange = AddAsset | UpdateAsset | DeleteAsset | TrashAssets; export type ScrubberMonth = { height: number; diff --git a/web/src/lib/modals/AlbumPickerModal.svelte b/web/src/lib/modals/AlbumPickerModal.svelte index 3674a21acd..1d96a04eff 100644 --- a/web/src/lib/modals/AlbumPickerModal.svelte +++ b/web/src/lib/modals/AlbumPickerModal.svelte @@ -105,6 +105,7 @@ } break; } + // no default } selectedRowIndex = -1; diff --git a/web/src/lib/stores/upload.ts b/web/src/lib/stores/upload.ts index ed9ad531f6..bcbf7792e8 100644 --- a/web/src/lib/stores/upload.ts +++ b/web/src/lib/stores/upload.ts @@ -98,6 +98,13 @@ function createUploadStore() { case UploadState.DONE: { break; } + + case UploadState.PENDING: + case UploadState.STARTED: + case undefined: { + console.error('Cannot remove uploads in progress'); + break; + } } return stats; diff --git a/web/src/lib/utils/cast/gcast-destination.svelte.ts b/web/src/lib/utils/cast/gcast-destination.svelte.ts index 48b77d6459..c43e029682 100644 --- a/web/src/lib/utils/cast/gcast-destination.svelte.ts +++ b/web/src/lib/utils/cast/gcast-destination.svelte.ts @@ -171,6 +171,7 @@ export class GCastDestination implements ICastDestination { /// private onSessionStateChanged(event: cast.framework.SessionStateEventData) { switch (event.sessionState) { + case cast.framework.SessionState.NO_SESSION: case cast.framework.SessionState.SESSION_ENDED: { this.session = null; break; @@ -180,6 +181,11 @@ export class GCastDestination implements ICastDestination { this.session = event.session.getSessionObj(); break; } + case cast.framework.SessionState.SESSION_START_FAILED: { + console.error('Google Cast failed to start session:', event.errorCode); + break; + } + // no default } } diff --git a/web/src/routes/admin/queues/QueuePanel.svelte b/web/src/routes/admin/queues/QueuePanel.svelte index 263d547db2..44bd606f40 100644 --- a/web/src/routes/admin/queues/QueuePanel.svelte +++ b/web/src/routes/admin/queues/QueuePanel.svelte @@ -104,6 +104,7 @@ break; } } + // no default } try { @@ -115,6 +116,7 @@ toastManager.primary($t('admin.cleared_jobs', { values: { job: item.title } })); break; } + // no default } } catch (error) { handleError(error, $t('admin.failed_job_command', { values: { command: dto.command, job: item.title } }));