43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
import AlbumParser from "./AlbumParser"
|
|
import Parser from "./Parser"
|
|
import SongParser from "./SongParser"
|
|
import traverse from "../utils/traverse"
|
|
import YTMusic from ".."
|
|
|
|
export default class ArtistParser {
|
|
public static parse(data: any, artistId: string): YTMusic.ArtistFull {
|
|
const artistBasic = {
|
|
artistId,
|
|
name: traverse(data, "header", "title", "text").at(0)
|
|
}
|
|
|
|
const description = traverse(data, "header", "description", "text")
|
|
|
|
return {
|
|
type: "ARTIST",
|
|
...artistBasic,
|
|
thumbnails: [traverse(data, "header", "thumbnails")].flat(),
|
|
description: description instanceof Array ? null : description,
|
|
subscribers: Parser.parseNumber(traverse(data, "subscriberCountText", "text")),
|
|
topSongs: traverse(data, "musicShelfRenderer", "contents").map((item: any) =>
|
|
SongParser.parseArtistTopSong(item, artistBasic)
|
|
),
|
|
topAlbums: [traverse(data, "musicCarouselShelfRenderer")]
|
|
.flat()
|
|
.at(0)
|
|
.contents.map((item: any) => AlbumParser.parseArtistTopAlbums(item, artistBasic))
|
|
}
|
|
}
|
|
|
|
public static parseSearchResult(item: any): YTMusic.ArtistDetailed {
|
|
const flexColumns = traverse(item, "flexColumns")
|
|
|
|
return {
|
|
type: "ARTIST",
|
|
artistId: traverse(item, "browseId"),
|
|
name: traverse(flexColumns[0], "runs", "text"),
|
|
thumbnails: [traverse(item, "thumbnails")].flat()
|
|
}
|
|
}
|
|
}
|