fix(releases-widget): improved provider parsing of missing properties (#2964)

Co-authored-by: Andre Silva <asilva01@acuitysso.com>
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
This commit is contained in:
Andre Silva
2025-05-09 18:30:46 +01:00
committed by GitHub
parent b71c5c6fc7
commit b62d47d303
3 changed files with 21 additions and 21 deletions

View File

@@ -80,7 +80,7 @@ export const Providers: ProvidersProps = {
return z return z
.object({ .object({
html_url: z.string(), html_url: z.string(),
description: z.string(), description: z.string().nullable(),
fork: z.boolean(), fork: z.boolean(),
archived: z.boolean(), archived: z.boolean(),
created_at: z.string().transform((value) => new Date(value)), created_at: z.string().transform((value) => new Date(value)),
@@ -90,7 +90,7 @@ export const Providers: ProvidersProps = {
}) })
.transform((resp) => ({ .transform((resp) => ({
projectUrl: resp.html_url, projectUrl: resp.html_url,
projectDescription: resp.description, projectDescription: resp.description ?? undefined,
isFork: resp.fork, isFork: resp.fork,
isArchived: resp.archived, isArchived: resp.archived,
createdAt: resp.created_at, createdAt: resp.created_at,
@@ -111,7 +111,7 @@ export const Providers: ProvidersProps = {
tag_name: z.string(), tag_name: z.string(),
published_at: z.string().transform((value) => new Date(value)), published_at: z.string().transform((value) => new Date(value)),
html_url: z.string(), html_url: z.string(),
body: z.string(), body: z.string().nullable(),
prerelease: z.boolean(), prerelease: z.boolean(),
}) })
.transform((tag) => ({ .transform((tag) => ({
@@ -119,7 +119,7 @@ export const Providers: ProvidersProps = {
latestRelease: tag.tag_name, latestRelease: tag.tag_name,
latestReleaseAt: tag.published_at, latestReleaseAt: tag.published_at,
releaseUrl: tag.html_url, releaseUrl: tag.html_url,
releaseDescription: tag.body, releaseDescription: tag.body ?? undefined,
isPreRelease: tag.prerelease, isPreRelease: tag.prerelease,
})), })),
) )
@@ -135,17 +135,17 @@ export const Providers: ProvidersProps = {
.object({ .object({
web_url: z.string(), web_url: z.string(),
description: z.string(), description: z.string(),
forked_from_project: z.object({ id: z.number() }).nullable(), forked_from_project: z.object({ id: z.number() }).optional(),
archived: z.boolean(), archived: z.boolean().optional(),
created_at: z.string().transform((value) => new Date(value)), created_at: z.string().transform((value) => new Date(value)),
star_count: z.number(), star_count: z.number(),
open_issues_count: z.number(), open_issues_count: z.number().optional(),
forks_count: z.number(), forks_count: z.number(),
}) })
.transform((resp) => ({ .transform((resp) => ({
projectUrl: resp.web_url, projectUrl: resp.web_url,
projectDescription: resp.description, projectDescription: resp.description,
isFork: resp.forked_from_project !== null, isFork: resp.forked_from_project !== undefined,
isArchived: resp.archived, isArchived: resp.archived,
createdAt: resp.created_at, createdAt: resp.created_at,
starsCount: resp.star_count, starsCount: resp.star_count,

View File

@@ -71,7 +71,7 @@ export const releasesRequestHandler = createCachedWidgetRequestHandler({
detailsResult = parsedDetails.data; detailsResult = parsedDetails.data;
} else { } else {
detailsResult = undefined; detailsResult = undefined;
logger.warn("Failed to parse details response", { logger.warn(`Failed to parse details response for ${input.identifier} on ${input.providerKey}`, {
provider: input.providerKey, provider: input.providerKey,
identifier: input.identifier, identifier: input.identifier,
detailsUrl, detailsUrl,

View File

@@ -253,12 +253,12 @@ const DetailsDisplay = ({ repository, toggleExpandedRepository }: DetailsDisplay
<Group gap={5}> <Group gap={5}>
<IconStar <IconStar
size={12} size={12}
color={repository.starsCount === 0 ? "var(--mantine-color-dimmed)" : "var(--mantine-color-text)"} color={!repository.starsCount ? "var(--mantine-color-dimmed)" : "var(--mantine-color-text)"}
/> />
<Text size="xs" c={repository.starsCount === 0 ? "dimmed" : ""}> <Text size="xs" c={!repository.starsCount ? "dimmed" : ""}>
{repository.starsCount === 0 {!repository.starsCount
? "-" ? "-"
: formatter.number(repository.starsCount ?? 0, { : formatter.number(repository.starsCount, {
notation: "compact", notation: "compact",
maximumFractionDigits: 1, maximumFractionDigits: 1,
})} })}
@@ -270,12 +270,12 @@ const DetailsDisplay = ({ repository, toggleExpandedRepository }: DetailsDisplay
<Group gap={5}> <Group gap={5}>
<IconGitFork <IconGitFork
size={12} size={12}
color={repository.forksCount === 0 ? "var(--mantine-color-dimmed)" : "var(--mantine-color-text)"} color={!repository.forksCount ? "var(--mantine-color-dimmed)" : "var(--mantine-color-text)"}
/> />
<Text size="xs" c={repository.forksCount === 0 ? "dimmed" : ""}> <Text size="xs" c={!repository.forksCount ? "dimmed" : ""}>
{repository.forksCount === 0 {!repository.forksCount
? "-" ? "-"
: formatter.number(repository.forksCount ?? 0, { : formatter.number(repository.forksCount, {
notation: "compact", notation: "compact",
maximumFractionDigits: 1, maximumFractionDigits: 1,
})} })}
@@ -287,12 +287,12 @@ const DetailsDisplay = ({ repository, toggleExpandedRepository }: DetailsDisplay
<Group gap={5}> <Group gap={5}>
<IconCircleDot <IconCircleDot
size={12} size={12}
color={repository.openIssues === 0 ? "var(--mantine-color-dimmed)" : "var(--mantine-color-text)"} color={!repository.openIssues ? "var(--mantine-color-dimmed)" : "var(--mantine-color-text)"}
/> />
<Text size="xs" c={repository.openIssues === 0 ? "dimmed" : ""}> <Text size="xs" c={!repository.openIssues ? "dimmed" : ""}>
{repository.openIssues === 0 {!repository.openIssues
? "-" ? "-"
: formatter.number(repository.openIssues ?? 0, { : formatter.number(repository.openIssues, {
notation: "compact", notation: "compact",
maximumFractionDigits: 1, maximumFractionDigits: 1,
})} })}