Published types properly
This commit is contained in:
parent
513cada27a
commit
5a458d5557
|
|
@ -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 <zechariahtan144@gmail.com> (http://www.zectan.com)",
|
||||
"license": "ISC",
|
||||
"repository": {
|
||||
|
|
|
|||
|
|
@ -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<string, string>
|
||||
private client: AxiosInstance
|
||||
|
|
@ -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<SongDetailed, "album"> {
|
||||
export interface SongFull extends Omit<SongDetailed, "album"> {
|
||||
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<SongDetailed, "duration">[]
|
||||
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
|
||||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
),
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
export default class Parse {
|
||||
export default class Parser {
|
||||
public static parseDuration(time: string) {
|
||||
const [seconds, minutes, hours] = time
|
||||
.split(":")
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 => {
|
||||
|
|
|
|||
|
|
@ -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<YTMusic.ThumbnailFull> = OBJECT({
|
||||
|
|
@ -113,7 +114,7 @@ export const ALBUM_FULL: ObjectValidator<YTMusic.AlbumFull> = OBJECT({
|
|||
songs: LIST(SONG_DETAILED)
|
||||
})
|
||||
|
||||
export const PLAYLIST_DETAILED: ObjectValidator<YTMusic.PlaylistDetailed> = OBJECT({
|
||||
export const PLAYLIST_DETAILED: ObjectValidator<YTMusic.PlaylistFull> = OBJECT({
|
||||
type: STRING("PLAYLIST"),
|
||||
playlistId: STRING(),
|
||||
name: STRING(),
|
||||
|
|
|
|||
|
|
@ -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 => {
|
||||
|
|
|
|||
Loading…
Reference in New Issue