diff --git a/src/parser/classes/BrowseFeedActions.js b/src/parser/classes/BrowseFeedActions.ts similarity index 56% rename from src/parser/classes/BrowseFeedActions.js rename to src/parser/classes/BrowseFeedActions.ts index 9b05b034..9c78f542 100644 --- a/src/parser/classes/BrowseFeedActions.js +++ b/src/parser/classes/BrowseFeedActions.ts @@ -4,9 +4,11 @@ import { YTNode } from '../helpers'; class BrowseFeedActions extends YTNode { static type = 'BrowseFeedActions'; - constructor(data) { + contents; + + constructor(data: any) { super(); - this.contents = Parser.parse(data.contents); + this.contents = Parser.parseArray(data.contents); } } diff --git a/src/parser/classes/ItemSection.js b/src/parser/classes/ItemSection.ts similarity index 56% rename from src/parser/classes/ItemSection.js rename to src/parser/classes/ItemSection.ts index 037e7f55..822552f3 100644 --- a/src/parser/classes/ItemSection.js +++ b/src/parser/classes/ItemSection.ts @@ -1,12 +1,18 @@ import Parser from '../index'; +import ItemSectionHeader from './ItemSectionHeader'; + import { YTNode } from '../helpers'; class ItemSection extends YTNode { static type = 'ItemSection'; - constructor(data) { + header: ItemSectionHeader | null; + contents; + target_id; + + constructor(data: any) { super(); - this.header = Parser.parse(data.header); + this.header = Parser.parseItem(data.header, ItemSectionHeader); this.contents = Parser.parse(data.contents, true); if (data.targetId || data.sectionIdentifier) { diff --git a/src/parser/classes/ItemSectionHeader.js b/src/parser/classes/ItemSectionHeader.ts similarity index 73% rename from src/parser/classes/ItemSectionHeader.js rename to src/parser/classes/ItemSectionHeader.ts index 17a822f5..caea87fd 100644 --- a/src/parser/classes/ItemSectionHeader.js +++ b/src/parser/classes/ItemSectionHeader.ts @@ -4,7 +4,9 @@ import { YTNode } from '../helpers'; class ItemSectionHeader extends YTNode { static type = 'ItemSectionHeader'; - constructor(data) { + title: Text; + + constructor(data: any) { super(); this.title = new Text(data.title); } diff --git a/src/parser/classes/MusicImmersiveHeader.js b/src/parser/classes/MusicImmersiveHeader.ts similarity index 65% rename from src/parser/classes/MusicImmersiveHeader.js rename to src/parser/classes/MusicImmersiveHeader.ts index 120bcac3..bb5aac03 100644 --- a/src/parser/classes/MusicImmersiveHeader.js +++ b/src/parser/classes/MusicImmersiveHeader.ts @@ -1,15 +1,21 @@ import Text from './misc/Text'; import Parser from '../index'; +import MusicThumbnail from './MusicThumbnail'; + import { YTNode } from '../helpers'; class MusicImmersiveHeader extends YTNode { static type = 'MusicImmersiveHeader'; - constructor(data) { + title: Text; + description: Text; + thumbnail: MusicThumbnail | null; + + constructor(data: any) { super(); this.title = new Text(data.title); this.description = new Text(data.description); - this.thumbnails = Parser.parse(data.thumbnail); + this.thumbnail = Parser.parseItem(data.thumbnail, MusicThumbnail); /** Not useful for now. this.menu = Parser.parse(data.menu); diff --git a/src/parser/classes/MusicShelf.ts b/src/parser/classes/MusicShelf.ts new file mode 100644 index 00000000..159622c3 --- /dev/null +++ b/src/parser/classes/MusicShelf.ts @@ -0,0 +1,28 @@ +import Parser from '../index'; +import Text from './misc/Text'; +import NavigationEndpoint from './NavigationEndpoint'; +import MusicResponsiveListItem from './MusicResponsiveListItem'; + +import { YTNode } from '../helpers'; + +class MusicShelf extends YTNode { + static type = 'MusicShelf'; + + title: Text; + contents; + endpoint: NavigationEndpoint | null; + continuation: string | null; + bottom_text: Text | null; + + constructor(data: any) { + super(); + + this.title = new Text(data.title); + this.contents = Parser.parseArray(data.contents, MusicResponsiveListItem); + this.endpoint = Reflect.has(data, 'bottomEndpoint') ? new NavigationEndpoint(data.bottomEndpoint) : null; + this.continuation = data.continuations?.[0]?.nextContinuationData?.continuation || null; + this.bottom_text = Reflect.has(data, 'bottomText') ? new Text(data.bottomText) : null; + } +} + +export default MusicShelf; \ No newline at end of file diff --git a/src/parser/classes/MusicThumbnail.js b/src/parser/classes/MusicThumbnail.ts similarity index 57% rename from src/parser/classes/MusicThumbnail.js rename to src/parser/classes/MusicThumbnail.ts index ecc4a7f9..6f643ab2 100644 --- a/src/parser/classes/MusicThumbnail.js +++ b/src/parser/classes/MusicThumbnail.ts @@ -4,9 +4,11 @@ import { YTNode } from '../helpers'; class MusicThumbnail extends YTNode { static type = 'MusicThumbnail'; - constructor(data) { + contents; + + constructor(data: any) { super(); - return Thumbnail.fromResponse(data.thumbnail); + this.contents = Thumbnail.fromResponse(data.thumbnail); } } diff --git a/src/parser/classes/SingleColumnBrowseResults.js b/src/parser/classes/SingleColumnBrowseResults.ts similarity index 53% rename from src/parser/classes/SingleColumnBrowseResults.js rename to src/parser/classes/SingleColumnBrowseResults.ts index e7f08bfb..4edfad34 100644 --- a/src/parser/classes/SingleColumnBrowseResults.js +++ b/src/parser/classes/SingleColumnBrowseResults.ts @@ -1,12 +1,16 @@ import Parser from '../index'; +import Tab from './Tab'; + import { YTNode } from '../helpers'; class SingleColumnBrowseResults extends YTNode { static type = 'SingleColumnBrowseResults'; - constructor(data) { + tabs; + + constructor(data: any) { super(); - this.tabs = Parser.parse(data.tabs); + this.tabs = Parser.parseArray(data.tabs, Tab); } } diff --git a/src/parser/classes/TabbedSearchResults.js b/src/parser/classes/TabbedSearchResults.ts similarity index 53% rename from src/parser/classes/TabbedSearchResults.js rename to src/parser/classes/TabbedSearchResults.ts index 20ba4d2a..893882c7 100644 --- a/src/parser/classes/TabbedSearchResults.js +++ b/src/parser/classes/TabbedSearchResults.ts @@ -1,12 +1,15 @@ import Parser from '../index'; import { YTNode } from '../helpers'; +import Tab from './Tab'; class TabbedSearchResults extends YTNode { static type = 'TabbedSearchResults'; - constructor(data) { + tabs; + + constructor(data: any) { super(); - this.tabs = Parser.parse(data.tabs); + this.tabs = Parser.parseArray(data.tabs, Tab); } }