chore(web): clear kit 3's alias and Vite's config-loader deprecations (#5021)
release / govulncheck (push) Successful in 23s
release / web (push) Successful in 1m22s
release / go (push) Successful in 1m41s
release / integration (push) Successful in 4m49s
release / android (push) Successful in 5m32s
release / Build signed APK (releases and dev) (push) Successful in 5m39s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Successful in 28s
release / Verify release artifacts (tag releases only) (push) Skipped

CI run 8789 warned on both:

- kit 3 deprecates `config.alias`. The $test-utils alias becomes a
  `#test-utils/*` subpath import, matching #lib, and its 43 import sites
  move with it.
- Vite's coming native config loader needs the extension on
  vitest.config.ts's import of vite.config.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 11:03:38 -04:00
co-authored by Claude Opus 5.5
parent b1b10b0c77
commit ca9917d8cd
38 changed files with 48 additions and 53 deletions
+2 -1
View File
@@ -33,6 +33,7 @@
"lucide-svelte": "^1.0.1"
},
"imports": {
"#lib/*": "./src/lib/*"
"#lib/*": "./src/lib/*",
"#test-utils/*": "./src/test-utils/*"
}
}
@@ -1,7 +1,7 @@
import { describe, expect, test, vi } from 'vitest';
import { render, screen, fireEvent, waitFor } from '@testing-library/svelte';
import { readable } from 'svelte/store';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
const playlistsData = vi.hoisted(() => ({
owned: [
+1 -1
View File
@@ -1,6 +1,6 @@
import { describe, expect, test, vi } from 'vitest';
import { render, screen } from '@testing-library/svelte';
import { pageUrlModule } from '$test-utils/mocks/appState';
import { pageUrlModule } from '#test-utils/mocks/appState.js';
const state = vi.hoisted(() => ({
pageUrl: new URL('http://localhost/admin')
+1 -1
View File
@@ -4,7 +4,7 @@ import type { AlbumRef, AlbumDetail, TrackRef } from '#lib/api/types.js';
import { FALLBACK_COVER } from '#lib/media/covers.js';
import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { apiClientMock } from '../../test-utils/mocks/client';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
vi.mock('#lib/api/client.js', () => apiClientMock());
vi.mock('#lib/player/store.svelte.js', () => ({
+1 -1
View File
@@ -3,7 +3,7 @@ import { render, screen, fireEvent, waitFor } from '@testing-library/svelte';
import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { emptyPlaylistsMock } from '../../test-utils/mocks/playlists';
import type { TrackRef } from '#lib/api/types.js';
import { makeTracks } from '$test-utils/fixtures/track';
import { makeTracks } from '#test-utils/fixtures/track.js';
vi.mock('$app/navigation', () => ({ goto: vi.fn() }));
+1 -1
View File
@@ -3,7 +3,7 @@ import { render, screen, fireEvent } from '@testing-library/svelte';
import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { apiClientMock } from '../../test-utils/mocks/client';
import type { ArtistRef, TrackRef } from '#lib/api/types.js';
import { makeTrack, makeTracks } from '$test-utils/fixtures/track';
import { makeTrack, makeTracks } from '#test-utils/fixtures/track.js';
vi.mock('#lib/api/client.js', () => apiClientMock());
vi.mock('#lib/player/store.svelte.js', () => ({
+1 -1
View File
@@ -3,7 +3,7 @@ import { render, screen, fireEvent, waitFor } from '@testing-library/svelte';
import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { emptyPlaylistsMock } from '../../test-utils/mocks/playlists';
import type { TrackRef } from '#lib/api/types.js';
import { makeTracks } from '$test-utils/fixtures/track';
import { makeTracks } from '#test-utils/fixtures/track.js';
vi.mock('$app/navigation', () => ({ goto: vi.fn() }));
@@ -4,7 +4,7 @@ import type { TrackRef } from '#lib/api/types.js';
import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { emptyPlaylistsMock } from '../../test-utils/mocks/playlists';
import { emptyQuarantineMock } from '../../test-utils/mocks/quarantine';
import { makeTracks } from '$test-utils/fixtures/track';
import { makeTracks } from '#test-utils/fixtures/track.js';
vi.mock('#lib/api/likes.js', () => emptyLikesMock());
+1 -1
View File
@@ -1,6 +1,6 @@
import { describe, expect, test, vi } from 'vitest';
import { render, screen } from '@testing-library/svelte';
import { pageUrlModule } from '$test-utils/mocks/appState';
import { pageUrlModule } from '#test-utils/mocks/appState.js';
const state = vi.hoisted(() => ({
pageUrl: new URL('http://localhost/discover')
+1 -1
View File
@@ -1,7 +1,7 @@
import { afterEach, describe, expect, test, vi } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/svelte';
import FlagPopover from './FlagPopover.svelte';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
const invalidateMock = vi.fn();
vi.mock('@tanstack/svelte-query', async (orig) => {
+1 -1
View File
@@ -2,7 +2,7 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/svelte';
import HistoryRow from './HistoryRow.svelte';
import type { HistoryEvent } from '#lib/api/history.js';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
const playQueue = vi.fn();
+1 -1
View File
@@ -3,7 +3,7 @@ import { render, screen, fireEvent, within } from '@testing-library/svelte';
import type { TrackRef } from '#lib/api/types.js';
import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { emptyQuarantineMock } from '../../test-utils/mocks/quarantine';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
// Mutable state the mocked store reads from.
const state = vi.hoisted(() => ({
+1 -1
View File
@@ -2,7 +2,7 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/svelte';
import { emptyLikesMock } from '../../test-utils/mocks/likes';
import type { TrackRef } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
// QueueTrackRow (rendered inside QueueDrawer → QueueList) now renders a
// LikeButton, which reads createLikedIdsQuery. Stub the likes API so the
+1 -1
View File
@@ -1,7 +1,7 @@
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/svelte';
import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
// QueueTrackRow now renders a LikeButton, which reads createLikedIdsQuery.
// Stub the likes API so the row doesn't need a real QueryClient in context.
+1 -1
View File
@@ -1,6 +1,6 @@
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/svelte';
import { pageUrlModule } from '$test-utils/mocks/appState';
import { pageUrlModule } from '#test-utils/mocks/appState.js';
const state = vi.hoisted(() => ({
pageUrl: new URL('http://localhost/')
+1 -1
View File
@@ -3,7 +3,7 @@ import { render, screen, fireEvent, waitFor } from '@testing-library/svelte';
import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { emptyPlaylistsMock } from '../../test-utils/mocks/playlists';
import { emptyQuarantineMock } from '../../test-utils/mocks/quarantine';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
// Mutable mock-user handle so individual tests can flip is_admin / null
// without re-importing the module under test.
+1 -1
View File
@@ -3,7 +3,7 @@ import { render, screen, fireEvent } from '@testing-library/svelte';
import type { TrackRef } from '#lib/api/types.js';
import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { emptyQuarantineMock } from '../../test-utils/mocks/quarantine';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
vi.mock('#lib/player/store.svelte.js', () => ({
playQueue: vi.fn(),
+1 -1
View File
@@ -21,7 +21,7 @@ import {
} from './store.svelte';
import { api } from '#lib/api/client.js';
import type { TrackRef } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
function track(id: string, dur = 200): TrackRef {
return makeTrack({
+1 -1
View File
@@ -2,7 +2,7 @@ import { describe, expect, test } from 'vitest';
import { dbToLinear, gainDb, playingAsAlbum, MAX_BOOST_DB } from './gain';
import type { NormalizationPrefs } from '#lib/api/normalization.js';
import type { TrackRef } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
const prefs = (over: Partial<NormalizationPrefs> = {}): NormalizationPrefs => ({
mode: 'auto',
+1 -1
View File
@@ -1,6 +1,6 @@
import { beforeEach, describe, expect, test, vi } from 'vitest';
import type { TrackRef } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
vi.mock('#lib/auth/store.svelte.js', () => ({
user: {
@@ -1,7 +1,7 @@
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
import { flushSync } from 'svelte';
import type { TrackRef } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
function track(id: string): TrackRef {
return makeTrack({
+1 -1
View File
@@ -1,6 +1,6 @@
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
import { readPersistedQueue, writePersistedQueue, clearPersistedQueue } from './persisted';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
const sampleTrack = makeTrack();
+1 -1
View File
@@ -1,7 +1,7 @@
import { afterEach, beforeEach, describe, expect, test } from 'vitest';
import { flushSync } from 'svelte';
import type { TrackRef } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
function track(id: string): TrackRef {
return makeTrack({
+1 -1
View File
@@ -19,7 +19,7 @@ import {
} from './store.svelte';
import type { TrackRef } from '#lib/api/types.js';
import { writePersistedQueue, clearPersistedQueue } from './persisted';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
vi.mock('#lib/auth/store.svelte.js', () => ({
user: {
+1 -1
View File
@@ -1,6 +1,6 @@
import { describe, expect, test, beforeEach } from 'vitest';
import type { TrackRef } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
import {
selection, toggleOne, selectRange, clearSelection
} from './store.svelte';
+1 -1
View File
@@ -1,7 +1,7 @@
import { describe, it, expect } from 'vitest';
import { dayBucket, groupByDay } from './dayGroup';
import type { HistoryEvent } from '#lib/api/history.js';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
const NOW = new Date('2026-05-04T14:00:00Z');
+1 -1
View File
@@ -4,7 +4,7 @@ import { flushSync } from 'svelte';
import { mockQuery } from '../../../test-utils/query';
import { emptyLikesMock } from '../../../test-utils/mocks/likes';
import type { AlbumDetail, TrackRef } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
const state = vi.hoisted(() => ({ pageParams: { id: 'xyz' } as Record<string, string> }));
+4 -4
View File
@@ -1,9 +1,9 @@
import { afterEach, describe, expect, test, vi } from 'vitest';
import { render, screen, waitFor, fireEvent } from '@testing-library/svelte';
import { mockQuery } from '$test-utils/query';
import { pageUrlModule } from '$test-utils/mocks/appState';
import { apiClientMock } from '$test-utils/mocks/client';
import { emptyLikesMock } from '$test-utils/mocks/likes';
import { mockQuery } from '#test-utils/query.js';
import { pageUrlModule } from '#test-utils/mocks/appState.js';
import { apiClientMock } from '#test-utils/mocks/client.js';
import { emptyLikesMock } from '#test-utils/mocks/likes.js';
import type { AlbumRef } from '#lib/api/types.js';
const pageState = vi.hoisted(() => ({
+1 -1
View File
@@ -2,7 +2,7 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen } from '@testing-library/svelte';
import HistoryPage from './+page.svelte';
import type { HistoryEvent, HistoryResponse } from '#lib/api/history.js';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
const mkTrack = (id: string) => makeTrack({ id: `track-${id}`, title: `Song ${id}` });
+1 -1
View File
@@ -4,7 +4,7 @@ import { mockInfiniteQuery } from '../../../test-utils/query';
import { apiClientMock } from '../../../test-utils/mocks/client';
import type { ArtistRef, AlbumRef, TrackRef, Page } from '#lib/api/types.js';
import { readable } from 'svelte/store';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
vi.mock('#lib/api/likes.js', () => ({
createLikedIdsQuery: () => readable({
+4 -4
View File
@@ -1,9 +1,9 @@
import { afterEach, describe, expect, test, vi } from 'vitest';
import { render, screen, waitFor, fireEvent } from '@testing-library/svelte';
import { mockQuery } from '$test-utils/query';
import { pageUrlModule } from '$test-utils/mocks/appState';
import { apiClientMock } from '$test-utils/mocks/client';
import { emptyLikesMock } from '$test-utils/mocks/likes';
import { mockQuery } from '#test-utils/query.js';
import { pageUrlModule } from '#test-utils/mocks/appState.js';
import { apiClientMock } from '#test-utils/mocks/client.js';
import { emptyLikesMock } from '#test-utils/mocks/likes.js';
import type { AlbumRef } from '#lib/api/types.js';
const pageState = vi.hoisted(() => ({
+1 -1
View File
@@ -1,6 +1,6 @@
import { afterEach, describe, expect, test, vi } from 'vitest';
import { render, screen, fireEvent, waitFor } from '@testing-library/svelte';
import { pageUrlModule } from '$test-utils/mocks/appState';
import { pageUrlModule } from '#test-utils/mocks/appState.js';
// vi.hoisted avoids the temporal-dead-zone hazard: mock factories are lazy
// and can run before top-level `let` is initialized, since imports are
+1 -1
View File
@@ -3,7 +3,7 @@ import { render, screen, fireEvent } from '@testing-library/svelte';
import { mockInfiniteQuery } from '../../../test-utils/query';
import { emptyLikesMock } from '../../../test-utils/mocks/likes';
import { apiClientMock } from '../../../test-utils/mocks/client';
import { pageUrlModule } from '$test-utils/mocks/appState';
import { pageUrlModule } from '#test-utils/mocks/appState.js';
import type { AlbumRef, Page } from '#lib/api/types.js';
const state = vi.hoisted(() => ({ pageUrl: new URL('http://localhost/search/albums?q=miles') }));
@@ -2,7 +2,7 @@ import { afterEach, describe, expect, test, vi } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/svelte';
import { mockInfiniteQuery } from '../../../test-utils/query';
import { emptyLikesMock } from '../../../test-utils/mocks/likes';
import { pageUrlModule } from '$test-utils/mocks/appState';
import { pageUrlModule } from '#test-utils/mocks/appState.js';
import type { ArtistRef, Page } from '#lib/api/types.js';
const state = vi.hoisted(() => ({ pageUrl: new URL('http://localhost/search/artists?q=miles') }));
+2 -2
View File
@@ -3,9 +3,9 @@ import { render, screen } from '@testing-library/svelte';
import { mockQuery } from '../../test-utils/query';
import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { apiClientMock } from '../../test-utils/mocks/client';
import { pageUrlModule } from '$test-utils/mocks/appState';
import { pageUrlModule } from '#test-utils/mocks/appState.js';
import type { ArtistRef, AlbumRef, SearchResponse } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
const state = vi.hoisted(() => ({
pageUrl: new URL('http://localhost/search')
+2 -2
View File
@@ -3,9 +3,9 @@ import { render, screen, fireEvent } from '@testing-library/svelte';
import { mockInfiniteQuery } from '../../../test-utils/query';
import { emptyLikesMock } from '../../../test-utils/mocks/likes';
import { emptyQuarantineMock } from '../../../test-utils/mocks/quarantine';
import { pageUrlModule } from '$test-utils/mocks/appState';
import { pageUrlModule } from '#test-utils/mocks/appState.js';
import type { TrackRef, Page } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track';
import { makeTrack } from '#test-utils/fixtures/track.js';
const state = vi.hoisted(() => ({ pageUrl: new URL('http://localhost/search/tracks?q=miles') }));
+2 -8
View File
@@ -57,7 +57,7 @@ const injectGoTokensPlugin = {
};
// SvelteKit's options, which lived in svelte.config.js before kit 3. Exported
// so vitest.config.ts runs the same kit setup (the $test-utils alias above all).
// so vitest.config.ts runs the same kit setup.
export const kitOptions = {
preprocess: vitePreprocess(),
adapter: adapter({
@@ -67,13 +67,7 @@ export const kitOptions = {
precompress: false,
strict: false
}),
files: { assets: 'static' },
alias: {
// test-only helper barrel; resolves the same way #lib does so test
// files can import shared mock factories without ../../../ chains.
'$test-utils': 'src/test-utils',
'$test-utils/*': 'src/test-utils/*'
}
files: { assets: 'static' }
};
export default defineConfig({
+1 -1
View File
@@ -1,7 +1,7 @@
import { sveltekit } from '@sveltejs/kit/vite';
import { svelteTesting } from '@testing-library/svelte/vite';
import { configDefaults, defineConfig } from 'vitest/config';
import { kitOptions } from './vite.config';
import { kitOptions } from './vite.config.ts';
export default defineConfig({
plugins: [sveltekit(kitOptions), svelteTesting()],