{"version":3,"sources":["../src/YTMusic.ts","../src/constants.ts","../src/types.ts","../node_modules/zod-to-json-schema/dist/esm/Options.js","../node_modules/zod-to-json-schema/dist/esm/Refs.js","../node_modules/zod-to-json-schema/dist/esm/errorMessages.js","../node_modules/zod-to-json-schema/dist/esm/parseDef.js","../node_modules/zod-to-json-schema/dist/esm/parsers/any.js","../node_modules/zod-to-json-schema/dist/esm/parsers/array.js","../node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js","../node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js","../node_modules/zod-to-json-schema/dist/esm/parsers/branded.js","../node_modules/zod-to-json-schema/dist/esm/parsers/catch.js","../node_modules/zod-to-json-schema/dist/esm/parsers/date.js","../node_modules/zod-to-json-schema/dist/esm/parsers/default.js","../node_modules/zod-to-json-schema/dist/esm/parsers/effects.js","../node_modules/zod-to-json-schema/dist/esm/parsers/enum.js","../node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js","../node_modules/zod-to-json-schema/dist/esm/parsers/literal.js","../node_modules/zod-to-json-schema/dist/esm/parsers/record.js","../node_modules/zod-to-json-schema/dist/esm/parsers/string.js","../node_modules/zod-to-json-schema/dist/esm/parsers/map.js","../node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js","../node_modules/zod-to-json-schema/dist/esm/parsers/never.js","../node_modules/zod-to-json-schema/dist/esm/parsers/null.js","../node_modules/zod-to-json-schema/dist/esm/parsers/union.js","../node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js","../node_modules/zod-to-json-schema/dist/esm/parsers/number.js","../node_modules/zod-to-json-schema/dist/esm/parsers/object.js","../node_modules/zod-to-json-schema/dist/esm/parsers/optional.js","../node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js","../node_modules/zod-to-json-schema/dist/esm/parsers/promise.js","../node_modules/zod-to-json-schema/dist/esm/parsers/set.js","../node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js","../node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js","../node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js","../node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js","../node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js","../src/utils/checkType.ts","../src/utils/traverse.ts","../src/utils/filters.ts","../src/parsers/PlaylistParser.ts","../src/parsers/Parser.ts","../src/parsers/SongParser.ts","../src/parsers/AlbumParser.ts","../src/parsers/VideoParser.ts","../src/parsers/ArtistParser.ts","../src/parsers/SearchParser.ts","../src/index.ts"],"sourcesContent":["import axios, { AxiosInstance } from \"axios\"\nimport { Cookie, CookieJar } from \"tough-cookie\"\n\nimport { FE_MUSIC_HOME } from \"./constants\"\nimport AlbumParser from \"./parsers/AlbumParser\"\nimport ArtistParser from \"./parsers/ArtistParser\"\nimport Parser from \"./parsers/Parser\"\nimport PlaylistParser from \"./parsers/PlaylistParser\"\nimport SearchParser from \"./parsers/SearchParser\"\nimport SongParser from \"./parsers/SongParser\"\nimport VideoParser from \"./parsers/VideoParser\"\nimport {\n\tAlbumDetailed,\n\tAlbumFull,\n\tArtistDetailed,\n\tArtistFull,\n\tHomeSection,\n\tPlaylistDetailed,\n\tPlaylistFull,\n\tSearchResult,\n\tSongDetailed,\n\tSongFull,\n\tUpNextsDetails,\n\tVideoDetailed,\n\tVideoFull,\n} from \"./types\"\nimport { traverse, traverseList, traverseString } from \"./utils/traverse\"\n\naxios.defaults.headers.common[\"Accept-Encoding\"] = \"gzip\"\n\nexport default class YTMusic {\n\tprivate cookiejar: CookieJar\n\tprivate config?: Record<string, string>\n\tprivate client: AxiosInstance\n\n\t/**\n\t * Creates an instance of YTMusic\n\t * Make sure to call initialize()\n\t */\n\tpublic constructor() {\n\t\tthis.cookiejar = new CookieJar()\n\t\tthis.config = {}\n\t\tthis.client = axios.create({\n\t\t\tbaseURL: \"https://music.youtube.com/\",\n\t\t\theaders: {\n\t\t\t\t\"User-Agent\":\n\t\t\t\t\t\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36\",\n\t\t\t\t\"Accept-Language\": \"en-US,en;q=0.5\",\n\t\t\t},\n\t\t\twithCredentials: true,\n\t\t})\n\n\t\tthis.client.interceptors.request.use(req => {\n\t\t\tif (req.baseURL) {\n\t\t\t\tconst cookieString = this.cookiejar.getCookieStringSync(req.baseURL)\n\t\t\t\tif (cookieString) {\n\t\t\t\t\treq.headers[\"cookie\"] = cookieString\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn req\n\t\t})\n\n\t\tthis.client.interceptors.response.use(res => {\n\t\t\tif (res.headers && res.config.baseURL) {\n\t\t\t\tconst cookieStrings = res.headers[\"set-cookie\"] || []\n\t\t\t\tfor (const cookieString of cookieStrings) {\n\t\t\t\t\tconst cookie = Cookie.parse(cookieString)\n\t\t\t\t\tif (cookie) {\n\t\t\t\t\t\tthis.cookiejar.setCookieSync(cookie, res.config.baseURL)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn res\n\t\t})\n\t}\n\n\t/**\n\t * Initializes the API\n\t */\n\tpublic async initialize(options?: {\n\t\tcookies?: string\n\t\tGL?: string\n\t\tHL?: string\n\t}) {\n\t\tconst { cookies, GL, HL } = options ?? {}\n\n\t\tif (cookies) {\n\t\t\tfor (const cookieString of cookies.split(\"; \")) {\n\t\t\t\tconst cookie = Cookie.parse(`${cookieString}`)\n\t\t\t\tif (!cookie) return\n\n\t\t\t\tthis.cookiejar.setCookieSync(cookie, \"https://www.youtube.com/\")\n\t\t\t}\n\t\t}\n\n\t\tconst html = (await this.client.get(\"/\")).data as string\n\t\tconst setConfigs = html.match(/ytcfg\\.set\\(.*?\\);/) || []\n\n\t\tconst configs = setConfigs\n\t\t\t.map(c => c.slice(10, -2))\n\t\t\t.map(s => {\n\t\t\t\ttry {\n\t\t\t\t\treturn JSON.parse(s)\n\t\t\t\t} catch {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(j => !!j)\n\n\t\tfor (const config of configs) {\n\t\t\tthis.config = {\n\t\t\t\t...this.config,\n\t\t\t\t...config,\n\t\t\t}\n\t\t}\n\n\t\tif (!this.config) {\n\t\t\tthis.config = {}\n\t\t}\n\n\t\tif (GL) this.config.GL = GL\n\t\tif (HL) this.config.HL = HL\n\n\t\treturn this\n\t}\n\n\t/**\n\t * Constructs a basic YouTube Music API request with all essential headers\n\t * and body parameters needed to make the API work\n\t *\n\t * @param endpoint Endpoint for the request\n\t * @param body Body\n\t * @param query Search params\n\t * @returns Raw response from YouTube Music API which needs to be parsed\n\t */\n\tprivate async constructRequest(\n\t\tendpoint: string,\n\t\tbody: Record<string, any> = {},\n\t\tquery: Record<string, string> = {},\n\t) {\n\t\tif (!this.config) {\n\t\t\tthrow new Error(\"API not initialized. Make sure to call the initialize() method first\")\n\t\t}\n\n\t\tconst headers: Record<string, any> = {\n\t\t\t...this.client.defaults.headers,\n\t\t\t\"x-origin\": this.client.defaults.baseURL,\n\t\t\t\"X-Goog-Visitor-Id\": this.config.VISITOR_DATA || \"\",\n\t\t\t\"X-YouTube-Client-Name\": this.config.INNERTUBE_CONTEXT_CLIENT_NAME,\n\t\t\t\"X-YouTube-Client-Version\": this.config.INNERTUBE_CLIENT_VERSION,\n\t\t\t\"X-YouTube-Device\": this.config.DEVICE,\n\t\t\t\"X-YouTube-Page-CL\": this.config.PAGE_CL,\n\t\t\t\"X-YouTube-Page-Label\": this.config.PAGE_BUILD_LABEL,\n\t\t\t\"X-YouTube-Utc-Offset\": String(-new Date().getTimezoneOffset()),\n\t\t\t\"X-YouTube-Time-Zone\": new Intl.DateTimeFormat().resolvedOptions().timeZone,\n\t\t}\n\n\t\tconst searchParams = new URLSearchParams({\n\t\t\t...query,\n\t\t\talt: \"json\",\n\t\t\tkey: this.config.INNERTUBE_API_KEY!,\n\t\t})\n\n\t\tconst res = await this.client.post(\n\t\t\t`youtubei/${this.config.INNERTUBE_API_VERSION}/${endpoint}?${searchParams.toString()}`,\n\t\t\t{\n\t\t\t\tcontext: {\n\t\t\t\t\tcapabilities: {},\n\t\t\t\t\tclient: {\n\t\t\t\t\t\tclientName: this.config.INNERTUBE_CLIENT_NAME,\n\t\t\t\t\t\tclientVersion: this.config.INNERTUBE_CLIENT_VERSION,\n\t\t\t\t\t\texperimentIds: [],\n\t\t\t\t\t\texperimentsToken: \"\",\n\t\t\t\t\t\tgl: this.config.GL,\n\t\t\t\t\t\thl: this.config.HL,\n\t\t\t\t\t\tlocationInfo: {\n\t\t\t\t\t\t\tlocationPermissionAuthorizationStatus:\n\t\t\t\t\t\t\t\t\"LOCATION_PERMISSION_AUTHORIZATION_STATUS_UNSUPPORTED\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmusicAppInfo: {\n\t\t\t\t\t\t\tmusicActivityMasterSwitch: \"MUSIC_ACTIVITY_MASTER_SWITCH_INDETERMINATE\",\n\t\t\t\t\t\t\tmusicLocationMasterSwitch: \"MUSIC_LOCATION_MASTER_SWITCH_INDETERMINATE\",\n\t\t\t\t\t\t\tpwaInstallabilityStatus: \"PWA_INSTALLABILITY_STATUS_UNKNOWN\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tutcOffsetMinutes: -new Date().getTimezoneOffset(),\n\t\t\t\t\t},\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tinternalExperimentFlags: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: \"force_music_enable_outertube_tastebuilder_browse\",\n\t\t\t\t\t\t\t\tvalue: \"true\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: \"force_music_enable_outertube_playlist_detail_browse\",\n\t\t\t\t\t\t\t\tvalue: \"true\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: \"force_music_enable_outertube_search_suggestions\",\n\t\t\t\t\t\t\t\tvalue: \"true\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tsessionIndex: {},\n\t\t\t\t\t},\n\t\t\t\t\tuser: {\n\t\t\t\t\t\tenableSafetyMode: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t...body,\n\t\t\t},\n\t\t\t{\n\t\t\t\tresponseType: \"json\",\n\t\t\t\theaders,\n\t\t\t},\n\t\t)\n\n\t\treturn \"responseContext\" in res.data ? res.data : res\n\t}\n\n\t/**\n\t * Get a list of search suggestiong based on the query\n\t *\n\t * @param query Query string\n\t * @returns Search suggestions\n\t */\n\tpublic async getSearchSuggestions(query: string): Promise<string[]> {\n\t\treturn traverseList(\n\t\t\tawait this.constructRequest(\"music/get_search_suggestions\", {\n\t\t\t\tinput: query,\n\t\t\t}),\n\t\t\t\"query\",\n\t\t)\n\t}\n\n\t/**\n\t * Searches YouTube Music API for results\n\t *\n\t * @param query Query string\n\t */\n\tpublic async search(query: string): Promise<SearchResult[]> {\n\t\tconst searchData = await this.constructRequest(\"search\", {\n\t\t\tquery,\n\t\t\tparams: null,\n\t\t})\n\n\t\treturn traverseList(searchData, \"musicResponsiveListItemRenderer\")\n\t\t\t.map(SearchParser.parse)\n\t\t\t.filter(Boolean) as SearchResult[]\n\t}\n\n\t/**\n\t * Searches YouTube Music API for songs\n\t *\n\t * @param query Query string\n\t */\n\tpublic async searchSongs(query: string): Promise<SongDetailed[]> {\n\t\tconst searchData = await this.constructRequest(\"search\", {\n\t\t\tquery,\n\t\t\tparams: \"Eg-KAQwIARAAGAAgACgAMABqChAEEAMQCRAFEAo%3D\",\n\t\t})\n\n\t\treturn traverseList(searchData, \"musicResponsiveListItemRenderer\").map(\n\t\t\tSongParser.parseSearchResult,\n\t\t)\n\t}\n\n\t/**\n\t * Searches YouTube Music API for videos\n\t *\n\t * @param query Query string\n\t */\n\tpublic async searchVideos(query: string): Promise<VideoDetailed[]> {\n\t\tconst searchData = await this.constructRequest(\"search\", {\n\t\t\tquery,\n\t\t\tparams: \"Eg-KAQwIABABGAAgACgAMABqChAEEAMQCRAFEAo%3D\",\n\t\t})\n\n\t\treturn traverseList(searchData, \"musicResponsiveListItemRenderer\").map(\n\t\t\tVideoParser.parseSearchResult,\n\t\t)\n\t}\n\n\t/**\n\t * Searches YouTube Music API for artists\n\t *\n\t * @param query Query string\n\t */\n\tpublic async searchArtists(query: string): Promise<ArtistDetailed[]> {\n\t\tconst searchData = await this.constructRequest(\"search\", {\n\t\t\tquery,\n\t\t\tparams: \"Eg-KAQwIABAAGAAgASgAMABqChAEEAMQCRAFEAo%3D\",\n\t\t})\n\n\t\treturn traverseList(searchData, \"musicResponsiveListItemRenderer\").map(\n\t\t\tArtistParser.parseSearchResult,\n\t\t)\n\t}\n\n\t/**\n\t * Searches YouTube Music API for albums\n\t *\n\t * @param query Query string\n\t */\n\tpublic async searchAlbums(query: string): Promise<AlbumDetailed[]> {\n\t\tconst searchData = await this.constructRequest(\"search\", {\n\t\t\tquery,\n\t\t\tparams: \"Eg-KAQwIABAAGAEgACgAMABqChAEEAMQCRAFEAo%3D\",\n\t\t})\n\n\t\treturn traverseList(searchData, \"musicResponsiveListItemRenderer\").map(\n\t\t\tAlbumParser.parseSearchResult,\n\t\t)\n\t}\n\n\t/**\n\t * Searches YouTube Music API for playlists\n\t *\n\t * @param query Query string\n\t */\n\tpublic async searchPlaylists(query: string): Promise<PlaylistDetailed[]> {\n\t\tconst searchData = await this.constructRequest(\"search\", {\n\t\t\tquery,\n\t\t\tparams: \"Eg-KAQwIABAAGAAgACgBMABqChAEEAMQCRAFEAo%3D\",\n\t\t})\n\n\t\treturn traverseList(searchData, \"musicResponsiveListItemRenderer\").map(\n\t\t\tPlaylistParser.parseSearchResult,\n\t\t)\n\t}\n\n\t/**\n\t * Get all possible information of a Song\n\t *\n\t * @param videoId Video ID\n\t * @returns Song Data\n\t */\n\tpublic async getSong(videoId: string): Promise<SongFull> {\n\t\tif (!videoId.match(/^[a-zA-Z0-9-_]{11}$/)) throw new Error(\"Invalid videoId\")\n\t\tconst data = await this.constructRequest(\"player\", { videoId })\n\n\t\tconst song = SongParser.parse(data)\n\t\tif (song.videoId !== videoId) throw new Error(\"Invalid videoId\")\n\t\treturn song\n\t}\n\t\n  /**\n   * Get all possible information of a Up Nexts Song\n   *\n   * @param videoId Video ID\n   * @returns Up Nexts Data\n   */\n  \n  async getUpNexts(videoId: string): Promise<UpNextsDetails[]> {\n    if (!videoId.match(/^[a-zA-Z0-9-_]{11}$/)) throw new Error(\"Invalid videoId\");\n  \n    const data = await this.constructRequest(\"next\", {  \n      videoId, \n      playlistId: `RDAMVM${videoId}`, \n      isAudioOnly: true \n    });\n  \n    const tabs = data?.contents?.singleColumnMusicWatchNextResultsRenderer?.tabbedRenderer?.watchNextTabbedResultsRenderer?.tabs[0]?.tabRenderer?.content?.musicQueueRenderer?.content?.playlistPanelRenderer?.contents;\n  \n    if (!tabs) throw new Error(\"Invalid response structure\");\n  \n\treturn tabs.slice(1).map((item: any) => {\n      const { videoId, title, shortBylineText, lengthText, thumbnail } = item.playlistPanelVideoRenderer;\n      return {\n\t\ttype: \"SONG\",\n        videoId,\n        title: title?.runs[0]?.text || \"Unknown\",\n        artists: shortBylineText?.runs[0]?.text || \"Unknown\",\n        duration: lengthText?.runs[0]?.text || \"Unknown\",\n        thumbnail: thumbnail?.thumbnails.at(-1)?.url || \"Unknown\",\n      };\n    });\n  }\n\n\t/**\n\t * Get all possible information of a Video\n\t *\n\t * @param videoId Video ID\n\t * @returns Video Data\n\t */\n\tpublic async getVideo(videoId: string): Promise<VideoFull> {\n\t\tif (!videoId.match(/^[a-zA-Z0-9-_]{11}$/)) throw new Error(\"Invalid videoId\")\n\t\tconst data = await this.constructRequest(\"player\", { videoId })\n\n\t\tconst video = VideoParser.parse(data)\n\t\tif (video.videoId !== videoId) throw new Error(\"Invalid videoId\")\n\t\treturn video\n\t}\n\n\t/**\n\t * Get lyrics of a specific Song\n\t *\n\t * @param videoId Video ID\n\t * @returns Lyrics\n\t */\n\tpublic async getLyrics(videoId: string) {\n\t\tif (!videoId.match(/^[a-zA-Z0-9-_]{11}$/)) throw new Error(\"Invalid videoId\")\n\t\tconst data = await this.constructRequest(\"next\", { videoId })\n\t\tconst browseId = traverse(traverseList(data, \"tabs\", \"tabRenderer\")[1], \"browseId\")\n\n\t\tconst lyricsData = await this.constructRequest(\"browse\", { browseId })\n\t\tconst lyrics = traverseString(lyricsData, \"description\", \"runs\", \"text\")\n\n\t\treturn lyrics\n\t\t\t? lyrics\n\t\t\t\t\t.replaceAll(\"\\r\", \"\")\n\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t.filter(v => !!v)\n\t\t\t: null\n\t}\n\n\t/**\n\t * Get all possible information of an Artist\n\t *\n\t * @param artistId Artist ID\n\t * @returns Artist Data\n\t */\n\tpublic async getArtist(artistId: string): Promise<ArtistFull> {\n\t\tconst data = await this.constructRequest(\"browse\", {\n\t\t\tbrowseId: artistId,\n\t\t})\n\n\t\treturn ArtistParser.parse(data, artistId)\n\t}\n\n\t/**\n\t * Get all of Artist's Songs\n\t *\n\t * @param artistId Artist ID\n\t * @returns Artist's Songs\n\t */\n\tpublic async getArtistSongs(artistId: string): Promise<SongDetailed[]> {\n\t\tconst artistData = await this.constructRequest(\"browse\", {\n\t\t\tbrowseId: artistId,\n\t\t})\n\t\tconst browseToken = traverse(artistData, \"musicShelfRenderer\", \"title\", \"browseId\")\n\n\t\tif (browseToken instanceof Array) return []\n\n\t\tconst songsData = await this.constructRequest(\"browse\", {\n\t\t\tbrowseId: browseToken,\n\t\t})\n\t\tconst continueToken = traverse(songsData, \"continuation\")\n\t\tconst moreSongsData = await this.constructRequest(\n\t\t\t\"browse\",\n\t\t\t{},\n\t\t\t{ continuation: continueToken },\n\t\t)\n\n\t\treturn [\n\t\t\t...traverseList(songsData, \"musicResponsiveListItemRenderer\"),\n\t\t\t...traverseList(moreSongsData, \"musicResponsiveListItemRenderer\"),\n\t\t].map(s =>\n\t\t\tSongParser.parseArtistSong(s, {\n\t\t\t\tartistId,\n\t\t\t\tname: traverseString(artistData, \"header\", \"title\", \"text\"),\n\t\t\t}),\n\t\t)\n\t}\n\n\t/**\n\t * Get all of Artist's Albums\n\t *\n\t * @param artistId Artist ID\n\t * @returns Artist's Albums\n\t */\n\tpublic async getArtistAlbums(artistId: string): Promise<AlbumDetailed[]> {\n\t\tconst artistData = await this.constructRequest(\"browse\", {\n\t\t\tbrowseId: artistId,\n\t\t})\n\t\tconst artistAlbumsData = traverseList(artistData, \"musicCarouselShelfRenderer\")[0]\n\t\tconst browseBody = traverse(artistAlbumsData, \"moreContentButton\", \"browseEndpoint\")\n\n\t\tconst albumsData = await this.constructRequest(\"browse\", browseBody)\n\n\t\treturn traverseList(albumsData, \"musicTwoRowItemRenderer\").map(item =>\n\t\t\tAlbumParser.parseArtistAlbum(item, {\n\t\t\t\tartistId,\n\t\t\t\tname: traverseString(albumsData, \"header\", \"runs\", \"text\"),\n\t\t\t}),\n\t\t)\n\t}\n\n\t/**\n\t * Get all possible information of an Album\n\t *\n\t * @param albumId Album ID\n\t * @returns Album Data\n\t */\n\tpublic async getAlbum(albumId: string): Promise<AlbumFull> {\n\t\tconst data = await this.constructRequest(\"browse\", {\n\t\t\tbrowseId: albumId,\n\t\t})\n\n\t\treturn AlbumParser.parse(data, albumId)\n\t}\n\n\t/**\n\t * Get all possible information of a Playlist except the tracks\n\t *\n\t * @param playlistId Playlist ID\n\t * @returns Playlist Data\n\t */\n\tpublic async getPlaylist(playlistId: string): Promise<PlaylistFull> {\n\t\tif (playlistId.startsWith(\"PL\")) playlistId = \"VL\" + playlistId\n\t\tconst data = await this.constructRequest(\"browse\", {\n\t\t\tbrowseId: playlistId,\n\t\t})\n\n\t\treturn PlaylistParser.parse(data, playlistId)\n\t}\n\n\t/**\n\t * Get all videos in a Playlist\n\t *\n\t * @param playlistId Playlist ID\n\t * @returns Playlist's Videos\n\t */\n\tpublic async getPlaylistVideos(playlistId: string): Promise<VideoDetailed[]> {\n\t\tif (playlistId.startsWith(\"PL\")) playlistId = \"VL\" + playlistId\n\t\tconst playlistData = await this.constructRequest(\"browse\", {\n\t\t\tbrowseId: playlistId,\n\t\t})\n\n\t\tconst songs = traverseList(\n\t\t\tplaylistData,\n\t\t\t\"musicPlaylistShelfRenderer\",\n\t\t\t\"musicResponsiveListItemRenderer\",\n\t\t)\n\t\tlet continuation = traverse(playlistData, \"continuation\")\n\t\t// Sometimes it returns array, dunno why\n\t\tif (continuation instanceof Array) {\n\t\t\tcontinuation = continuation[0]\n\t\t}\n\n\t\twhile (!(continuation instanceof Array)) {\n\t\t\tconst songsData = await this.constructRequest(\"browse\", {}, { continuation })\n\t\t\tsongs.push(...traverseList(songsData, \"musicResponsiveListItemRenderer\"))\n\t\t\tcontinuation = traverse(songsData, \"continuation\")\n\t\t}\n\n\t\treturn songs.map(VideoParser.parsePlaylistVideo).filter((video): video is VideoDetailed => video !== undefined)\n\t}\n\n\t/**\n\t * Get sections for the home page.\n\t *\n\t * @returns Mixed HomeSection\n\t */\n\tpublic async getHomeSections(): Promise<HomeSection[]> {\n\t\tconst data = await this.constructRequest(\"browse\", {\n\t\t\tbrowseId: FE_MUSIC_HOME,\n\t\t})\n\n\t\tconst sections = traverseList(\"sectionListRenderer\", \"contents\")\n\t\tlet continuation = traverseString(data, \"continuation\")\n\t\twhile (continuation) {\n\t\t\tconst data = await this.constructRequest(\"browse\", {}, { continuation })\n\t\t\tsections.push(...traverseList(data, \"sectionListContinuation\", \"contents\"))\n\t\t\tcontinuation = traverseString(data, \"continuation\")\n\t\t}\n\n\t\treturn sections.map(Parser.parseHomeSection)\n\t}\n}\n","export enum PageType {\n\tMUSIC_PAGE_TYPE_ALBUM = \"MUSIC_PAGE_TYPE_ALBUM\",\n\tMUSIC_PAGE_TYPE_PLAYLIST = \"MUSIC_PAGE_TYPE_PLAYLIST\",\n\tMUSIC_VIDEO_TYPE_OMV = \"MUSIC_VIDEO_TYPE_OMV\",\n}\n\nexport const FE_MUSIC_HOME = \"FEmusic_home\"\n","import { z } from \"zod\"\n\nexport type ThumbnailFull = z.infer<typeof ThumbnailFull>\nexport const ThumbnailFull = z\n\t.object({\n\t\turl: z.string(),\n\t\twidth: z.number(),\n\t\theight: z.number(),\n\t})\n\t.strict()\n\nexport type ArtistBasic = z.infer<typeof ArtistBasic>\nexport const ArtistBasic = z\n\t.object({\n\t\tartistId: z.nullable(z.string()),\n\t\tname: z.string(),\n\t})\n\t.strict()\n\nexport type AlbumBasic = z.infer<typeof AlbumBasic>\nexport const AlbumBasic = z\n\t.object({\n\t\talbumId: z.string(),\n\t\tname: z.string(),\n\t})\n\t.strict()\n\nexport type SongDetailed = z.infer<typeof SongDetailed>\nexport const SongDetailed = z\n\t.object({\n\t\ttype: z.literal(\"SONG\"),\n\t\tvideoId: z.string(),\n\t\tname: z.string(),\n\t\tartist: ArtistBasic,\n\t\talbum: z.nullable(AlbumBasic),\n\t\tduration: z.nullable(z.number()),\n\t\tthumbnails: z.array(ThumbnailFull),\n\t})\n\t.strict()\n\nexport type VideoDetailed = z.infer<typeof VideoDetailed>\nexport const VideoDetailed = z\n\t.object({\n\t\ttype: z.literal(\"VIDEO\"),\n\t\tvideoId: z.string(),\n\t\tname: z.string(),\n\t\tartist: ArtistBasic,\n\t\tduration: z.nullable(z.number()),\n\t\tthumbnails: z.array(ThumbnailFull),\n\t})\n\t.strict()\n\nexport type ArtistDetailed = z.infer<typeof ArtistDetailed>\nexport const ArtistDetailed = z\n\t.object({\n\t\tartistId: z.string(),\n\t\tname: z.string(),\n\t\ttype: z.literal(\"ARTIST\"),\n\t\tthumbnails: z.array(ThumbnailFull),\n\t})\n\t.strict()\n\nexport type AlbumDetailed = z.infer<typeof AlbumDetailed>\nexport const AlbumDetailed = z\n\t.object({\n\t\ttype: z.literal(\"ALBUM\"),\n\t\talbumId: z.string(),\n\t\tplaylistId: z.string(),\n\t\tname: z.string(),\n\t\tartist: ArtistBasic,\n\t\tyear: z.nullable(z.number()),\n\t\tthumbnails: z.array(ThumbnailFull),\n\t})\n\t.strict()\n\nexport type PlaylistDetailed = z.infer<typeof PlaylistDetailed>\nexport const PlaylistDetailed = z\n\t.object({\n\t\ttype: z.literal(\"PLAYLIST\"),\n\t\tplaylistId: z.string(),\n\t\tname: z.string(),\n\t\tartist: ArtistBasic,\n\t\tthumbnails: z.array(ThumbnailFull),\n\t})\n\t.strict()\n\nexport type SongFull = z.infer<typeof SongFull>\nexport const SongFull = z\n\t.object({\n\t\ttype: z.literal(\"SONG\"),\n\t\tvideoId: z.string(),\n\t\tname: z.string(),\n\t\tartist: ArtistBasic,\n\t\tduration: z.number(),\n\t\tthumbnails: z.array(ThumbnailFull),\n\t\tformats: z.array(z.any()),\n\t\tadaptiveFormats: z.array(z.any()),\n\t})\n\t.strict()\n\nexport type VideoFull = z.infer<typeof VideoFull>\nexport const VideoFull = z\n\t.object({\n\t\ttype: z.literal(\"VIDEO\"),\n\t\tvideoId: z.string(),\n\t\tname: z.string(),\n\t\tartist: ArtistBasic,\n\t\tduration: z.number(),\n\t\tthumbnails: z.array(ThumbnailFull),\n\t\tunlisted: z.boolean(),\n\t\tfamilySafe: z.boolean(),\n\t\tpaid: z.boolean(),\n\t\ttags: z.array(z.string()),\n\t})\n\t.strict()\n\nexport type UpNextsDetails = z.infer<typeof UpNextsDetails>\nexport const UpNextsDetails = z\n\t\t.object({\n\t\ttype: z.literal(\"SONG\"),\n\t\tvideoId: z.string(),\n\t\ttitle: z.string(),\n\t\tartists: ArtistBasic,\n\t\tduration: z.number(),\n\t\tthumbnails: z.array(ThumbnailFull),\n\t\t})\n\t\t.strict()\n\t\t\nexport type ArtistFull = z.infer<typeof ArtistFull>\nexport const ArtistFull = z\n\t.object({\n\t\tartistId: z.string(),\n\t\tname: z.string(),\n\t\ttype: z.literal(\"ARTIST\"),\n\t\tthumbnails: z.array(ThumbnailFull),\n\t\ttopSongs: z.array(SongDetailed),\n\t\ttopAlbums: z.array(AlbumDetailed),\n\t\ttopSingles: z.array(AlbumDetailed),\n\t\ttopVideos: z.array(VideoDetailed),\n\t\tfeaturedOn: z.array(PlaylistDetailed),\n\t\tsimilarArtists: z.array(ArtistDetailed),\n\t})\n\t.strict()\n\nexport type AlbumFull = z.infer<typeof AlbumFull>\nexport const AlbumFull = z\n\t.object({\n\t\ttype: z.literal(\"ALBUM\"),\n\t\talbumId: z.string(),\n\t\tplaylistId: z.string(),\n\t\tname: z.string(),\n\t\tartist: ArtistBasic,\n\t\tyear: z.nullable(z.number()),\n\t\tthumbnails: z.array(ThumbnailFull),\n\t\tsongs: z.array(SongDetailed),\n\t})\n\t.strict()\n\nexport type PlaylistFull = z.infer<typeof PlaylistFull>\nexport const PlaylistFull = z\n\t.object({\n\t\ttype: z.literal(\"PLAYLIST\"),\n\t\tplaylistId: z.string(),\n\t\tname: z.string(),\n\t\tartist: ArtistBasic,\n\t\tvideoCount: z.number(),\n\t\tthumbnails: z.array(ThumbnailFull),\n\t})\n\t.strict()\n\nexport type SearchResult = z.infer<typeof SearchResult>\nexport const SearchResult = z.discriminatedUnion(\"type\", [\n\tSongDetailed,\n\tVideoDetailed,\n\tAlbumDetailed,\n\tArtistDetailed,\n\tPlaylistDetailed,\n])\n\nexport type HomeSection = z.infer<typeof HomeSection>\nexport const HomeSection = z\n\t.object({\n\t\ttitle: z.string(),\n\t\tcontents: z.array(z.union([AlbumDetailed, PlaylistDetailed, SongDetailed])),\n\t})\n\t.strict()\n","export const ignoreOverride = Symbol(\"Let zodToJsonSchema decide on which parser to use\");\nexport const defaultOptions = {\n    name: undefined,\n    $refStrategy: \"root\",\n    basePath: [\"#\"],\n    effectStrategy: \"input\",\n    pipeStrategy: \"all\",\n    dateStrategy: \"format:date-time\",\n    mapStrategy: \"entries\",\n    removeAdditionalStrategy: \"passthrough\",\n    definitionPath: \"definitions\",\n    target: \"jsonSchema7\",\n    strictUnions: false,\n    definitions: {},\n    errorMessages: false,\n    markdownDescription: false,\n    patternStrategy: \"escape\",\n    applyRegexFlags: false,\n    emailStrategy: \"format:email\",\n    base64Strategy: \"contentEncoding:base64\",\n    nameStrategy: \"ref\"\n};\nexport const getDefaultOptions = (options) => (typeof options === \"string\"\n    ? {\n        ...defaultOptions,\n        name: options,\n    }\n    : {\n        ...defaultOptions,\n        ...options,\n    });\n","import { getDefaultOptions } from \"./Options.js\";\nexport const getRefs = (options) => {\n    const _options = getDefaultOptions(options);\n    const currentPath = _options.name !== undefined\n        ? [..._options.basePath, _options.definitionPath, _options.name]\n        : _options.basePath;\n    return {\n        ..._options,\n        currentPath: currentPath,\n        propertyPath: undefined,\n        seen: new Map(Object.entries(_options.definitions).map(([name, def]) => [\n            def._def,\n            {\n                def: def._def,\n                path: [..._options.basePath, _options.definitionPath, name],\n                // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n                jsonSchema: undefined,\n            },\n        ])),\n    };\n};\n","export function addErrorMessage(res, key, errorMessage, refs) {\n    if (!refs?.errorMessages)\n        return;\n    if (errorMessage) {\n        res.errorMessage = {\n            ...res.errorMessage,\n            [key]: errorMessage,\n        };\n    }\n}\nexport function setResponseValueAndErrors(res, key, value, errorMessage, refs) {\n    res[key] = value;\n    addErrorMessage(res, key, errorMessage, refs);\n}\n","import { ZodFirstPartyTypeKind } from \"zod\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nimport { parseArrayDef } from \"./parsers/array.js\";\nimport { parseBigintDef } from \"./parsers/bigint.js\";\nimport { parseBooleanDef } from \"./parsers/boolean.js\";\nimport { parseBrandedDef } from \"./parsers/branded.js\";\nimport { parseCatchDef } from \"./parsers/catch.js\";\nimport { parseDateDef } from \"./parsers/date.js\";\nimport { parseDefaultDef } from \"./parsers/default.js\";\nimport { parseEffectsDef } from \"./parsers/effects.js\";\nimport { parseEnumDef } from \"./parsers/enum.js\";\nimport { parseIntersectionDef, } from \"./parsers/intersection.js\";\nimport { parseLiteralDef } from \"./parsers/literal.js\";\nimport { parseMapDef } from \"./parsers/map.js\";\nimport { parseNativeEnumDef, } from \"./parsers/nativeEnum.js\";\nimport { parseNeverDef } from \"./parsers/never.js\";\nimport { parseNullDef } from \"./parsers/null.js\";\nimport { parseNullableDef, } from \"./parsers/nullable.js\";\nimport { parseNumberDef } from \"./parsers/number.js\";\nimport { parseObjectDef } from \"./parsers/object.js\";\nimport { parseOptionalDef } from \"./parsers/optional.js\";\nimport { parsePipelineDef } from \"./parsers/pipeline.js\";\nimport { parsePromiseDef } from \"./parsers/promise.js\";\nimport { parseRecordDef } from \"./parsers/record.js\";\nimport { parseSetDef } from \"./parsers/set.js\";\nimport { parseStringDef } from \"./parsers/string.js\";\nimport { parseTupleDef } from \"./parsers/tuple.js\";\nimport { parseUndefinedDef, } from \"./parsers/undefined.js\";\nimport { parseUnionDef } from \"./parsers/union.js\";\nimport { parseUnknownDef } from \"./parsers/unknown.js\";\nimport { parseReadonlyDef } from \"./parsers/readonly.js\";\nimport { ignoreOverride } from \"./Options.js\";\nexport function parseDef(def, refs, forceResolution = false) {\n    const seenItem = refs.seen.get(def);\n    if (refs.override) {\n        const overrideResult = refs.override?.(def, refs, seenItem, forceResolution);\n        if (overrideResult !== ignoreOverride) {\n            return overrideResult;\n        }\n    }\n    if (seenItem && !forceResolution) {\n        const seenSchema = get$ref(seenItem, refs);\n        if (seenSchema !== undefined) {\n            return seenSchema;\n        }\n    }\n    const newItem = { def, path: refs.currentPath, jsonSchema: undefined };\n    refs.seen.set(def, newItem);\n    const jsonSchema = selectParser(def, def.typeName, refs);\n    if (jsonSchema) {\n        addMeta(def, refs, jsonSchema);\n    }\n    newItem.jsonSchema = jsonSchema;\n    return jsonSchema;\n}\nconst get$ref = (item, refs) => {\n    switch (refs.$refStrategy) {\n        case \"root\":\n            return { $ref: item.path.join(\"/\") };\n        case \"relative\":\n            return { $ref: getRelativePath(refs.currentPath, item.path) };\n        case \"none\":\n        case \"seen\": {\n            if (item.path.length < refs.currentPath.length &&\n                item.path.every((value, index) => refs.currentPath[index] === value)) {\n                console.warn(`Recursive reference detected at ${refs.currentPath.join(\"/\")}! Defaulting to any`);\n                return {};\n            }\n            return refs.$refStrategy === \"seen\" ? {} : undefined;\n        }\n    }\n};\nconst getRelativePath = (pathA, pathB) => {\n    let i = 0;\n    for (; i < pathA.length && i < pathB.length; i++) {\n        if (pathA[i] !== pathB[i])\n            break;\n    }\n    return [(pathA.length - i).toString(), ...pathB.slice(i)].join(\"/\");\n};\nconst selectParser = (def, typeName, refs) => {\n    switch (typeName) {\n        case ZodFirstPartyTypeKind.ZodString:\n            return parseStringDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodNumber:\n            return parseNumberDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodObject:\n            return parseObjectDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBigInt:\n            return parseBigintDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBoolean:\n            return parseBooleanDef();\n        case ZodFirstPartyTypeKind.ZodDate:\n            return parseDateDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodUndefined:\n            return parseUndefinedDef();\n        case ZodFirstPartyTypeKind.ZodNull:\n            return parseNullDef(refs);\n        case ZodFirstPartyTypeKind.ZodArray:\n            return parseArrayDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodUnion:\n        case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n            return parseUnionDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodIntersection:\n            return parseIntersectionDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodTuple:\n            return parseTupleDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodRecord:\n            return parseRecordDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodLiteral:\n            return parseLiteralDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodEnum:\n            return parseEnumDef(def);\n        case ZodFirstPartyTypeKind.ZodNativeEnum:\n            return parseNativeEnumDef(def);\n        case ZodFirstPartyTypeKind.ZodNullable:\n            return parseNullableDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodOptional:\n            return parseOptionalDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodMap:\n            return parseMapDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodSet:\n            return parseSetDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodLazy:\n            return parseDef(def.getter()._def, refs);\n        case ZodFirstPartyTypeKind.ZodPromise:\n            return parsePromiseDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodNaN:\n        case ZodFirstPartyTypeKind.ZodNever:\n            return parseNeverDef();\n        case ZodFirstPartyTypeKind.ZodEffects:\n            return parseEffectsDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodAny:\n            return parseAnyDef();\n        case ZodFirstPartyTypeKind.ZodUnknown:\n            return parseUnknownDef();\n        case ZodFirstPartyTypeKind.ZodDefault:\n            return parseDefaultDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBranded:\n            return parseBrandedDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodReadonly:\n            return parseReadonlyDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodCatch:\n            return parseCatchDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodPipeline:\n            return parsePipelineDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodFunction:\n        case ZodFirstPartyTypeKind.ZodVoid:\n        case ZodFirstPartyTypeKind.ZodSymbol:\n            return undefined;\n        default:\n            return ((_) => undefined)(typeName);\n    }\n};\nconst addMeta = (def, refs, jsonSchema) => {\n    if (def.description) {\n        jsonSchema.description = def.description;\n        if (refs.markdownDescription) {\n            jsonSchema.markdownDescription = def.description;\n        }\n    }\n    return jsonSchema;\n};\n","export function parseAnyDef() {\n    return {};\n}\n","import { ZodFirstPartyTypeKind } from \"zod\";\nimport { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseArrayDef(def, refs) {\n    const res = {\n        type: \"array\",\n    };\n    if (def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny) {\n        res.items = parseDef(def.type._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"items\"],\n        });\n    }\n    if (def.minLength) {\n        setResponseValueAndErrors(res, \"minItems\", def.minLength.value, def.minLength.message, refs);\n    }\n    if (def.maxLength) {\n        setResponseValueAndErrors(res, \"maxItems\", def.maxLength.value, def.maxLength.message, refs);\n    }\n    if (def.exactLength) {\n        setResponseValueAndErrors(res, \"minItems\", def.exactLength.value, def.exactLength.message, refs);\n        setResponseValueAndErrors(res, \"maxItems\", def.exactLength.value, def.exactLength.message, refs);\n    }\n    return res;\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseBigintDef(def, refs) {\n    const res = {\n        type: \"integer\",\n        format: \"int64\",\n    };\n    if (!def.checks)\n        return res;\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"min\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMinimum = true;\n                    }\n                    setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                }\n                break;\n            case \"max\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMaximum = true;\n                    }\n                    setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                }\n                break;\n            case \"multipleOf\":\n                setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n                break;\n        }\n    }\n    return res;\n}\n","export function parseBooleanDef() {\n    return {\n        type: \"boolean\",\n    };\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseBrandedDef(_def, refs) {\n    return parseDef(_def.type._def, refs);\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const parseCatchDef = (def, refs) => {\n    return parseDef(def.innerType._def, refs);\n};\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseDateDef(def, refs, overrideDateStrategy) {\n    const strategy = overrideDateStrategy ?? refs.dateStrategy;\n    if (Array.isArray(strategy)) {\n        return {\n            anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)),\n        };\n    }\n    switch (strategy) {\n        case \"string\":\n        case \"format:date-time\":\n            return {\n                type: \"string\",\n                format: \"date-time\",\n            };\n        case \"format:date\":\n            return {\n                type: \"string\",\n                format: \"date\",\n            };\n        case \"integer\":\n            return integerDateParser(def, refs);\n    }\n}\nconst integerDateParser = (def, refs) => {\n    const res = {\n        type: \"integer\",\n        format: \"unix-time\",\n    };\n    if (refs.target === \"openApi3\") {\n        return res;\n    }\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"min\":\n                setResponseValueAndErrors(res, \"minimum\", check.value, // This is in milliseconds\n                check.message, refs);\n                break;\n            case \"max\":\n                setResponseValueAndErrors(res, \"maximum\", check.value, // This is in milliseconds\n                check.message, refs);\n                break;\n        }\n    }\n    return res;\n};\n","import { parseDef } from \"../parseDef.js\";\nexport function parseDefaultDef(_def, refs) {\n    return {\n        ...parseDef(_def.innerType._def, refs),\n        default: _def.defaultValue(),\n    };\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseEffectsDef(_def, refs) {\n    return refs.effectStrategy === \"input\"\n        ? parseDef(_def.schema._def, refs)\n        : {};\n}\n","export function parseEnumDef(def) {\n    return {\n        type: \"string\",\n        enum: def.values,\n    };\n}\n","import { parseDef } from \"../parseDef.js\";\nconst isJsonSchema7AllOfType = (type) => {\n    if (\"type\" in type && type.type === \"string\")\n        return false;\n    return \"allOf\" in type;\n};\nexport function parseIntersectionDef(def, refs) {\n    const allOf = [\n        parseDef(def.left._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n        }),\n        parseDef(def.right._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"allOf\", \"1\"],\n        }),\n    ].filter((x) => !!x);\n    let unevaluatedProperties = refs.target === \"jsonSchema2019-09\"\n        ? { unevaluatedProperties: false }\n        : undefined;\n    const mergedAllOf = [];\n    // If either of the schemas is an allOf, merge them into a single allOf\n    allOf.forEach((schema) => {\n        if (isJsonSchema7AllOfType(schema)) {\n            mergedAllOf.push(...schema.allOf);\n            if (schema.unevaluatedProperties === undefined) {\n                // If one of the schemas has no unevaluatedProperties set,\n                // the merged schema should also have no unevaluatedProperties set\n                unevaluatedProperties = undefined;\n            }\n        }\n        else {\n            let nestedSchema = schema;\n            if (\"additionalProperties\" in schema &&\n                schema.additionalProperties === false) {\n                const { additionalProperties, ...rest } = schema;\n                nestedSchema = rest;\n            }\n            else {\n                // As soon as one of the schemas has additionalProperties set not to false, we allow unevaluatedProperties\n                unevaluatedProperties = undefined;\n            }\n            mergedAllOf.push(nestedSchema);\n        }\n    });\n    return mergedAllOf.length\n        ? {\n            allOf: mergedAllOf,\n            ...unevaluatedProperties,\n        }\n        : undefined;\n}\n","export function parseLiteralDef(def, refs) {\n    const parsedType = typeof def.value;\n    if (parsedType !== \"bigint\" &&\n        parsedType !== \"number\" &&\n        parsedType !== \"boolean\" &&\n        parsedType !== \"string\") {\n        return {\n            type: Array.isArray(def.value) ? \"array\" : \"object\",\n        };\n    }\n    if (refs.target === \"openApi3\") {\n        return {\n            type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n            enum: [def.value],\n        };\n    }\n    return {\n        type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n        const: def.value,\n    };\n}\n","import { ZodFirstPartyTypeKind, } from \"zod\";\nimport { parseDef } from \"../parseDef.js\";\nimport { parseStringDef } from \"./string.js\";\nexport function parseRecordDef(def, refs) {\n    if (refs.target === \"openApi3\" &&\n        def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n        return {\n            type: \"object\",\n            required: def.keyType._def.values,\n            properties: def.keyType._def.values.reduce((acc, key) => ({\n                ...acc,\n                [key]: parseDef(def.valueType._def, {\n                    ...refs,\n                    currentPath: [...refs.currentPath, \"properties\", key],\n                }) ?? {},\n            }), {}),\n            additionalProperties: false,\n        };\n    }\n    const schema = {\n        type: \"object\",\n        additionalProperties: parseDef(def.valueType._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"additionalProperties\"],\n        }) ?? {},\n    };\n    if (refs.target === \"openApi3\") {\n        return schema;\n    }\n    if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n        def.keyType._def.checks?.length) {\n        const keyType = Object.entries(parseStringDef(def.keyType._def, refs)).reduce((acc, [key, value]) => (key === \"type\" ? acc : { ...acc, [key]: value }), {});\n        return {\n            ...schema,\n            propertyNames: keyType,\n        };\n    }\n    else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n        return {\n            ...schema,\n            propertyNames: {\n                enum: def.keyType._def.values,\n            },\n        };\n    }\n    return schema;\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n    /**\n     * `c` was changed to `[cC]` to replicate /i flag\n     */\n    cuid: /^[cC][^\\s-]{8,}$/,\n    cuid2: /^[0-9a-z]+$/,\n    ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n    /**\n     * `a-z` was added to replicate /i flag\n     */\n    email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n    /**\n     * Constructed a valid Unicode RegExp\n     */\n    emoji: RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\"),\n    /**\n     * Unused\n     */\n    uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n    /**\n     * Unused\n     */\n    ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n    /**\n     * Unused\n     */\n    ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n    base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n    nanoid: /^[a-zA-Z0-9_-]{21}$/,\n};\nexport function parseStringDef(def, refs) {\n    const res = {\n        type: \"string\",\n    };\n    function processPattern(value) {\n        return refs.patternStrategy === \"escape\"\n            ? escapeNonAlphaNumeric(value)\n            : value;\n    }\n    if (def.checks) {\n        for (const check of def.checks) {\n            switch (check.kind) {\n                case \"min\":\n                    setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n                        ? Math.max(res.minLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"max\":\n                    setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n                        ? Math.min(res.maxLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"email\":\n                    switch (refs.emailStrategy) {\n                        case \"format:email\":\n                            addFormat(res, \"email\", check.message, refs);\n                            break;\n                        case \"format:idn-email\":\n                            addFormat(res, \"idn-email\", check.message, refs);\n                            break;\n                        case \"pattern:zod\":\n                            addPattern(res, zodPatterns.email, check.message, refs);\n                            break;\n                    }\n                    break;\n                case \"url\":\n                    addFormat(res, \"uri\", check.message, refs);\n                    break;\n                case \"uuid\":\n                    addFormat(res, \"uuid\", check.message, refs);\n                    break;\n                case \"regex\":\n                    addPattern(res, check.regex, check.message, refs);\n                    break;\n                case \"cuid\":\n                    addPattern(res, zodPatterns.cuid, check.message, refs);\n                    break;\n                case \"cuid2\":\n                    addPattern(res, zodPatterns.cuid2, check.message, refs);\n                    break;\n                case \"startsWith\":\n                    addPattern(res, RegExp(`^${processPattern(check.value)}`), check.message, refs);\n                    break;\n                case \"endsWith\":\n                    addPattern(res, RegExp(`${processPattern(check.value)}$`), check.message, refs);\n                    break;\n                case \"datetime\":\n                    addFormat(res, \"date-time\", check.message, refs);\n                    break;\n                case \"date\":\n                    addFormat(res, \"date\", check.message, refs);\n                    break;\n                case \"time\":\n                    addFormat(res, \"time\", check.message, refs);\n                    break;\n                case \"duration\":\n                    addFormat(res, \"duration\", check.message, refs);\n                    break;\n                case \"length\":\n                    setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n                        ? Math.max(res.minLength, check.value)\n                        : check.value, check.message, refs);\n                    setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n                        ? Math.min(res.maxLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"includes\": {\n                    addPattern(res, RegExp(processPattern(check.value)), check.message, refs);\n                    break;\n                }\n                case \"ip\": {\n                    if (check.version !== \"v6\") {\n                        addFormat(res, \"ipv4\", check.message, refs);\n                    }\n                    if (check.version !== \"v4\") {\n                        addFormat(res, \"ipv6\", check.message, refs);\n                    }\n                    break;\n                }\n                case \"emoji\":\n                    addPattern(res, zodPatterns.emoji, check.message, refs);\n                    break;\n                case \"ulid\": {\n                    addPattern(res, zodPatterns.ulid, check.message, refs);\n                    break;\n                }\n                case \"base64\": {\n                    switch (refs.base64Strategy) {\n                        case \"format:binary\": {\n                            addFormat(res, \"binary\", check.message, refs);\n                            break;\n                        }\n                        case \"contentEncoding:base64\": {\n                            setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n                            break;\n                        }\n                        case \"pattern:zod\": {\n                            addPattern(res, zodPatterns.base64, check.message, refs);\n                            break;\n                        }\n                    }\n                    break;\n                }\n                case \"nanoid\": {\n                    addPattern(res, zodPatterns.nanoid, check.message, refs);\n                }\n                case \"toLowerCase\":\n                case \"toUpperCase\":\n                case \"trim\":\n                    break;\n                default:\n                    ((_) => { })(check);\n            }\n        }\n    }\n    return res;\n}\nconst escapeNonAlphaNumeric = (value) => Array.from(value)\n    .map((c) => (/[a-zA-Z0-9]/.test(c) ? c : `\\\\${c}`))\n    .join(\"\");\nconst addFormat = (schema, value, message, refs) => {\n    if (schema.format || schema.anyOf?.some((x) => x.format)) {\n        if (!schema.anyOf) {\n            schema.anyOf = [];\n        }\n        if (schema.format) {\n            schema.anyOf.push({\n                format: schema.format,\n                ...(schema.errorMessage &&\n                    refs.errorMessages && {\n                    errorMessage: { format: schema.errorMessage.format },\n                }),\n            });\n            delete schema.format;\n            if (schema.errorMessage) {\n                delete schema.errorMessage.format;\n                if (Object.keys(schema.errorMessage).length === 0) {\n                    delete schema.errorMessage;\n                }\n            }\n        }\n        schema.anyOf.push({\n            format: value,\n            ...(message &&\n                refs.errorMessages && { errorMessage: { format: message } }),\n        });\n    }\n    else {\n        setResponseValueAndErrors(schema, \"format\", value, message, refs);\n    }\n};\nconst addPattern = (schema, regex, message, refs) => {\n    if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n        if (!schema.allOf) {\n            schema.allOf = [];\n        }\n        if (schema.pattern) {\n            schema.allOf.push({\n                pattern: schema.pattern,\n                ...(schema.errorMessage &&\n                    refs.errorMessages && {\n                    errorMessage: { pattern: schema.errorMessage.pattern },\n                }),\n            });\n            delete schema.pattern;\n            if (schema.errorMessage) {\n                delete schema.errorMessage.pattern;\n                if (Object.keys(schema.errorMessage).length === 0) {\n                    delete schema.errorMessage;\n                }\n            }\n        }\n        schema.allOf.push({\n            pattern: processRegExp(regex, refs),\n            ...(message &&\n                refs.errorMessages && { errorMessage: { pattern: message } }),\n        });\n    }\n    else {\n        setResponseValueAndErrors(schema, \"pattern\", processRegExp(regex, refs), message, refs);\n    }\n};\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nconst processRegExp = (regex, refs) => {\n    if (!refs.applyRegexFlags || !regex.flags)\n        return regex.source;\n    // Currently handled flags\n    const flags = {\n        i: regex.flags.includes(\"i\"),\n        m: regex.flags.includes(\"m\"),\n        s: regex.flags.includes(\"s\"), // `.` matches newlines\n    };\n    // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n    const source = flags.i ? regex.source.toLowerCase() : regex.source;\n    let pattern = \"\";\n    let isEscaped = false;\n    let inCharGroup = false;\n    let inCharRange = false;\n    for (let i = 0; i < source.length; i++) {\n        if (isEscaped) {\n            pattern += source[i];\n            isEscaped = false;\n            continue;\n        }\n        if (flags.i) {\n            if (inCharGroup) {\n                if (source[i].match(/[a-z]/)) {\n                    if (inCharRange) {\n                        pattern += source[i];\n                        pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n                        inCharRange = false;\n                    }\n                    else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n                        pattern += source[i];\n                        inCharRange = true;\n                    }\n                    else {\n                        pattern += `${source[i]}${source[i].toUpperCase()}`;\n                    }\n                    continue;\n                }\n            }\n            else if (source[i].match(/[a-z]/)) {\n                pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n                continue;\n            }\n        }\n        if (flags.m) {\n            if (source[i] === \"^\") {\n                pattern += `(^|(?<=[\\r\\n]))`;\n                continue;\n            }\n            else if (source[i] === \"$\") {\n                pattern += `($|(?=[\\r\\n]))`;\n                continue;\n            }\n        }\n        if (flags.s && source[i] === \".\") {\n            pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n            continue;\n        }\n        pattern += source[i];\n        if (source[i] === \"\\\\\") {\n            isEscaped = true;\n        }\n        else if (inCharGroup && source[i] === \"]\") {\n            inCharGroup = false;\n        }\n        else if (!inCharGroup && source[i] === \"[\") {\n            inCharGroup = true;\n        }\n    }\n    try {\n        const regexTest = new RegExp(pattern);\n    }\n    catch {\n        console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n        return regex.source;\n    }\n    return pattern;\n};\n","import { parseDef } from \"../parseDef.js\";\nimport { parseRecordDef } from \"./record.js\";\nexport function parseMapDef(def, refs) {\n    if (refs.mapStrategy === \"record\") {\n        return parseRecordDef(def, refs);\n    }\n    const keys = parseDef(def.keyType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\", \"items\", \"0\"],\n    }) || {};\n    const values = parseDef(def.valueType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\", \"items\", \"1\"],\n    }) || {};\n    return {\n        type: \"array\",\n        maxItems: 125,\n        items: {\n            type: \"array\",\n            items: [keys, values],\n            minItems: 2,\n            maxItems: 2,\n        },\n    };\n}\n","export function parseNativeEnumDef(def) {\n    const object = def.values;\n    const actualKeys = Object.keys(def.values).filter((key) => {\n        return typeof object[object[key]] !== \"number\";\n    });\n    const actualValues = actualKeys.map((key) => object[key]);\n    const parsedTypes = Array.from(new Set(actualValues.map((values) => typeof values)));\n    return {\n        type: parsedTypes.length === 1\n            ? parsedTypes[0] === \"string\"\n                ? \"string\"\n                : \"number\"\n            : [\"string\", \"number\"],\n        enum: actualValues,\n    };\n}\n","export function parseNeverDef() {\n    return {\n        not: {},\n    };\n}\n","export function parseNullDef(refs) {\n    return refs.target === \"openApi3\"\n        ? {\n            enum: [\"null\"],\n            nullable: true,\n        }\n        : {\n            type: \"null\",\n        };\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const primitiveMappings = {\n    ZodString: \"string\",\n    ZodNumber: \"number\",\n    ZodBigInt: \"integer\",\n    ZodBoolean: \"boolean\",\n    ZodNull: \"null\",\n};\nexport function parseUnionDef(def, refs) {\n    if (refs.target === \"openApi3\")\n        return asAnyOf(def, refs);\n    const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n    // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n    if (options.every((x) => x._def.typeName in primitiveMappings &&\n        (!x._def.checks || !x._def.checks.length))) {\n        // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n        const types = options.reduce((types, x) => {\n            const type = primitiveMappings[x._def.typeName]; //Can be safely casted due to row 43\n            return type && !types.includes(type) ? [...types, type] : types;\n        }, []);\n        return {\n            type: types.length > 1 ? types : types[0],\n        };\n    }\n    else if (options.every((x) => x._def.typeName === \"ZodLiteral\" && !x.description)) {\n        // all options literals\n        const types = options.reduce((acc, x) => {\n            const type = typeof x._def.value;\n            switch (type) {\n                case \"string\":\n                case \"number\":\n                case \"boolean\":\n                    return [...acc, type];\n                case \"bigint\":\n                    return [...acc, \"integer\"];\n                case \"object\":\n                    if (x._def.value === null)\n                        return [...acc, \"null\"];\n                case \"symbol\":\n                case \"undefined\":\n                case \"function\":\n                default:\n                    return acc;\n            }\n        }, []);\n        if (types.length === options.length) {\n            // all the literals are primitive, as far as null can be considered primitive\n            const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n            return {\n                type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n                enum: options.reduce((acc, x) => {\n                    return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n                }, []),\n            };\n        }\n    }\n    else if (options.every((x) => x._def.typeName === \"ZodEnum\")) {\n        return {\n            type: \"string\",\n            enum: options.reduce((acc, x) => [\n                ...acc,\n                ...x._def.values.filter((x) => !acc.includes(x)),\n            ], []),\n        };\n    }\n    return asAnyOf(def, refs);\n}\nconst asAnyOf = (def, refs) => {\n    const anyOf = (def.options instanceof Map\n        ? Array.from(def.options.values())\n        : def.options)\n        .map((x, i) => parseDef(x._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", `${i}`],\n    }))\n        .filter((x) => !!x &&\n        (!refs.strictUnions ||\n            (typeof x === \"object\" && Object.keys(x).length > 0)));\n    return anyOf.length ? { anyOf } : undefined;\n};\n","import { parseDef } from \"../parseDef.js\";\nimport { primitiveMappings } from \"./union.js\";\nexport function parseNullableDef(def, refs) {\n    if ([\"ZodString\", \"ZodNumber\", \"ZodBigInt\", \"ZodBoolean\", \"ZodNull\"].includes(def.innerType._def.typeName) &&\n        (!def.innerType._def.checks || !def.innerType._def.checks.length)) {\n        if (refs.target === \"openApi3\") {\n            return {\n                type: primitiveMappings[def.innerType._def.typeName],\n                nullable: true,\n            };\n        }\n        return {\n            type: [\n                primitiveMappings[def.innerType._def.typeName],\n                \"null\",\n            ],\n        };\n    }\n    if (refs.target === \"openApi3\") {\n        const base = parseDef(def.innerType._def, {\n            ...refs,\n            currentPath: [...refs.currentPath],\n        });\n        if (base && '$ref' in base)\n            return { allOf: [base], nullable: true };\n        return base && { ...base, nullable: true };\n    }\n    const base = parseDef(def.innerType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", \"0\"],\n    });\n    return base && { anyOf: [base, { type: \"null\" }] };\n}\n","import { addErrorMessage, setResponseValueAndErrors, } from \"../errorMessages.js\";\nexport function parseNumberDef(def, refs) {\n    const res = {\n        type: \"number\",\n    };\n    if (!def.checks)\n        return res;\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"int\":\n                res.type = \"integer\";\n                addErrorMessage(res, \"type\", check.message, refs);\n                break;\n            case \"min\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMinimum = true;\n                    }\n                    setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                }\n                break;\n            case \"max\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMaximum = true;\n                    }\n                    setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                }\n                break;\n            case \"multipleOf\":\n                setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n                break;\n        }\n    }\n    return res;\n}\n","import { parseDef } from \"../parseDef.js\";\nfunction decideAdditionalProperties(def, refs) {\n    if (refs.removeAdditionalStrategy === \"strict\") {\n        return def.catchall._def.typeName === \"ZodNever\"\n            ? def.unknownKeys !== \"strict\"\n            : parseDef(def.catchall._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"additionalProperties\"],\n            }) ?? true;\n    }\n    else {\n        return def.catchall._def.typeName === \"ZodNever\"\n            ? def.unknownKeys === \"passthrough\"\n            : parseDef(def.catchall._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"additionalProperties\"],\n            }) ?? true;\n    }\n}\n;\nexport function parseObjectDefX(def, refs) {\n    Object.keys(def.shape()).reduce((schema, key) => {\n        let prop = def.shape()[key];\n        const isOptional = prop.isOptional();\n        if (!isOptional) {\n            prop = { ...prop._def.innerSchema };\n        }\n        const propSchema = parseDef(prop._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"properties\", key],\n            propertyPath: [...refs.currentPath, \"properties\", key],\n        });\n        if (propSchema !== undefined) {\n            schema.properties[key] = propSchema;\n            if (!isOptional) {\n                if (!schema.required) {\n                    schema.required = [];\n                }\n                schema.required.push(key);\n            }\n        }\n        return schema;\n    }, {\n        type: \"object\",\n        properties: {},\n        additionalProperties: decideAdditionalProperties(def, refs),\n    });\n    const result = {\n        type: \"object\",\n        ...Object.entries(def.shape()).reduce((acc, [propName, propDef]) => {\n            if (propDef === undefined || propDef._def === undefined)\n                return acc;\n            const parsedDef = parseDef(propDef._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"properties\", propName],\n                propertyPath: [...refs.currentPath, \"properties\", propName],\n            });\n            if (parsedDef === undefined)\n                return acc;\n            return {\n                properties: { ...acc.properties, [propName]: parsedDef },\n                required: propDef.isOptional()\n                    ? acc.required\n                    : [...acc.required, propName],\n            };\n        }, { properties: {}, required: [] }),\n        additionalProperties: decideAdditionalProperties(def, refs),\n    };\n    if (!result.required.length)\n        delete result.required;\n    return result;\n}\nexport function parseObjectDef(def, refs) {\n    const result = {\n        type: \"object\",\n        ...Object.entries(def.shape()).reduce((acc, [propName, propDef]) => {\n            if (propDef === undefined || propDef._def === undefined)\n                return acc;\n            const parsedDef = parseDef(propDef._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"properties\", propName],\n                propertyPath: [...refs.currentPath, \"properties\", propName],\n            });\n            if (parsedDef === undefined)\n                return acc;\n            return {\n                properties: { ...acc.properties, [propName]: parsedDef },\n                required: propDef.isOptional()\n                    ? acc.required\n                    : [...acc.required, propName],\n            };\n        }, { properties: {}, required: [] }),\n        additionalProperties: decideAdditionalProperties(def, refs),\n    };\n    if (!result.required.length)\n        delete result.required;\n    return result;\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const parseOptionalDef = (def, refs) => {\n    if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n        return parseDef(def.innerType._def, refs);\n    }\n    const innerSchema = parseDef(def.innerType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", \"1\"],\n    });\n    return innerSchema\n        ? {\n            anyOf: [\n                {\n                    not: {},\n                },\n                innerSchema,\n            ],\n        }\n        : {};\n};\n","import { parseDef } from \"../parseDef.js\";\nexport const parsePipelineDef = (def, refs) => {\n    if (refs.pipeStrategy === \"input\") {\n        return parseDef(def.in._def, refs);\n    }\n    else if (refs.pipeStrategy === \"output\") {\n        return parseDef(def.out._def, refs);\n    }\n    const a = parseDef(def.in._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n    });\n    const b = parseDef(def.out._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"allOf\", a ? \"1\" : \"0\"],\n    });\n    return {\n        allOf: [a, b].filter((x) => x !== undefined),\n    };\n};\n","import { parseDef } from \"../parseDef.js\";\nexport function parsePromiseDef(def, refs) {\n    return parseDef(def.type._def, refs);\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseSetDef(def, refs) {\n    const items = parseDef(def.valueType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\"],\n    });\n    const schema = {\n        type: \"array\",\n        uniqueItems: true,\n        items,\n    };\n    if (def.minSize) {\n        setResponseValueAndErrors(schema, \"minItems\", def.minSize.value, def.minSize.message, refs);\n    }\n    if (def.maxSize) {\n        setResponseValueAndErrors(schema, \"maxItems\", def.maxSize.value, def.maxSize.message, refs);\n    }\n    return schema;\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseTupleDef(def, refs) {\n    if (def.rest) {\n        return {\n            type: \"array\",\n            minItems: def.items.length,\n            items: def.items\n                .map((x, i) => parseDef(x._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"items\", `${i}`],\n            }))\n                .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n            additionalItems: parseDef(def.rest._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"additionalItems\"],\n            }),\n        };\n    }\n    else {\n        return {\n            type: \"array\",\n            minItems: def.items.length,\n            maxItems: def.items.length,\n            items: def.items\n                .map((x, i) => parseDef(x._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"items\", `${i}`],\n            }))\n                .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n        };\n    }\n}\n","export function parseUndefinedDef() {\n    return {\n        not: {},\n    };\n}\n","export function parseUnknownDef() {\n    return {};\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const parseReadonlyDef = (def, refs) => {\n    return parseDef(def.innerType._def, refs);\n};\n","import { parseDef } from \"./parseDef.js\";\nimport { getRefs } from \"./Refs.js\";\nconst zodToJsonSchema = (schema, options) => {\n    const refs = getRefs(options);\n    const definitions = typeof options === \"object\" && options.definitions\n        ? Object.entries(options.definitions).reduce((acc, [name, schema]) => ({\n            ...acc,\n            [name]: parseDef(schema._def, {\n                ...refs,\n                currentPath: [...refs.basePath, refs.definitionPath, name],\n            }, true) ?? {},\n        }), {})\n        : undefined;\n    const name = typeof options === \"string\"\n        ? options\n        : options?.nameStrategy === \"title\"\n            ? undefined\n            : options?.name;\n    const main = parseDef(schema._def, name === undefined\n        ? refs\n        : {\n            ...refs,\n            currentPath: [...refs.basePath, refs.definitionPath, name],\n        }, false) ?? {};\n    const title = typeof options === \"object\" &&\n        options.name !== undefined &&\n        options.nameStrategy === \"title\"\n        ? options.name\n        : undefined;\n    if (title !== undefined) {\n        main.title = title;\n    }\n    const combined = name === undefined\n        ? definitions\n            ? {\n                ...main,\n                [refs.definitionPath]: definitions,\n            }\n            : main\n        : {\n            $ref: [\n                ...(refs.$refStrategy === \"relative\" ? [] : refs.basePath),\n                refs.definitionPath,\n                name,\n            ].join(\"/\"),\n            [refs.definitionPath]: {\n                ...definitions,\n                [name]: main,\n            },\n        };\n    if (refs.target === \"jsonSchema7\") {\n        combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n    }\n    else if (refs.target === \"jsonSchema2019-09\") {\n        combined.$schema = \"https://json-schema.org/draft/2019-09/schema#\";\n    }\n    return combined;\n};\nexport { zodToJsonSchema };\n","import { ZodType } from \"zod\"\nimport { zodToJsonSchema } from \"zod-to-json-schema\"\n\nexport default <T>(data: T, type: ZodType<T>): T => {\n\tconst result = type.safeParse(data)\n\n\tif (result.error) {\n\t\tconsole.error(\n\t\t\t\"Invalid data type, please report to https://github.com/zS1L3NT/ts-npm-ytmusic-api/issues/new/choose\",\n\t\t\tJSON.stringify(\n\t\t\t\t{\n\t\t\t\t\tdata,\n\t\t\t\t\tschema: zodToJsonSchema(type, \"schema\"),\n\t\t\t\t\terror: result.error,\n\t\t\t\t},\n\t\t\t\tnull,\n\t\t\t\t2,\n\t\t\t),\n\t\t)\n\t}\n\n\treturn data\n}\n","export const traverse = (data: any, ...keys: string[]) => {\n\tconst again = (data: any, key: string, deadEnd = false): any => {\n\t\tconst res = []\n\n\t\tif (data instanceof Object && key in data) {\n\t\t\tres.push(data[key])\n\t\t\tif (deadEnd) return res.length === 1 ? res[0] : res\n\t\t}\n\n\t\tif (data instanceof Array) {\n\t\t\tres.push(...data.map(v => again(v, key)).flat())\n\t\t} else if (data instanceof Object) {\n\t\t\tres.push(\n\t\t\t\t...Object.keys(data)\n\t\t\t\t\t.map(k => again(data[k], key))\n\t\t\t\t\t.flat(),\n\t\t\t)\n\t\t}\n\n\t\treturn res.length === 1 ? res[0] : res\n\t}\n\n\tlet value = data\n\tconst lastKey = keys.at(-1)\n\tfor (const key of keys) {\n\t\tvalue = again(value, key, lastKey === key)\n\t}\n\n\treturn value\n}\n\nexport const traverseList = (data: any, ...keys: string[]): any[] => {\n\treturn [traverse(data, ...keys)].flat()\n}\n\nexport const traverseString = (data: any, ...keys: string[]): string => {\n\treturn traverseList(data, ...keys).at(0) || \"\"\n}\n","import { traverseString } from \"./traverse\"\n\nexport const isTitle = (data: any) => {\n\treturn traverseString(data, \"musicVideoType\").startsWith(\"MUSIC_VIDEO_TYPE_\")\n}\n\nexport const isArtist = (data: any) => {\n\treturn [\"MUSIC_PAGE_TYPE_USER_CHANNEL\", \"MUSIC_PAGE_TYPE_ARTIST\"].includes(\n\t\ttraverseString(data, \"pageType\"),\n\t)\n}\n\nexport const isAlbum = (data: any) => {\n\treturn traverseString(data, \"pageType\") === \"MUSIC_PAGE_TYPE_ALBUM\"\n}\n\nexport const isDuration = (data: any) => {\n\treturn traverseString(data, \"text\").match(/(\\d{1,2}:)?\\d{1,2}:\\d{1,2}/)\n}\n","import { ArtistBasic, PlaylistDetailed, PlaylistFull } from \"../types\"\nimport checkType from \"../utils/checkType\"\nimport { isArtist } from \"../utils/filters\"\nimport { traverse, traverseList, traverseString } from \"../utils/traverse\"\n\nexport default class PlaylistParser {\n\tpublic static parse(data: any, playlistId: string): PlaylistFull {\n\t\tconst artist = traverse(data, \"tabs\", \"straplineTextOne\")\n\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"PLAYLIST\",\n\t\t\t\tplaylistId,\n\t\t\t\tname: traverseString(data, \"tabs\", \"title\", \"text\"),\n\t\t\t\tartist: {\n\t\t\t\t\tname: traverseString(artist, \"text\"),\n\t\t\t\t\tartistId: traverseString(artist, \"browseId\") || null,\n\t\t\t\t},\n\t\t\t\tvideoCount:\n\t\t\t\t\t+traverseList(data, \"tabs\", \"secondSubtitle\", \"text\")\n\t\t\t\t\t\t.at(2)\n\t\t\t\t\t\t.split(\" \")\n\t\t\t\t\t\t.at(0)\n\t\t\t\t\t\t.replaceAll(\",\", \"\") ?? null,\n\t\t\t\tthumbnails: traverseList(data, \"tabs\", \"thumbnails\"),\n\t\t\t},\n\t\t\tPlaylistFull,\n\t\t)\n\t}\n\n\tpublic static parseSearchResult(item: any): PlaylistDetailed {\n\t\tconst columns = traverseList(item, \"flexColumns\", \"runs\").flat()\n\n\t\t// No specific way to identify the title\n\t\tconst title = columns[0]\n\t\tconst artist = columns.find(isArtist) || columns[3]\n\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"PLAYLIST\",\n\t\t\t\tplaylistId: traverseString(item, \"overlay\", \"playlistId\"),\n\t\t\t\tname: traverseString(title, \"text\"),\n\t\t\t\tartist: {\n\t\t\t\t\tname: traverseString(artist, \"text\"),\n\t\t\t\t\tartistId: traverseString(artist, \"browseId\") || null,\n\t\t\t\t},\n\t\t\t\tthumbnails: traverseList(item, \"thumbnails\"),\n\t\t\t},\n\t\t\tPlaylistDetailed,\n\t\t)\n\t}\n\n\tpublic static parseArtistFeaturedOn(item: any, artistBasic: ArtistBasic): PlaylistDetailed {\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"PLAYLIST\",\n\t\t\t\tplaylistId: traverseString(item, \"navigationEndpoint\", \"browseId\"),\n\t\t\t\tname: traverseString(item, \"runs\", \"text\"),\n\t\t\t\tartist: artistBasic,\n\t\t\t\tthumbnails: traverseList(item, \"thumbnails\"),\n\t\t\t},\n\t\t\tPlaylistDetailed,\n\t\t)\n\t}\n\n\tpublic static parseHomeSection(item: any): PlaylistDetailed {\n\t\tconst artist = traverse(item, \"subtitle\", \"runs\")\n\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"PLAYLIST\",\n\t\t\t\tplaylistId: traverseString(item, \"navigationEndpoint\", \"playlistId\"),\n\t\t\t\tname: traverseString(item, \"runs\", \"text\"),\n\t\t\t\tartist: {\n\t\t\t\t\tname: traverseString(artist, \"text\"),\n\t\t\t\t\tartistId: traverseString(artist, \"browseId\") || null,\n\t\t\t\t},\n\t\t\t\tthumbnails: traverseList(item, \"thumbnails\"),\n\t\t\t},\n\t\t\tPlaylistDetailed,\n\t\t)\n\t}\n}\n","import { PageType } from \"../constants\"\nimport { AlbumDetailed, HomeSection } from \"../types\"\nimport checkType from \"../utils/checkType\"\nimport { traverseList, traverseString } from \"../utils/traverse\"\nimport AlbumParser from \"./AlbumParser\"\nimport PlaylistParser from \"./PlaylistParser\"\nimport SongParser from \"./SongParser\"\n\nexport default class Parser {\n\tpublic static parseDuration(time: string) {\n\t\tif (!time) return null\n\n\t\tconst [seconds, minutes, hours] = time\n\t\t\t.split(\":\")\n\t\t\t.reverse()\n\t\t\t.map(n => +n) as (number | undefined)[]\n\n\t\treturn (seconds || 0) + (minutes || 0) * 60 + (hours || 0) * 60 * 60\n\t}\n\n\tpublic static parseNumber(string: string): number {\n\t\tif (string.at(-1)!.match(/^[A-Z]+$/)) {\n\t\t\tconst number = +string.slice(0, -1)\n\t\t\tconst multiplier = string.at(-1)\n\n\t\t\treturn (\n\t\t\t\t{\n\t\t\t\t\tK: number * 1000,\n\t\t\t\t\tM: number * 1000 * 1000,\n\t\t\t\t\tB: number * 1000 * 1000 * 1000,\n\t\t\t\t\tT: number * 1000 * 1000 * 1000 * 1000,\n\t\t\t\t}[multiplier!] || NaN\n\t\t\t)\n\t\t} else {\n\t\t\treturn +string\n\t\t}\n\t}\n\n\tpublic static parseHomeSection(data: any): HomeSection {\n\t\tconst pageType = traverseString(data, \"contents\", \"title\", \"browseEndpoint\", \"pageType\")\n\t\tconst playlistId = traverseString(\n\t\t\tdata,\n\t\t\t\"navigationEndpoint\",\n\t\t\t\"watchPlaylistEndpoint\",\n\t\t\t\"playlistId\",\n\t\t)\n\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttitle: traverseString(data, \"header\", \"title\", \"text\"),\n\t\t\t\tcontents: traverseList(data, \"contents\").map(item => {\n\t\t\t\t\tswitch (pageType) {\n\t\t\t\t\t\tcase PageType.MUSIC_PAGE_TYPE_ALBUM:\n\t\t\t\t\t\t\treturn AlbumParser.parseHomeSection(item)\n\t\t\t\t\t\tcase PageType.MUSIC_PAGE_TYPE_PLAYLIST:\n\t\t\t\t\t\t\treturn PlaylistParser.parseHomeSection(item)\n\t\t\t\t\t\tcase \"\":\n\t\t\t\t\t\t\tif (playlistId) {\n\t\t\t\t\t\t\t\treturn PlaylistParser.parseHomeSection(item)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn SongParser.parseHomeSection(item)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn null as unknown as AlbumDetailed\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t},\n\t\t\tHomeSection,\n\t\t)\n\t}\n}\n","import { AlbumBasic, ArtistBasic, SongDetailed, SongFull, ThumbnailFull } from \"../types\"\nimport checkType from \"../utils/checkType\"\nimport { isAlbum, isArtist, isDuration, isTitle } from \"../utils/filters\"\nimport { traverseList, traverseString } from \"../utils/traverse\"\nimport Parser from \"./Parser\"\n\nexport default class SongParser {\n\tpublic static parse(data: any): SongFull {\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"SONG\",\n\t\t\t\tvideoId: traverseString(data, \"videoDetails\", \"videoId\"),\n\t\t\t\tname: traverseString(data, \"videoDetails\", \"title\"),\n\t\t\t\tartist: {\n\t\t\t\t\tname: traverseString(data, \"author\"),\n\t\t\t\t\tartistId: traverseString(data, \"videoDetails\", \"channelId\"),\n\t\t\t\t},\n\t\t\t\tduration: +traverseString(data, \"videoDetails\", \"lengthSeconds\"),\n\t\t\t\tthumbnails: traverseList(data, \"videoDetails\", \"thumbnails\"),\n\t\t\t\tformats: traverseList(data, \"streamingData\", \"formats\"),\n\t\t\t\tadaptiveFormats: traverseList(data, \"streamingData\", \"adaptiveFormats\"),\n\t\t\t},\n\t\t\tSongFull,\n\t\t)\n\t}\n\n\tpublic static parseSearchResult(item: any): SongDetailed {\n\t\tconst columns = traverseList(item, \"flexColumns\", \"runs\")\n\n\t\t// It is not possible to identify the title and author\n\t\tconst title = columns[0]\n\t\tconst artist = columns.find(isArtist) || columns[3]\n\t\tconst album = columns.find(isAlbum) ?? null\n\t\tconst duration = columns.find(isDuration)\n\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"SONG\",\n\t\t\t\tvideoId: traverseString(item, \"playlistItemData\", \"videoId\"),\n\t\t\t\tname: traverseString(title, \"text\"),\n\t\t\t\tartist: {\n\t\t\t\t\tname: traverseString(artist, \"text\"),\n\t\t\t\t\tartistId: traverseString(artist, \"browseId\") || null,\n\t\t\t\t},\n\t\t\t\talbum: album\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tname: traverseString(album, \"text\"),\n\t\t\t\t\t\t\talbumId: traverseString(album, \"browseId\"),\n\t\t\t\t\t\t}\n\t\t\t\t\t: null,\n\t\t\t\tduration: Parser.parseDuration(duration?.text),\n\t\t\t\tthumbnails: traverseList(item, \"thumbnails\"),\n\t\t\t},\n\t\t\tSongDetailed,\n\t\t)\n\t}\n\n\tpublic static parseArtistSong(item: any, artistBasic: ArtistBasic): SongDetailed {\n\t\tconst columns = traverseList(item, \"flexColumns\", \"runs\").flat()\n\n\t\tconst title = columns.find(isTitle)\n\t\tconst album = columns.find(isAlbum)\n\t\tconst duration = columns.find(isDuration)\n\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"SONG\",\n\t\t\t\tvideoId: traverseString(item, \"playlistItemData\", \"videoId\"),\n\t\t\t\tname: traverseString(title, \"text\"),\n\t\t\t\tartist: artistBasic,\n\t\t\t\talbum: album\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tname: traverseString(album, \"text\"),\n\t\t\t\t\t\t\talbumId: traverseString(album, \"browseId\"),\n\t\t\t\t\t\t}\n\t\t\t\t\t: null,\n\t\t\t\tduration: Parser.parseDuration(duration?.text),\n\t\t\t\tthumbnails: traverseList(item, \"thumbnails\"),\n\t\t\t},\n\t\t\tSongDetailed,\n\t\t)\n\t}\n\n\tpublic static parseArtistTopSong(item: any, artistBasic: ArtistBasic): SongDetailed {\n\t\tconst columns = traverseList(item, \"flexColumns\", \"runs\").flat()\n\n\t\tconst title = columns.find(isTitle)\n\t\tconst album = columns.find(isAlbum)\n\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"SONG\",\n\t\t\t\tvideoId: traverseString(item, \"playlistItemData\", \"videoId\"),\n\t\t\t\tname: traverseString(title, \"text\"),\n\t\t\t\tartist: artistBasic,\n\t\t\t\talbum: {\n\t\t\t\t\tname: traverseString(album, \"text\"),\n\t\t\t\t\talbumId: traverseString(album, \"browseId\"),\n\t\t\t\t},\n\t\t\t\tduration: null,\n\t\t\t\tthumbnails: traverseList(item, \"thumbnails\"),\n\t\t\t},\n\t\t\tSongDetailed,\n\t\t)\n\t}\n\n\tpublic static parseAlbumSong(\n\t\titem: any,\n\t\tartistBasic: ArtistBasic,\n\t\talbumBasic: AlbumBasic,\n\t\tthumbnails: ThumbnailFull[],\n\t): SongDetailed {\n\t\tconst title = traverseList(item, \"flexColumns\", \"runs\").find(isTitle)\n\t\tconst duration = traverseList(item, \"fixedColumns\", \"runs\").find(isDuration)\n\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"SONG\",\n\t\t\t\tvideoId: traverseString(item, \"playlistItemData\", \"videoId\"),\n\t\t\t\tname: traverseString(title, \"text\"),\n\t\t\t\tartist: artistBasic,\n\t\t\t\talbum: albumBasic,\n\t\t\t\tduration: Parser.parseDuration(duration?.text),\n\t\t\t\tthumbnails,\n\t\t\t},\n\t\t\tSongDetailed,\n\t\t)\n\t}\n\n\tpublic static parseHomeSection(item: any) {\n\t\treturn SongParser.parseSearchResult(item)\n\t}\n}\n","import { AlbumBasic, AlbumDetailed, AlbumFull, ArtistBasic } from \"../types\"\nimport checkType from \"../utils/checkType\"\nimport { isArtist } from \"../utils/filters\"\nimport { traverse, traverseList, traverseString } from \"../utils/traverse\"\nimport SongParser from \"./SongParser\"\n\nexport default class AlbumParser {\n\tpublic static parse(data: any, albumId: string): AlbumFull {\n\t\tconst albumBasic: AlbumBasic = {\n\t\t\talbumId,\n\t\t\tname: traverseString(data, \"tabs\", \"title\", \"text\"),\n\t\t}\n\n\t\tconst artistData = traverse(data, \"tabs\", \"straplineTextOne\", \"runs\")\n\t\tconst artistBasic: ArtistBasic = {\n\t\t\tartistId: traverseString(artistData, \"browseId\") || null,\n\t\t\tname: traverseString(artistData, \"text\"),\n\t\t}\n\n\t\tconst thumbnails = traverseList(data, \"background\", \"thumbnails\")\n\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"ALBUM\",\n\t\t\t\t...albumBasic,\n\t\t\t\tplaylistId: traverseString(data, \"musicPlayButtonRenderer\", \"playlistId\"),\n\t\t\t\tartist: artistBasic,\n\t\t\t\tyear: AlbumParser.processYear(\n\t\t\t\t\ttraverseList(data, \"tabs\", \"subtitle\", \"text\").at(-1),\n\t\t\t\t),\n\t\t\t\tthumbnails,\n\t\t\t\tsongs: traverseList(data, \"musicResponsiveListItemRenderer\").map(item =>\n\t\t\t\t\tSongParser.parseAlbumSong(item, artistBasic, albumBasic, thumbnails),\n\t\t\t\t),\n\t\t\t},\n\t\t\tAlbumFull,\n\t\t)\n\t}\n\n\tpublic static parseSearchResult(item: any): AlbumDetailed {\n\t\tconst columns = traverseList(item, \"flexColumns\", \"runs\").flat()\n\n\t\t// No specific way to identify the title\n\t\tconst title = columns[0]\n\t\tconst artist = columns.find(isArtist) || columns[3]\n\t\tconst playlistId =\n\t\t\ttraverseString(item, \"overlay\", \"playlistId\") ||\n\t\t\ttraverseString(item, \"thumbnailOverlay\", \"playlistId\")\n\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"ALBUM\",\n\t\t\t\talbumId: traverseList(item, \"browseId\").at(-1),\n\t\t\t\tplaylistId,\n\t\t\t\tartist: {\n\t\t\t\t\tname: traverseString(artist, \"text\"),\n\t\t\t\t\tartistId: traverseString(artist, \"browseId\") || null,\n\t\t\t\t},\n\t\t\t\tyear: AlbumParser.processYear(columns.at(-1)?.text),\n\t\t\t\tname: traverseString(title, \"text\"),\n\t\t\t\tthumbnails: traverseList(item, \"thumbnails\"),\n\t\t\t},\n\t\t\tAlbumDetailed,\n\t\t)\n\t}\n\n\tpublic static parseArtistAlbum(item: any, artistBasic: ArtistBasic): AlbumDetailed {\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"ALBUM\",\n\t\t\t\talbumId: traverseList(item, \"browseId\").at(-1),\n\t\t\t\tplaylistId: traverseString(item, \"thumbnailOverlay\", \"playlistId\"),\n\t\t\t\tname: traverseString(item, \"title\", \"text\"),\n\t\t\t\tartist: artistBasic,\n\t\t\t\tyear: AlbumParser.processYear(traverseList(item, \"subtitle\", \"text\").at(-1)),\n\t\t\t\tthumbnails: traverseList(item, \"thumbnails\"),\n\t\t\t},\n\t\t\tAlbumDetailed,\n\t\t)\n\t}\n\n\tpublic static parseArtistTopAlbum(item: any, artistBasic: ArtistBasic): AlbumDetailed {\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"ALBUM\",\n\t\t\t\talbumId: traverseList(item, \"browseId\").at(-1),\n\t\t\t\tplaylistId: traverseString(item, \"musicPlayButtonRenderer\", \"playlistId\"),\n\t\t\t\tname: traverseString(item, \"title\", \"text\"),\n\t\t\t\tartist: artistBasic,\n\t\t\t\tyear: AlbumParser.processYear(traverseList(item, \"subtitle\", \"text\").at(-1)),\n\t\t\t\tthumbnails: traverseList(item, \"thumbnails\"),\n\t\t\t},\n\t\t\tAlbumDetailed,\n\t\t)\n\t}\n\n\tpublic static parseHomeSection(item: any): AlbumDetailed {\n\t\tconst artist = traverse(item, \"subtitle\", \"runs\").at(-1)\n\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"ALBUM\",\n\t\t\t\talbumId: traverseString(item, \"title\", \"browseId\"),\n\t\t\t\tplaylistId: traverseString(item, \"thumbnailOverlay\", \"playlistId\"),\n\t\t\t\tname: traverseString(item, \"title\", \"text\"),\n\t\t\t\tartist: {\n\t\t\t\t\tname: traverseString(artist, \"text\"),\n\t\t\t\t\tartistId: traverseString(artist, \"browseId\") || null,\n\t\t\t\t},\n\t\t\t\tyear: null,\n\t\t\t\tthumbnails: traverseList(item, \"thumbnails\"),\n\t\t\t},\n\t\t\tAlbumDetailed,\n\t\t)\n\t}\n\n\tprivate static processYear(year: string) {\n\t\treturn year && year.match(/^\\d{4}$/) ? +year : null\n\t}\n}\n","import { ArtistBasic, VideoDetailed, VideoFull } from \"../types\"\nimport checkType from \"../utils/checkType\"\nimport { isArtist, isDuration, isTitle } from \"../utils/filters\"\nimport { traverse, traverseList, traverseString } from \"../utils/traverse\"\nimport Parser from \"./Parser\"\n\nexport default class VideoParser {\n\tpublic static parse(data: any): VideoFull {\n\t\treturn {\n\t\t\ttype: \"VIDEO\",\n\t\t\tvideoId: traverseString(data, \"videoDetails\", \"videoId\"),\n\t\t\tname: traverseString(data, \"videoDetails\", \"title\"),\n\t\t\tartist: {\n\t\t\t\tartistId: traverseString(data, \"videoDetails\", \"channelId\"),\n\t\t\t\tname: traverseString(data, \"author\"),\n\t\t\t},\n\t\t\tduration: +traverseString(data, \"videoDetails\", \"lengthSeconds\"),\n\t\t\tthumbnails: traverseList(data, \"videoDetails\", \"thumbnails\"),\n\t\t\tunlisted: traverse(data, \"unlisted\"),\n\t\t\tfamilySafe: traverse(data, \"familySafe\"),\n\t\t\tpaid: traverse(data, \"paid\"),\n\t\t\ttags: traverseList(data, \"tags\"),\n\t\t}\n\t}\n\n\tpublic static parseSearchResult(item: any): VideoDetailed {\n\t\tconst columns = traverseList(item, \"flexColumns\", \"runs\").flat()\n\n\t\tconst title = columns.find(isTitle)\n\t\tconst artist = columns.find(isArtist) || columns[1]\n\t\tconst duration = columns.find(isDuration)\n\n\t\treturn {\n\t\t\ttype: \"VIDEO\",\n\t\t\tvideoId: traverseString(item, \"playNavigationEndpoint\", \"videoId\"),\n\t\t\tname: traverseString(title, \"text\"),\n\t\t\tartist: {\n\t\t\t\tartistId: traverseString(artist, \"browseId\") || null,\n\t\t\t\tname: traverseString(artist, \"text\"),\n\t\t\t},\n\t\t\tduration: Parser.parseDuration(duration?.text),\n\t\t\tthumbnails: traverseList(item, \"thumbnails\"),\n\t\t}\n\t}\n\n\tpublic static parseArtistTopVideo(item: any, artistBasic: ArtistBasic): VideoDetailed {\n\t\treturn {\n\t\t\ttype: \"VIDEO\",\n\t\t\tvideoId: traverseString(item, \"videoId\"),\n\t\t\tname: traverseString(item, \"runs\", \"text\"),\n\t\t\tartist: artistBasic,\n\t\t\tduration: null,\n\t\t\tthumbnails: traverseList(item, \"thumbnails\"),\n\t\t}\n\t}\n\n\tpublic static parsePlaylistVideo(item: any): VideoDetailed | undefined {\n\t\tconst flexColumns = traverseList(item, \"flexColumns\", \"runs\").flat()\n\t\tconst fixedcolumns = traverseList(item, \"fixedColumns\", \"runs\").flat()\n\n\t\tconst title = flexColumns.find(isTitle) || flexColumns[0]\n\t\tconst artist = flexColumns.find(isArtist) || flexColumns[1]\n\t\tconst duration = fixedcolumns.find(isDuration)\n\n\t\tconst videoId1: string = traverseString(item, \"playNavigationEndpoint\", \"videoId\")\n\t\tconst videoId2: string[] = traverseList(item, \"thumbnails\")[0].url.match(/https:\\/\\/i\\.ytimg\\.com\\/vi\\/(.+)\\//,)\n\n\t\tif (videoId1 == '' && videoId2 == null) {\n\t\t\treturn\n\t\t}\n\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"VIDEO\",\n\t\t\t\tvideoId: videoId1 || videoId2[1] as string,\n\t\t\t\tname: traverseString(title, \"text\"),\n\t\t\t\tartist: {\n\t\t\t\t\tname: traverseString(artist, \"text\"),\n\t\t\t\t\tartistId: traverseString(artist, \"browseId\") || null,\n\t\t\t\t},\n\t\t\t\tduration: Parser.parseDuration(duration?.text),\n\t\t\t\tthumbnails: traverseList(item, \"thumbnails\"),\n\t\t\t},\n\t\t\tVideoDetailed,\n\t\t)\n\t}\n}\n","import { ArtistDetailed, ArtistFull } from \"../types\"\nimport checkType from \"../utils/checkType\"\nimport { traverseList, traverseString } from \"../utils/traverse\"\nimport AlbumParser from \"./AlbumParser\"\nimport PlaylistParser from \"./PlaylistParser\"\nimport SongParser from \"./SongParser\"\nimport VideoParser from \"./VideoParser\"\n\nexport default class ArtistParser {\n\tpublic static parse(data: any, artistId: string): ArtistFull {\n\t\tconst artistBasic = {\n\t\t\tartistId,\n\t\t\tname: traverseString(data, \"header\", \"title\", \"text\"),\n\t\t}\n\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"ARTIST\",\n\t\t\t\t...artistBasic,\n\t\t\t\tthumbnails: traverseList(data, \"header\", \"thumbnails\"),\n\t\t\t\ttopSongs: traverseList(data, \"musicShelfRenderer\", \"contents\").map(item =>\n\t\t\t\t\tSongParser.parseArtistTopSong(item, artistBasic),\n\t\t\t\t),\n\t\t\t\ttopAlbums:\n\t\t\t\t\ttraverseList(data, \"musicCarouselShelfRenderer\")\n\t\t\t\t\t\t?.at(0)\n\t\t\t\t\t\t?.contents.map((item: any) =>\n\t\t\t\t\t\t\tAlbumParser.parseArtistTopAlbum(item, artistBasic),\n\t\t\t\t\t\t) ?? [],\n\t\t\t\ttopSingles:\n\t\t\t\t\ttraverseList(data, \"musicCarouselShelfRenderer\")\n\t\t\t\t\t\t?.at(1)\n\t\t\t\t\t\t?.contents.map((item: any) =>\n\t\t\t\t\t\t\tAlbumParser.parseArtistTopAlbum(item, artistBasic),\n\t\t\t\t\t\t) ?? [],\n\t\t\t\ttopVideos:\n\t\t\t\t\ttraverseList(data, \"musicCarouselShelfRenderer\")\n\t\t\t\t\t\t?.at(2)\n\t\t\t\t\t\t?.contents.map((item: any) =>\n\t\t\t\t\t\t\tVideoParser.parseArtistTopVideo(item, artistBasic),\n\t\t\t\t\t\t) ?? [],\n\t\t\t\tfeaturedOn:\n\t\t\t\t\ttraverseList(data, \"musicCarouselShelfRenderer\")\n\t\t\t\t\t\t?.at(3)\n\t\t\t\t\t\t?.contents.map((item: any) =>\n\t\t\t\t\t\t\tPlaylistParser.parseArtistFeaturedOn(item, artistBasic),\n\t\t\t\t\t\t) ?? [],\n\t\t\t\tsimilarArtists:\n\t\t\t\t\ttraverseList(data, \"musicCarouselShelfRenderer\")\n\t\t\t\t\t\t?.at(4)\n\t\t\t\t\t\t?.contents.map((item: any) => this.parseSimilarArtists(item)) ?? [],\n\t\t\t},\n\t\t\tArtistFull,\n\t\t)\n\t}\n\n\tpublic static parseSearchResult(item: any): ArtistDetailed {\n\t\tconst columns = traverseList(item, \"flexColumns\", \"runs\").flat()\n\n\t\t// No specific way to identify the title\n\t\tconst title = columns[0]\n\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"ARTIST\",\n\t\t\t\tartistId: traverseString(item, \"browseId\"),\n\t\t\t\tname: traverseString(title, \"text\"),\n\t\t\t\tthumbnails: traverseList(item, \"thumbnails\"),\n\t\t\t},\n\t\t\tArtistDetailed,\n\t\t)\n\t}\n\n\tpublic static parseSimilarArtists(item: any): ArtistDetailed {\n\t\treturn checkType(\n\t\t\t{\n\t\t\t\ttype: \"ARTIST\",\n\t\t\t\tartistId: traverseString(item, \"browseId\"),\n\t\t\t\tname: traverseString(item, \"runs\", \"text\"),\n\t\t\t\tthumbnails: traverseList(item, \"thumbnails\"),\n\t\t\t},\n\t\t\tArtistDetailed,\n\t\t)\n\t}\n}\n","import { SearchResult } from \"../types\"\nimport { traverseList } from \"../utils/traverse\"\nimport AlbumParser from \"./AlbumParser\"\nimport ArtistParser from \"./ArtistParser\"\nimport PlaylistParser from \"./PlaylistParser\"\nimport SongParser from \"./SongParser\"\nimport VideoParser from \"./VideoParser\"\n\nexport default class SearchParser {\n\tpublic static parse(item: any): SearchResult | null {\n\t\tconst flexColumns = traverseList(item, \"flexColumns\")\n\t\tconst type = traverseList(flexColumns[1], \"runs\", \"text\").at(0) as\n\t\t\t| \"Song\"\n\t\t\t| \"Video\"\n\t\t\t| \"Artist\"\n\t\t\t| \"EP\"\n\t\t\t| \"Single\"\n\t\t\t| \"Album\"\n\t\t\t| \"Playlist\"\n\n\t\tconst parsers = {\n\t\t\tSong: SongParser.parseSearchResult,\n\t\t\tVideo: VideoParser.parseSearchResult,\n\t\t\tArtist: ArtistParser.parseSearchResult,\n\t\t\tEP: AlbumParser.parseSearchResult,\n\t\t\tSingle: AlbumParser.parseSearchResult,\n\t\t\tAlbum: AlbumParser.parseSearchResult,\n\t\t\tPlaylist: PlaylistParser.parseSearchResult,\n\t\t}\n\n\t\tif (parsers[type]) {\n\t\t\treturn parsers[type](item)\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t}\n}\n","import YTMusic from \"./YTMusic\"\n\nexport type {\n\tAlbumBasic,\n\tAlbumDetailed,\n\tAlbumFull,\n\tArtistBasic,\n\tArtistDetailed,\n\tArtistFull,\n\tPlaylistDetailed,\n\tPlaylistFull,\n\tSearchResult,\n\tSongDetailed,\n\tSongFull,\n\tThumbnailFull,\n\tVideoDetailed,\n\tVideoFull,\n\tHomeSection,\n} from \"./types\"\n\nexport default YTMusic\n"],"mappings":"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","names":["ZodFirstPartyTypeKind","ZodFirstPartyTypeKind","ZodFirstPartyTypeKind","types","x","base","ZodFirstPartyTypeKind","name","schema","data","videoId","data"]}