Bruno Predot

Revert "Modification de la config es-lint + fix."

This reverts commit 6e197beb.
@@ -26,15 +26,9 @@ defineProps({ @@ -26,15 +26,9 @@ defineProps({
26 :alt="movie.title" 26 :alt="movie.title"
27 :src="`https://image.tmdb.org/t/p/w500${movie.poster_path}`" 27 :src="`https://image.tmdb.org/t/p/w500${movie.poster_path}`"
28 class="absolute inset-0 w-full h-full object-cover" 28 class="absolute inset-0 w-full h-full object-cover"
29 - >  
30 - <div  
31 - v-else  
32 - class="absolute inset-0 w-full h-full bg-gray-700 flex items-center justify-center"  
33 - >  
34 - <FilmIcon  
35 - :size="48"  
36 - class="text-gray-500"  
37 /> 29 />
  30 + <div v-else class="absolute inset-0 w-full h-full bg-gray-700 flex items-center justify-center">
  31 + <FilmIcon :size="48" class="text-gray-500" />
38 </div> 32 </div>
39 <div 33 <div
40 class="absolute top-2 right-2 bg-primary text-white rounded-full w-10 h-10 flex items-center justify-center font-bold" 34 class="absolute top-2 right-2 bg-primary text-white rounded-full w-10 h-10 flex items-center justify-center font-bold"
@@ -43,12 +37,8 @@ defineProps({ @@ -43,12 +37,8 @@ defineProps({
43 </div> 37 </div>
44 </div> 38 </div>
45 <div class="p-4"> 39 <div class="p-4">
46 - <h2 class="text-lg font-bold mb-1 line-clamp-1"> 40 + <h2 class="text-lg font-bold mb-1 line-clamp-1">{{ movie.title }}</h2>
47 - {{ movie.title }} 41 + <p class="text-sm text-gray-400">{{ useDateFormat(movie.release_date, "DD-MM-YYYY") }}</p>
48 - </h2>  
49 - <p class="text-sm text-gray-400">  
50 - {{ useDateFormat(movie.release_date, "DD-MM-YYYY") }}  
51 - </p>  
52 </div> 42 </div>
53 </section> 43 </section>
54 </template> 44 </template>
@@ -35,49 +35,25 @@ watch( @@ -35,49 +35,25 @@ watch(
35 <template> 35 <template>
36 <section> 36 <section>
37 <!-- Liste des commentaires --> 37 <!-- Liste des commentaires -->
38 - <section 38 + <section v-if="comments.length > 0" class="mt-10">
39 - v-if="comments.length > 0"  
40 - class="mt-10"  
41 - >  
42 <h2>Commentaires publiés</h2> 39 <h2>Commentaires publiés</h2>
43 - <div 40 + <div v-for="(comment, index) in comments" :key="index" class="bg-gray-800 rounded-lg p-6 mb-4">
44 - v-for="(comment, index) in comments"  
45 - :key="index"  
46 - class="bg-gray-800 rounded-lg p-6 mb-4"  
47 - >  
48 <div class="flex justify-between items-start mb-2"> 41 <div class="flex justify-between items-start mb-2">
49 <section> 42 <section>
50 - <h4 class="font-bold text-lg"> 43 + <h4 class="font-bold text-lg">Par {{ comment.username }}</h4>
51 - Par {{ comment.username }} 44 + <p class="text-sm text-gray-400">Le {{ useDateFormat(comment.createdAt, "DD-MM-YYYY") }}</p>
52 - </h4>  
53 - <p class="text-sm text-gray-400">  
54 - Le {{ useDateFormat(comment.createdAt, "DD-MM-YYYY") }}  
55 - </p>  
56 </section> 45 </section>
57 <section class="bg-primary text-white rounded-full w-10 h-10 flex items-center justify-center font-bold"> 46 <section class="bg-primary text-white rounded-full w-10 h-10 flex items-center justify-center font-bold">
58 {{ comment.rating }} 47 {{ comment.rating }}
59 </section> 48 </section>
60 </div> 49 </div>
61 - <p 50 + <p :id="`message${index}`" class="text-gray-300">{{ comment.message }}</p>
62 - :id="`message${index}`"  
63 - class="text-gray-300"  
64 - >  
65 - {{ comment.message }}  
66 - </p>  
67 </div> 51 </div>
68 </section> 52 </section>
69 <!-- Si aucun commentaire --> 53 <!-- Si aucun commentaire -->
70 - <section 54 + <section v-else class="text-center py-8 bg-gray-800 rounded-lg mt-10">
71 - v-else 55 + <MessageSquareIcon :size="48" class="mx-auto mb-3 text-gray-600" />
72 - class="text-center py-8 bg-gray-800 rounded-lg mt-10" 56 + <p class="text-gray-400">Aucun commentaire pour le moment. Soyez le premier à donner votre avis !</p>
73 - >  
74 - <MessageSquareIcon  
75 - :size="48"  
76 - class="mx-auto mb-3 text-gray-600"  
77 - />  
78 - <p class="text-gray-400">  
79 - Aucun commentaire pour le moment. Soyez le premier à donner votre avis !  
80 - </p>  
81 </section> 57 </section>
82 </section> 58 </section>
83 </template> 59 </template>
@@ -151,9 +151,7 @@ onBeforeUnmount(() => { @@ -151,9 +151,7 @@ onBeforeUnmount(() => {
151 151
152 <template> 152 <template>
153 <section> 153 <section>
154 - <h1 class="text-4xl font-bold mb-8 text-center"> 154 + <h1 class="text-4xl font-bold mb-8 text-center">Découvrez les films populaires</h1>
155 - Découvrez les films populaires  
156 - </h1>  
157 <!-- Barre de recherche --> 155 <!-- Barre de recherche -->
158 <ui-components-search-bar 156 <ui-components-search-bar
159 placeholder="Rechercher un film..." 157 placeholder="Rechercher un film..."
@@ -169,46 +167,24 @@ onBeforeUnmount(() => { @@ -169,46 +167,24 @@ onBeforeUnmount(() => {
169 /> 167 />
170 168
171 <!-- Liste des films --> 169 <!-- Liste des films -->
172 - <div 170 + <div v-else-if="movies.length > 0" class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6">
173 - v-else-if="movies.length > 0" 171 + <div v-for="movie in movies" :key="movie.id">
174 - class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6"  
175 - >  
176 - <div  
177 - v-for="movie in movies"  
178 - :key="movie.id"  
179 - >  
180 <movie-card :movie="movie" /> 172 <movie-card :movie="movie" />
181 </div> 173 </div>
182 </div> 174 </div>
183 175
184 <!-- Message si aucun film trouvé --> 176 <!-- Message si aucun film trouvé -->
185 - <section 177 + <section v-else-if="searchQuery && !movies.length" class="text-center py-12">
186 - v-else-if="searchQuery && !movies.length" 178 + <SearchXIcon :size="64" class="mx-auto mb-4 text-gray-600" />
187 - class="text-center py-12" 179 + <h3 class="text-xl font-bold mb-2">Aucun film trouvé</h3>
188 - > 180 + <p class="text-gray-400">Essayez avec un autre terme de recherche</p>
189 - <SearchXIcon  
190 - :size="64"  
191 - class="mx-auto mb-4 text-gray-600"  
192 - />  
193 - <h3 class="text-xl font-bold mb-2">  
194 - Aucun film trouvé  
195 - </h3>  
196 - <p class="text-gray-400">  
197 - Essayez avec un autre terme de recherche  
198 - </p>  
199 </section> 181 </section>
200 182
201 <!-- Loader pour le chargement de plus de films --> 183 <!-- Loader pour le chargement de plus de films -->
202 - <ui-components-loader 184 + <ui-components-loader :is-initial-loading="isInitialLoading" :is-loading="isLoadingMore" />
203 - :is-initial-loading="isInitialLoading"  
204 - :is-loading="isLoadingMore"  
205 - />  
206 185
207 <!-- Élément observé pour le défilement infini --> 186 <!-- Élément observé pour le défilement infini -->
208 - <div 187 + <div ref="loadMoreTrigger" class="h-10 mt-4" />
209 - ref="loadMoreTrigger"  
210 - class="h-10 mt-4"  
211 - />  
212 </section> 188 </section>
213 </template> 189 </template>
214 190
No preview for this file type
@@ -17,11 +17,7 @@ defineProps({ @@ -17,11 +17,7 @@ defineProps({
17 <template> 17 <template>
18 <section class="mb-6"> 18 <section class="mb-6">
19 <div class="flex flex-wrap gap-2"> 19 <div class="flex flex-wrap gap-2">
20 - <span 20 + <span v-for="genre in genres" :key="genre.id" class="px-3 py-1 bg-gray-800 rounded-full text-sm">
21 - v-for="genre in genres"  
22 - :key="genre.id"  
23 - class="px-3 py-1 bg-gray-800 rounded-full text-sm"  
24 - >  
25 {{ genre.name }} 21 {{ genre.name }}
26 </span> 22 </span>
27 </div> 23 </div>
@@ -34,12 +34,8 @@ const formatVoteCount = (count: number) => { @@ -34,12 +34,8 @@ const formatVoteCount = (count: number) => {
34 {{ score.toFixed(1) }} 34 {{ score.toFixed(1) }}
35 </section> 35 </section>
36 <section> 36 <section>
37 - <p class="font-semibold"> 37 + <p class="font-semibold">Note TMDB</p>
38 - Note TMDB 38 + <div class="text-sm text-gray-400">{{ formatVoteCount(nbVote) }}</div>
39 - </p>  
40 - <div class="text-sm text-gray-400">  
41 - {{ formatVoteCount(nbVote) }}  
42 - </div>  
43 </section> 39 </section>
44 </section> 40 </section>
45 </template> 41 </template>
@@ -123,22 +123,13 @@ function handleMessageEvent(event: string) { @@ -123,22 +123,13 @@ function handleMessageEvent(event: string) {
123 } 123 }
124 " 124 "
125 > 125 >
126 - <span 126 + <span v-if="isSubmitting" class="flex items-center justify-center">
127 - v-if="isSubmitting"  
128 - class="flex items-center justify-center"  
129 - >  
130 <span class="w-5 h-5 border-2 border-white border-t-transparent rounded-full animate-spin mr-2" /> 127 <span class="w-5 h-5 border-2 border-white border-t-transparent rounded-full animate-spin mr-2" />
131 Envoi en cours... 128 Envoi en cours...
132 </span> 129 </span>
133 <span v-else>Publier le commentaire</span> 130 <span v-else>Publier le commentaire</span>
134 </v-btn> 131 </v-btn>
135 - <v-btn 132 + <v-btn class="mt-6 mr-4" color="primary" @click="clear"> effacer</v-btn>
136 - class="mt-6 mr-4"  
137 - color="primary"  
138 - @click="clear"  
139 - >  
140 - effacer  
141 - </v-btn>  
142 </VForm> 133 </VForm>
143 </section> 134 </section>
144 </template> 135 </template>
@@ -17,10 +17,7 @@ defineProps({ @@ -17,10 +17,7 @@ defineProps({
17 </script> 17 </script>
18 18
19 <template> 19 <template>
20 - <section 20 + <section v-if="isLoading && !isInitialLoading" class="flex justify-center mt-8">
21 - v-if="isLoading && !isInitialLoading"  
22 - class="flex justify-center mt-8"  
23 - >  
24 <div class="w-10 h-10 border-4 border-primary border-t-transparent rounded-full animate-spin" /> 21 <div class="w-10 h-10 border-4 border-primary border-t-transparent rounded-full animate-spin" />
25 </section> 22 </section>
26 </template> 23 </template>
@@ -20,20 +20,9 @@ defineProps({ @@ -20,20 +20,9 @@ defineProps({
20 <template> 20 <template>
21 <section class="w-full md:w-1/3 lg:w-1/4"> 21 <section class="w-full md:w-1/3 lg:w-1/4">
22 <div class="rounded-lg overflow-hidden shadow-lg bg-gray-800"> 22 <div class="rounded-lg overflow-hidden shadow-lg bg-gray-800">
23 - <v-img 23 + <v-img v-if="src" :alt="title" :src="`https://image.tmdb.org/t/p/w500${src}`" class="w-full h-auto" />
24 - v-if="src" 24 + <div v-else class="aspect-[2/3] bg-gray-700 flex items-center justify-center">
25 - :alt="title" 25 + <FilmIcon :size="64" class="text-gray-500" />
26 - :src="`https://image.tmdb.org/t/p/w500${src}`"  
27 - class="w-full h-auto"  
28 - />  
29 - <div  
30 - v-else  
31 - class="aspect-[2/3] bg-gray-700 flex items-center justify-center"  
32 - >  
33 - <FilmIcon  
34 - :size="64"  
35 - class="text-gray-500"  
36 - />  
37 </div> 26 </div>
38 </div> 27 </div>
39 </section> 28 </section>
@@ -49,7 +49,7 @@ function handleClearSearchEvent() { @@ -49,7 +49,7 @@ function handleClearSearchEvent() {
49 class="w-full px-4 py-3 bg-gray-800 rounded-full text-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-primary" 49 class="w-full px-4 py-3 bg-gray-800 rounded-full text-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-primary"
50 type="text" 50 type="text"
51 @input="handleSearchEvent" 51 @input="handleSearchEvent"
52 - > 52 + />
53 <button 53 <button
54 v-if="searchQuery" 54 v-if="searchQuery"
55 class="absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-white" 55 class="absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-white"
@@ -57,10 +57,7 @@ function handleClearSearchEvent() { @@ -57,10 +57,7 @@ function handleClearSearchEvent() {
57 > 57 >
58 <XIcon :size="20" /> 58 <XIcon :size="20" />
59 </button> 59 </button>
60 - <button 60 + <button v-else class="absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400">
61 - v-else  
62 - class="absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400"  
63 - >  
64 <SearchIcon :size="20" /> 61 <SearchIcon :size="20" />
65 </button> 62 </button>
66 </div> 63 </div>
@@ -18,15 +18,8 @@ defineProps({ @@ -18,15 +18,8 @@ defineProps({
18 18
19 <template> 19 <template>
20 <!-- Skeleton loader pendant le chargement initial --> 20 <!-- Skeleton loader pendant le chargement initial -->
21 - <section 21 + <section v-if="isInitialLoading" class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6">
22 - v-if="isInitialLoading" 22 + <div v-for="i in skeletonNumber" :key="i" class="bg-gray-800 rounded-lg overflow-hidden shadow-lg animate-pulse">
23 - class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6"  
24 - >  
25 - <div  
26 - v-for="i in skeletonNumber"  
27 - :key="i"  
28 - class="bg-gray-800 rounded-lg overflow-hidden shadow-lg animate-pulse"  
29 - >  
30 <div class="h-80 bg-gray-700" /> 23 <div class="h-80 bg-gray-700" />
31 <div class="p-4"> 24 <div class="p-4">
32 <div class="h-6 bg-gray-700 rounded mb-3" /> 25 <div class="h-6 bg-gray-700 rounded mb-3" />
@@ -79,16 +79,9 @@ watch( @@ -79,16 +79,9 @@ watch(
79 79
80 <template> 80 <template>
81 <div> 81 <div>
82 - <editor 82 + <editor v-model="content" :api-key="runtimeConfig.public.apiTinyMceSecret" :init="init" />
83 - v-model="content"  
84 - :api-key="runtimeConfig.public.apiTinyMceSecret"  
85 - :init="init"  
86 - />  
87 </div> 83 </div>
88 - <div 84 + <div v-if="errorMessage" class="text-red-500 text-sm mt-1">
89 - v-if="errorMessage"  
90 - class="text-red-500 text-sm mt-1"  
91 - >  
92 {{ errorMessage }} 85 {{ errorMessage }}
93 </div> 86 </div>
94 </template> 87 </template>
@@ -3,10 +3,7 @@ @@ -3,10 +3,7 @@
3 <template> 3 <template>
4 <v-container class="bg-gray-900"> 4 <v-container class="bg-gray-900">
5 <v-row class="bg-gray-900"> 5 <v-row class="bg-gray-900">
6 - <v-col 6 + <v-col cols="12" sm="4">
7 - cols="12"  
8 - sm="4"  
9 - >  
10 <v-skeleton-loader 7 <v-skeleton-loader
11 class="mx-auto border bg-gray-800" 8 class="mx-auto border bg-gray-800"
12 color="#1f2937" 9 color="#1f2937"
@@ -15,10 +12,7 @@ @@ -15,10 +12,7 @@
15 type="paragraph, image" 12 type="paragraph, image"
16 /> 13 />
17 </v-col> 14 </v-col>
18 - <v-col 15 + <v-col cols="12" sm="8">
19 - cols="12"  
20 - sm="8"  
21 - >  
22 <v-skeleton-loader 16 <v-skeleton-loader
23 class="mx-auto mt-10" 17 class="mx-auto mt-10"
24 color="#1f2937" 18 color="#1f2937"
1 // @ts-check 1 // @ts-check
2 import withNuxt from "./.nuxt/eslint.config.mjs"; 2 import withNuxt from "./.nuxt/eslint.config.mjs";
3 -import js from "@eslint/js";  
4 -import eslintPluginVue from "eslint-plugin-vue";  
5 -import ts from "typescript-eslint";  
6 3
7 -export default withNuxt( 4 +export default withNuxt();
8 - // Your custom configs here 5 +// Your custom configs here
9 - js.configs.recommended,  
10 - ...ts.configs.recommended,  
11 - ...eslintPluginVue.configs["flat/recommended"],  
12 - {  
13 - files: ["*.vue", "**/*.vue"],  
14 - languageOptions: {  
15 - parserOptions: {  
16 - parser: "@typescript-eslint/parser",  
17 - },  
18 - },  
19 - rules: {  
20 - "vue/multi-word-component-names": "off",  
21 - },  
22 - },  
23 - // your custom flat configs go here, for example:  
24 - // {  
25 - // files: ['**/*.ts', '**/*.tsx'],  
26 - // rules: {  
27 - // 'no-console': 'off' // allow console.log in TypeScript files  
28 - // }  
29 - // },  
30 - // {  
31 - // ...  
32 - // }  
33 -);  
34 -  
35 -// S'inspirer de ça :  
36 -//  
37 -// export default ts.config(  
38 -// js.configs.recommended,  
39 -// ...ts.configs.recommended,  
40 -// ...eslintPluginVue.configs['flat/recommended'],  
41 -// {  
42 -// files: ['*.vue', '**/*.vue'],  
43 -// languageOptions: {  
44 -// parserOptions: {  
45 -// parser: '@typescript-eslint/parser'  
46 -// }  
47 -// },  
48 -// rules: {  
49 -// 'vue/multi-word-component-names': 'off'  
50 -// }  
51 -// }  
52 -// )  
@@ -9,8 +9,8 @@ export interface CreditInterface { @@ -9,8 +9,8 @@ export interface CreditInterface {
9 9
10 export type CreditsResponse = { 10 export type CreditsResponse = {
11 id: number; 11 id: number;
12 - cast: CreditInterface[]; 12 + cast: CreditInterface[],
13 - crew: CreditInterface[]; 13 + crew: CreditInterface[],
14 movie_id: unknown; 14 movie_id: unknown;
15 movie: MovieInterface; 15 movie: MovieInterface;
16 -}; 16 +}
1 -import type { CreditsResponse } from "~/interfaces/credit"; 1 +import type { CreditInterface, CreditsResponse } from "~/interfaces/credit";
2 2
3 export interface MovieInterface { 3 export interface MovieInterface {
4 id: number; 4 id: number;
@@ -12,7 +12,7 @@ export interface MovieInterface { @@ -12,7 +12,7 @@ export interface MovieInterface {
12 popularity: number; 12 popularity: number;
13 poster_path: string | null; 13 poster_path: string | null;
14 release_date: string; 14 release_date: string;
15 - runtime: number; 15 + runtime: number
16 title: string; 16 title: string;
17 video: boolean; 17 video: boolean;
18 vote_average: number; 18 vote_average: number;
@@ -21,6 +21,6 @@ export interface MovieInterface { @@ -21,6 +21,6 @@ export interface MovieInterface {
21 } 21 }
22 22
23 export type Genre = { 23 export type Genre = {
24 - id: number; 24 + id: number,
25 - name: string; 25 + name: string,
26 -}; 26 +}
@@ -22,10 +22,10 @@ export class MovieComment extends Model { @@ -22,10 +22,10 @@ export class MovieComment extends Model {
22 return { 22 return {
23 // Attributs. 23 // Attributs.
24 id: this.uid(), 24 id: this.uid(),
25 - createdAt: this.string(""), 25 + createdAt: this.string(''),
26 - username: this.string(""), 26 + username: this.string(''),
27 - message: this.string(""), 27 + message: this.string(''),
28 - rating: this.string(""), 28 + rating: this.string(''),
29 // Relations. 29 // Relations.
30 movie_id: this.attr(null), 30 movie_id: this.attr(null),
31 movie: this.belongsTo(Movie, "movie_id", "id"), 31 movie: this.belongsTo(Movie, "movie_id", "id"),
@@ -43,7 +43,6 @@ @@ -43,7 +43,6 @@
43 "jsdom": "^26.1.0", 43 "jsdom": "^26.1.0",
44 "playwright-core": "^1.52.0", 44 "playwright-core": "^1.52.0",
45 "prettier": "^3.5.3", 45 "prettier": "^3.5.3",
46 - "typescript-eslint": "^8.32.1",  
47 "vitest": "^3.1.2" 46 "vitest": "^3.1.2"
48 } 47 }
49 }, 48 },
@@ -1218,9 +1217,9 @@ @@ -1218,9 +1217,9 @@
1218 } 1217 }
1219 }, 1218 },
1220 "node_modules/@eslint-community/eslint-utils": { 1219 "node_modules/@eslint-community/eslint-utils": {
1221 - "version": "4.7.0", 1220 + "version": "4.6.1",
1222 - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", 1221 + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.1.tgz",
1223 - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", 1222 + "integrity": "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==",
1224 "license": "MIT", 1223 "license": "MIT",
1225 "dependencies": { 1224 "dependencies": {
1226 "eslint-visitor-keys": "^3.4.3" 1225 "eslint-visitor-keys": "^3.4.3"
@@ -4877,20 +4876,20 @@ @@ -4877,20 +4876,20 @@
4877 } 4876 }
4878 }, 4877 },
4879 "node_modules/@typescript-eslint/eslint-plugin": { 4878 "node_modules/@typescript-eslint/eslint-plugin": {
4880 - "version": "8.32.1", 4879 + "version": "8.31.0",
4881 - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.1.tgz", 4880 + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.31.0.tgz",
4882 - "integrity": "sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==", 4881 + "integrity": "sha512-evaQJZ/J/S4wisevDvC1KFZkPzRetH8kYZbkgcTRyql3mcKsf+ZFDV1BVWUGTCAW5pQHoqn5gK5b8kn7ou9aFQ==",
4883 "license": "MIT", 4882 "license": "MIT",
4884 "dependencies": { 4883 "dependencies": {
4885 "@eslint-community/regexpp": "^4.10.0", 4884 "@eslint-community/regexpp": "^4.10.0",
4886 - "@typescript-eslint/scope-manager": "8.32.1", 4885 + "@typescript-eslint/scope-manager": "8.31.0",
4887 - "@typescript-eslint/type-utils": "8.32.1", 4886 + "@typescript-eslint/type-utils": "8.31.0",
4888 - "@typescript-eslint/utils": "8.32.1", 4887 + "@typescript-eslint/utils": "8.31.0",
4889 - "@typescript-eslint/visitor-keys": "8.32.1", 4888 + "@typescript-eslint/visitor-keys": "8.31.0",
4890 "graphemer": "^1.4.0", 4889 "graphemer": "^1.4.0",
4891 - "ignore": "^7.0.0", 4890 + "ignore": "^5.3.1",
4892 "natural-compare": "^1.4.0", 4891 "natural-compare": "^1.4.0",
4893 - "ts-api-utils": "^2.1.0" 4892 + "ts-api-utils": "^2.0.1"
4894 }, 4893 },
4895 "engines": { 4894 "engines": {
4896 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 4895 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4906,9 +4905,9 @@ @@ -4906,9 +4905,9 @@
4906 } 4905 }
4907 }, 4906 },
4908 "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { 4907 "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
4909 - "version": "8.32.1", 4908 + "version": "8.31.0",
4910 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.1.tgz", 4909 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.0.tgz",
4911 - "integrity": "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==", 4910 + "integrity": "sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==",
4912 "license": "MIT", 4911 "license": "MIT",
4913 "engines": { 4912 "engines": {
4914 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 4913 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4919,12 +4918,12 @@ @@ -4919,12 +4918,12 @@
4919 } 4918 }
4920 }, 4919 },
4921 "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { 4920 "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
4922 - "version": "8.32.1", 4921 + "version": "8.31.0",
4923 - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz", 4922 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.0.tgz",
4924 - "integrity": "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==", 4923 + "integrity": "sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==",
4925 "license": "MIT", 4924 "license": "MIT",
4926 "dependencies": { 4925 "dependencies": {
4927 - "@typescript-eslint/types": "8.32.1", 4926 + "@typescript-eslint/types": "8.31.0",
4928 "eslint-visitor-keys": "^4.2.0" 4927 "eslint-visitor-keys": "^4.2.0"
4929 }, 4928 },
4930 "engines": { 4929 "engines": {
@@ -4947,16 +4946,25 @@ @@ -4947,16 +4946,25 @@
4947 "url": "https://opencollective.com/eslint" 4946 "url": "https://opencollective.com/eslint"
4948 } 4947 }
4949 }, 4948 },
  4949 + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
  4950 + "version": "5.3.2",
  4951 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
  4952 + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
  4953 + "license": "MIT",
  4954 + "engines": {
  4955 + "node": ">= 4"
  4956 + }
  4957 + },
4950 "node_modules/@typescript-eslint/parser": { 4958 "node_modules/@typescript-eslint/parser": {
4951 - "version": "8.32.1", 4959 + "version": "8.31.0",
4952 - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.1.tgz", 4960 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.0.tgz",
4953 - "integrity": "sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==", 4961 + "integrity": "sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==",
4954 "license": "MIT", 4962 "license": "MIT",
4955 "dependencies": { 4963 "dependencies": {
4956 - "@typescript-eslint/scope-manager": "8.32.1", 4964 + "@typescript-eslint/scope-manager": "8.31.0",
4957 - "@typescript-eslint/types": "8.32.1", 4965 + "@typescript-eslint/types": "8.31.0",
4958 - "@typescript-eslint/typescript-estree": "8.32.1", 4966 + "@typescript-eslint/typescript-estree": "8.31.0",
4959 - "@typescript-eslint/visitor-keys": "8.32.1", 4967 + "@typescript-eslint/visitor-keys": "8.31.0",
4960 "debug": "^4.3.4" 4968 "debug": "^4.3.4"
4961 }, 4969 },
4962 "engines": { 4970 "engines": {
@@ -4972,9 +4980,9 @@ @@ -4972,9 +4980,9 @@
4972 } 4980 }
4973 }, 4981 },
4974 "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { 4982 "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
4975 - "version": "8.32.1", 4983 + "version": "8.31.0",
4976 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.1.tgz", 4984 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.0.tgz",
4977 - "integrity": "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==", 4985 + "integrity": "sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==",
4978 "license": "MIT", 4986 "license": "MIT",
4979 "engines": { 4987 "engines": {
4980 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 4988 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4985,19 +4993,19 @@ @@ -4985,19 +4993,19 @@
4985 } 4993 }
4986 }, 4994 },
4987 "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { 4995 "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
4988 - "version": "8.32.1", 4996 + "version": "8.31.0",
4989 - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz", 4997 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.0.tgz",
4990 - "integrity": "sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==", 4998 + "integrity": "sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==",
4991 "license": "MIT", 4999 "license": "MIT",
4992 "dependencies": { 5000 "dependencies": {
4993 - "@typescript-eslint/types": "8.32.1", 5001 + "@typescript-eslint/types": "8.31.0",
4994 - "@typescript-eslint/visitor-keys": "8.32.1", 5002 + "@typescript-eslint/visitor-keys": "8.31.0",
4995 "debug": "^4.3.4", 5003 "debug": "^4.3.4",
4996 "fast-glob": "^3.3.2", 5004 "fast-glob": "^3.3.2",
4997 "is-glob": "^4.0.3", 5005 "is-glob": "^4.0.3",
4998 "minimatch": "^9.0.4", 5006 "minimatch": "^9.0.4",
4999 "semver": "^7.6.0", 5007 "semver": "^7.6.0",
5000 - "ts-api-utils": "^2.1.0" 5008 + "ts-api-utils": "^2.0.1"
5001 }, 5009 },
5002 "engines": { 5010 "engines": {
5003 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 5011 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5011,12 +5019,12 @@ @@ -5011,12 +5019,12 @@
5011 } 5019 }
5012 }, 5020 },
5013 "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { 5021 "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
5014 - "version": "8.32.1", 5022 + "version": "8.31.0",
5015 - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz", 5023 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.0.tgz",
5016 - "integrity": "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==", 5024 + "integrity": "sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==",
5017 "license": "MIT", 5025 "license": "MIT",
5018 "dependencies": { 5026 "dependencies": {
5019 - "@typescript-eslint/types": "8.32.1", 5027 + "@typescript-eslint/types": "8.31.0",
5020 "eslint-visitor-keys": "^4.2.0" 5028 "eslint-visitor-keys": "^4.2.0"
5021 }, 5029 },
5022 "engines": { 5030 "engines": {
@@ -5040,13 +5048,13 @@ @@ -5040,13 +5048,13 @@
5040 } 5048 }
5041 }, 5049 },
5042 "node_modules/@typescript-eslint/scope-manager": { 5050 "node_modules/@typescript-eslint/scope-manager": {
5043 - "version": "8.32.1", 5051 + "version": "8.31.0",
5044 - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.1.tgz", 5052 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.31.0.tgz",
5045 - "integrity": "sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==", 5053 + "integrity": "sha512-knO8UyF78Nt8O/B64i7TlGXod69ko7z6vJD9uhSlm0qkAbGeRUSudcm0+K/4CrRjrpiHfBCjMWlc08Vav1xwcw==",
5046 "license": "MIT", 5054 "license": "MIT",
5047 "dependencies": { 5055 "dependencies": {
5048 - "@typescript-eslint/types": "8.32.1", 5056 + "@typescript-eslint/types": "8.31.0",
5049 - "@typescript-eslint/visitor-keys": "8.32.1" 5057 + "@typescript-eslint/visitor-keys": "8.31.0"
5050 }, 5058 },
5051 "engines": { 5059 "engines": {
5052 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 5060 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5057,9 +5065,9 @@ @@ -5057,9 +5065,9 @@
5057 } 5065 }
5058 }, 5066 },
5059 "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { 5067 "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": {
5060 - "version": "8.32.1", 5068 + "version": "8.31.0",
5061 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.1.tgz", 5069 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.0.tgz",
5062 - "integrity": "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==", 5070 + "integrity": "sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==",
5063 "license": "MIT", 5071 "license": "MIT",
5064 "engines": { 5072 "engines": {
5065 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 5073 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5070,12 +5078,12 @@ @@ -5070,12 +5078,12 @@
5070 } 5078 }
5071 }, 5079 },
5072 "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/visitor-keys": { 5080 "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/visitor-keys": {
5073 - "version": "8.32.1", 5081 + "version": "8.31.0",
5074 - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz", 5082 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.0.tgz",
5075 - "integrity": "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==", 5083 + "integrity": "sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==",
5076 "license": "MIT", 5084 "license": "MIT",
5077 "dependencies": { 5085 "dependencies": {
5078 - "@typescript-eslint/types": "8.32.1", 5086 + "@typescript-eslint/types": "8.31.0",
5079 "eslint-visitor-keys": "^4.2.0" 5087 "eslint-visitor-keys": "^4.2.0"
5080 }, 5088 },
5081 "engines": { 5089 "engines": {
@@ -5099,15 +5107,15 @@ @@ -5099,15 +5107,15 @@
5099 } 5107 }
5100 }, 5108 },
5101 "node_modules/@typescript-eslint/type-utils": { 5109 "node_modules/@typescript-eslint/type-utils": {
5102 - "version": "8.32.1", 5110 + "version": "8.31.0",
5103 - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.1.tgz", 5111 + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.31.0.tgz",
5104 - "integrity": "sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==", 5112 + "integrity": "sha512-DJ1N1GdjI7IS7uRlzJuEDCgDQix3ZVYVtgeWEyhyn4iaoitpMBX6Ndd488mXSx0xah/cONAkEaYyylDyAeHMHg==",
5105 "license": "MIT", 5113 "license": "MIT",
5106 "dependencies": { 5114 "dependencies": {
5107 - "@typescript-eslint/typescript-estree": "8.32.1", 5115 + "@typescript-eslint/typescript-estree": "8.31.0",
5108 - "@typescript-eslint/utils": "8.32.1", 5116 + "@typescript-eslint/utils": "8.31.0",
5109 "debug": "^4.3.4", 5117 "debug": "^4.3.4",
5110 - "ts-api-utils": "^2.1.0" 5118 + "ts-api-utils": "^2.0.1"
5111 }, 5119 },
5112 "engines": { 5120 "engines": {
5113 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 5121 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5122,9 +5130,9 @@ @@ -5122,9 +5130,9 @@
5122 } 5130 }
5123 }, 5131 },
5124 "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { 5132 "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
5125 - "version": "8.32.1", 5133 + "version": "8.31.0",
5126 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.1.tgz", 5134 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.0.tgz",
5127 - "integrity": "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==", 5135 + "integrity": "sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==",
5128 "license": "MIT", 5136 "license": "MIT",
5129 "engines": { 5137 "engines": {
5130 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 5138 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5135,19 +5143,19 @@ @@ -5135,19 +5143,19 @@
5135 } 5143 }
5136 }, 5144 },
5137 "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { 5145 "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
5138 - "version": "8.32.1", 5146 + "version": "8.31.0",
5139 - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz", 5147 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.0.tgz",
5140 - "integrity": "sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==", 5148 + "integrity": "sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==",
5141 "license": "MIT", 5149 "license": "MIT",
5142 "dependencies": { 5150 "dependencies": {
5143 - "@typescript-eslint/types": "8.32.1", 5151 + "@typescript-eslint/types": "8.31.0",
5144 - "@typescript-eslint/visitor-keys": "8.32.1", 5152 + "@typescript-eslint/visitor-keys": "8.31.0",
5145 "debug": "^4.3.4", 5153 "debug": "^4.3.4",
5146 "fast-glob": "^3.3.2", 5154 "fast-glob": "^3.3.2",
5147 "is-glob": "^4.0.3", 5155 "is-glob": "^4.0.3",
5148 "minimatch": "^9.0.4", 5156 "minimatch": "^9.0.4",
5149 "semver": "^7.6.0", 5157 "semver": "^7.6.0",
5150 - "ts-api-utils": "^2.1.0" 5158 + "ts-api-utils": "^2.0.1"
5151 }, 5159 },
5152 "engines": { 5160 "engines": {
5153 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 5161 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5161,12 +5169,12 @@ @@ -5161,12 +5169,12 @@
5161 } 5169 }
5162 }, 5170 },
5163 "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { 5171 "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
5164 - "version": "8.32.1", 5172 + "version": "8.31.0",
5165 - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz", 5173 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.0.tgz",
5166 - "integrity": "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==", 5174 + "integrity": "sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==",
5167 "license": "MIT", 5175 "license": "MIT",
5168 "dependencies": { 5176 "dependencies": {
5169 - "@typescript-eslint/types": "8.32.1", 5177 + "@typescript-eslint/types": "8.31.0",
5170 "eslint-visitor-keys": "^4.2.0" 5178 "eslint-visitor-keys": "^4.2.0"
5171 }, 5179 },
5172 "engines": { 5180 "engines": {
@@ -5268,15 +5276,15 @@ @@ -5268,15 +5276,15 @@
5268 } 5276 }
5269 }, 5277 },
5270 "node_modules/@typescript-eslint/utils": { 5278 "node_modules/@typescript-eslint/utils": {
5271 - "version": "8.32.1", 5279 + "version": "8.31.0",
5272 - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.1.tgz", 5280 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.31.0.tgz",
5273 - "integrity": "sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==", 5281 + "integrity": "sha512-qi6uPLt9cjTFxAb1zGNgTob4x9ur7xC6mHQJ8GwEzGMGE9tYniublmJaowOJ9V2jUzxrltTPfdG2nKlWsq0+Ww==",
5274 "license": "MIT", 5282 "license": "MIT",
5275 "dependencies": { 5283 "dependencies": {
5276 - "@eslint-community/eslint-utils": "^4.7.0", 5284 + "@eslint-community/eslint-utils": "^4.4.0",
5277 - "@typescript-eslint/scope-manager": "8.32.1", 5285 + "@typescript-eslint/scope-manager": "8.31.0",
5278 - "@typescript-eslint/types": "8.32.1", 5286 + "@typescript-eslint/types": "8.31.0",
5279 - "@typescript-eslint/typescript-estree": "8.32.1" 5287 + "@typescript-eslint/typescript-estree": "8.31.0"
5280 }, 5288 },
5281 "engines": { 5289 "engines": {
5282 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 5290 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5291,9 +5299,9 @@ @@ -5291,9 +5299,9 @@
5291 } 5299 }
5292 }, 5300 },
5293 "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { 5301 "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
5294 - "version": "8.32.1", 5302 + "version": "8.31.0",
5295 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.1.tgz", 5303 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.0.tgz",
5296 - "integrity": "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==", 5304 + "integrity": "sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==",
5297 "license": "MIT", 5305 "license": "MIT",
5298 "engines": { 5306 "engines": {
5299 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 5307 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5304,19 +5312,19 @@ @@ -5304,19 +5312,19 @@
5304 } 5312 }
5305 }, 5313 },
5306 "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { 5314 "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
5307 - "version": "8.32.1", 5315 + "version": "8.31.0",
5308 - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz", 5316 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.0.tgz",
5309 - "integrity": "sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==", 5317 + "integrity": "sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==",
5310 "license": "MIT", 5318 "license": "MIT",
5311 "dependencies": { 5319 "dependencies": {
5312 - "@typescript-eslint/types": "8.32.1", 5320 + "@typescript-eslint/types": "8.31.0",
5313 - "@typescript-eslint/visitor-keys": "8.32.1", 5321 + "@typescript-eslint/visitor-keys": "8.31.0",
5314 "debug": "^4.3.4", 5322 "debug": "^4.3.4",
5315 "fast-glob": "^3.3.2", 5323 "fast-glob": "^3.3.2",
5316 "is-glob": "^4.0.3", 5324 "is-glob": "^4.0.3",
5317 "minimatch": "^9.0.4", 5325 "minimatch": "^9.0.4",
5318 "semver": "^7.6.0", 5326 "semver": "^7.6.0",
5319 - "ts-api-utils": "^2.1.0" 5327 + "ts-api-utils": "^2.0.1"
5320 }, 5328 },
5321 "engines": { 5329 "engines": {
5322 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 5330 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5330,12 +5338,12 @@ @@ -5330,12 +5338,12 @@
5330 } 5338 }
5331 }, 5339 },
5332 "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { 5340 "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
5333 - "version": "8.32.1", 5341 + "version": "8.31.0",
5334 - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz", 5342 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.0.tgz",
5335 - "integrity": "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==", 5343 + "integrity": "sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==",
5336 "license": "MIT", 5344 "license": "MIT",
5337 "dependencies": { 5345 "dependencies": {
5338 - "@typescript-eslint/types": "8.32.1", 5346 + "@typescript-eslint/types": "8.31.0",
5339 "eslint-visitor-keys": "^4.2.0" 5347 "eslint-visitor-keys": "^4.2.0"
5340 }, 5348 },
5341 "engines": { 5349 "engines": {
@@ -17344,29 +17352,6 @@ @@ -17344,29 +17352,6 @@
17344 "node": ">=14.17" 17352 "node": ">=14.17"
17345 } 17353 }
17346 }, 17354 },
17347 - "node_modules/typescript-eslint": {  
17348 - "version": "8.32.1",  
17349 - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.1.tgz",  
17350 - "integrity": "sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==",  
17351 - "dev": true,  
17352 - "license": "MIT",  
17353 - "dependencies": {  
17354 - "@typescript-eslint/eslint-plugin": "8.32.1",  
17355 - "@typescript-eslint/parser": "8.32.1",  
17356 - "@typescript-eslint/utils": "8.32.1"  
17357 - },  
17358 - "engines": {  
17359 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0"  
17360 - },  
17361 - "funding": {  
17362 - "type": "opencollective",  
17363 - "url": "https://opencollective.com/typescript-eslint"  
17364 - },  
17365 - "peerDependencies": {  
17366 - "eslint": "^8.57.0 || ^9.0.0",  
17367 - "typescript": ">=4.8.4 <5.9.0"  
17368 - }  
17369 - },  
17370 "node_modules/ufo": { 17355 "node_modules/ufo": {
17371 "version": "1.6.1", 17356 "version": "1.6.1",
17372 "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", 17357 "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz",
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 "generate": "nuxt generate", 9 "generate": "nuxt generate",
10 "preview": "nuxt preview", 10 "preview": "nuxt preview",
11 "postinstall": "nuxt prepare", 11 "postinstall": "nuxt prepare",
12 - "lint:js": "eslint --ext \".ts,.vue\" . --fix", 12 + "lint:js": "eslint --ext \".ts,.vue\" .",
13 "lint:prettier": "prettier --write .", 13 "lint:prettier": "prettier --write .",
14 "lint": "npm run lint:js && npm run lint:prettier", 14 "lint": "npm run lint:js && npm run lint:prettier",
15 "format": "prettier --write \"{components,pages,plugins,middleware,layouts,composables,assets}/**/*.{js,jsx,ts,tsx,vue,html,css,scss,json,md}\"", 15 "format": "prettier --write \"{components,pages,plugins,middleware,layouts,composables,assets}/**/*.{js,jsx,ts,tsx,vue,html,css,scss,json,md}\"",
@@ -153,16 +153,9 @@ onMounted(() => { @@ -153,16 +153,9 @@ onMounted(() => {
153 <ui-components-skeleton-movie-detail-loader v-if="isLoading" /> 153 <ui-components-skeleton-movie-detail-loader v-if="isLoading" />
154 154
155 <!-- Contenu du film --> 155 <!-- Contenu du film -->
156 - <div 156 + <div v-else-if="movie" class="relative">
157 - v-else-if="movie"  
158 - class="relative"  
159 - >  
160 <!-- Backdrop image --> 157 <!-- Backdrop image -->
161 - <ui-components-backdrop-image 158 + <ui-components-backdrop-image v-if="movie.backdrop_path" :src="movie.backdrop_path" :title="movie.title" />
162 - v-if="movie.backdrop_path"  
163 - :src="movie.backdrop_path"  
164 - :title="movie.title"  
165 - />  
166 159
167 <!-- Contenu principal --> 160 <!-- Contenu principal -->
168 <div class="container mx-auto px-4 py-8 relative z-10 pt-20"> 161 <div class="container mx-auto px-4 py-8 relative z-10 pt-20">
@@ -170,64 +163,37 @@ onMounted(() => { @@ -170,64 +163,37 @@ onMounted(() => {
170 class="flex items-center text-gray-400 hover:text-white mb-8 transition-colors" 163 class="flex items-center text-gray-400 hover:text-white mb-8 transition-colors"
171 @click="navigateTo('/')" 164 @click="navigateTo('/')"
172 > 165 >
173 - <ArrowLeftIcon 166 + <ArrowLeftIcon :size="20" class="mr-2" />
174 - :size="20"  
175 - class="mr-2"  
176 - />  
177 Retour 167 Retour
178 </button> 168 </button>
179 169
180 <div class="flex flex-col md:flex-row gap-8"> 170 <div class="flex flex-col md:flex-row gap-8">
181 <!-- Poster --> 171 <!-- Poster -->
182 - <ui-components-poster 172 + <ui-components-poster v-if="movie.poster_path" :src="movie.poster_path" :title="movie.title" />
183 - v-if="movie.poster_path"  
184 - :src="movie.poster_path"  
185 - :title="movie.title"  
186 - />  
187 173
188 <!-- Informations du film --> 174 <!-- Informations du film -->
189 <section class="w-full md:w-2/3 lg:w-3/4"> 175 <section class="w-full md:w-2/3 lg:w-3/4">
190 - <h1 class="text-3xl md:text-4xl font-bold mb-2"> 176 + <h1 class="text-3xl md:text-4xl font-bold mb-2">{{ movie.title }}</h1>
191 - {{ movie.title }} 177 + <p v-if="movie.release_date" class="text-gray-400 mb-4">
192 - </h1>  
193 - <p  
194 - v-if="movie.release_date"  
195 - class="text-gray-400 mb-4"  
196 - >  
197 {{ useDateFormat(movie.release_date, "DD-MM-YYYY") }} • {{ formatRuntime(movie.runtime) }} 178 {{ useDateFormat(movie.release_date, "DD-MM-YYYY") }} • {{ formatRuntime(movie.runtime) }}
198 </p> 179 </p>
199 180
200 <!-- Note et votes --> 181 <!-- Note et votes -->
201 - <details-score-and-vote 182 + <details-score-and-vote :nb-vote="movie.vote_count" :score="movie.vote_average" />
202 - :nb-vote="movie.vote_count"  
203 - :score="movie.vote_average"  
204 - />  
205 183
206 <!-- Genres --> 184 <!-- Genres -->
207 <details-movie-gender :genres="movie.genres" /> 185 <details-movie-gender :genres="movie.genres" />
208 186
209 <!-- Synopsis --> 187 <!-- Synopsis -->
210 <div class="mb-6"> 188 <div class="mb-6">
211 - <h2 class="text-xl font-bold mb-2"> 189 + <h2 class="text-xl font-bold mb-2">Synopsis</h2>
212 - Synopsis 190 + <p class="text-gray-300">{{ movie.overview || "Aucun synopsis disponible." }}</p>
213 - </h2>  
214 - <p class="text-gray-300">  
215 - {{ movie.overview || "Aucun synopsis disponible." }}  
216 - </p>  
217 </div> 191 </div>
218 192
219 <!-- Réalisateur et têtes d'affiche --> 193 <!-- Réalisateur et têtes d'affiche -->
220 - <div 194 + <div v-if="movie.credit" class="mb-6">
221 - v-if="movie.credit" 195 + <h2 class="text-xl font-bold mb-2">Équipe</h2>
222 - class="mb-6" 196 + <div v-if="director" class="mb-2">
223 - >  
224 - <h2 class="text-xl font-bold mb-2">  
225 - Équipe  
226 - </h2>  
227 - <div  
228 - v-if="director"  
229 - class="mb-2"  
230 - >  
231 <span class="font-semibold">Réalisateur:</span> {{ director.name }} 197 <span class="font-semibold">Réalisateur:</span> {{ director.name }}
232 </div> 198 </div>
233 <div v-if="movie.credit.cast.length > 0"> 199 <div v-if="movie.credit.cast.length > 0">
@@ -242,9 +208,7 @@ onMounted(() => { @@ -242,9 +208,7 @@ onMounted(() => {
242 </div> 208 </div>
243 </div> 209 </div>
244 <!-- Comments form. --> 210 <!-- Comments form. -->
245 - <h3 class="text-xl font-bold mt-8 mb-4"> 211 + <h3 class="text-xl font-bold mt-8 mb-4">Ajouter un commentaire</h3>
246 - Ajouter un commentaire  
247 - </h3>  
248 <form-movie-comment-form @event:submit="handleSubmitEvent" /> 212 <form-movie-comment-form @event:submit="handleSubmitEvent" />
249 213
250 <!-- Liste des commentaires --> 214 <!-- Liste des commentaires -->
@@ -255,20 +219,10 @@ onMounted(() => { @@ -255,20 +219,10 @@ onMounted(() => {
255 </div> 219 </div>
256 220
257 <!-- Erreur --> 221 <!-- Erreur -->
258 - <section 222 + <section v-else class="container mx-auto px-4 py-16 text-center">
259 - v-else 223 + <AlertTriangleIcon :size="64" class="mx-auto mb-4 text-red-500" />
260 - class="container mx-auto px-4 py-16 text-center" 224 + <h2 class="text-2xl font-bold mb-2">Film non trouvé</h2>
261 - > 225 + <p class="text-gray-400 mb-6">Nous n'avons pas pu trouver le film que vous cherchez.</p>
262 - <AlertTriangleIcon  
263 - :size="64"  
264 - class="mx-auto mb-4 text-red-500"  
265 - />  
266 - <h2 class="text-2xl font-bold mb-2">  
267 - Film non trouvé  
268 - </h2>  
269 - <p class="text-gray-400 mb-6">  
270 - Nous n'avons pas pu trouver le film que vous cherchez.  
271 - </p>  
272 <button 226 <button
273 class="px-6 py-2 bg-primary text-white font-bold rounded-md hover:bg-primary-dark transition-colors" 227 class="px-6 py-2 bg-primary text-white font-bold rounded-md hover:bg-primary-dark transition-colors"
274 @click="navigateTo('/')" 228 @click="navigateTo('/')"
1 export type Comment = { 1 export type Comment = {
2 - username: string; 2 + username: string
3 - message: string; 3 + message: string
4 - rating: number; 4 + rating: number
5 -}; 5 +}
1 // vite.config.js 1 // vite.config.js
2 -import vue from "@vitejs/plugin-vue"; 2 +import vue from '@vitejs/plugin-vue'
3 3
4 export default { 4 export default {
5 plugins: [vue()], 5 plugins: [vue()],
@@ -8,4 +8,4 @@ export default { @@ -8,4 +8,4 @@ export default {
8 environment: "happy-dom", 8 environment: "happy-dom",
9 // Additional test configurations can be added here 9 // Additional test configurations can be added here
10 }, 10 },
11 -}; 11 +}
1 -import { defineVitestConfig } from "@nuxt/test-utils/config"; 1 +import { defineVitestConfig } from '@nuxt/test-utils/config'
2 -import { fileURLToPath } from "node:url"; 2 +import vue from '@vitejs/plugin-vue'
  3 +import { fileURLToPath } from 'node:url'
3 4
4 export default defineVitestConfig({ 5 export default defineVitestConfig({
5 /** 6 /**
@@ -7,31 +8,31 @@ export default defineVitestConfig({ @@ -7,31 +8,31 @@ export default defineVitestConfig({
7 * any custom Vitest config you require 8 * any custom Vitest config you require
8 */ 9 */
9 test: { 10 test: {
10 - environment: "nuxt", 11 + environment: 'nuxt',
11 globals: true, 12 globals: true,
12 // you can optionally set Nuxt-specific environment options 13 // you can optionally set Nuxt-specific environment options
13 environmentOptions: { 14 environmentOptions: {
14 nuxt: { 15 nuxt: {
15 - rootDir: fileURLToPath(new URL("./", import.meta.url)), 16 + rootDir: fileURLToPath(new URL('./', import.meta.url)),
16 - domEnvironment: "happy-dom", // 'happy-dom' (default) or 'jsdom' 17 + domEnvironment: 'happy-dom', // 'happy-dom' (default) or 'jsdom'
17 overrides: { 18 overrides: {
18 // other Nuxt config you want to pass 19 // other Nuxt config you want to pass
19 }, 20 },
20 mock: { 21 mock: {
21 intersectionObserver: true, 22 intersectionObserver: true,
22 indexedDb: true, 23 indexedDb: true,
23 - }, 24 + }
24 }, 25 },
25 }, 26 },
26 coverage: { 27 coverage: {
27 - provider: "v8", 28 + provider: 'v8',
28 - reporter: ["text", "json", "html"], 29 + reporter: ['text', 'json', 'html'],
29 - }, 30 + }
30 }, 31 },
31 resolve: { 32 resolve: {
32 alias: { 33 alias: {
33 - "~": fileURLToPath(new URL("./", import.meta.url)), 34 + '~': fileURLToPath(new URL('./', import.meta.url)),
34 - "@": fileURLToPath(new URL("./", import.meta.url)), 35 + '@': fileURLToPath(new URL('./', import.meta.url)),
35 - }, 36 + }
36 - }, 37 + }
37 -}); 38 +})