From 708c5f7394b4ea140836b9483848cb61b97ea1af Mon Sep 17 00:00:00 2001 From: LuanRT Date: Sun, 16 Jul 2023 17:38:16 -0300 Subject: [PATCH] feat(parser): add `MacroMarkersList` (#444) This should fix a few parsing issues that were happening after recent updates. --- .../classes/EngagementPanelSectionList.ts | 5 +++-- src/parser/classes/MacroMarkersInfoItem.ts | 17 +++++++++++++++++ src/parser/classes/MacroMarkersList.ts | 18 ++++++++++++++++++ src/parser/nodes.ts | 2 ++ 4 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 src/parser/classes/MacroMarkersInfoItem.ts create mode 100644 src/parser/classes/MacroMarkersList.ts diff --git a/src/parser/classes/EngagementPanelSectionList.ts b/src/parser/classes/EngagementPanelSectionList.ts index be3e1199..61e5094a 100644 --- a/src/parser/classes/EngagementPanelSectionList.ts +++ b/src/parser/classes/EngagementPanelSectionList.ts @@ -2,6 +2,7 @@ import { YTNode } from '../helpers.js'; import Parser, { type RawNode } from '../index.js'; import ContinuationItem from './ContinuationItem.js'; import EngagementPanelTitleHeader from './EngagementPanelTitleHeader.js'; +import MacroMarkersList from './MacroMarkersList.js'; import SectionList from './SectionList.js'; import StructuredDescriptionContent from './StructuredDescriptionContent.js'; @@ -9,7 +10,7 @@ export default class EngagementPanelSectionList extends YTNode { static type = 'EngagementPanelSectionList'; header: EngagementPanelTitleHeader | null; - content: SectionList | ContinuationItem | StructuredDescriptionContent | null; + content: SectionList | ContinuationItem | StructuredDescriptionContent | MacroMarkersList | null; target_id?: string; panel_identifier?: string; visibility?: string; @@ -17,7 +18,7 @@ export default class EngagementPanelSectionList extends YTNode { constructor(data: RawNode) { super(); this.header = Parser.parseItem(data.header, EngagementPanelTitleHeader); - this.content = Parser.parseItem(data.content, [ SectionList, ContinuationItem, StructuredDescriptionContent ]); + this.content = Parser.parseItem(data.content, [ SectionList, ContinuationItem, StructuredDescriptionContent, MacroMarkersList ]); this.panel_identifier = data.panelIdentifier; this.target_id = data.targetId; this.visibility = data.visibility; diff --git a/src/parser/classes/MacroMarkersInfoItem.ts b/src/parser/classes/MacroMarkersInfoItem.ts new file mode 100644 index 00000000..ed3fc97c --- /dev/null +++ b/src/parser/classes/MacroMarkersInfoItem.ts @@ -0,0 +1,17 @@ +import { YTNode } from '../helpers.js'; +import { Parser, type RawNode } from '../index.js'; +import Menu from './menus/Menu.js'; +import Text from './misc/Text.js'; + +export default class MacroMarkersInfoItem extends YTNode { + static type = 'MacroMarkersInfoItem'; + + info_text: Text; + menu: Menu | null; + + constructor(data: RawNode) { + super(); + this.info_text = new Text(data.infoText); + this.menu = Parser.parseItem(data.menu, Menu); + } +} \ No newline at end of file diff --git a/src/parser/classes/MacroMarkersList.ts b/src/parser/classes/MacroMarkersList.ts new file mode 100644 index 00000000..a31e30b2 --- /dev/null +++ b/src/parser/classes/MacroMarkersList.ts @@ -0,0 +1,18 @@ +import { YTNode, type ObservedArray } from '../helpers.js'; +import { Parser, type RawNode } from '../index.js'; +import { Text } from '../misc.js'; +import MacroMarkersInfoItem from './MacroMarkersInfoItem.js'; +import MacroMarkersListItem from './MacroMarkersListItem.js'; + +export default class MacroMarkersList extends YTNode { + static type = 'MacroMarkersList'; + + contents: ObservedArray; + sync_button_label: Text; + + constructor(data: RawNode) { + super(); + this.contents = Parser.parseArray(data.contents, [ MacroMarkersInfoItem, MacroMarkersListItem ]); + this.sync_button_label = new Text(data.syncButtonLabel); + } +} \ No newline at end of file diff --git a/src/parser/nodes.ts b/src/parser/nodes.ts index 1471e53c..e9617e11 100644 --- a/src/parser/nodes.ts +++ b/src/parser/nodes.ts @@ -180,6 +180,8 @@ export { default as LiveChatItemList } from './classes/LiveChatItemList.js'; export { default as LiveChatMessageInput } from './classes/LiveChatMessageInput.js'; export { default as LiveChatParticipant } from './classes/LiveChatParticipant.js'; export { default as LiveChatParticipantsList } from './classes/LiveChatParticipantsList.js'; +export { default as MacroMarkersInfoItem } from './classes/MacroMarkersInfoItem.js'; +export { default as MacroMarkersList } from './classes/MacroMarkersList.js'; export { default as MacroMarkersListItem } from './classes/MacroMarkersListItem.js'; export { default as Menu } from './classes/menus/Menu.js'; export { default as MenuNavigationItem } from './classes/menus/MenuNavigationItem.js';