]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/types/models/video/video-playlist.ts
Move typescript utils in its own directory
[github/Chocobozzz/PeerTube.git] / server / types / models / video / video-playlist.ts
1 import { MVideoPlaylistElementLight } from '@server/types/models/video/video-playlist-element'
2 import { PickWith } from '@shared/typescript-utils'
3 import { VideoPlaylistModel } from '../../../models/video/video-playlist'
4 import { MAccount, MAccountDefault, MAccountSummary, MAccountSummaryFormattable } from '../account'
5 import { MThumbnail } from './thumbnail'
6 import { MChannelDefault, MChannelSummary, MChannelSummaryFormattable, MChannelUrl } from './video-channels'
7
8 type Use<K extends keyof VideoPlaylistModel, M> = PickWith<VideoPlaylistModel, K, M>
9
10 // ############################################################################
11
12 export type MVideoPlaylist = Omit<VideoPlaylistModel, 'OwnerAccount' | 'VideoChannel' | 'VideoPlaylistElements' | 'Thumbnail'>
13
14 // ############################################################################
15
16 export type MVideoPlaylistId = Pick<MVideoPlaylist, 'id'>
17 export type MVideoPlaylistPrivacy = Pick<MVideoPlaylist, 'privacy'>
18 export type MVideoPlaylistUUID = Pick<MVideoPlaylist, 'uuid'>
19 export type MVideoPlaylistVideosLength = MVideoPlaylist & { videosLength?: number }
20
21 // ############################################################################
22
23 // With elements
24
25 export type MVideoPlaylistWithElements =
26 MVideoPlaylist &
27 Use<'VideoPlaylistElements', MVideoPlaylistElementLight[]>
28
29 export type MVideoPlaylistIdWithElements =
30 MVideoPlaylistId &
31 Use<'VideoPlaylistElements', MVideoPlaylistElementLight[]>
32
33 // ############################################################################
34
35 // With account
36
37 export type MVideoPlaylistOwner =
38 MVideoPlaylist &
39 Use<'OwnerAccount', MAccount>
40
41 export type MVideoPlaylistOwnerDefault =
42 MVideoPlaylist &
43 Use<'OwnerAccount', MAccountDefault>
44
45 // ############################################################################
46
47 // With thumbnail
48
49 export type MVideoPlaylistThumbnail =
50 MVideoPlaylist &
51 Use<'Thumbnail', MThumbnail>
52
53 export type MVideoPlaylistAccountThumbnail =
54 MVideoPlaylist &
55 Use<'OwnerAccount', MAccountDefault> &
56 Use<'Thumbnail', MThumbnail>
57
58 // ############################################################################
59
60 // With channel
61
62 export type MVideoPlaylistAccountChannelDefault =
63 MVideoPlaylist &
64 Use<'OwnerAccount', MAccountDefault> &
65 Use<'VideoChannel', MChannelDefault>
66
67 // ############################################################################
68
69 // With all associations
70
71 export type MVideoPlaylistFull =
72 MVideoPlaylistVideosLength &
73 Use<'OwnerAccount', MAccountDefault> &
74 Use<'VideoChannel', MChannelDefault> &
75 Use<'Thumbnail', MThumbnail>
76
77 // ############################################################################
78
79 // For API
80
81 export type MVideoPlaylistAccountChannelSummary =
82 MVideoPlaylist &
83 Use<'OwnerAccount', MAccountSummary> &
84 Use<'VideoChannel', MChannelSummary>
85
86 export type MVideoPlaylistFullSummary =
87 MVideoPlaylistVideosLength &
88 Use<'Thumbnail', MThumbnail> &
89 Use<'OwnerAccount', MAccountSummary> &
90 Use<'VideoChannel', MChannelSummary>
91
92 // ############################################################################
93
94 // Format for API or AP object
95
96 export type MVideoPlaylistFormattable =
97 MVideoPlaylistVideosLength &
98 Use<'OwnerAccount', MAccountSummaryFormattable> &
99 Use<'VideoChannel', MChannelSummaryFormattable>
100
101 export type MVideoPlaylistAP =
102 MVideoPlaylist &
103 Use<'Thumbnail', MThumbnail> &
104 Use<'VideoChannel', MChannelUrl>