import { BOOLEAN, LIST, NULL, NUMBER, OBJECT, OR, STRING } from "validate-any" import ObjectValidator from "validate-any/dist/validators/ObjectValidator" import { AlbumBasic, AlbumDetailed, AlbumFull, ArtistBasic, ArtistDetailed, ArtistFull, PlaylistFull, SongDetailed, SongFull, ThumbnailFull, VideoDetailed, VideoFull } from "./" export const THUMBNAIL_FULL: ObjectValidator = OBJECT({ url: STRING(), width: NUMBER(), height: NUMBER() }) export const ARTIST_BASIC: ObjectValidator = OBJECT({ artistId: STRING(), name: STRING() }) export const ALBUM_BASIC: ObjectValidator = OBJECT({ albumId: STRING(), name: STRING() }) export const SONG_DETAILED: ObjectValidator = OBJECT({ type: STRING("SONG"), videoId: STRING(), name: STRING(), artists: LIST(ARTIST_BASIC), album: ALBUM_BASIC, duration: NUMBER(), thumbnails: LIST(THUMBNAIL_FULL) }) export const VIDEO_DETAILED: ObjectValidator = OBJECT({ type: STRING("VIDEO"), videoId: STRING(), name: STRING(), artists: LIST(ARTIST_BASIC), duration: NUMBER(), thumbnails: LIST(THUMBNAIL_FULL) }) export const ARTIST_DETAILED: ObjectValidator = OBJECT({ artistId: STRING(), name: STRING(), type: STRING("ARTIST"), thumbnails: LIST(THUMBNAIL_FULL) }) export const ALBUM_DETAILED: ObjectValidator = OBJECT({ type: STRING("ALBUM"), albumId: STRING(), playlistId: STRING(), name: STRING(), artists: LIST(ARTIST_BASIC), year: OR(NUMBER(), NULL()), thumbnails: LIST(THUMBNAIL_FULL) }) export const SONG_FULL: ObjectValidator = OBJECT({ type: STRING("SONG"), videoId: STRING(), name: STRING(), artists: LIST(ARTIST_BASIC), duration: NUMBER(), thumbnails: LIST(THUMBNAIL_FULL), description: STRING(), formats: LIST(OBJECT()), adaptiveFormats: LIST(OBJECT()) }) export const VIDEO_FULL: ObjectValidator = OBJECT({ type: STRING("VIDEO"), videoId: STRING(), name: STRING(), artists: LIST(ARTIST_BASIC), duration: NUMBER(), thumbnails: LIST(THUMBNAIL_FULL), description: STRING(), unlisted: BOOLEAN(), familySafe: BOOLEAN(), paid: BOOLEAN(), tags: LIST(STRING()) }) export const ARTIST_FULL: ObjectValidator = OBJECT({ artistId: STRING(), name: STRING(), type: STRING("ARTIST"), thumbnails: LIST(THUMBNAIL_FULL), description: STRING(), topSongs: LIST( OBJECT({ type: STRING("SONG"), videoId: STRING(), name: STRING(), artists: LIST(ARTIST_BASIC), album: ALBUM_BASIC, thumbnails: LIST(THUMBNAIL_FULL) }) ), topAlbums: LIST(ALBUM_DETAILED) }) export const ALBUM_FULL: ObjectValidator = OBJECT({ type: STRING("ALBUM"), albumId: STRING(), playlistId: STRING(), name: STRING(), artists: LIST(ARTIST_BASIC), year: OR(NUMBER(), NULL()), thumbnails: LIST(THUMBNAIL_FULL), description: STRING(), songs: LIST(SONG_DETAILED) }) export const PLAYLIST_FULL: ObjectValidator = OBJECT({ type: STRING("PLAYLIST"), playlistId: STRING(), name: STRING(), artist: ARTIST_BASIC, videoCount: NUMBER(), thumbnails: LIST(THUMBNAIL_FULL) })