From 9014ac0395f5f6bde7ffb7fb9edaba81081ac682 Mon Sep 17 00:00:00 2001 From: LuanRT Date: Wed, 29 Mar 2023 01:30:16 +0000 Subject: [PATCH] chore: v4.1.1 release --- deno/package.json | 2 +- .../parser/classes/PlayerCaptionsTracklist.ts | 62 +++++++++++-------- deno/src/parser/youtube/Library.ts | 4 +- deno/src/parser/youtube/Search.ts | 2 +- deno/src/parser/youtube/TimeWatched.ts | 2 +- 5 files changed, 41 insertions(+), 31 deletions(-) diff --git a/deno/package.json b/deno/package.json index 9537af69..8ee25027 100644 --- a/deno/package.json +++ b/deno/package.json @@ -1,6 +1,6 @@ { "name": "youtubei.js", - "version": "4.1.0", + "version": "4.1.1", "description": "A wrapper around YouTube's private API. Supports YouTube, YouTube Music, YouTube Kids and YouTube Studio (WIP).", "type": "module", "types": "./dist/src/platform/lib.d.ts", diff --git a/deno/src/parser/classes/PlayerCaptionsTracklist.ts b/deno/src/parser/classes/PlayerCaptionsTracklist.ts index 569d859c..92c1ad6e 100644 --- a/deno/src/parser/classes/PlayerCaptionsTracklist.ts +++ b/deno/src/parser/classes/PlayerCaptionsTracklist.ts @@ -1,10 +1,11 @@ import Text from './misc/Text.ts'; import { YTNode } from '../helpers.ts'; +import { RawNode } from '../index.ts'; class PlayerCaptionsTracklist extends YTNode { static type = 'PlayerCaptionsTracklist'; - caption_tracks: { + caption_tracks?: { base_url: string; name: Text; vss_id: string; @@ -13,7 +14,7 @@ class PlayerCaptionsTracklist extends YTNode { is_translatable: boolean; }[]; - audio_tracks: { + audio_tracks?: { audio_track_id: string; captions_initial_state: string; default_caption_track_index: number; @@ -22,39 +23,48 @@ class PlayerCaptionsTracklist extends YTNode { caption_track_indices: number; }[]; - default_audio_track_index: number; + default_audio_track_index?: number; - translation_languages: { + translation_languages?: { language_code: string; language_name: Text; }[]; - constructor(data: any) { + constructor(data: RawNode) { super(); - this.caption_tracks = data.captionTracks.map((ct: any) => ({ - base_url: ct.baseUrl, - name: new Text(ct.name), - vss_id: ct.vssId, - language_code: ct.languageCode, - kind: ct.kind, - is_translatable: ct.isTranslatable - })); - this.audio_tracks = data.audioTracks.map((at: any) => ({ - audio_track_id: at.audioTrackId, - captions_initial_state: at.captionsInitialState, - default_caption_track_index: at.defaultCaptionTrackIndex, - has_default_track: at.hasDefaultTrack, - visibility: at.visibility, - caption_track_indices: at.captionTrackIndices - })); + if (Reflect.has(data, 'captionTracks')) { + this.caption_tracks = data.captionTracks.map((ct: any) => ({ + base_url: ct.baseUrl, + name: new Text(ct.name), + vss_id: ct.vssId, + language_code: ct.languageCode, + kind: ct.kind, + is_translatable: ct.isTranslatable + })); + } - this.default_audio_track_index = data.defaultAudioTrackIndex; + if (Reflect.has(data, 'audioTracks')) { + this.audio_tracks = data.audioTracks.map((at: any) => ({ + audio_track_id: at.audioTrackId, + captions_initial_state: at.captionsInitialState, + default_caption_track_index: at.defaultCaptionTrackIndex, + has_default_track: at.hasDefaultTrack, + visibility: at.visibility, + caption_track_indices: at.captionTrackIndices + })); + } - this.translation_languages = data.translationLanguages.map((tl: any) => ({ - language_code: tl.languageCode, - language_name: new Text(tl.languageName) - })); + if (Reflect.has(data, 'defaultAudioTrackIndex')) { + this.default_audio_track_index = data.defaultAudioTrackIndex; + } + + if (Reflect.has(data, 'translationLanguages')) { + this.translation_languages = data.translationLanguages.map((tl: any) => ({ + language_code: tl.languageCode, + language_name: new Text(tl.languageName) + })); + } } } diff --git a/deno/src/parser/youtube/Library.ts b/deno/src/parser/youtube/Library.ts index 16eb59b1..a061e362 100644 --- a/deno/src/parser/youtube/Library.ts +++ b/deno/src/parser/youtube/Library.ts @@ -28,8 +28,8 @@ class Library extends Feed { if (!this.page.contents_memo) throw new InnertubeError('Page contents not found'); - const stats = this.page.contents_memo.getType(ProfileColumnStats)?.[0]; - const user_info = this.page.contents_memo.getType(ProfileColumnUserInfo)?.[0]; + const stats = this.page.contents_memo.getType(ProfileColumnStats).first(); + const user_info = this.page.contents_memo.getType(ProfileColumnUserInfo).first(); this.profile = { stats, user_info }; diff --git a/deno/src/parser/youtube/Search.ts b/deno/src/parser/youtube/Search.ts index a46bf192..4a170453 100644 --- a/deno/src/parser/youtube/Search.ts +++ b/deno/src/parser/youtube/Search.ts @@ -30,7 +30,7 @@ class Search extends Feed { if (!contents) throw new InnertubeError('No contents found in search response'); - this.results = contents.firstOfType(ItemSection)?.contents; + this.results = contents.filterType(ItemSection).find((section) => section.contents && section.contents.length > 0)?.contents; this.refinements = this.page.refinements || []; this.estimated_results = this.page.estimated_results; diff --git a/deno/src/parser/youtube/TimeWatched.ts b/deno/src/parser/youtube/TimeWatched.ts index d43bc0c6..0411754b 100644 --- a/deno/src/parser/youtube/TimeWatched.ts +++ b/deno/src/parser/youtube/TimeWatched.ts @@ -13,7 +13,7 @@ class TimeWatched { contents?: ObservedArray; constructor(response: ApiResponse) { - this.#page = Parser.parseResponse(response.data); + this.#page = Parser.parseResponse(response.data); if (!this.#page.contents) throw new InnertubeError('Page contents not found');