From 5a458d55573f1dbb749a8d00ccecfeacfc00926f Mon Sep 17 00:00:00 2001 From: Zechariah Date: Fri, 31 Dec 2021 00:15:58 +0800 Subject: [PATCH] Published types properly --- package.json | 6 +++--- src/{YTMusic.ts => Api.ts} | 3 ++- src/{types.d.ts => index.ts} | 32 +++++++++++++++++++------------- src/parsers/AlbumParser.ts | 1 + src/parsers/ArtistParser.ts | 5 +++-- src/parsers/Parser.ts | 2 +- src/parsers/PlaylistParser.ts | 1 + src/parsers/SearchParser.ts | 1 + src/parsers/SongParser.ts | 1 + src/parsers/VideoParser.ts | 1 + src/tests/all.ts | 4 ++-- src/tests/interfaces.ts | 3 ++- src/tests/run.ts | 4 ++-- 13 files changed, 39 insertions(+), 25 deletions(-) rename src/{YTMusic.ts => Api.ts} (99%) rename src/{types.d.ts => index.ts} (66%) diff --git a/package.json b/package.json index 77fc50b..cd055b8 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "ytmusic-api", - "version": "1.0.1", + "version": "1.0.2", "description": "YouTube Music API", - "main": "build/YTMusic.js", - "types": "build/YTMusic.d.ts", + "main": "build/index.js", + "types": "build/index.d.ts", "author": "zS1L3NT (http://www.zectan.com)", "license": "ISC", "repository": { diff --git a/src/YTMusic.ts b/src/Api.ts similarity index 99% rename from src/YTMusic.ts rename to src/Api.ts index 93c25ec..5d465d4 100644 --- a/src/YTMusic.ts +++ b/src/Api.ts @@ -6,9 +6,10 @@ import SearchParser from "./parsers/SearchParser" import SongParser from "./parsers/SongParser" import traverse from "./utils/traverse" import VideoParser from "./parsers/VideoParser" +import YTMusic from "." import { Cookie, CookieJar } from "tough-cookie" -export default class YTMusic { +export default class Api { private cookiejar: CookieJar private config?: Record private client: AxiosInstance diff --git a/src/types.d.ts b/src/index.ts similarity index 66% rename from src/types.d.ts rename to src/index.ts index beadf25..8d1cac2 100644 --- a/src/types.d.ts +++ b/src/index.ts @@ -1,11 +1,15 @@ +import Api from "./Api" + declare namespace YTMusic { - interface ThumbnailFull { + export { Api } + + export interface ThumbnailFull { url: string width: number height: number } - interface SongDetailed { + export interface SongDetailed { type: "SONG" videoId: string | null name: string @@ -15,13 +19,13 @@ declare namespace YTMusic { thumbnails: ThumbnailFull[] } - interface SongFull extends Omit { + export interface SongFull extends Omit { description: string formats: any[] adaptiveFormats: any[] } - interface VideoDetailed { + export interface VideoDetailed { type: "VIDEO" videoId: string | null name: string @@ -31,7 +35,7 @@ declare namespace YTMusic { thumbnails: ThumbnailFull[] } - interface VideoFull extends VideoDetailed { + export interface VideoFull extends VideoDetailed { description: string unlisted: boolean familySafe: boolean @@ -39,30 +43,30 @@ declare namespace YTMusic { tags: string[] } - interface ArtistBasic { + export interface ArtistBasic { artistId: string | null name: string } - interface ArtistDetailed extends ArtistBasic { + export interface ArtistDetailed extends ArtistBasic { type: "ARTIST" artistId: string thumbnails: ThumbnailFull[] } - interface ArtistFull extends ArtistDetailed { + export interface ArtistFull extends ArtistDetailed { description: string | null subscribers: number topSongs: Omit[] topAlbums: AlbumDetailed[] } - interface AlbumBasic { + export interface AlbumBasic { albumId: string name: string } - interface AlbumDetailed extends AlbumBasic { + export interface AlbumDetailed extends AlbumBasic { type: "ALBUM" playlistId: string artists: ArtistBasic[] @@ -70,12 +74,12 @@ declare namespace YTMusic { thumbnails: ThumbnailFull[] } - interface AlbumFull extends AlbumDetailed { + export interface AlbumFull extends AlbumDetailed { description: string | null songs: SongDetailed[] } - interface PlaylistFull { + export interface PlaylistFull { type: "PLAYLIST" playlistId: string name: string @@ -84,10 +88,12 @@ declare namespace YTMusic { thumbnails: ThumbnailFull[] } - type SearchResult = + export type SearchResult = | SongDetailed | VideoDetailed | AlbumDetailed | ArtistDetailed | PlaylistFull } + +export default YTMusic diff --git a/src/parsers/AlbumParser.ts b/src/parsers/AlbumParser.ts index 12a51d9..83032d7 100644 --- a/src/parsers/AlbumParser.ts +++ b/src/parsers/AlbumParser.ts @@ -1,5 +1,6 @@ import SongParser from "./SongParser" import traverse from "../utils/traverse" +import YTMusic from ".." export default class AlbumParser { public static parse(data: any, albumId: string): YTMusic.AlbumFull { diff --git a/src/parsers/ArtistParser.ts b/src/parsers/ArtistParser.ts index b320cc6..475680b 100644 --- a/src/parsers/ArtistParser.ts +++ b/src/parsers/ArtistParser.ts @@ -1,7 +1,8 @@ import AlbumParser from "./AlbumParser" -import Parse from "./Parser" +import Parser from "./Parser" import SongParser from "./SongParser" import traverse from "../utils/traverse" +import YTMusic from ".." export default class ArtistParser { public static parse(data: any, artistId: string): YTMusic.ArtistFull { @@ -17,7 +18,7 @@ export default class ArtistParser { ...artistBasic, thumbnails: [traverse(data, "header", "thumbnails")].flat(), description: description instanceof Array ? null : description, - subscribers: Parse.parseNumber(traverse(data, "subscriberCountText", "text")), + subscribers: Parser.parseNumber(traverse(data, "subscriberCountText", "text")), topSongs: traverse(data, "musicShelfRenderer", "contents").map((item: any) => SongParser.parseArtistTopSong(item, artistBasic) ), diff --git a/src/parsers/Parser.ts b/src/parsers/Parser.ts index 9d7e119..e09e636 100644 --- a/src/parsers/Parser.ts +++ b/src/parsers/Parser.ts @@ -1,4 +1,4 @@ -export default class Parse { +export default class Parser { public static parseDuration(time: string) { const [seconds, minutes, hours] = time .split(":") diff --git a/src/parsers/PlaylistParser.ts b/src/parsers/PlaylistParser.ts index c1feb61..ab26e90 100644 --- a/src/parsers/PlaylistParser.ts +++ b/src/parsers/PlaylistParser.ts @@ -1,4 +1,5 @@ import traverse from "../utils/traverse" +import YTMusic from ".." export default class PlaylistParser { public static parse(data: any, playlistId: string): YTMusic.PlaylistFull { diff --git a/src/parsers/SearchParser.ts b/src/parsers/SearchParser.ts index 3aa703a..8ae6e1e 100644 --- a/src/parsers/SearchParser.ts +++ b/src/parsers/SearchParser.ts @@ -4,6 +4,7 @@ import PlaylistParser from "./PlaylistParser" import SongParser from "./SongParser" import traverse from "../utils/traverse" import VideoParser from "./VideoParser" +import YTMusic from ".." export default class SearchParser { public static parse(item: any): YTMusic.SearchResult { diff --git a/src/parsers/SongParser.ts b/src/parsers/SongParser.ts index 339a667..e7e2b86 100644 --- a/src/parsers/SongParser.ts +++ b/src/parsers/SongParser.ts @@ -1,5 +1,6 @@ import Parser from "./Parser" import traverse from "../utils/traverse" +import YTMusic from ".." export default class SongParser { public static parse(data: any): YTMusic.SongFull { diff --git a/src/parsers/VideoParser.ts b/src/parsers/VideoParser.ts index 527fdda..1f9f9c4 100644 --- a/src/parsers/VideoParser.ts +++ b/src/parsers/VideoParser.ts @@ -1,5 +1,6 @@ import Parser from "./Parser" import traverse from "../utils/traverse" +import YTMusic from ".." export default class VideoParser { public static parse(data: any): YTMusic.VideoFull { diff --git a/src/tests/all.ts b/src/tests/all.ts index 1f3133b..f03d17d 100644 --- a/src/tests/all.ts +++ b/src/tests/all.ts @@ -1,5 +1,5 @@ import Validator from "validate-any/build/classes/Validator" -import YTMusic from "../YTMusic" +import YTMusicApi from "../Api" import { ALBUM_DETAILED, ALBUM_FULL, @@ -15,7 +15,7 @@ import { import { LIST, validate } from "validate-any" const queries = ["Lilac", "Weekend", "Yours Raiden", "Eminem", "Lisa Hannigan"] -const ytmusic = new YTMusic() +const ytmusic = new YTMusicApi() ytmusic.initialize().then(() => queries.forEach(async query => { diff --git a/src/tests/interfaces.ts b/src/tests/interfaces.ts index 0a69542..a049675 100644 --- a/src/tests/interfaces.ts +++ b/src/tests/interfaces.ts @@ -1,4 +1,5 @@ import ObjectValidator from "validate-any/build/validators/ObjectValidator" +import YTMusic from "../index" import { BOOLEAN, LIST, NULL, NUMBER, OBJECT, OR, STRING } from "validate-any" export const THUMBNAIL_FULL: ObjectValidator = OBJECT({ @@ -113,7 +114,7 @@ export const ALBUM_FULL: ObjectValidator = OBJECT({ songs: LIST(SONG_DETAILED) }) -export const PLAYLIST_DETAILED: ObjectValidator = OBJECT({ +export const PLAYLIST_DETAILED: ObjectValidator = OBJECT({ type: STRING("PLAYLIST"), playlistId: STRING(), name: STRING(), diff --git a/src/tests/run.ts b/src/tests/run.ts index 9c016b1..000d78a 100644 --- a/src/tests/run.ts +++ b/src/tests/run.ts @@ -1,6 +1,6 @@ -import YTMusic from "../YTMusic" +import YTMusicApi from "../Api" -const ytmusic = new YTMusic() +const ytmusic = new YTMusicApi() ytmusic.initialize().then(() => { ytmusic.search("Lilac", "SONG").then(res => { ytmusic.getSong(res.find(r => !!r.videoId)!.videoId!).then(res => {