fix(frontend): remove test types from base tsconfig for CI build

The base tsconfig.json had types: ["vitest/globals", "@testing-library/jest-dom/vitest"]
which are devDependencies only installed during development. CI production
builds with npm ci --production don't include these, causing TS2688 errors.

Solution:

Remove types array from tsconfig.json (let TS auto-discover available types)
Simplify tsconfig.build.json to only exclude test files
Add triple-slash type references to test setup file
Add typecheck config to vitest.config.ts
This ensures:

Production builds work without devDependencies
Test files still have proper type definitions
No JSX.IntrinsicElements errors from missing React types
This commit is contained in:
GitHub Actions
2026-01-25 21:26:47 +00:00
parent 8612aa52e1
commit 0cd93ceb79
18 changed files with 111 additions and 91 deletions

View File

@@ -125,27 +125,27 @@ describe('CredentialManager', () => {
data: mockCredentials,
isLoading: false,
refetch: mockRefetch,
} as any)
} as unknown as ReturnType<typeof useCredentials>)
vi.mocked(useCreateCredential).mockReturnValue({
mutateAsync: mockMutateAsync,
isPending: false,
} as any)
} as unknown as ReturnType<typeof useCreateCredential>)
vi.mocked(useUpdateCredential).mockReturnValue({
mutateAsync: mockMutateAsync,
isPending: false,
} as any)
} as unknown as ReturnType<typeof useUpdateCredential>)
vi.mocked(useDeleteCredential).mockReturnValue({
mutateAsync: mockMutateAsync,
isPending: false,
} as any)
} as unknown as ReturnType<typeof useDeleteCredential>)
vi.mocked(useTestCredential).mockReturnValue({
mutateAsync: mockMutateAsync,
isPending: false,
} as any)
} as unknown as ReturnType<typeof useTestCredential>)
})
describe('Rendering', () => {
@@ -242,7 +242,7 @@ describe('CredentialManager', () => {
data: [],
isLoading: false,
refetch: mockRefetch,
} as any)
} as unknown as ReturnType<typeof useCredentials>)
renderWithClient(
<CredentialManager
@@ -266,7 +266,7 @@ describe('CredentialManager', () => {
data: [],
isLoading: false,
refetch: mockRefetch,
} as any)
} as unknown as ReturnType<typeof useCredentials>)
renderWithClient(
<CredentialManager
@@ -298,7 +298,7 @@ describe('CredentialManager', () => {
data: undefined,
isLoading: true,
refetch: mockRefetch,
} as any)
} as unknown as ReturnType<typeof useCredentials>)
renderWithClient(
<CredentialManager
@@ -477,7 +477,7 @@ describe('CredentialManager', () => {
isError: true,
error: new Error('Failed to fetch'),
refetch: mockRefetch,
} as any)
} as unknown as ReturnType<typeof useCredentials>)
renderWithClient(
<CredentialManager

View File

@@ -137,7 +137,7 @@ describe('DNSProviderSelector', () => {
isLoading: false,
isError: false,
error: null,
} as any)
} as unknown as ReturnType<typeof useDNSProviders>)
})
describe('Rendering', () => {
@@ -232,7 +232,7 @@ describe('DNSProviderSelector', () => {
isLoading: false,
isError: false,
error: null,
} as any)
} as unknown as ReturnType<typeof useDNSProviders>)
renderWithClient(<DNSProviderSelector value={undefined} onChange={mockOnChange} />)
@@ -254,7 +254,7 @@ describe('DNSProviderSelector', () => {
isLoading: false,
isError: false,
error: null,
} as any)
} as unknown as ReturnType<typeof useDNSProviders>)
renderWithClient(<DNSProviderSelector value={undefined} onChange={mockOnChange} />)
@@ -272,7 +272,7 @@ describe('DNSProviderSelector', () => {
isLoading: true,
isError: false,
error: null,
} as any)
} as unknown as ReturnType<typeof useDNSProviders>)
renderWithClient(<DNSProviderSelector value={undefined} onChange={mockOnChange} />)
@@ -286,7 +286,7 @@ describe('DNSProviderSelector', () => {
isLoading: true,
isError: false,
error: null,
} as any)
} as unknown as ReturnType<typeof useDNSProviders>)
renderWithClient(<DNSProviderSelector value={undefined} onChange={mockOnChange} />)
@@ -301,7 +301,7 @@ describe('DNSProviderSelector', () => {
isLoading: false,
isError: false,
error: null,
} as any)
} as unknown as ReturnType<typeof useDNSProviders>)
renderWithClient(<DNSProviderSelector value={undefined} onChange={mockOnChange} />)
@@ -316,7 +316,7 @@ describe('DNSProviderSelector', () => {
isLoading: false,
isError: false,
error: null,
} as any)
} as unknown as ReturnType<typeof useDNSProviders>)
renderWithClient(<DNSProviderSelector value={undefined} onChange={mockOnChange} />)
@@ -421,7 +421,7 @@ describe('DNSProviderSelector', () => {
isLoading: true,
isError: false,
error: null,
} as any)
} as unknown as ReturnType<typeof useDNSProviders>)
renderWithClient(<DNSProviderSelector value={undefined} onChange={mockOnChange} />)

