From c8af6c682f49e804d63dc58a03effcec8f2ad13e Mon Sep 17 00:00:00 2001 From: Viren070 Date: Sun, 16 Nov 2025 13:38:25 +0000 Subject: [PATCH] fix(metadata/tmdb): always check title and name in translation data --- packages/core/src/metadata/tmdb.ts | 45 ++++++++---------------------- 1 file changed, 12 insertions(+), 33 deletions(-) diff --git a/packages/core/src/metadata/tmdb.ts b/packages/core/src/metadata/tmdb.ts index 985b1d73..c49d3e91 100644 --- a/packages/core/src/metadata/tmdb.ts +++ b/packages/core/src/metadata/tmdb.ts @@ -65,30 +65,17 @@ const TVAlternativeTitlesSchema = z.object({ ), }); -const BaseTranslationsSchema = z.object({ - iso_3166_1: z.string(), - iso_639_1: z.string(), - name: z.string(), - english_name: z.string(), -}); - -const TVTranslationsSchema = z.object({ +const TranslationsSchema = z.object({ id: z.number(), translations: z.array( - BaseTranslationsSchema.extend({ + z.object({ + iso_3166_1: z.string(), + iso_639_1: z.string(), + name: z.string(), + english_name: z.string(), data: z.object({ - title: z.string(), - }), - }) - ), -}); - -const MovieTranslationsSchema = z.object({ - id: z.number(), - translations: z.array( - BaseTranslationsSchema.extend({ - data: z.object({ - name: z.string(), + title: z.string().optional(), + name: z.string().optional(), }), }) ), @@ -256,18 +243,10 @@ export class TMDBMetadata { } const json = await response.json(); - - if (mediaType === 'movie') { - const data = MovieTranslationsSchema.parse(json); - return data.translations - .map((translation) => translation.data.name) - .filter(Boolean); - } else { - const data = TVTranslationsSchema.parse(json); - return data.translations - .map((translation) => translation.data.title) - .filter(Boolean); - } + const data = TranslationsSchema.parse(json); + return data.translations + .map((translation) => translation.data.title || translation.data.name) + .filter((s): s is string => Boolean(s)); } public async getMetadata(parsedId: ParsedId): Promise {