From cab0a84588bef1266e4e06cb8c68373dfc137b5c Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 28 Nov 2025 20:32:38 +0000 Subject: [PATCH] fix: type errors in svelte-main branch (372 -> 217 errors) - Fix Button variant errors (outlined -> ghost, contained -> primary) - Fix search.queries.ts import path and property names (snake_case -> camelCase) - Fix PartyContext export from party.service.ts - Fix User type missing avatar property - Fix exactOptionalPropertyTypes violations in Unit components - Fix MenuItems Props interface - Fix RequestOptions, SearchParams, SearchFilters types - Fix UpdateUncapParams type - Fix Select.ItemIndicator and maxLength errors - Fix Summon/Weapon hp/atk properties in entity.adapter.ts Co-Authored-By: Justin Edmund --- src/lib/api/adapters/entity.adapter.ts | 48 +++++++++++++++++++ src/lib/api/adapters/grid.adapter.ts | 6 +-- src/lib/api/adapters/types.ts | 47 +++++++++--------- src/lib/api/queries/search.queries.ts | 24 +++++----- src/lib/components/UserSettingsModal.svelte | 10 ++-- .../sidebar/JobSelectionSidebar.svelte | 6 +-- src/lib/components/ui/Input.svelte | 44 ++++++++--------- src/lib/components/ui/Select.svelte | 38 +++++++++------ src/lib/components/ui/menu/MenuItems.svelte | 14 +++--- src/lib/components/units/CharacterUnit.svelte | 8 ++-- src/lib/components/units/SummonUnit.svelte | 3 +- src/lib/components/units/WeaponUnit.svelte | 3 +- src/lib/services/party.service.ts | 12 +++++ src/lib/types/api/entities.ts | 4 ++ src/routes/settings/+page.svelte | 30 ++++++------ src/routes/teams/new/+page.svelte | 7 +++ 16 files changed, 193 insertions(+), 111 deletions(-) diff --git a/src/lib/api/adapters/entity.adapter.ts b/src/lib/api/adapters/entity.adapter.ts index 86dbc12c..0e5f3b3e 100644 --- a/src/lib/api/adapters/entity.adapter.ts +++ b/src/lib/api/adapters/entity.adapter.ts @@ -37,6 +37,29 @@ export interface Weapon { ulbAttack?: number transcendenceHp?: number transcendenceAttack?: number + hp?: { + minHp?: number + maxHp?: number + maxHpFlb?: number + maxHpUlb?: number + } + atk?: { + minAtk?: number + maxAtk?: number + maxAtkFlb?: number + maxAtkUlb?: number + } + uncap?: { + flb?: boolean + ulb?: boolean + transcendence?: boolean + } + maxLevel?: number + skillLevelCap?: number + weapon_skills?: Array<{ + name?: string + description?: string + }> awakenings?: Array<{ id: string name: Record @@ -109,8 +132,33 @@ export interface Summon { ulbAttack?: number transcendenceHp?: number transcendenceAttack?: number + hp?: { + minHp?: number + maxHp?: number + maxHpFlb?: number + maxHpUlb?: number + maxHpXlb?: number + } + atk?: { + minAtk?: number + maxAtk?: number + maxAtkFlb?: number + maxAtkUlb?: number + maxAtkXlb?: number + } + uncap?: { + flb?: boolean + ulb?: boolean + transcendence?: boolean + } subaura?: boolean cooldown?: number + callName?: string + callDescription?: string + auraName?: string + auraDescription?: string + subAuraName?: string + subAuraDescription?: string } /** diff --git a/src/lib/api/adapters/grid.adapter.ts b/src/lib/api/adapters/grid.adapter.ts index 2f044701..3302a780 100644 --- a/src/lib/api/adapters/grid.adapter.ts +++ b/src/lib/api/adapters/grid.adapter.ts @@ -49,11 +49,11 @@ export interface CreateGridSummonParams { * Parameters for updating uncap levels */ export interface UpdateUncapParams { - id?: string + id?: string | undefined partyId: string - position?: number + position?: number | undefined uncapLevel: number - transcendenceStep?: number + transcendenceStep?: number | undefined } /** diff --git a/src/lib/api/adapters/types.ts b/src/lib/api/adapters/types.ts index cf19908b..33854ca3 100644 --- a/src/lib/api/adapters/types.ts +++ b/src/lib/api/adapters/types.ts @@ -34,28 +34,31 @@ export interface AdapterOptions { */ export interface RequestOptions extends Omit { /** Query parameters to append to the URL */ - params?: Record + params?: Record | undefined /** Alternative alias for query parameters */ - query?: Record + query?: Record | undefined /** Request timeout in milliseconds. Overrides the adapter's default timeout */ - timeout?: number + timeout?: number | undefined /** Number of retry attempts for this specific request */ - retries?: number + retries?: number | undefined /** Cache duration for this request in milliseconds */ - cacheTime?: number + cacheTime?: number | undefined /** Request cache mode */ - cache?: RequestCache + cache?: RequestCache | undefined /** Alternative alias for cache duration */ - cacheTTL?: number + cacheTTL?: number | undefined /** Request body. Can be any serializable value */ body?: any + + /** HTTP headers for the request */ + headers?: Record | undefined } /** @@ -153,28 +156,28 @@ export interface ApiResponse { */ export interface SearchFilters { /** Filter by element IDs */ - element?: number[] + element?: number[] | undefined /** Filter by rarity levels */ - rarity?: number[] + rarity?: number[] | undefined /** Filter by primary proficiency (weapons and characters) */ - proficiency1?: number[] + proficiency1?: number[] | undefined /** Filter by secondary proficiency (characters only) */ - proficiency2?: number[] + proficiency2?: number[] | undefined /** Filter by series */ - series?: number[] + series?: number[] | undefined /** Include extra/seasonal variants */ - extra?: boolean + extra?: boolean | undefined /** Filter summons with sub-aura */ - subaura?: boolean + subaura?: boolean | undefined /** Filter special characters */ - special?: boolean + special?: boolean | undefined /** Custom filters for specific use cases */ [key: string]: any @@ -188,25 +191,25 @@ export interface SearchParams { type: 'weapon' | 'character' | 'summon' /** Search query string */ - query?: string + query?: string | undefined /** Filters to apply to the search */ - filters?: SearchFilters + filters?: SearchFilters | undefined /** Page number for pagination (1-indexed) */ - page?: number + page?: number | undefined /** Number of items per page */ - perPage?: number + perPage?: number | undefined /** Locale for localized content */ - locale?: 'en' | 'ja' + locale?: 'en' | 'ja' | undefined /** Items to exclude from results (by ID) */ - exclude?: string[] + exclude?: string[] | undefined /** AbortSignal for request cancellation */ - signal?: AbortSignal + signal?: AbortSignal | undefined } /** diff --git a/src/lib/api/queries/search.queries.ts b/src/lib/api/queries/search.queries.ts index 5eaf6b1e..4d6dfc3b 100644 --- a/src/lib/api/queries/search.queries.ts +++ b/src/lib/api/queries/search.queries.ts @@ -9,11 +9,9 @@ import { infiniteQueryOptions } from '@tanstack/svelte-query' import { - searchWeapons, - searchCharacters, - searchSummons, + searchAdapter, type SearchParams -} from '$lib/api/resources/search' +} from '$lib/api/adapters/search.adapter' /** * Filter configuration for search queries @@ -33,14 +31,14 @@ export interface SearchFilters { export interface SearchPageResult { results: Array<{ id: string - granblue_id: string + granblueId: string name: { en?: string; ja?: string } element?: number rarity?: number proficiency?: number series?: number - image_url?: string - searchable_type: 'Weapon' | 'Character' | 'Summon' + imageUrl?: string + searchableType: 'Weapon' | 'Character' | 'Summon' }> page: number totalPages: number @@ -131,12 +129,12 @@ export const searchQueries = { queryKey: ['search', 'weapons', query, filters, locale] as const, queryFn: async ({ pageParam }): Promise => { const params = buildSearchParams(query, filters, pageParam, locale) - const response = await searchWeapons(params) + const response = await searchAdapter.searchWeapons(params) return { results: response.results, page: response.meta?.page ?? response.page ?? pageParam, - totalPages: response.meta?.total_pages ?? response.total_pages ?? 1 + totalPages: response.meta?.totalPages ?? response.totalPages ?? 1 } }, initialPageParam: 1, @@ -163,12 +161,12 @@ export const searchQueries = { queryKey: ['search', 'characters', query, filters, locale] as const, queryFn: async ({ pageParam }): Promise => { const params = buildSearchParams(query, filters, pageParam, locale) - const response = await searchCharacters(params) + const response = await searchAdapter.searchCharacters(params) return { results: response.results, page: response.meta?.page ?? response.page ?? pageParam, - totalPages: response.meta?.total_pages ?? response.total_pages ?? 1 + totalPages: response.meta?.totalPages ?? response.totalPages ?? 1 } }, initialPageParam: 1, @@ -195,12 +193,12 @@ export const searchQueries = { queryKey: ['search', 'summons', query, filters, locale] as const, queryFn: async ({ pageParam }): Promise => { const params = buildSearchParams(query, filters, pageParam, locale) - const response = await searchSummons(params) + const response = await searchAdapter.searchSummons(params) return { results: response.results, page: response.meta?.page ?? response.page ?? pageParam, - totalPages: response.meta?.total_pages ?? response.total_pages ?? 1 + totalPages: response.meta?.totalPages ?? response.totalPages ?? 1 } }, initialPageParam: 1, diff --git a/src/lib/components/UserSettingsModal.svelte b/src/lib/components/UserSettingsModal.svelte index 12f75fdc..1e246347 100644 --- a/src/lib/components/UserSettingsModal.svelte +++ b/src/lib/components/UserSettingsModal.svelte @@ -197,11 +197,11 @@
- - -
+ + + {/snippet} diff --git a/src/lib/components/sidebar/JobSelectionSidebar.svelte b/src/lib/components/sidebar/JobSelectionSidebar.svelte index 74d64422..5c814020 100644 --- a/src/lib/components/sidebar/JobSelectionSidebar.svelte +++ b/src/lib/components/sidebar/JobSelectionSidebar.svelte @@ -144,7 +144,7 @@

{error}

- +
{:else if Object.keys(filteredJobs).length === 0}
@@ -153,8 +153,8 @@ {#if searchQuery || selectedTiers.size > 0}
{:else} + bind:value + class={inputClasses} + {type} + {placeholder} + {disabled} + {readonly} + {required} + maxlength={maxLength} + {...restProps} + /> {/if} {#if error} @@ -143,7 +143,7 @@ {disabled} {readonly} {required} - {maxLength} + maxlength={maxLength} {...restProps} /> @@ -161,16 +161,16 @@ {:else} + bind:value + class={inputClasses} + {type} + {placeholder} + {disabled} + {readonly} + {required} + maxlength={maxLength} + {...restProps} + /> {/if} \ No newline at end of file + diff --git a/src/routes/teams/new/+page.svelte b/src/routes/teams/new/+page.svelte index 11a07970..2f299d7a 100644 --- a/src/routes/teams/new/+page.svelte +++ b/src/routes/teams/new/+page.svelte @@ -98,6 +98,12 @@ if (!partyId && !isCreatingParty && items.length > 0) { isCreatingParty = true const firstItem = items[0] + + // Guard against undefined firstItem (shouldn't happen given items.length > 0 check, but TypeScript needs this) + if (!firstItem) { + isCreatingParty = false + return + } try { // Step 1: Create the party (with local_id only for anonymous users) @@ -262,6 +268,7 @@ try { for (let i = 0; i < items.length; i++) { const item = items[i] + if (!item) continue // Skip undefined items let position = -1 // Default position if (activeTab === GridType.Weapon) {