diff --git a/src/parser/classes/Card.ts b/src/parser/classes/Card.ts index 444f78ec..23fd452c 100644 --- a/src/parser/classes/Card.ts +++ b/src/parser/classes/Card.ts @@ -6,8 +6,8 @@ class Card extends YTNode { teaser; content; - card_id: string; - feature: string; + card_id: string | null; + feature: string | null; cue_ranges: { start_card_active_ms: string; @@ -18,10 +18,10 @@ class Card extends YTNode { constructor(data: any) { super(); - this.teaser = Parser.parse(data.teaser); - this.content = Parser.parse(data.content); - this.card_id = data.cardId; - this.feature = data.feature; + this.teaser = Parser.parseItem(data.teaser); + this.content = Parser.parseItem(data.content); + this.card_id = data.cardId || null; + this.feature = data.feature || null; this.cue_ranges = data.cueRanges.map((cr: any) => ({ start_card_active_ms: cr.startCardActiveMs, @@ -32,4 +32,4 @@ class Card extends YTNode { } } -export default Card; \ No newline at end of file +export default Card; diff --git a/src/parser/classes/ProfileColumnStats.ts b/src/parser/classes/ProfileColumnStats.ts index 48a2a698..ab27337f 100644 --- a/src/parser/classes/ProfileColumnStats.ts +++ b/src/parser/classes/ProfileColumnStats.ts @@ -8,7 +8,7 @@ class ProfileColumnStats extends YTNode { constructor(data: any) { super(); - this.items = Parser.parse(data.items); + this.items = Parser.parseArray(data.items); } // XXX: alias for consistency @@ -17,4 +17,4 @@ class ProfileColumnStats extends YTNode { } } -export default ProfileColumnStats; \ No newline at end of file +export default ProfileColumnStats; diff --git a/src/parser/classes/Video.ts b/src/parser/classes/Video.ts index 3022573c..cc07e09a 100644 --- a/src/parser/classes/Video.ts +++ b/src/parser/classes/Video.ts @@ -1,6 +1,7 @@ import Parser from '../index'; import Text from './misc/Text'; import Author from './misc/Author'; +import Menu from './menus/Menu'; import Thumbnail from './misc/Thumbnail'; import NavigationEndpoint from './NavigationEndpoint'; import { timeToSeconds } from '../../utils/Utils'; @@ -53,8 +54,8 @@ class Video extends YTNode { })) || []; this.thumbnails = Thumbnail.fromResponse(data.thumbnail); - this.thumbnail_overlays = Parser.parse(data.thumbnailOverlays); - this.rich_thumbnail = data.richThumbnail && Parser.parse(data.richThumbnail); + this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays); + this.rich_thumbnail = data.richThumbnail ? Parser.parse(data.richThumbnail) : null; this.author = new Author(data.ownerText, data.ownerBadges, data.channelThumbnailSupportedRenderers?.channelThumbnailWithLinkRenderer?.thumbnail); this.endpoint = new NavigationEndpoint(data.navigationEndpoint); this.published = new Text(data.publishedTimeText); @@ -73,7 +74,7 @@ class Video extends YTNode { this.show_action_menu = data.showActionMenu; this.is_watched = data.isWatched || false; - this.menu = Parser.parse(data.menu); + this.menu = Parser.parseItem(data.menu, Menu); } get description(): string { diff --git a/src/parser/youtube/Search.ts b/src/parser/youtube/Search.ts index 97f47020..f24acff2 100644 --- a/src/parser/youtube/Search.ts +++ b/src/parser/youtube/Search.ts @@ -24,7 +24,7 @@ class Search extends Feed { super(actions, data, already_parsed); const contents = - this.page.contents?.item().as(TwoColumnSearchResults).primary_contents.item().as(SectionList).contents.array() || + this.page.contents?.item().as(TwoColumnSearchResults).primary_contents?.item().as(SectionList).contents.array() || this.page.on_response_received_commands?.[0].contents; const secondary_contents_maybe = this.page.contents?.item().key('secondary_contents'); @@ -59,7 +59,7 @@ class Search extends Feed { if (typeof card === 'string') { target_card = this.refinement_cards.cards.get({ query: card }); if (!target_card) - throw new InnertubeError('Refinement card not found!', { available_cards: this.refinement_card_queries }); + throw new InnertubeError(`Refinement card "${card}" not found`, { available_cards: this.refinement_card_queries }); } else if (card.type === 'SearchRefinementCard') { target_card = card; } else {