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