refactor: clean up, fix & remove outdated code (#228)

* dev: refactor and remove redundant code

* docs(music): update `Library` API ref

* docs: update examples

* chore: update lock file
This commit is contained in:
LuanRT
2022-11-06 03:32:16 -03:00
committed by GitHub
parent 1eda93ee08
commit aa334aacbd
50 changed files with 2006 additions and 2403 deletions

View File

@@ -50,7 +50,9 @@ export class SectionListContinuation extends YTNode {
constructor(data: any) {
super();
this.contents = Parser.parse(data.contents, true);
this.continuation = data.continuations?.[0].nextContinuationData.continuation || null;
this.continuation =
data.continuations?.[0]?.nextContinuationData?.continuation ||
data.continuations?.[0]?.reloadContinuationData?.continuation || null;
}
}
@@ -211,11 +213,11 @@ export default class Parser {
*/
static parseResponse(data: any) {
// Memoize the response objects by classname
this.#createMemo();
// TODO: is this parseItem?
const contents = Parser.parse(data.contents);
const contents_memo = this.#getMemo();
// End of memoization
this.#clearMemo();
this.#createMemo();
@@ -245,6 +247,17 @@ export default class Parser {
const live_chat_item_context_menu_supported_renderers_memo = this.#getMemo();
this.#clearMemo();
this.#createMemo();
const header = data.header ? Parser.parse(data.header) : null;
const header_memo = this.#getMemo();
this.#clearMemo();
this.#createMemo();
const sidebar = data.sidebar ? Parser.parseItem(data.sidebar) : null;
const sidebar_memo = this.#getMemo();
this.#clearMemo();
this.applyMutations(contents_memo, data.frameworkUpdates?.entityBatchUpdate?.mutations);
return {
@@ -252,6 +265,10 @@ export default class Parser {
actions_memo,
contents,
contents_memo,
header,
header_memo,
sidebar,
sidebar_memo,
live_chat_item_context_menu_supported_renderers,
live_chat_item_context_menu_supported_renderers_memo,
on_response_received_actions,
@@ -263,9 +280,7 @@ export default class Parser {
continuation: data.continuation ? Parser.parseC(data.continuation) : null,
continuation_contents: data.continuationContents ? Parser.parseLC(data.continuationContents) : null,
metadata: Parser.parse(data.metadata),
header: Parser.parse(data.header),
microformat: data.microformat ? Parser.parseItem(data.microformat) : null,
sidebar: Parser.parseItem(data.sidebar),
overlay: Parser.parseItem(data.overlay),
refinements: data.refinements || null,
estimated_results: data.estimatedResults ? parseInt(data.estimatedResults) : null,
@@ -390,8 +405,8 @@ export default class Parser {
throw new ParsingError('Expected array but got a single item');
}
static parse<T extends YTNode = YTNode>(data: any, requireArray: true, validTypes?: YTNodeConstructor<T> | YTNodeConstructor<T>[]) : ObservedArray<T> | null;
static parse<T extends YTNode = YTNode>(data: any, requireArray?: false | undefined, validTypes?: YTNodeConstructor<T> | YTNodeConstructor<T>[]) : SuperParsedResult<T>;
static parse<T extends YTNode = YTNode>(data: any, requireArray: true, validTypes?: YTNodeConstructor<T> | YTNodeConstructor<T>[]): ObservedArray<T> | null;
static parse<T extends YTNode = YTNode>(data: any, requireArray?: false | undefined, validTypes?: YTNodeConstructor<T> | YTNodeConstructor<T>[]): SuperParsedResult<T>;
static parse<T extends YTNode = YTNode>(data: any, requireArray?: boolean, validTypes?: YTNodeConstructor<T> | YTNodeConstructor<T>[]) {
if (!data) return null;
@@ -417,8 +432,9 @@ export default class Parser {
static applyMutations(memo: Memo, mutations: Array<any>) {
// Apply mutations to MusicMultiSelectMenuItems
const musicMultiSelectMenuItems = memo.getType(MusicMultiSelectMenuItem);
if (musicMultiSelectMenuItems.length > 0 && !mutations) {
const music_multi_select_menu_items = memo.getType(MusicMultiSelectMenuItem);
if (music_multi_select_menu_items.length > 0 && !mutations) {
console.warn(
new InnertubeError(
'Mutation data required for processing MusicMultiSelectMenuItems, but none found.\n' +
@@ -426,26 +442,25 @@ export default class Parser {
)
);
} else {
const missingOrInvalidMutations = [];
for (const menuItem of musicMultiSelectMenuItems) {
const mutation = mutations.find((mutation) => mutation.payload?.musicFormBooleanChoice?.id === menuItem.form_item_entity_key);
const missing_or_invalid_mutations = [];
for (const menu_item of music_multi_select_menu_items) {
const mutation = mutations
.find((mutation) => mutation.payload?.musicFormBooleanChoice?.id === menu_item.form_item_entity_key);
const choice = mutation?.payload.musicFormBooleanChoice;
if (choice?.selected !== undefined && choice?.opaqueToken) {
menuItem.selected = choice.selected;
if (menuItem.endpoint?.browse) {
menuItem.endpoint.browse.form_data = {
selectedValues: [ choice.opaqueToken ]
};
}
menu_item.selected = choice.selected;
} else {
missingOrInvalidMutations.push(`'${menuItem.title}'`);
missing_or_invalid_mutations.push(`'${menu_item.title}'`);
}
}
if (missingOrInvalidMutations.length > 0) {
if (missing_or_invalid_mutations.length > 0) {
console.warn(
new InnertubeError(
`Mutation data missing or invalid for ${missingOrInvalidMutations.length} out of ${musicMultiSelectMenuItems.length} MusicMultiSelectMenuItems. ` +
`The titles of the failed items are: ${missingOrInvalidMutations.join(', ')}.\n` +
`Mutation data missing or invalid for ${missing_or_invalid_mutations.length} out of ${music_multi_select_menu_items.length} MusicMultiSelectMenuItems. ` +
`The titles of the failed items are: ${missing_or_invalid_mutations.join(', ')}.\n` +
`This is a bug, please report it at ${package_json.bugs.url}`
)
);