import { z } from 'zod/v4'; import { LooseArray } from '../../../util/schema-utils/index.ts'; import { MaybeTimestamp } from '../../../util/timestamp.ts'; import type { Release } from '../types.ts'; export const ReleasesIndex = z .object({ 'releases-index': LooseArray( z .object({ 'releases.json': z.string(), }) .transform(({ 'releases.json': releasesUrl }) => releasesUrl), ).catch([]), }) .transform(({ 'releases-index': releasesIndex }) => releasesIndex); const ReleaseBase = z.object({ 'release-date': MaybeTimestamp, 'release-notes': z.string(), }); const ReleaseDetails = z.object({ version: z.string(), }); export const DotnetSdkReleases = z .object({ releases: LooseArray( ReleaseBase.extend({ sdks: z.array(ReleaseDetails), }), ).catch([]), }) .transform(({ releases }): Release[] => releases.flatMap( ({ sdks, 'release-date': releaseTimestamp, 'release-notes': changelogUrl, }) => sdks.map(({ version }) => ({ version, releaseTimestamp, changelogUrl, })), ), ); export const DotnetRuntimeReleases = z .object({ releases: LooseArray( ReleaseBase.extend({ runtime: ReleaseDetails, }), ).catch([]), }) .transform(({ releases }): Release[] => releases.map( ({ runtime: { version }, 'release-date': releaseTimestamp, 'release-notes': changelogUrl, }) => ({ version, releaseTimestamp, changelogUrl }), ), );