View File

@@ -144,7 +144,7 @@ describe('ManualDNSChallenge', () => {
isLoading: false,
isError: false,
error: null,
} as any)
} as unknown as ReturnType<typeof useChallengePoll>)
vi.mocked(useManualChallengeMutations).mockReturnValue({
verifyMutation: {
@@ -159,7 +159,7 @@ describe('ManualDNSChallenge', () => {
mutateAsync: vi.fn(),
isPending: false,
},
} as any)
} as unknown as ReturnType<typeof useManualChallengeMutations>)
})
afterEach(() => {
@@ -401,7 +401,7 @@ describe('ManualDNSChallenge', () => {
isLoading: false,
isError: false,
error: null,
} as any)
} as unknown as ReturnType<typeof useChallengePoll>)
const verifiedChallenge: ManualChallenge = {
...mockChallenge,
@@ -424,7 +424,7 @@ describe('ManualDNSChallenge', () => {
isLoading: false,
isError: false,
error: null,
} as any)
} as unknown as ReturnType<typeof useChallengePoll>)
const expiredChallenge: ManualChallenge = {
...mockChallenge,
@@ -449,7 +449,7 @@ describe('ManualDNSChallenge', () => {
isLoading: false,
isError: false,
error: null,
} as any)
} as unknown as ReturnType<typeof useChallengePoll>)
const failedChallenge: ManualChallenge = {
...mockChallenge,
@@ -477,7 +477,7 @@ describe('ManualDNSChallenge', () => {
isLoading: false,
isError: false,
error: null,
} as any)
} as unknown as ReturnType<typeof useChallengePoll>)
// Re-render to trigger effect
const verifiedChallenge: ManualChallenge = {
@@ -517,7 +517,7 @@ describe('ManualDNSChallenge', () => {
isLoading: false,
isError: false,
error: null,
} as any)
} as unknown as ReturnType<typeof useChallengePoll>)
const expiredChallenge: ManualChallenge = {
...mockChallenge,
@@ -611,7 +611,7 @@ describe('ManualDNSChallenge', () => {
isLoading: false,
isError: false,
error: null,
} as any)
} as unknown as ReturnType<typeof useChallengePoll>)
const verifiedChallenge: ManualChallenge = {
...mockChallenge,
@@ -639,7 +639,7 @@ describe('ManualDNSChallenge', () => {
mutateAsync: vi.fn(),
isPending: false,
},
} as any)
} as unknown as ReturnType<typeof useManualChallengeMutations>)
renderComponent()
@@ -661,7 +661,7 @@ describe('ManualDNSChallenge', () => {
mutateAsync: vi.fn(),
isPending: false,
},
} as any)
} as unknown as ReturnType<typeof useManualChallengeMutations>)
renderComponent()
@@ -683,7 +683,7 @@ describe('ManualDNSChallenge', () => {
isLoading: false,
isError: false,
error: null,
} as any)
} as unknown as ReturnType<typeof useChallengePoll>)
const failedChallenge: ManualChallenge = {
...mockChallenge,