Something went wrong. Try again.
Bluesky app fork with some witchin' additions 💫 forked from jollywhoppers.com/witchsky.app
Something went wrong. Try again.
3.2 kB · 152 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153/** * This file is a copy of what exists in the social-app */
import { AppBskyEmbedExternal, AppBskyEmbedImages, AppBskyEmbedRecord, AppBskyEmbedRecordWithMedia, AppBskyEmbedVideo, AppBskyFeedDefs, AppBskyGraphDefs, AppBskyLabelerDefs,} from '@atproto/api'
export type Embed = | { type: 'post' view: AppBskyEmbedRecord.ViewRecord } | { type: 'post_not_found' view: AppBskyEmbedRecord.ViewNotFound } | { type: 'post_blocked' view: AppBskyEmbedRecord.ViewBlocked } | { type: 'post_detached' view: AppBskyEmbedRecord.ViewDetached } | { type: 'feed' view: AppBskyFeedDefs.GeneratorView } | { type: 'list' view: AppBskyGraphDefs.ListView } | { type: 'labeler' view: AppBskyLabelerDefs.LabelerView } | { type: 'starter_pack' view: AppBskyGraphDefs.StarterPackViewBasic } | { type: 'images' view: AppBskyEmbedImages.View } | { type: 'link' view: AppBskyEmbedExternal.View } | { type: 'video' view: AppBskyEmbedVideo.View } | { type: 'post_with_media' view: Embed media: Embed } | { type: 'unknown' view: null }
export type EmbedType<T extends Embed['type']> = Extract<Embed, {type: T}>
export function parseEmbedRecordView({record}: AppBskyEmbedRecord.View): Embed { if (AppBskyEmbedRecord.isViewRecord(record)) { return { type: 'post', view: record, } } else if (AppBskyEmbedRecord.isViewNotFound(record)) { return { type: 'post_not_found', view: record, } } else if (AppBskyEmbedRecord.isViewBlocked(record)) { return { type: 'post_blocked', view: record, } } else if (AppBskyEmbedRecord.isViewDetached(record)) { return { type: 'post_detached', view: record, } } else if (AppBskyFeedDefs.isGeneratorView(record)) { return { type: 'feed', view: record, } } else if (AppBskyGraphDefs.isListView(record)) { return { type: 'list', view: record, } } else if (AppBskyLabelerDefs.isLabelerView(record)) { return { type: 'labeler', view: record, } } else if (AppBskyGraphDefs.isStarterPackViewBasic(record)) { return { type: 'starter_pack', view: record, } } else { return { type: 'unknown', view: null, } }}
export function parseEmbed(embed: AppBskyFeedDefs.PostView['embed']): Embed { if (AppBskyEmbedImages.isView(embed)) { return { type: 'images', view: embed, } } else if (AppBskyEmbedExternal.isView(embed)) { return { type: 'link', view: embed, } } else if (AppBskyEmbedVideo.isView(embed)) { return { type: 'video', view: embed, } } else if (AppBskyEmbedRecord.isView(embed)) { return parseEmbedRecordView(embed) } else if (AppBskyEmbedRecordWithMedia.isView(embed)) { return { type: 'post_with_media', view: parseEmbedRecordView(embed.record), media: parseEmbed(embed.media), } } else { return { type: 'unknown', view: null, } }}