mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-22 15:25:46 +00:00
refactor(decouple): move coerceOpenArtistRefs to lib/api (off artist feature)
First step of decoupling the audio core from feature imports. coerceOpenArtist Refs is a pure Subsonic-response normalizer (one-object-vs-array quirk) that was mis-membered in features/artist but consumed by the audio core (songToTrack, trackArtistRefs) and others. Relocate it beside its SubsonicOpenArtistRef type in lib/api/; drop the artist-barrel re-export; repoint the 4 barrel consumers. Removes the @/features/artist runtime edge from the audio core (utils/playback) entirely. tsc 0, lint 0/0, suite 319/2353 green. (composerBrowseSessionStore's ALL_SENTINEL import from @/features/artist remains — that's a non-audio global browse store, separate from this decouple.)
This commit is contained in:
@@ -22,7 +22,7 @@ import PlaybackDelayModal from './PlaybackDelayModal';
|
||||
import { usePlaybackScheduleRemaining } from '../utils/format/playbackScheduleFormat';
|
||||
import { usePreviewStore } from '../store/previewStore';
|
||||
import { usePerfProbeFlags } from '../utils/perf/perfFlags';
|
||||
import { coerceOpenArtistRefs } from '@/features/artist';
|
||||
import { coerceOpenArtistRefs } from '@/lib/api/openArtistRefs';
|
||||
import { resolveTrackArtistRefs } from '../utils/playback/trackArtistRefs';
|
||||
import { PlayerTrackInfo } from './playerBar/PlayerTrackInfo';
|
||||
import { PlayerTransportControls } from './playerBar/PlayerTransportControls';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { SubsonicAlbum, SubsonicOpenArtistRef, SubsonicSong } from '@/lib/api/subsonicTypes';
|
||||
import { coerceOpenArtistRefs } from '@/features/artist';
|
||||
import { coerceOpenArtistRefs } from '@/lib/api/openArtistRefs';
|
||||
|
||||
function nonEmpty(refs: SubsonicOpenArtistRef[]): refs is SubsonicOpenArtistRef[] {
|
||||
return refs.length > 0;
|
||||
|
||||
@@ -27,7 +27,6 @@ export * from './store/artistAlbumYearSortStore';
|
||||
export * from './store/artistBrowseSessionStore';
|
||||
export * from './store/artistLayoutStore';
|
||||
export * from './utils/artistsHelpers';
|
||||
export * from './utils/openArtistRefs';
|
||||
export * from './utils/runArtistDetailActions';
|
||||
export * from './utils/runArtistDetailPlay';
|
||||
export * from './utils/sortArtistAlbums';
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { coerceOpenArtistRefs } from '@/features/artist/utils/openArtistRefs';
|
||||
import { coerceOpenArtistRefs } from '@/lib/api/openArtistRefs';
|
||||
|
||||
describe('coerceOpenArtistRefs', () => {
|
||||
it('returns an empty array for nullish input', () => {
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { SubsonicSong } from '@/lib/api/subsonicTypes';
|
||||
import type { Track } from '../../store/playerStoreTypes';
|
||||
import { coerceOpenArtistRefs } from '@/features/artist';
|
||||
import { coerceOpenArtistRefs } from '@/lib/api/openArtistRefs';
|
||||
import { activeServerProfileId } from './trackServerScope';
|
||||
|
||||
export function songToTrack(song: SubsonicSong): Track {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { SubsonicOpenArtistRef } from '@/lib/api/subsonicTypes';
|
||||
import type { Track } from '../../store/playerStoreTypes';
|
||||
import { coerceOpenArtistRefs } from '@/features/artist';
|
||||
import { coerceOpenArtistRefs } from '@/lib/api/openArtistRefs';
|
||||
|
||||
type TrackArtistFields = Pick<Track, 'artist' | 'artistId' | 'artists'>;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user