Personal Site

update now playing type to better reflect required data.

vielle.dev 0cf6c7d8 231373b8

verified
+45 -37
+45 -37
src/components/playing/spotify/types.ts
··· 37 37 return isRefreshToken(obj) && "refresh_token" in obj; 38 38 } 39 39 40 + type externalUrls = { 41 + spotify: string; 42 + }; 43 + 44 + const isExternalUrl = (obj: unknown): obj is externalUrls => 45 + isObj(obj) && "spotify" in obj && typeof obj.spotify === "string"; 46 + 40 47 export type nowPlaying = null | { 41 48 type: "track"; 42 - id: string; 43 49 name: string; 50 + 51 + external_urls: externalUrls; 52 + 44 53 album: { 54 + external_urls: externalUrls; 55 + name: string; 45 56 images: { 46 57 url: string; 47 - height: number; 48 - width: number; 49 58 }[]; 50 59 }; 51 60 artists: { 61 + external_urls: externalUrls; 52 62 name: string; 53 - id: string; 54 63 }[]; 55 64 }; 56 65 57 66 export function isNowPlaying(obj: unknown): obj is nowPlaying { 58 67 return ( 59 - isObj(obj) && 60 - "type" in obj && 61 - obj.type === "track" && 62 - "id" in obj && 63 - typeof obj.id === "string" && 64 - "name" in obj && 65 - typeof obj.name === "string" && 66 - "album" in obj && 67 - isObj(obj.album) && 68 - "images" in obj.album && 69 - Array.isArray(obj.album.images) && 70 - obj.album.images.reduce( 71 - (acc, curr) => 72 - acc && 73 - "url" in curr && 74 - typeof curr.url === "string" && 75 - "height" in curr && 76 - typeof curr.height === "number" && 77 - "width" in curr && 78 - typeof curr.width === "number", 79 - true, 80 - ) && 81 - "artists" in obj && 82 - Array.isArray(obj.artists) && 83 - obj.artists.reduce( 84 - (acc, curr) => 85 - acc && 86 - "name" in curr && 87 - typeof curr.name === "string" && 88 - "id" in curr && 89 - typeof curr.id === "string", 90 - true, 91 - ) 68 + obj === null || 69 + (isObj(obj) && 70 + "type" in obj && 71 + obj.type === "track" && 72 + "name" in obj && 73 + typeof obj.name === "string" && 74 + "external_urls" in obj && 75 + isExternalUrl(obj.external_urls) && 76 + "album" in obj && 77 + isObj(obj.album) && 78 + "external_urls" in obj.album && 79 + isExternalUrl(obj.album.external_urls) && 80 + "name" in obj.album && 81 + typeof obj.album.name === "string" && 82 + "images" in obj.album && 83 + Array.isArray(obj.album.images) && 84 + obj.album.images.reduce( 85 + (acc, curr) => 86 + acc && isObj(curr) && "url" in curr && typeof curr.url === "string", 87 + true, 88 + ) && 89 + "artists" in obj && 90 + Array.isArray(obj.artists) && 91 + obj.artists.reduce( 92 + (acc, curr) => 93 + acc && 94 + "external_urls" in curr && 95 + isExternalUrl(curr.external_urls) && 96 + "name" in curr && 97 + typeof curr.name === "string", 98 + true, 99 + )) 92 100 ); 93 101 }