import { PickWith } from '@shared/typescript-utils' import { ActorFollowModel } from '../../../models/actor/actor-follow' import { MActor, MActorChannelAccountActor, MActorDefault, MActorDefaultAccountChannel, MActorDefaultChannelId, MActorFormattable, MActorHostOnly, MActorUsername } from './actor' type Use = PickWith // ############################################################################ export type MActorFollow = Omit // ############################################################################ export type MActorFollowFollowingHost = MActorFollow & Use<'ActorFollowing', MActorUsername & MActorHostOnly> // ############################################################################ // With actors or actors default export type MActorFollowActors = MActorFollow & Use<'ActorFollower', MActor> & Use<'ActorFollowing', MActor> export type MActorFollowActorsDefault = MActorFollow & Use<'ActorFollower', MActorDefault> & Use<'ActorFollowing', MActorDefault> export type MActorFollowFull = MActorFollow & Use<'ActorFollower', MActorDefaultAccountChannel> & Use<'ActorFollowing', MActorDefaultAccountChannel> // ############################################################################ // For subscriptions export type MActorFollowActorsDefaultSubscription = MActorFollow & Use<'ActorFollower', MActorDefault> & Use<'ActorFollowing', MActorDefaultChannelId> export type MActorFollowSubscriptions = MActorFollow & Use<'ActorFollowing', MActorChannelAccountActor> // ############################################################################ // Format for API or AP object export type MActorFollowFormattable = Pick & Use<'ActorFollower', MActorFormattable> & Use<'ActorFollowing', MActorFormattable>