Made more function calls type safer

This commit is contained in:
Zechariah 2022-03-28 01:16:55 +08:00
parent 577041359e
commit b03e38891e
1 changed files with 11 additions and 9 deletions

View File

@ -5,6 +5,8 @@ import PlaylistParser from "./parsers/PlaylistParser"
import SearchParser from "./parsers/SearchParser" import SearchParser from "./parsers/SearchParser"
import SongParser from "./parsers/SongParser" import SongParser from "./parsers/SongParser"
import traverse from "./utils/traverse" import traverse from "./utils/traverse"
import traverseList from "./utils/traverseList"
import traverseString from "./utils/traverseString"
import VideoParser from "./parsers/VideoParser" import VideoParser from "./parsers/VideoParser"
import { import {
AlbumDetailed, AlbumDetailed,
@ -203,7 +205,7 @@ export default class YTMusic {
* @returns Search suggestions * @returns Search suggestions
*/ */
public async getSearchSuggestions(query: string): Promise<string[]> { public async getSearchSuggestions(query: string): Promise<string[]> {
return traverse( return traverseList(
await this.constructRequest("music/get_search_suggestions", { await this.constructRequest("music/get_search_suggestions", {
input: query input: query
}), }),
@ -236,7 +238,7 @@ export default class YTMusic {
}[category!] || null }[category!] || null
}) })
return [traverse(searchData, "musicResponsiveListItemRenderer")].flat().map( return traverseList(searchData, "musicResponsiveListItemRenderer").map(
{ {
SONG: SongParser.parseSearchResult, SONG: SongParser.parseSearchResult,
VIDEO: VideoParser.parseSearchResult, VIDEO: VideoParser.parseSearchResult,
@ -308,8 +310,8 @@ export default class YTMusic {
) )
return [ return [
...traverse(songsData, "musicResponsiveListItemRenderer"), ...traverseList(songsData, "musicResponsiveListItemRenderer"),
...traverse(moreSongsData, "musicResponsiveListItemRenderer") ...traverseList(moreSongsData, "musicResponsiveListItemRenderer")
].map(SongParser.parseArtistSong) ].map(SongParser.parseArtistSong)
} }
@ -321,15 +323,15 @@ export default class YTMusic {
*/ */
public async getArtistAlbums(artistId: string): Promise<AlbumDetailed[]> { public async getArtistAlbums(artistId: string): Promise<AlbumDetailed[]> {
const artistData = await this.constructRequest("browse", { browseId: artistId }) const artistData = await this.constructRequest("browse", { browseId: artistId })
const artistAlbumsData = traverse(artistData, "musicCarouselShelfRenderer")[0] const artistAlbumsData = traverseList(artistData, "musicCarouselShelfRenderer")[0]
const browseBody = traverse(artistAlbumsData, "moreContentButton", "browseEndpoint") const browseBody = traverse(artistAlbumsData, "moreContentButton", "browseEndpoint")
const albumsData = await this.constructRequest("browse", browseBody) const albumsData = await this.constructRequest("browse", browseBody)
return traverse(albumsData, "musicTwoRowItemRenderer").map((item: any) => return traverseList(albumsData, "musicTwoRowItemRenderer").map(item =>
AlbumParser.parseArtistAlbum(item, { AlbumParser.parseArtistAlbum(item, {
artistId, artistId,
name: traverse(albumsData, "header", "text").at(0) name: traverseString(albumsData, "header", "text")()
}) })
) )
} }
@ -369,7 +371,7 @@ export default class YTMusic {
if (playlistId.startsWith("PL")) playlistId = "VL" + playlistId if (playlistId.startsWith("PL")) playlistId = "VL" + playlistId
const playlistData = await this.constructRequest("browse", { browseId: playlistId }) const playlistData = await this.constructRequest("browse", { browseId: playlistId })
const songs = traverse( const songs = traverseList(
playlistData, playlistData,
"musicPlaylistShelfRenderer", "musicPlaylistShelfRenderer",
"musicResponsiveListItemRenderer" "musicResponsiveListItemRenderer"
@ -379,7 +381,7 @@ export default class YTMusic {
if (continuation instanceof Array) break if (continuation instanceof Array) break
const songsData = await this.constructRequest("browse", {}, { continuation }) const songsData = await this.constructRequest("browse", {}, { continuation })
songs.push(...traverse(songsData, "musicResponsiveListItemRenderer")) songs.push(...traverseList(songsData, "musicResponsiveListItemRenderer"))
continuation = traverse(songsData, "continuation") continuation = traverse(songsData, "continuation")
} }