tangled
alpha
login
or
join now
vielle.dev
/
site
0
fork
atom
Personal Site
0
fork
atom
overview
issues
pulls
pipelines
update now playing type to better reflect required data.
vielle.dev
7 months ago
0cf6c7d8
231373b8
verified
This commit was signed with the committer's
known signature
.
vielle.dev
SSH Key Fingerprint:
SHA256:/4bvxqoEh9iMdjAPgcgAgXKZZQTROL3ULiPt6nH9RSs=
+45
-37
1 changed file
expand all
collapse all
unified
split
src
components
playing
spotify
types.ts
+45
-37
src/components/playing/spotify/types.ts
···
37
37
return isRefreshToken(obj) && "refresh_token" in obj;
38
38
}
39
39
40
40
+
type externalUrls = {
41
41
+
spotify: string;
42
42
+
};
43
43
+
44
44
+
const isExternalUrl = (obj: unknown): obj is externalUrls =>
45
45
+
isObj(obj) && "spotify" in obj && typeof obj.spotify === "string";
46
46
+
40
47
export type nowPlaying = null | {
41
48
type: "track";
42
42
-
id: string;
43
49
name: string;
50
50
+
51
51
+
external_urls: externalUrls;
52
52
+
44
53
album: {
54
54
+
external_urls: externalUrls;
55
55
+
name: string;
45
56
images: {
46
57
url: string;
47
47
-
height: number;
48
48
-
width: number;
49
58
}[];
50
59
};
51
60
artists: {
61
61
+
external_urls: externalUrls;
52
62
name: string;
53
53
-
id: string;
54
63
}[];
55
64
};
56
65
57
66
export function isNowPlaying(obj: unknown): obj is nowPlaying {
58
67
return (
59
59
-
isObj(obj) &&
60
60
-
"type" in obj &&
61
61
-
obj.type === "track" &&
62
62
-
"id" in obj &&
63
63
-
typeof obj.id === "string" &&
64
64
-
"name" in obj &&
65
65
-
typeof obj.name === "string" &&
66
66
-
"album" in obj &&
67
67
-
isObj(obj.album) &&
68
68
-
"images" in obj.album &&
69
69
-
Array.isArray(obj.album.images) &&
70
70
-
obj.album.images.reduce(
71
71
-
(acc, curr) =>
72
72
-
acc &&
73
73
-
"url" in curr &&
74
74
-
typeof curr.url === "string" &&
75
75
-
"height" in curr &&
76
76
-
typeof curr.height === "number" &&
77
77
-
"width" in curr &&
78
78
-
typeof curr.width === "number",
79
79
-
true,
80
80
-
) &&
81
81
-
"artists" in obj &&
82
82
-
Array.isArray(obj.artists) &&
83
83
-
obj.artists.reduce(
84
84
-
(acc, curr) =>
85
85
-
acc &&
86
86
-
"name" in curr &&
87
87
-
typeof curr.name === "string" &&
88
88
-
"id" in curr &&
89
89
-
typeof curr.id === "string",
90
90
-
true,
91
91
-
)
68
68
+
obj === null ||
69
69
+
(isObj(obj) &&
70
70
+
"type" in obj &&
71
71
+
obj.type === "track" &&
72
72
+
"name" in obj &&
73
73
+
typeof obj.name === "string" &&
74
74
+
"external_urls" in obj &&
75
75
+
isExternalUrl(obj.external_urls) &&
76
76
+
"album" in obj &&
77
77
+
isObj(obj.album) &&
78
78
+
"external_urls" in obj.album &&
79
79
+
isExternalUrl(obj.album.external_urls) &&
80
80
+
"name" in obj.album &&
81
81
+
typeof obj.album.name === "string" &&
82
82
+
"images" in obj.album &&
83
83
+
Array.isArray(obj.album.images) &&
84
84
+
obj.album.images.reduce(
85
85
+
(acc, curr) =>
86
86
+
acc && isObj(curr) && "url" in curr && typeof curr.url === "string",
87
87
+
true,
88
88
+
) &&
89
89
+
"artists" in obj &&
90
90
+
Array.isArray(obj.artists) &&
91
91
+
obj.artists.reduce(
92
92
+
(acc, curr) =>
93
93
+
acc &&
94
94
+
"external_urls" in curr &&
95
95
+
isExternalUrl(curr.external_urls) &&
96
96
+
"name" in curr &&
97
97
+
typeof curr.name === "string",
98
98
+
true,
99
99
+
))
92
100
);
93
101
}