import { FunctionProperties, PickWith, PickWithOpt } from '@shared/typescript-utils' import { VideoChannelModel } from '../../../models/video/video-channel' import { MAccountActor, MAccountAPI, MAccountDefault, MAccountFormattable, MAccountLight, MAccountSummaryBlocks, MAccountSummaryFormattable, MAccountUrl, MAccountUserId } from '../account' import { MActor, MActorAccountChannelId, MActorAPChannel, MActorAPI, MActorDefault, MActorDefaultBanner, MActorDefaultLight, MActorFormattable, MActorHost, MActorHostOnly, MActorLight, MActorSummary, MActorSummaryFormattable, MActorUrl } from '../actor' import { MVideo } from './video' type Use = PickWith // ############################################################################ export type MChannel = Omit // ############################################################################ export type MChannelId = Pick // ############################################################################ export type MChannelIdActor = MChannelId & Use<'Actor', MActorAccountChannelId> export type MChannelUserId = Pick & Use<'Account', MAccountUserId> export type MChannelActor = MChannel & Use<'Actor', MActor> export type MChannelUrl = Use<'Actor', MActorUrl> // Default scope export type MChannelDefault = MChannel & Use<'Actor', MActorDefault> export type MChannelBannerDefault = MChannel & Use<'Actor', MActorDefaultBanner> // ############################################################################ // Not all association attributes export type MChannelActorLight = MChannel & Use<'Actor', MActorLight> export type MChannelAccountLight = MChannel & Use<'Actor', MActorDefaultLight> & Use<'Account', MAccountLight> export type MChannelHost = MChannel & Use<'Actor', MActorHost> export type MChannelHostOnly = MChannelId & Use<'Actor', MActorHostOnly> // ############################################################################ // Account associations export type MChannelAccountActor = MChannel & Use<'Account', MAccountActor> export type MChannelBannerAccountDefault = MChannel & Use<'Actor', MActorDefaultBanner> & Use<'Account', MAccountDefault> export type MChannelAccountDefault = MChannel & Use<'Actor', MActorDefault> & Use<'Account', MAccountDefault> // ############################################################################ // Videos associations export type MChannelVideos = MChannel & Use<'Videos', MVideo[]> // ############################################################################ // For API export type MChannelSummary = FunctionProperties & Pick & Use<'Actor', MActorSummary> export type MChannelSummaryAccount = MChannelSummary & Use<'Account', MAccountSummaryBlocks> export type MChannelAPI = MChannel & Use<'Actor', MActorAPI> & Use<'Account', MAccountAPI> // ############################################################################ // Format for API or AP object export type MChannelSummaryFormattable = FunctionProperties & Pick & Use<'Actor', MActorSummaryFormattable> export type MChannelAccountSummaryFormattable = MChannelSummaryFormattable & Use<'Account', MAccountSummaryFormattable> export type MChannelFormattable = FunctionProperties & Pick & Use<'Actor', MActorFormattable> & PickWithOpt export type MChannelAP = Pick & Use<'Actor', MActorAPChannel> & Use<'Account', MAccountUrl>