import { z } from 'zod'; import { MaybeTimestamp } from '../../../util/timestamp'; import type { Release } from '../types'; export const PythonRelease = z .object({ /** e.g: "Python 3.9.0b1" */ name: z.string(), /** e.g: "python-390b1" */ slug: z.string(), /** Major version e.g: 3 */ version: z.number(), /** is latest major version, true for Python 2.7.18 and latest Python 3 */ is_latest: z.boolean(), is_published: z.boolean(), release_date: MaybeTimestamp, pre_release: z.boolean(), release_page: z.string().nullable(), show_on_download_page: z.boolean(), /** Changelog e.g: "https://docs.python.org/…html#python-3-9-0-beta-1" */ release_notes_url: z.string(), /** Download URL e.g: "https://www.python.org/api/v2/downloads/release/436/" */ resource_uri: z.string(), }) .transform( ({ name, release_date: releaseTimestamp, pre_release }): Release => { const version = name?.replace('Python', '').trim(); const isStable = pre_release === false; return { version, releaseTimestamp, isStable }; }, ) .array();