diff --git a/.dependency-cruiser-known-violations.json b/.dependency-cruiser-known-violations.json index 3d0f7fbf..c8ffd8e2 100644 --- a/.dependency-cruiser-known-violations.json +++ b/.dependency-cruiser-known-violations.json @@ -1226,6 +1226,23 @@ "name": "lib-is-the-floor" } }, + { + "type": "dependency", + "from": "src/lib/serverCapabilities/storeView.ts", + "to": "src/store/authStore.ts", + "unresolvedTo": "@/store/authStore", + "dependencyTypes": [ + "aliased", + "aliased-tsconfig", + "aliased-tsconfig-paths", + "local", + "import" + ], + "rule": { + "severity": "error", + "name": "lib-is-the-floor" + } + }, { "type": "dependency", "from": "src/lib/share/copyEntityShareLink.ts", diff --git a/src/features/playback/store/playbackReportSession.test.ts b/src/features/playback/store/playbackReportSession.test.ts index 475b7dbf..29ea40cb 100644 --- a/src/features/playback/store/playbackReportSession.test.ts +++ b/src/features/playback/store/playbackReportSession.test.ts @@ -4,7 +4,7 @@ vi.mock('@/lib/api/subsonicScrobble', () => ({ reportPlayback: vi.fn(() => Promise.resolve()), reportNowPlaying: vi.fn(() => Promise.resolve()), })); -vi.mock('@/serverCapabilities/storeView', () => ({ +vi.mock('@/lib/serverCapabilities/storeView', () => ({ isFeatureActiveForServer: vi.fn(), })); vi.mock('@/store/authStore', () => ({ @@ -25,7 +25,7 @@ vi.mock('@/store/orbitRuntime', async (importOriginal) => ({ })); import { reportNowPlaying, reportPlayback } from '@/lib/api/subsonicScrobble'; -import { isFeatureActiveForServer } from '@/serverCapabilities/storeView'; +import { isFeatureActiveForServer } from '@/lib/serverCapabilities/storeView'; import { useAuthStore } from '@/store/authStore'; import { _resetPlaybackReportSessionForTest, diff --git a/src/features/playback/store/playbackReportSession.ts b/src/features/playback/store/playbackReportSession.ts index 8972ea70..a5f5e025 100644 --- a/src/features/playback/store/playbackReportSession.ts +++ b/src/features/playback/store/playbackReportSession.ts @@ -1,7 +1,7 @@ import { reportNowPlaying, reportPlayback } from '@/lib/api/subsonicScrobble'; import type { PlaybackReportState } from '@/lib/api/subsonicTypes'; -import { FEATURE_PLAYBACK_REPORT } from '@/serverCapabilities/catalog'; -import { isFeatureActiveForServer } from '@/serverCapabilities/storeView'; +import { FEATURE_PLAYBACK_REPORT } from '@/lib/serverCapabilities/catalog'; +import { isFeatureActiveForServer } from '@/lib/serverCapabilities/storeView'; import { isPlaybackRateApplied } from '@/features/playback/utils/audio/playbackRateHelpers'; import { isOrbitPlaybackSyncActive } from '@/store/orbitRuntime'; import { useAuthStore } from '@/store/authStore'; diff --git a/src/features/settings/components/ServerCapabilityHeaderBadge.tsx b/src/features/settings/components/ServerCapabilityHeaderBadge.tsx index 39794e31..4de3ce02 100644 --- a/src/features/settings/components/ServerCapabilityHeaderBadge.tsx +++ b/src/features/settings/components/ServerCapabilityHeaderBadge.tsx @@ -1,6 +1,6 @@ import { useTranslation } from 'react-i18next'; -import { getCapabilityDefinition } from '@/serverCapabilities/catalog'; -import { isFeatureActiveForServer, resolveFeatureForServer } from '@/serverCapabilities/storeView'; +import { getCapabilityDefinition } from '@/lib/serverCapabilities/catalog'; +import { isFeatureActiveForServer, resolveFeatureForServer } from '@/lib/serverCapabilities/storeView'; /** Inline badge for auto-managed server capabilities (Settings → Servers header row). */ export function ServerCapabilityHeaderBadge({ diff --git a/src/features/settings/components/ServersTab.tsx b/src/features/settings/components/ServersTab.tsx index 64babefd..901a4e06 100644 --- a/src/features/settings/components/ServersTab.tsx +++ b/src/features/settings/components/ServersTab.tsx @@ -5,7 +5,7 @@ import { open as openUrl } from '@tauri-apps/plugin-shell'; import { AlertTriangle, CheckCircle2, Info, Lock, LogOut, Pencil, Plus, Power, Server, Sparkles, Wifi, WifiOff } from 'lucide-react'; import { useAuthStore } from '@/store/authStore'; import { formatServerSoftware, isNavidromeAudiomuseSoftwareEligible, type InstantMixProbeResult, type SubsonicServerIdentity } from '@/lib/server/subsonicServerIdentity'; -import { buildCapabilityContext } from '@/serverCapabilities/context'; +import { buildCapabilityContext } from '@/lib/serverCapabilities/context'; import { useLibraryIndexStore } from '@/store/libraryIndexStore'; import { libraryDeleteServerData, librarySyncClearSession } from '@/lib/api/library'; import { bootstrapIndexedServer } from '@/lib/library/librarySession'; @@ -29,9 +29,9 @@ import { } from '@/lib/server/serverUrlRemigration'; import { useConfirmModalStore } from '@/store/confirmModalStore'; import { showToast } from '@/lib/dom/toast'; -import { FEATURE_AUDIOMUSE_SIMILAR_TRACKS } from '@/serverCapabilities/catalog'; -import { isFeatureActiveForServer, resolveFeatureForServer } from '@/serverCapabilities/storeView'; -import type { ResolvedCapability } from '@/serverCapabilities/types'; +import { FEATURE_AUDIOMUSE_SIMILAR_TRACKS } from '@/lib/serverCapabilities/catalog'; +import { isFeatureActiveForServer, resolveFeatureForServer } from '@/lib/serverCapabilities/storeView'; +import type { ResolvedCapability } from '@/lib/serverCapabilities/types'; import { serverIdentityLabel, serverListDisplayLabel, serverSettingsEntryTitle } from '@/lib/server/serverDisplayName'; import { serverIndexKeyForProfile } from '@/lib/server/serverIndexKey'; import { switchActiveServer } from '@/utils/server/switchActiveServer'; diff --git a/src/features/sidebar/components/perfProbe/SidebarPerfProbeServerSection.tsx b/src/features/sidebar/components/perfProbe/SidebarPerfProbeServerSection.tsx index 24fec320..3742d268 100644 --- a/src/features/sidebar/components/perfProbe/SidebarPerfProbeServerSection.tsx +++ b/src/features/sidebar/components/perfProbe/SidebarPerfProbeServerSection.tsx @@ -1,13 +1,13 @@ import { useAuthStore } from '@/store/authStore'; import type { NavidromeAdminRole } from '@/lib/hooks/useNavidromeAdminRole'; import { isNavidromeServer, formatServerSoftware } from '@/lib/server/subsonicServerIdentity'; -import { FEATURE_AUDIOMUSE_SIMILAR_TRACKS, OP_SIMILAR_TRACKS } from '@/serverCapabilities/catalog'; +import { FEATURE_AUDIOMUSE_SIMILAR_TRACKS, OP_SIMILAR_TRACKS } from '@/lib/serverCapabilities/catalog'; import { isFeatureActiveForServer, resolveCallRoutesForServer, resolveFeatureForServer, -} from '@/serverCapabilities/storeView'; -import type { CapabilityStatus, FeatureTrust, ResolvedCapability } from '@/serverCapabilities/types'; +} from '@/lib/serverCapabilities/storeView'; +import type { CapabilityStatus, FeatureTrust, ResolvedCapability } from '@/lib/serverCapabilities/types'; import { PerfProbeMetricSection } from '@/features/sidebar/components/perfProbe/PerfProbeMetricCard'; import PerfProbeDetailList, { type PerfProbeDetailRow } from '@/features/sidebar/components/perfProbe/PerfProbeDetailList'; import PerfProbeStatusBadge, { type PerfProbeBadgeTone } from '@/features/sidebar/components/perfProbe/PerfProbeStatusBadge'; diff --git a/src/lib/api/subsonic.ts b/src/lib/api/subsonic.ts index a90191a2..168ae89c 100644 --- a/src/lib/api/subsonic.ts +++ b/src/lib/api/subsonic.ts @@ -9,14 +9,14 @@ import { type SubsonicServerIdentity, } from '@/lib/server/subsonicServerIdentity'; import { fetchOpenSubsonicExtensionsWithCredentials } from '@/lib/api/subsonicOpenSubsonic'; -import { buildCapabilityContext } from '@/serverCapabilities/context'; +import { buildCapabilityContext } from '@/lib/serverCapabilities/context'; import { PROBE_LEGACY_INSTANT_MIX, PROBE_OPENSUBSONIC_EXTENSIONS, SERVER_CAPABILITY_CATALOG, SONIC_SIMILARITY_EXTENSION, -} from '@/serverCapabilities/catalog'; -import { neededProbeIds } from '@/serverCapabilities/resolve'; +} from '@/lib/serverCapabilities/catalog'; +import { neededProbeIds } from '@/lib/serverCapabilities/resolve'; import { SUBSONIC_CLIENT, api, diff --git a/src/lib/api/subsonicArtists.ts b/src/lib/api/subsonicArtists.ts index 1fa2ceac..d02e8641 100644 --- a/src/lib/api/subsonicArtists.ts +++ b/src/lib/api/subsonicArtists.ts @@ -6,8 +6,8 @@ import { filterSongsToActiveLibrary, similarSongsRequestCount } from '@/lib/api/ import { FEATURE_AUDIOMUSE_SIMILAR_TRACKS, OP_SIMILAR_TRACKS, -} from '@/serverCapabilities/catalog'; -import { resolveCallRoutesForServer } from '@/serverCapabilities/storeView'; +} from '@/lib/serverCapabilities/catalog'; +import { resolveCallRoutesForServer } from '@/lib/serverCapabilities/storeView'; import type { SubsonicAlbum, SubsonicArtist, diff --git a/src/serverCapabilities/catalog.ts b/src/lib/serverCapabilities/catalog.ts similarity index 100% rename from src/serverCapabilities/catalog.ts rename to src/lib/serverCapabilities/catalog.ts diff --git a/src/serverCapabilities/context.ts b/src/lib/serverCapabilities/context.ts similarity index 100% rename from src/serverCapabilities/context.ts rename to src/lib/serverCapabilities/context.ts diff --git a/src/serverCapabilities/resolve.test.ts b/src/lib/serverCapabilities/resolve.test.ts similarity index 100% rename from src/serverCapabilities/resolve.test.ts rename to src/lib/serverCapabilities/resolve.test.ts diff --git a/src/serverCapabilities/resolve.ts b/src/lib/serverCapabilities/resolve.ts similarity index 100% rename from src/serverCapabilities/resolve.ts rename to src/lib/serverCapabilities/resolve.ts diff --git a/src/serverCapabilities/storeView.test.ts b/src/lib/serverCapabilities/storeView.test.ts similarity index 98% rename from src/serverCapabilities/storeView.test.ts rename to src/lib/serverCapabilities/storeView.test.ts index 6ba73a20..78b19d20 100644 --- a/src/serverCapabilities/storeView.test.ts +++ b/src/lib/serverCapabilities/storeView.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from 'vitest'; -import { useAuthStore } from '../store/authStore'; +import { useAuthStore } from '@/store/authStore'; import { FEATURE_AUDIOMUSE_SIMILAR_TRACKS, FEATURE_PLAYBACK_REPORT, diff --git a/src/serverCapabilities/storeView.ts b/src/lib/serverCapabilities/storeView.ts similarity index 98% rename from src/serverCapabilities/storeView.ts rename to src/lib/serverCapabilities/storeView.ts index e4efecc9..04d93112 100644 --- a/src/serverCapabilities/storeView.ts +++ b/src/lib/serverCapabilities/storeView.ts @@ -1,4 +1,4 @@ -import { useAuthStore } from '../store/authStore'; +import { useAuthStore } from '@/store/authStore'; import type { InstantMixProbeResult, } from '@/lib/server/subsonicServerIdentity'; diff --git a/src/serverCapabilities/types.ts b/src/lib/serverCapabilities/types.ts similarity index 100% rename from src/serverCapabilities/types.ts rename to src/lib/serverCapabilities/types.ts