diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 79c6f38cff..bf865d7082 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -99,6 +99,9 @@ repos:
- id: check-case-conflict
- id: check-executables-have-shebangs
- id: check-json
+ # tsconfig.json uses JSONC (comments).
+ # Matches frontend/tsconfig.json and frontend/**/tsconfig.json
+ exclude: ^frontend/(?:[^/]+/)*tsconfig\.json$
- id: check-merge-conflict
- id: check-toml
- id: check-yaml
diff --git a/docker/frontend/Dockerfile.a11y.test b/docker/frontend/Dockerfile.a11y.test
index bad96af4a9..8c9707c354 100644
--- a/docker/frontend/Dockerfile.a11y.test
+++ b/docker/frontend/Dockerfile.a11y.test
@@ -19,7 +19,8 @@ RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
COPY __tests__/a11y __tests__/a11y
COPY __tests__/mockData __tests__/mockData
-COPY .pnpmrc jest.config.ts jest.setup.ts tsconfig.json ./
+COPY __tests__/jest.setup.ts __tests__/jest.setup.ts
+COPY .pnpmrc jest.config.ts tsconfig.json ./
COPY public public
COPY src src
diff --git a/docker/frontend/Dockerfile.unit.test b/docker/frontend/Dockerfile.unit.test
index cfd33a7344..266d5cc90a 100644
--- a/docker/frontend/Dockerfile.unit.test
+++ b/docker/frontend/Dockerfile.unit.test
@@ -19,7 +19,9 @@ RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
COPY __tests__/unit __tests__/unit
COPY __tests__/mockData __tests__/mockData
-COPY .pnpmrc jest.config.ts jest.setup.ts tsconfig.json ./
+COPY __tests__/jest.setup.ts __tests__/jest.setup.ts
+COPY __tests__/tsconfig.json __tests__/tsconfig.json
+COPY .pnpmrc jest.config.ts tsconfig.json ./
COPY public public
COPY src src
diff --git a/frontend/__tests__/a11y/components/CardDetailsPage.a11y.test.tsx b/frontend/__tests__/a11y/components/CardDetailsPage.a11y.test.tsx
index dc23d3de6e..15bdce59a8 100644
--- a/frontend/__tests__/a11y/components/CardDetailsPage.a11y.test.tsx
+++ b/frontend/__tests__/a11y/components/CardDetailsPage.a11y.test.tsx
@@ -188,8 +188,8 @@ describe.each([
name: 'Intro to Web',
description: 'A beginner friendly module.',
experienceLevel: ExperienceLevelEnum.Beginner,
- startedAt: 1735689600, // 2025-01-01
- endedAt: 1740787200, // 2025-03-01
+ startedAt: '2025-01-01T00:00:00.000Z',
+ endedAt: '2025-03-01T00:00:00.000Z',
mentors: [
{
id: 'mentor-mentor1',
diff --git a/frontend/__tests__/a11y/components/LeadersList.a11y.test.tsx b/frontend/__tests__/a11y/components/LeadersList.a11y.test.tsx
index 8652f3444d..5578defb9d 100644
--- a/frontend/__tests__/a11y/components/LeadersList.a11y.test.tsx
+++ b/frontend/__tests__/a11y/components/LeadersList.a11y.test.tsx
@@ -41,7 +41,9 @@ describe.each([
document.documentElement.classList.toggle('dark', theme === 'dark')
})
it('should not have any accessibility violations', async () => {
- const { container } = render()
+ const { container } = render(
+
+ )
const results = await axe(container)
diff --git a/frontend/__tests__/a11y/components/MentorshipPullRequest.a11y.test.tsx b/frontend/__tests__/a11y/components/MentorshipPullRequest.a11y.test.tsx
index c76a57fb1f..0b3259d167 100644
--- a/frontend/__tests__/a11y/components/MentorshipPullRequest.a11y.test.tsx
+++ b/frontend/__tests__/a11y/components/MentorshipPullRequest.a11y.test.tsx
@@ -15,7 +15,7 @@ const mockPR: PullRequest = {
avatarUrl: 'https://example.com/avatar.png',
key: 'testuser',
contributionsCount: 10,
- createdAt: 0,
+ createdAt: '1970-01-01T00:00:00.000Z',
followersCount: 5,
followingCount: 3,
publicRepositoriesCount: 8,
diff --git a/frontend/__tests__/a11y/components/ModuleCard.a11y.test.tsx b/frontend/__tests__/a11y/components/ModuleCard.a11y.test.tsx
index 7d1a89c381..51b648277a 100644
--- a/frontend/__tests__/a11y/components/ModuleCard.a11y.test.tsx
+++ b/frontend/__tests__/a11y/components/ModuleCard.a11y.test.tsx
@@ -1,6 +1,7 @@
import { render } from '@testing-library/react'
import { axe } from 'jest-axe'
import { useTheme } from 'next-themes'
+import { ExperienceLevelEnum } from 'types/__generated__/graphql'
import ModuleCard from 'components/ModuleCard'
jest.mock('@apollo/client/react', () => ({
@@ -12,11 +13,25 @@ const mockModules = [
key: 'module-1',
name: 'Intro to Web Security',
description: 'A beginner module',
- experienceLevel: 'BEGINNER',
+ experienceLevel: ExperienceLevelEnum.Beginner,
startedAt: '2025-01-01',
endedAt: '2025-03-01',
- mentors: [{ login: 'mentor1', name: 'Mentor One', avatarUrl: 'https://example.com/m1.png' }],
- mentees: [{ login: 'mentee1', name: 'Mentee One', avatarUrl: 'https://example.com/me1.png' }],
+ mentors: [
+ {
+ id: 'm1',
+ login: 'mentor1',
+ name: 'Mentor One',
+ avatarUrl: 'https://example.com/m1.png',
+ },
+ ],
+ mentees: [
+ {
+ id: 'e1',
+ login: 'mentee1',
+ name: 'Mentee One',
+ avatarUrl: 'https://example.com/me1.png',
+ },
+ ],
tags: ['web'],
domains: ['security'],
},
@@ -33,7 +48,7 @@ describe.each([
it('should have no accessibility violations', async () => {
const { container } = render(
-
+
)
diff --git a/frontend/__tests__/a11y/components/ProgramCard.a11y.test.tsx b/frontend/__tests__/a11y/components/ProgramCard.a11y.test.tsx
index d06414cbf9..d6f99f1f4f 100644
--- a/frontend/__tests__/a11y/components/ProgramCard.a11y.test.tsx
+++ b/frontend/__tests__/a11y/components/ProgramCard.a11y.test.tsx
@@ -15,8 +15,8 @@ const baseMockProgram: Program = {
name: 'Test Program',
description: 'This is a test program description',
status: ProgramStatusEnum.Published,
- startedAt: 1704067200,
- endedAt: 1735646400,
+ startedAt: '2024-01-01T00:00:00.000Z',
+ endedAt: '2024-12-31T00:00:00.000Z',
userRole: 'admin',
}
diff --git a/frontend/__tests__/a11y/components/RecentPullRequests.a11y.test.tsx b/frontend/__tests__/a11y/components/RecentPullRequests.a11y.test.tsx
index cb7d1413ee..b612ded452 100644
--- a/frontend/__tests__/a11y/components/RecentPullRequests.a11y.test.tsx
+++ b/frontend/__tests__/a11y/components/RecentPullRequests.a11y.test.tsx
@@ -54,7 +54,7 @@ const minimalData = [
title: 'Test Pull Request',
url: 'https://github.com/test-org/test-repo/pull/1',
state: 'open',
- mergedAt: 1717329600,
+ mergedAt: new Date(1717329600 * 1000).toISOString(),
},
]
diff --git a/frontend/__tests__/a11y/components/RecentRelease.a11y.test.tsx b/frontend/__tests__/a11y/components/RecentRelease.a11y.test.tsx
index 3572210693..d6e17c5d25 100644
--- a/frontend/__tests__/a11y/components/RecentRelease.a11y.test.tsx
+++ b/frontend/__tests__/a11y/components/RecentRelease.a11y.test.tsx
@@ -3,10 +3,13 @@ import { axe } from 'jest-axe'
import { Release } from 'types/release'
import RecentReleases from 'components/RecentReleases'
+const publishedAtIso = new Date(Date.now()).toISOString()
+
const mockReleases: Release[] = [
{
+ id: 'release-a11y-1',
name: 'v1.0 The First Release',
- publishedAt: Date.now(),
+ publishedAt: publishedAtIso,
repositoryName: 'our-awesome-project',
organizationName: 'our-org',
tagName: 'v1.0',
@@ -25,8 +28,9 @@ const mockReleases: Release[] = [
},
},
{
+ id: 'release-a11y-2',
name: 'v2.0 The Second Release',
- publishedAt: Date.now(),
+ publishedAt: publishedAtIso,
repositoryName: 'another-cool-project',
organizationName: 'our-org',
tagName: 'v2.0',
diff --git a/frontend/__tests__/a11y/components/RecentReleases.a11y.test.tsx b/frontend/__tests__/a11y/components/RecentReleases.a11y.test.tsx
index 1a24544ea0..364ee48fe9 100644
--- a/frontend/__tests__/a11y/components/RecentReleases.a11y.test.tsx
+++ b/frontend/__tests__/a11y/components/RecentReleases.a11y.test.tsx
@@ -9,7 +9,7 @@ const mockReleases: ReleaseType[] = [
id: '1',
name: 'v1.0.0',
tagName: 'v1.0.0',
- publishedAt: Date.now(),
+ publishedAt: new Date(Date.now()).toISOString(),
repositoryName: 'test-repo',
organizationName: 'test-org',
isPreRelease: false,
@@ -19,7 +19,7 @@ const mockReleases: ReleaseType[] = [
avatarUrl: 'https://example.com/avatar.png',
key: 'testuser',
contributionsCount: 10,
- createdAt: 0,
+ createdAt: '1970-01-01T00:00:00.000Z',
followersCount: 5,
followingCount: 3,
publicRepositoriesCount: 8,
diff --git a/frontend/__tests__/a11y/components/Release.a11y.test.tsx b/frontend/__tests__/a11y/components/Release.a11y.test.tsx
index b3d77c19ac..5c84b394c8 100644
--- a/frontend/__tests__/a11y/components/Release.a11y.test.tsx
+++ b/frontend/__tests__/a11y/components/Release.a11y.test.tsx
@@ -5,8 +5,9 @@ import type { Release as ReleaseType } from 'types/release'
import Release from 'components/Release'
const release: ReleaseType = {
+ id: 'release-a11y-single',
name: 'v1.0 The First Release',
- publishedAt: Date.now(),
+ publishedAt: new Date(Date.now()).toISOString(),
repositoryName: 'our-awesome-project',
organizationName: 'our-org',
tagName: 'v1.0',
diff --git a/frontend/__tests__/a11y/components/RepositoryCard.a11y.test.tsx b/frontend/__tests__/a11y/components/RepositoryCard.a11y.test.tsx
index 8730012deb..427e07caaa 100644
--- a/frontend/__tests__/a11y/components/RepositoryCard.a11y.test.tsx
+++ b/frontend/__tests__/a11y/components/RepositoryCard.a11y.test.tsx
@@ -1,7 +1,6 @@
import { fireEvent, render, screen } from '@testing-library/react'
import { axe } from 'jest-axe'
import { useTheme } from 'next-themes'
-import { Organization } from 'types/organization'
import { RepositoryCardProps } from 'types/project'
import RepositoryCard from 'components/RepositoryCard'
@@ -22,9 +21,9 @@ const createMockRepository = (index: number): RepositoryCardProps => ({
collaboratorsCount: 10,
followersCount: 50,
publicRepositoriesCount: 20,
- createdAt: Date.now(),
- updatedAt: Date.now(),
- } as Organization,
+ createdAt: new Date(Date.now()).toISOString(),
+ updatedAt: new Date(Date.now()).toISOString(),
+ },
starsCount: 100 + index,
subscribersCount: 20 + index,
url: `https://github.com/org-${index}/repo-${index}`,
diff --git a/frontend/__tests__/a11y/components/SingleModuleCard.a11y.test.tsx b/frontend/__tests__/a11y/components/SingleModuleCard.a11y.test.tsx
index fa2f95bbc5..6a173296de 100644
--- a/frontend/__tests__/a11y/components/SingleModuleCard.a11y.test.tsx
+++ b/frontend/__tests__/a11y/components/SingleModuleCard.a11y.test.tsx
@@ -58,7 +58,7 @@ const mockModule: Module = {
},
],
startedAt: 1704067200,
- endedAt: 1735689599,
+ endedAt: new Date(1735689599 * 1000).toISOString(),
domains: ['frontend', 'backend'],
tags: ['react', 'nodejs'],
labels: ['good first issue', 'bug'],
diff --git a/frontend/__tests__/a11y/components/ToggleableList.a11y.test.tsx b/frontend/__tests__/a11y/components/ToggleableList.a11y.test.tsx
index cae6733d01..af78a990e2 100644
--- a/frontend/__tests__/a11y/components/ToggleableList.a11y.test.tsx
+++ b/frontend/__tests__/a11y/components/ToggleableList.a11y.test.tsx
@@ -13,7 +13,9 @@ describe.each([
})
it('should not have any accessibility violations', async () => {
const mockItems = Array.from({ length: 15 }, (_, i) => `Item ${i + 1}`)
- const { container } = render()
+ const { container } = render(
+
+ )
const results = await axe(container)
diff --git a/frontend/jest.setup.ts b/frontend/__tests__/jest.setup.ts
similarity index 100%
rename from frontend/jest.setup.ts
rename to frontend/__tests__/jest.setup.ts
diff --git a/frontend/__tests__/tsconfig.json b/frontend/__tests__/tsconfig.json
new file mode 100644
index 0000000000..1a6c0f0823
--- /dev/null
+++ b/frontend/__tests__/tsconfig.json
@@ -0,0 +1,14 @@
+{
+ "extends": "../tsconfig.json",
+ "compilerOptions": {
+ // Do not emit a .tsbuildinfo.
+ "incremental": false,
+ "isolatedModules": true,
+ "noEmit": true,
+ // Tightening would require typed mocks across many a11y files.
+ "strict": false,
+ "types": ["jest", "node"]
+ },
+ "exclude": ["e2e", "node_modules"],
+ "include": ["**/*.ts", "**/*.tsx", "../jest.config.ts"]
+}
diff --git a/frontend/__tests__/unit/components/CardDetailsPage.test.tsx b/frontend/__tests__/unit/components/CardDetailsPage.test.tsx
index 1e4230c66c..19f2d1c0de 100644
--- a/frontend/__tests__/unit/components/CardDetailsPage.test.tsx
+++ b/frontend/__tests__/unit/components/CardDetailsPage.test.tsx
@@ -698,7 +698,7 @@ describe('CardDetailsPage', () => {
const mockUser = {
avatarUrl: 'https://example.com/avatar.jpg',
contributionsCount: 100,
- createdAt: Date.now() - 31536000000,
+ createdAt: new Date(Date.now() - 31536000000).toISOString(),
followersCount: 50,
followingCount: 25,
key: 'test-user',
@@ -711,7 +711,7 @@ describe('CardDetailsPage', () => {
const mockRecentIssues = [
{
author: mockUser,
- createdAt: Date.now() - 86400000,
+ createdAt: new Date(Date.now() - 86400000).toISOString(),
hint: 'Bug fix needed',
labels: ['bug', 'high-priority'],
number: '123',
@@ -720,7 +720,7 @@ describe('CardDetailsPage', () => {
projectUrl: 'https://github.com/test/project',
body: 'Issue summary',
title: 'Test Issue',
- updatedAt: Date.now(),
+ updatedAt: new Date(Date.now()).toISOString(),
url: 'https://github.com/test/project/issues/123',
objectID: 'issue-123',
},
@@ -759,7 +759,7 @@ describe('CardDetailsPage', () => {
author: mockUser,
isPreRelease: false,
name: 'v1.0.0',
- publishedAt: Date.now() - 604800000,
+ publishedAt: new Date(Date.now() - 604800000).toISOString(),
repositoryName: 'test-repo',
tagName: 'v1.0.0',
url: 'https://github.com/test/repo/releases/tag/v1.0.0',
@@ -768,7 +768,7 @@ describe('CardDetailsPage', () => {
const mockChapterGeoData = [
{
- createdAt: Date.now() - 31536000000,
+ createdAt: new Date(Date.now() - 31536000000).toISOString(),
isActive: true,
key: 'test-chapter',
leaders: ['John Doe', 'Jane Smith'],
@@ -779,7 +779,7 @@ describe('CardDetailsPage', () => {
suggestedLocation: 'New York, NY',
summary: 'Test chapter summary',
topContributors: mockContributors,
- updatedAt: Date.now(),
+ updatedAt: new Date(Date.now()).toISOString(),
url: 'https://owasp.org/test-chapter',
_geoloc: { lat: 40.7128, lng: -74.006 },
},
@@ -964,7 +964,7 @@ describe('CardDetailsPage', () => {
)
@@ -993,7 +993,7 @@ describe('CardDetailsPage', () => {
)
@@ -1005,7 +1005,7 @@ describe('CardDetailsPage', () => {
@@ -1018,7 +1018,7 @@ describe('CardDetailsPage', () => {
{
it('renders Leaders with Unknown when value is null', () => {
const propsWithNullLeader = {
...defaultProps,
- type: 'chapter',
+ type: 'chapter' as const,
details: [{ label: 'Leaders', value: null }],
}
render()
@@ -2269,7 +2269,7 @@ describe('CardDetailsPage', () => {
const moduleProps: DetailsCardProps = {
...defaultProps,
type: 'module' as const,
- pullRequests: manyPRs as unknown as PullRequest[],
+ pullRequests: manyPRs as PullRequest[],
}
render()
@@ -2290,7 +2290,7 @@ describe('CardDetailsPage', () => {
const moduleProps: DetailsCardProps = {
...defaultProps,
type: 'module' as const,
- pullRequests: manyPRs as unknown as PullRequest[],
+ pullRequests: manyPRs as PullRequest[],
}
render()
@@ -2309,7 +2309,7 @@ describe('CardDetailsPage', () => {
const moduleProps: DetailsCardProps = {
...defaultProps,
type: 'module' as const,
- pullRequests: manyPRs as unknown as PullRequest[],
+ pullRequests: manyPRs as PullRequest[],
}
render()
@@ -2328,7 +2328,7 @@ describe('CardDetailsPage', () => {
const moduleProps: DetailsCardProps = {
...defaultProps,
type: 'module' as const,
- pullRequests: fewPRs as unknown as PullRequest[],
+ pullRequests: fewPRs as PullRequest[],
}
render()
diff --git a/frontend/__tests__/unit/components/ContributionStats.test.tsx b/frontend/__tests__/unit/components/ContributionStats.test.tsx
index 06c278ede8..ad5f6d9a35 100644
--- a/frontend/__tests__/unit/components/ContributionStats.test.tsx
+++ b/frontend/__tests__/unit/components/ContributionStats.test.tsx
@@ -1,4 +1,5 @@
import { render, screen } from '@testing-library/react'
+import type { ContributionStats as ContributionStatsData } from 'utils/contributionDataUtils'
import ContributionStats from 'components/ContributionStats'
describe('ContributionStats', () => {
@@ -91,15 +92,8 @@ describe('ContributionStats', () => {
expect(screen.getAllByText('0')).toHaveLength(4) // All stats should show 0
})
- it('handles null stats gracefully', () => {
- render()
-
- expect(screen.getByText('Null Stats')).toBeInTheDocument()
- expect(screen.getAllByText('0')).toHaveLength(4) // All stats should show 0
- })
-
it('handles empty object stats', () => {
- render()
+ render()
expect(screen.getByText('Empty Stats')).toBeInTheDocument()
expect(screen.getAllByText('0')).toHaveLength(4) // All stats should show 0
@@ -112,7 +106,9 @@ describe('ContributionStats', () => {
commits: 100,
}
- render()
+ render(
+
+ )
// Verify commits value
expect(screen.getByText('100')).toBeInTheDocument()
@@ -128,7 +124,9 @@ describe('ContributionStats', () => {
total: 75,
}
- render()
+ render(
+
+ )
expect(screen.getByText('50')).toBeInTheDocument() // commits
expect(screen.getByText('25')).toBeInTheDocument() // issues
diff --git a/frontend/__tests__/unit/components/ContributorAvatar.test.tsx b/frontend/__tests__/unit/components/ContributorAvatar.test.tsx
index dc169408f7..8411031ef2 100644
--- a/frontend/__tests__/unit/components/ContributorAvatar.test.tsx
+++ b/frontend/__tests__/unit/components/ContributorAvatar.test.tsx
@@ -252,7 +252,7 @@ describe('ContributorAvatar', () => {
projectKey: 'test-key',
projectName: 'Test-Project',
contributionsCount: 10,
- } as unknown as Contributor
+ } as Contributor
// We need to mock the component behavior by providing avatarUrl separately
// Since the component always expects avatarUrl, we test the edge case
@@ -298,14 +298,14 @@ describe('ContributorAvatar', () => {
})
it('handles contributor with null name falling back to login', () => {
- const contributorWithNullName: Contributor = {
+ const contributorWithNullName = {
id: 'contributor-null-name',
login: 'loginonly',
- name: null as unknown as string,
+ name: null,
avatarUrl: 'https://github.com/loginonly.png',
contributionsCount: 3,
projectKey: 'test-key',
- }
+ } as Contributor
render()
const tooltip = screen.getByTestId('avatar-tooltip-loginonly-null-name-test')
expect(tooltip).toHaveAttribute('title', '3 contributions by loginonly')
@@ -350,7 +350,7 @@ describe('ContributorAvatar', () => {
projectKey: 'test-key',
extraField: 'should be ignored',
anotherField: 123,
- } as unknown as Contributor
+ } as Contributor
render()
expect(screen.getByTestId('contributor-avatar')).toBeInTheDocument()
const tooltip = screen.getByTestId('avatar-tooltip-extrauser-extras-test')
diff --git a/frontend/__tests__/unit/components/HealthMetrics.test.tsx b/frontend/__tests__/unit/components/HealthMetrics.test.tsx
index cedba94af4..cb4dbd009e 100644
--- a/frontend/__tests__/unit/components/HealthMetrics.test.tsx
+++ b/frontend/__tests__/unit/components/HealthMetrics.test.tsx
@@ -150,7 +150,6 @@ describe('HealthMetrics', () => {
projectKey: 'null-project',
},
]
- // @ts-expect-error - testing specific edge case with mocked data
render()
const lineCharts = screen.getAllByTestId('LineChart')
diff --git a/frontend/__tests__/unit/components/ItemCardList.test.tsx b/frontend/__tests__/unit/components/ItemCardList.test.tsx
index 236211f456..e00b471719 100644
--- a/frontend/__tests__/unit/components/ItemCardList.test.tsx
+++ b/frontend/__tests__/unit/components/ItemCardList.test.tsx
@@ -630,7 +630,7 @@ describe('ItemCardList Component', () => {
it('renders custom renderDetails content', () => {
const customRenderDetails = (item: {
- createdAt: number
+ createdAt: string
commentsCount: number
organizationName: string
publishedAt: number
@@ -896,7 +896,7 @@ describe('ItemCardList Component', () => {
const issueNoLogin = {
...mockIssue,
author: authorNoLogin,
- } as unknown as Issue
+ } as Issue
render(
{
...mockPullRequestOpen.author,
login: '',
},
- } as unknown as PullRequest
+ } as PullRequest
render()
const avatar = screen.getByAltText('Unknown')
diff --git a/frontend/__tests__/unit/components/ModuleCard.test.tsx b/frontend/__tests__/unit/components/ModuleCard.test.tsx
index 2151056d3d..d5e0d9922f 100644
--- a/frontend/__tests__/unit/components/ModuleCard.test.tsx
+++ b/frontend/__tests__/unit/components/ModuleCard.test.tsx
@@ -6,6 +6,7 @@ import { render, screen, fireEvent, act, waitFor } from '@testing-library/react'
import '@testing-library/jest-dom'
import React from 'react'
import { ExperienceLevelEnum } from 'types/__generated__/graphql'
+import type { Contributor } from 'types/contributor'
import type { Module } from 'types/mentorship'
import ModuleCard, { getSimpleDuration } from 'components/ModuleCard'
@@ -542,8 +543,8 @@ describe('ModuleCard', () => {
id: 'id-mentor3',
login: 'mentor3',
name: 'Mentor 3',
- avatarUrl: undefined as unknown as string,
- }, // Undefined avatar
+ avatarUrl: undefined,
+ } as Contributor, // Undefined avatar URL
]
const modules = [createMockModule({ mentors }), createMockModule({ key: 'mod2' })]
@@ -683,7 +684,7 @@ describe('ModuleCard', () => {
const moduleWithUndefined = createMockModule({
mentors: undefined,
mentees: undefined,
- } as unknown as Partial)
+ })
const modules = [moduleWithUndefined, createMockModule({ key: 'mod2' })]
diff --git a/frontend/__tests__/unit/components/RecentIssues.test.tsx b/frontend/__tests__/unit/components/RecentIssues.test.tsx
index 2d8b69ef97..3741cd7edd 100644
--- a/frontend/__tests__/unit/components/RecentIssues.test.tsx
+++ b/frontend/__tests__/unit/components/RecentIssues.test.tsx
@@ -188,7 +188,7 @@ describe('', () => {
})
it('renders with null data', () => {
- render()
+ render()
expect(screen.getByText('Nothing to display.')).toBeInTheDocument()
})
diff --git a/frontend/__tests__/unit/components/RecentRelease.test.tsx b/frontend/__tests__/unit/components/RecentRelease.test.tsx
index 2d4085b58f..a7e04d76a2 100644
--- a/frontend/__tests__/unit/components/RecentRelease.test.tsx
+++ b/frontend/__tests__/unit/components/RecentRelease.test.tsx
@@ -64,7 +64,7 @@ jest.mock('next/image', () => ({
},
}))
-const now = Date.now()
+const now = new Date(Date.now()).toISOString()
const mockReleases: Release[] = [
{
id: 'release-recent-1',
diff --git a/frontend/__tests__/unit/components/Release.test.tsx b/frontend/__tests__/unit/components/Release.test.tsx
index 70e25d34fc..0115549ff4 100644
--- a/frontend/__tests__/unit/components/Release.test.tsx
+++ b/frontend/__tests__/unit/components/Release.test.tsx
@@ -68,7 +68,7 @@ jest.mock('next/image', () => ({
},
}))
-const now = Date.now()
+const now = new Date(Date.now()).toISOString()
const mockReleases: ReleaseType[] = [
{
id: 'release-test-1',
diff --git a/frontend/__tests__/unit/components/RepositoryCard.test.tsx b/frontend/__tests__/unit/components/RepositoryCard.test.tsx
index 57cdd3fc17..a46b483cad 100644
--- a/frontend/__tests__/unit/components/RepositoryCard.test.tsx
+++ b/frontend/__tests__/unit/components/RepositoryCard.test.tsx
@@ -2,7 +2,6 @@ import { fireEvent, screen } from '@testing-library/react'
import { useRouter } from 'next/navigation'
import React from 'react'
import { render } from 'wrappers/testUtil'
-import type { Organization } from 'types/organization'
import type { RepositoryCardProps } from 'types/project'
import RepositoryCard from 'components/RepositoryCard'
@@ -65,9 +64,9 @@ describe('RepositoryCard', () => {
collaboratorsCount: 10,
followersCount: 50,
publicRepositoriesCount: 20,
- createdAt: Date.now(),
- updatedAt: Date.now(),
- } as Organization,
+ createdAt: new Date(Date.now()).toISOString(),
+ updatedAt: new Date(Date.now()).toISOString(),
+ },
starsCount: 100 + index,
subscribersCount: 20 + index,
url: `https://github.com/org-${index}/repo-${index}`,
@@ -79,9 +78,7 @@ describe('RepositoryCard', () => {
})
it('returns null when repositories prop is missing', () => {
- const { container } = render(
-
- )
+ const { container } = render()
expect(container.querySelector('.grid')).toBeNull()
})
diff --git a/frontend/__tests__/unit/components/SingleModuleCard.test.tsx b/frontend/__tests__/unit/components/SingleModuleCard.test.tsx
index 84106e766b..2b20af2c1a 100644
--- a/frontend/__tests__/unit/components/SingleModuleCard.test.tsx
+++ b/frontend/__tests__/unit/components/SingleModuleCard.test.tsx
@@ -111,7 +111,7 @@ const mockModule: Module = {
},
],
startedAt: 1704067200,
- endedAt: 1735689599,
+ endedAt: new Date(1735689599 * 1000).toISOString(),
domains: ['frontend', 'backend'],
tags: ['react', 'nodejs'],
labels: ['good first issue', 'bug'],
diff --git a/frontend/__tests__/unit/components/SnapshotCard.test.tsx b/frontend/__tests__/unit/components/SnapshotCard.test.tsx
index d4aaeb315c..6ea0bd585d 100644
--- a/frontend/__tests__/unit/components/SnapshotCard.test.tsx
+++ b/frontend/__tests__/unit/components/SnapshotCard.test.tsx
@@ -50,11 +50,11 @@ describe('SnapshotCard', () => {
})
it('handles missing startAt or endAt (conditional rendering) - timezone safe', () => {
- const { rerender } = render()
+ const { rerender } = render()
const onlyEnd = formatDate(defaultProps.endAt)
expect(screen.getByText(new RegExp(onlyEnd))).toBeInTheDocument()
- rerender()
+ rerender()
const onlyStart = formatDate(defaultProps.startAt)
expect(screen.getByText(new RegExp(onlyStart))).toBeInTheDocument()
})
diff --git a/frontend/__tests__/unit/utils/getIcsFileUrl.test.ts b/frontend/__tests__/unit/utils/getIcsFileUrl.test.ts
index 32b346ae4e..499635eebd 100644
--- a/frontend/__tests__/unit/utils/getIcsFileUrl.test.ts
+++ b/frontend/__tests__/unit/utils/getIcsFileUrl.test.ts
@@ -40,6 +40,7 @@ describe('getIcsFileUrl', () => {
;(createEvent as jest.Mock).mockImplementation((attr, cb) => cb(null, 'val'))
const eventWithTimestamps = {
+ title: 'Multi-day',
startDate: '2025-01-01T00:00:00Z',
endDate: '2025-01-03T00:00:00Z',
}
@@ -59,6 +60,7 @@ describe('getIcsFileUrl', () => {
;(createEvent as jest.Mock).mockImplementation((attr, cb) => cb(null, 'val'))
const eventWithTimestamps = {
+ title: 'Multi-day UTC',
startDate: '2025-01-01T00:00:00Z',
endDate: '2025-01-03T00:00:00Z',
}
@@ -78,6 +80,7 @@ describe('getIcsFileUrl', () => {
;(createEvent as jest.Mock).mockImplementation((attr, cb) => cb(null, 'val'))
const singleDayEvent = {
+ title: 'Single day',
startDate: '2025-01-01T00:00:00Z',
endDate: '2025-01-01T00:00:00Z',
}
diff --git a/frontend/jest.config.ts b/frontend/jest.config.ts
index 91ae292e47..c385148e4a 100644
--- a/frontend/jest.config.ts
+++ b/frontend/jest.config.ts
@@ -33,12 +33,13 @@ const config: Config = {
},
},
globals: {},
- setupFilesAfterEnv: ['/jest.setup.ts'],
+ setupFilesAfterEnv: ['/__tests__/jest.setup.ts'],
testEnvironment: 'jest-environment-jsdom',
testPathIgnorePatterns: [
'/__tests__/unit/data/',
'/__tests__/e2e/',
'/__tests__/mockData/',
+ '/__tests__/jest.setup.ts',
],
transform: {
'^.+\\.tsx?$': '@swc/jest',
diff --git a/frontend/package.json b/frontend/package.json
index d8faa01fb3..2aff06d6cd 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -14,7 +14,7 @@
"lint:check": "eslint . --config eslint.config.mjs --max-warnings=0",
"start": "next start",
"test:a11y": "NODE_OPTIONS='--experimental-vm-modules --no-warnings=DEP0040' jest __tests__/a11y/ --coverage=false",
- "test:unit": "tsc --noEmit && NODE_OPTIONS='--experimental-vm-modules --no-warnings=DEP0040' jest"
+ "test:unit": "tsc --noEmit && tsc --noEmit -p __tests__/tsconfig.json && NODE_OPTIONS='--experimental-vm-modules --no-warnings=DEP0040' jest"
},
"dependencies": {
"@apollo/client": "^4.1.7",
@@ -78,10 +78,12 @@
"@swc/core": "^1.15.21",
"@swc/jest": "^0.2.39",
"@tailwindcss/postcss": "^4.2.2",
+ "@testing-library/dom": "^10.4.1",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^14.6.1",
"@types/jest": "^30.0.0",
+ "@types/jest-axe": "^3.5.9",
"@types/leaflet": "^1.9.21",
"@types/leaflet.markercluster": "^1.5.6",
"@types/lodash": "^4.17.24",
@@ -91,7 +93,7 @@
"@types/react-dom": "^19.2.3",
"@typescript-eslint/eslint-plugin": "^8.58.0",
"@typescript-eslint/parser": "^8.58.0",
- "eslint": "^10.1.0",
+ "eslint": "^9.39.4",
"eslint-config-next": "^16.2.3",
"eslint-config-prettier": "^10.1.8",
"eslint-import-resolver-alias": "^1.1.2",
@@ -113,7 +115,6 @@
"require-in-the-middle": "^8.0.1",
"tailwindcss": "^4.2.2",
"tailwindcss-animate": "^1.0.7",
- "ts-jest": "^29.4.9",
"ts-node": "^10.9.2",
"typescript": "~6.0.2",
"typescript-eslint": "^8.58.0",
diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml
index 7f01dc1ebb..ea7c603851 100644
--- a/frontend/pnpm-lock.yaml
+++ b/frontend/pnpm-lock.yaml
@@ -192,6 +192,9 @@ importers:
'@tailwindcss/postcss':
specifier: ^4.2.2
version: 4.2.2
+ '@testing-library/dom':
+ specifier: ^10.4.1
+ version: 10.4.1
'@testing-library/jest-dom':
specifier: ^6.9.1
version: 6.9.1
@@ -204,6 +207,9 @@ importers:
'@types/jest':
specifier: ^30.0.0
version: 30.0.0
+ '@types/jest-axe':
+ specifier: ^3.5.9
+ version: 3.5.9
'@types/leaflet':
specifier: ^1.9.21
version: 1.9.21
@@ -227,40 +233,40 @@ importers:
version: 19.2.3(@types/react@19.2.14)
'@typescript-eslint/eslint-plugin':
specifier: ^8.58.0
- version: 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)
+ version: 8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
'@typescript-eslint/parser':
specifier: ^8.58.0
- version: 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)
+ version: 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
eslint:
- specifier: ^10.1.0
- version: 10.1.0(jiti@2.6.1)
+ specifier: ^9.39.4
+ version: 9.39.4(jiti@2.6.1)
eslint-config-next:
specifier: ^16.2.3
- version: 16.2.3(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)
+ version: 16.2.3(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
eslint-config-prettier:
specifier: ^10.1.8
- version: 10.1.8(eslint@10.1.0(jiti@2.6.1))
+ version: 10.1.8(eslint@9.39.4(jiti@2.6.1))
eslint-import-resolver-alias:
specifier: ^1.1.2
version: 1.1.2(eslint-plugin-import@2.32.0)
eslint-plugin-import:
specifier: ^2.32.0
- version: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@10.1.0(jiti@2.6.1))
+ version: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
eslint-plugin-jest:
specifier: ^29.15.1
- version: 29.15.1(@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(jest@30.3.0(@types/node@25.5.0)(ts-node@10.9.2(@swc/core@1.15.21(@swc/helpers@0.5.20))(@types/node@25.5.0)(typescript@6.0.2)))(typescript@6.0.2)
+ version: 29.15.1(@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint@9.39.4(jiti@2.6.1))(jest@30.3.0(@types/node@25.5.0)(ts-node@10.9.2(@swc/core@1.15.21(@swc/helpers@0.5.20))(@types/node@25.5.0)(typescript@6.0.2)))(typescript@6.0.2)
eslint-plugin-jsx-a11y:
specifier: ^6.10.2
- version: 6.10.2(eslint@10.1.0(jiti@2.6.1))
+ version: 6.10.2(eslint@9.39.4(jiti@2.6.1))
eslint-plugin-prettier:
specifier: ^5.5.5
- version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(prettier@3.8.1)
+ version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1))(prettier@3.8.1)
eslint-plugin-react:
specifier: ^7.37.5
- version: 7.37.5(eslint@10.1.0(jiti@2.6.1))
+ version: 7.37.5(eslint@9.39.4(jiti@2.6.1))
eslint-plugin-react-hooks:
specifier: ^7.0.1
- version: 7.0.1(eslint@10.1.0(jiti@2.6.1))
+ version: 7.0.1(eslint@9.39.4(jiti@2.6.1))
globals:
specifier: ^17.4.0
version: 17.4.0
@@ -297,9 +303,6 @@ importers:
tailwindcss-animate:
specifier: ^1.0.7
version: 1.0.7(tailwindcss@4.2.2)
- ts-jest:
- specifier: ^29.4.9
- version: 29.4.9(@babel/core@7.29.0)(@jest/transform@30.3.0)(@jest/types@30.3.0)(babel-jest@30.3.0(@babel/core@7.29.0))(jest-util@30.3.0)(jest@30.3.0(@types/node@25.5.0)(ts-node@10.9.2(@swc/core@1.15.21(@swc/helpers@0.5.20))(@types/node@25.5.0)(typescript@6.0.2)))(typescript@6.0.2)
ts-node:
specifier: ^10.9.2
version: 10.9.2(@swc/core@1.15.21(@swc/helpers@0.5.20))(@types/node@25.5.0)(typescript@6.0.2)
@@ -308,7 +311,7 @@ importers:
version: 6.0.2
typescript-eslint:
specifier: ^8.58.0
- version: 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)
+ version: 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
util:
specifier: ^0.12.5
version: 0.12.5
@@ -667,17 +670,17 @@ packages:
resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/config-array@0.23.5':
- resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ '@eslint/config-array@0.21.2':
+ resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/config-helpers@0.5.5':
- resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ '@eslint/config-helpers@0.4.2':
+ resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/core@1.2.1':
- resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ '@eslint/core@0.17.0':
+ resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.3.5':
resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==}
@@ -687,13 +690,13 @@ packages:
resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/object-schema@3.0.5':
- resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ '@eslint/object-schema@2.1.7':
+ resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/plugin-kit@0.6.1':
- resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ '@eslint/plugin-kit@0.4.1':
+ resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@exodus/bytes@1.15.0':
resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==}
@@ -3453,9 +3456,6 @@ packages:
'@types/eslint@9.6.1':
resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
- '@types/esrecurse@4.3.1':
- resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
-
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
@@ -3471,6 +3471,9 @@ packages:
'@types/istanbul-reports@3.0.4':
resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
+ '@types/jest-axe@3.5.9':
+ resolution: {integrity: sha512-z98CzR0yVDalCEuhGXXO4/zN4HHuSebAukXDjTLJyjEAgoUf1H1i+sr7SUB/mz8CRS/03/XChsx0dcLjHkndoQ==}
+
'@types/jest@30.0.0':
resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==}
@@ -3981,6 +3984,10 @@ packages:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
+ axe-core@3.5.6:
+ resolution: {integrity: sha512-LEUDjgmdJoA3LqklSTwKYqkjcZ4HKc4ddIYGSAiSkr46NTjzg2L9RNB+lekO9P7Dlpa87+hBtzc2Fzn/+GUWMQ==}
+ engines: {node: '>=4'}
+
axe-core@4.10.2:
resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==}
engines: {node: '>=4'}
@@ -4106,10 +4113,6 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
- bs-logger@0.2.6:
- resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==}
- engines: {node: '>= 6'}
-
bser@2.1.1:
resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
@@ -4796,9 +4799,9 @@ packages:
resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
engines: {node: '>=8.0.0'}
- eslint-scope@9.1.2:
- resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ eslint-scope@8.4.0:
+ resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint-visitor-keys@3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
@@ -4812,9 +4815,9 @@ packages:
resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- eslint@10.1.0:
- resolution: {integrity: sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ eslint@9.39.4:
+ resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
jiti: '*'
@@ -4826,10 +4829,6 @@ packages:
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- espree@11.2.0:
- resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
@@ -5163,11 +5162,6 @@ packages:
resolution: {integrity: sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==}
engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
- handlebars@4.7.9:
- resolution: {integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==}
- engines: {node: '>=0.4.7'}
- hasBin: true
-
harmony-reflect@1.6.2:
resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==}
@@ -5961,9 +5955,6 @@ packages:
lodash-es@4.18.1:
resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==}
- lodash.memoize@4.1.2:
- resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
-
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
@@ -7351,33 +7342,6 @@ packages:
peerDependencies:
typescript: '>=4.8.4'
- ts-jest@29.4.9:
- resolution: {integrity: sha512-LTb9496gYPMCqjeDLdPrKuXtncudeV1yRZnF4Wo5l3SFi0RYEnYRNgMrFIdg+FHvfzjCyQk1cLncWVqiSX+EvQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0}
- hasBin: true
- peerDependencies:
- '@babel/core': '>=7.0.0-beta.0 <8'
- '@jest/transform': ^29.0.0 || ^30.0.0
- '@jest/types': ^29.0.0 || ^30.0.0
- babel-jest: ^29.0.0 || ^30.0.0
- esbuild: '*'
- jest: ^29.0.0 || ^30.0.0
- jest-util: ^29.0.0 || ^30.0.0
- typescript: '>=4.3 <7'
- peerDependenciesMeta:
- '@babel/core':
- optional: true
- '@jest/transform':
- optional: true
- '@jest/types':
- optional: true
- babel-jest:
- optional: true
- esbuild:
- optional: true
- jest-util:
- optional: true
-
ts-log@2.2.7:
resolution: {integrity: sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==}
@@ -7427,10 +7391,6 @@ packages:
resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
engines: {node: '>=12.20'}
- type-fest@4.41.0:
- resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
- engines: {node: '>=16'}
-
type-is@1.6.18:
resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
engines: {node: '>= 0.6'}
@@ -7472,11 +7432,6 @@ packages:
uc.micro@2.1.0:
resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
- uglify-js@3.19.3:
- resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
- engines: {node: '>=0.8.0'}
- hasBin: true
-
unbox-primitive@1.1.0:
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
engines: {node: '>= 0.4'}
@@ -7684,9 +7639,6 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
- wordwrap@1.0.0:
- resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
-
wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}
@@ -8183,26 +8135,26 @@ snapshots:
'@whatwg-node/promise-helpers': 1.3.2
tslib: 2.8.1
- '@eslint-community/eslint-utils@4.9.1(eslint@10.1.0(jiti@2.6.1))':
+ '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.6.1))':
dependencies:
- eslint: 10.1.0(jiti@2.6.1)
+ eslint: 9.39.4(jiti@2.6.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.2': {}
- '@eslint/config-array@0.23.5':
+ '@eslint/config-array@0.21.2':
dependencies:
- '@eslint/object-schema': 3.0.5
+ '@eslint/object-schema': 2.1.7
debug: 4.4.3
- minimatch: 10.2.5
+ minimatch: 3.1.5
transitivePeerDependencies:
- supports-color
- '@eslint/config-helpers@0.5.5':
+ '@eslint/config-helpers@0.4.2':
dependencies:
- '@eslint/core': 1.2.1
+ '@eslint/core': 0.17.0
- '@eslint/core@1.2.1':
+ '@eslint/core@0.17.0':
dependencies:
'@types/json-schema': 7.0.15
@@ -8222,11 +8174,11 @@ snapshots:
'@eslint/js@9.39.4': {}
- '@eslint/object-schema@3.0.5': {}
+ '@eslint/object-schema@2.1.7': {}
- '@eslint/plugin-kit@0.6.1':
+ '@eslint/plugin-kit@0.4.1':
dependencies:
- '@eslint/core': 1.2.1
+ '@eslint/core': 0.17.0
levn: 0.4.1
'@exodus/bytes@1.15.0': {}
@@ -12015,8 +11967,6 @@ snapshots:
'@types/estree': 1.0.8
'@types/json-schema': 7.0.15
- '@types/esrecurse@4.3.1': {}
-
'@types/estree@1.0.8': {}
'@types/geojson@7946.0.16': {}
@@ -12031,6 +11981,11 @@ snapshots:
dependencies:
'@types/istanbul-lib-report': 3.0.3
+ '@types/jest-axe@3.5.9':
+ dependencies:
+ '@types/jest': 30.0.0
+ axe-core: 3.5.6
+
'@types/jest@30.0.0':
dependencies:
expect: 30.3.0
@@ -12121,15 +12076,15 @@ snapshots:
'@types/node': 25.5.0
optional: true
- '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)':
+ '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)
+ '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
'@typescript-eslint/scope-manager': 8.58.0
- '@typescript-eslint/type-utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)
- '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)
+ '@typescript-eslint/type-utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
+ '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
'@typescript-eslint/visitor-keys': 8.58.0
- eslint: 10.1.0(jiti@2.6.1)
+ eslint: 9.39.4(jiti@2.6.1)
ignore: 7.0.5
natural-compare: 1.4.0
ts-api-utils: 2.5.0(typescript@6.0.2)
@@ -12137,14 +12092,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)':
+ '@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)':
dependencies:
'@typescript-eslint/scope-manager': 8.58.0
'@typescript-eslint/types': 8.58.0
'@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2)
'@typescript-eslint/visitor-keys': 8.58.0
debug: 4.4.3
- eslint: 10.1.0(jiti@2.6.1)
+ eslint: 9.39.4(jiti@2.6.1)
typescript: 6.0.2
transitivePeerDependencies:
- supports-color
@@ -12167,13 +12122,13 @@ snapshots:
dependencies:
typescript: 6.0.2
- '@typescript-eslint/type-utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)':
+ '@typescript-eslint/type-utils@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)':
dependencies:
'@typescript-eslint/types': 8.58.0
'@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2)
- '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)
+ '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
debug: 4.4.3
- eslint: 10.1.0(jiti@2.6.1)
+ eslint: 9.39.4(jiti@2.6.1)
ts-api-utils: 2.5.0(typescript@6.0.2)
typescript: 6.0.2
transitivePeerDependencies:
@@ -12196,13 +12151,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)':
+ '@typescript-eslint/utils@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1))
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1))
'@typescript-eslint/scope-manager': 8.58.0
'@typescript-eslint/types': 8.58.0
'@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2)
- eslint: 10.1.0(jiti@2.6.1)
+ eslint: 9.39.4(jiti@2.6.1)
typescript: 6.0.2
transitivePeerDependencies:
- supports-color
@@ -12582,6 +12537,8 @@ snapshots:
dependencies:
possible-typed-array-names: 1.1.0
+ axe-core@3.5.6: {}
+
axe-core@4.10.2: {}
axe-core@4.11.2: {}
@@ -12724,10 +12681,6 @@ snapshots:
node-releases: 2.0.36
update-browserslist-db: 1.2.3(browserslist@4.28.2)
- bs-logger@0.2.6:
- dependencies:
- fast-json-stable-stringify: 2.1.0
-
bser@2.1.1:
dependencies:
node-int64: 0.4.0
@@ -13331,18 +13284,18 @@ snapshots:
optionalDependencies:
source-map: 0.6.1
- eslint-config-next@16.2.3(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2):
+ eslint-config-next@16.2.3(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2):
dependencies:
'@next/eslint-plugin-next': 16.2.3
- eslint: 10.1.0(jiti@2.6.1)
+ eslint: 9.39.4(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.1.0(jiti@2.6.1))
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@10.1.0(jiti@2.6.1))
- eslint-plugin-jsx-a11y: 6.10.2(eslint@10.1.0(jiti@2.6.1))
- eslint-plugin-react: 7.37.5(eslint@10.1.0(jiti@2.6.1))
- eslint-plugin-react-hooks: 7.0.1(eslint@10.1.0(jiti@2.6.1))
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@2.6.1))
+ eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@2.6.1))
+ eslint-plugin-react-hooks: 7.0.1(eslint@9.39.4(jiti@2.6.1))
globals: 16.4.0
- typescript-eslint: 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)
+ typescript-eslint: 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
optionalDependencies:
typescript: 6.0.2
transitivePeerDependencies:
@@ -13351,13 +13304,13 @@ snapshots:
- eslint-plugin-import-x
- supports-color
- eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)):
+ eslint-config-prettier@10.1.8(eslint@9.39.4(jiti@2.6.1)):
dependencies:
- eslint: 10.1.0(jiti@2.6.1)
+ eslint: 9.39.4(jiti@2.6.1)
eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.32.0):
dependencies:
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@10.1.0(jiti@2.6.1))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
eslint-import-resolver-node@0.3.9:
dependencies:
@@ -13367,33 +13320,33 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@10.1.0(jiti@2.6.1)):
+ eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.3
- eslint: 10.1.0(jiti@2.6.1)
+ eslint: 9.39.4(jiti@2.6.1)
get-tsconfig: 4.13.7
is-bun-module: 2.0.0
stable-hash: 0.0.5
tinyglobby: 0.2.15
unrs-resolver: 1.11.1
optionalDependencies:
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@10.1.0(jiti@2.6.1))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@10.1.0(jiti@2.6.1)):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)
- eslint: 10.1.0(jiti@2.6.1)
+ '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
+ eslint: 9.39.4(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.1.0(jiti@2.6.1))
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@10.1.0(jiti@2.6.1)):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -13402,9 +13355,9 @@ snapshots:
array.prototype.flatmap: 1.3.3
debug: 3.2.7
doctrine: 2.1.0
- eslint: 10.1.0(jiti@2.6.1)
+ eslint: 9.39.4(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@10.1.0(jiti@2.6.1))
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -13416,24 +13369,24 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)
+ '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-jest@29.15.1(@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(jest@30.3.0(@types/node@25.5.0)(ts-node@10.9.2(@swc/core@1.15.21(@swc/helpers@0.5.20))(@types/node@25.5.0)(typescript@6.0.2)))(typescript@6.0.2):
+ eslint-plugin-jest@29.15.1(@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint@9.39.4(jiti@2.6.1))(jest@30.3.0(@types/node@25.5.0)(ts-node@10.9.2(@swc/core@1.15.21(@swc/helpers@0.5.20))(@types/node@25.5.0)(typescript@6.0.2)))(typescript@6.0.2):
dependencies:
- '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)
- eslint: 10.1.0(jiti@2.6.1)
+ '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
+ eslint: 9.39.4(jiti@2.6.1)
optionalDependencies:
- '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)
+ '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
jest: 30.3.0(@types/node@25.5.0)(ts-node@10.9.2(@swc/core@1.15.21(@swc/helpers@0.5.20))(@types/node@25.5.0)(typescript@6.0.2))
typescript: 6.0.2
transitivePeerDependencies:
- supports-color
- eslint-plugin-jsx-a11y@6.10.2(eslint@10.1.0(jiti@2.6.1)):
+ eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.4(jiti@2.6.1)):
dependencies:
aria-query: 5.3.2
array-includes: 3.1.9
@@ -13443,7 +13396,7 @@ snapshots:
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 10.1.0(jiti@2.6.1)
+ eslint: 9.39.4(jiti@2.6.1)
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -13452,28 +13405,28 @@ snapshots:
safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1
- eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(prettier@3.8.1):
+ eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1))(prettier@3.8.1):
dependencies:
- eslint: 10.1.0(jiti@2.6.1)
+ eslint: 9.39.4(jiti@2.6.1)
prettier: 3.8.1
prettier-linter-helpers: 1.0.1
synckit: 0.11.12
optionalDependencies:
'@types/eslint': 9.6.1
- eslint-config-prettier: 10.1.8(eslint@10.1.0(jiti@2.6.1))
+ eslint-config-prettier: 10.1.8(eslint@9.39.4(jiti@2.6.1))
- eslint-plugin-react-hooks@7.0.1(eslint@10.1.0(jiti@2.6.1)):
+ eslint-plugin-react-hooks@7.0.1(eslint@9.39.4(jiti@2.6.1)):
dependencies:
'@babel/core': 7.29.0
'@babel/parser': 7.29.2
- eslint: 10.1.0(jiti@2.6.1)
+ eslint: 9.39.4(jiti@2.6.1)
hermes-parser: 0.25.1
zod: 4.3.6
zod-validation-error: 4.0.2(zod@4.3.6)
transitivePeerDependencies:
- supports-color
- eslint-plugin-react@7.37.5(eslint@10.1.0(jiti@2.6.1)):
+ eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.6.1)):
dependencies:
array-includes: 3.1.9
array.prototype.findlast: 1.2.5
@@ -13481,7 +13434,7 @@ snapshots:
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
es-iterator-helpers: 1.3.1
- eslint: 10.1.0(jiti@2.6.1)
+ eslint: 9.39.4(jiti@2.6.1)
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -13500,10 +13453,8 @@ snapshots:
esrecurse: 4.3.0
estraverse: 4.3.0
- eslint-scope@9.1.2:
+ eslint-scope@8.4.0:
dependencies:
- '@types/esrecurse': 4.3.1
- '@types/estree': 1.0.8
esrecurse: 4.3.0
estraverse: 5.3.0
@@ -13513,25 +13464,28 @@ snapshots:
eslint-visitor-keys@5.0.1: {}
- eslint@10.1.0(jiti@2.6.1):
+ eslint@9.39.4(jiti@2.6.1):
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1))
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.2
- '@eslint/config-array': 0.23.5
- '@eslint/config-helpers': 0.5.5
- '@eslint/core': 1.2.1
- '@eslint/plugin-kit': 0.6.1
+ '@eslint/config-array': 0.21.2
+ '@eslint/config-helpers': 0.4.2
+ '@eslint/core': 0.17.0
+ '@eslint/eslintrc': 3.3.5
+ '@eslint/js': 9.39.4
+ '@eslint/plugin-kit': 0.4.1
'@humanfs/node': 0.16.7
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.3
'@types/estree': 1.0.8
ajv: 6.14.0
+ chalk: 4.1.2
cross-spawn: 7.0.6
debug: 4.4.3
escape-string-regexp: 4.0.0
- eslint-scope: 9.1.2
- eslint-visitor-keys: 5.0.1
- espree: 11.2.0
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
esquery: 1.7.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
@@ -13542,7 +13496,8 @@ snapshots:
imurmurhash: 0.1.4
is-glob: 4.0.3
json-stable-stringify-without-jsonify: 1.0.1
- minimatch: 10.2.5
+ lodash.merge: 4.6.2
+ minimatch: 3.1.5
natural-compare: 1.4.0
optionator: 0.9.4
optionalDependencies:
@@ -13556,12 +13511,6 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.16.0)
eslint-visitor-keys: 4.2.1
- espree@11.2.0:
- dependencies:
- acorn: 8.16.0
- acorn-jsx: 5.3.2(acorn@8.16.0)
- eslint-visitor-keys: 5.0.1
-
esprima@4.0.1: {}
esquery@1.7.0:
@@ -13936,15 +13885,6 @@ snapshots:
graphql@16.13.2: {}
- handlebars@4.7.9:
- dependencies:
- minimist: 1.2.8
- neo-async: 2.6.2
- source-map: 0.6.1
- wordwrap: 1.0.0
- optionalDependencies:
- uglify-js: 3.19.3
-
harmony-reflect@1.6.2: {}
has-bigints@1.1.0: {}
@@ -14995,8 +14935,6 @@ snapshots:
lodash-es@4.18.1: {}
- lodash.memoize@4.1.2: {}
-
lodash.merge@4.6.2: {}
lodash.sortby@4.7.0: {}
@@ -16445,26 +16383,6 @@ snapshots:
dependencies:
typescript: 6.0.2
- ts-jest@29.4.9(@babel/core@7.29.0)(@jest/transform@30.3.0)(@jest/types@30.3.0)(babel-jest@30.3.0(@babel/core@7.29.0))(jest-util@30.3.0)(jest@30.3.0(@types/node@25.5.0)(ts-node@10.9.2(@swc/core@1.15.21(@swc/helpers@0.5.20))(@types/node@25.5.0)(typescript@6.0.2)))(typescript@6.0.2):
- dependencies:
- bs-logger: 0.2.6
- fast-json-stable-stringify: 2.1.0
- handlebars: 4.7.9
- jest: 30.3.0(@types/node@25.5.0)(ts-node@10.9.2(@swc/core@1.15.21(@swc/helpers@0.5.20))(@types/node@25.5.0)(typescript@6.0.2))
- json5: 2.2.3
- lodash.memoize: 4.1.2
- make-error: 1.3.6
- semver: 7.7.4
- type-fest: 4.41.0
- typescript: 6.0.2
- yargs-parser: 21.1.1
- optionalDependencies:
- '@babel/core': 7.29.0
- '@jest/transform': 30.3.0
- '@jest/types': 30.3.0
- babel-jest: 30.3.0(@babel/core@7.29.0)
- jest-util: 30.3.0
-
ts-log@2.2.7: {}
ts-node@10.9.2(@swc/core@1.15.21(@swc/helpers@0.5.20))(@types/node@25.5.0)(typescript@6.0.2):
@@ -16512,8 +16430,6 @@ snapshots:
type-fest@2.19.0: {}
- type-fest@4.41.0: {}
-
type-is@1.6.18:
dependencies:
media-typer: 0.3.0
@@ -16558,13 +16474,13 @@ snapshots:
dependencies:
is-typedarray: 1.0.0
- typescript-eslint@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2):
+ typescript-eslint@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)
- '@typescript-eslint/parser': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)
+ '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
+ '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
'@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2)
- '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)
- eslint: 10.1.0(jiti@2.6.1)
+ '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
+ eslint: 9.39.4(jiti@2.6.1)
typescript: 6.0.2
transitivePeerDependencies:
- supports-color
@@ -16573,9 +16489,6 @@ snapshots:
uc.micro@2.1.0: {}
- uglify-js@3.19.3:
- optional: true
-
unbox-primitive@1.1.0:
dependencies:
call-bound: 1.0.4
@@ -16826,8 +16739,6 @@ snapshots:
word-wrap@1.2.5: {}
- wordwrap@1.0.0: {}
-
wrap-ansi@6.2.0:
dependencies:
ansi-styles: 4.3.0
diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json
index 2d673b14c6..69c1ace9ea 100644
--- a/frontend/tsconfig.json
+++ b/frontend/tsconfig.json
@@ -37,7 +37,7 @@
"target": "ES2023",
"useDefineForClassFields": true
},
- "exclude": ["__tests__/**/*", "jest.setup.ts", "node_modules", "playwright.config.ts"],
+ "exclude": ["__tests__/**/*", "node_modules", "playwright.config.ts"],
"include": [
"**/*.ts",
"**/*.tsx",