'use strict'; const { InnertubeError } = require('../utils/Utils'); const Feed = require('./Feed'); class TabbedFeed extends Feed { /** * @type {import('../parser/contents/classes/Tab')[]} */ #tabs; #actions; constructor (actions, data, already_parsed = false) { super(actions, data, already_parsed); this.#actions = actions; this.#tabs = this.page.contents_memo.get('Tab'); } get tabs() { return this.#tabs.map((tab) => tab.title.toString()); } /** * @param {string} title * @returns {Promise} */ async getTab(title) { const tab = this.#tabs.find((tab) => tab.title.toLowerCase() === title.toLowerCase()); if (!tab) throw new InnertubeError(`Tab "${title}" not found`); if (tab.selected) return this; const response = await tab.endpoint.call(this.#actions); return new TabbedFeed(this.#actions, response, true); } get title() { return this.page.contents_memo('Tab')?.find((tab) => tab.selected)?.title.toString(); } } module.exports = TabbedFeed;