import { type FileLinkContent, FilledFileLinkContent, LinkContent } from "@prismicio/types-internal/lib/content" import type { LinkRendererOptions, RenderContext } from "../../../models" import type { AnyLinkDef, LinkRenderer, MediaLinkDef } from "../../../models" const FileLinkRenderer: ( ctx: RenderContext, ) => LinkRenderer = (ctx) => ({ renderV1(link: LinkContent & { value: FileLinkContent }, _fetch: undefined, options?: LinkRendererOptions): unknown { return { type: "Link.file", value: { ...(!options?.omitKey && { key: link.key }), file: { kind: link.value.kind, ...(FilledFileLinkContent.is(link.value) && { url: ctx.urlRewriter.rewriteFileUrl(link.value.url), name: link.value.name, size: link.value.size, }), ...(link.value.text && { text: link.value.text }), ...(link.value.variant && { variant: link.value.variant }), }, }, } }, renderV2( def: MediaLinkDef | AnyLinkDef, link: LinkContent & { value: FileLinkContent }, _fetch: undefined, options?: LinkRendererOptions, ): unknown { const defVariants = def.variants || [] const linkVariant = link.value.variant && defVariants.includes(link.value.variant) ? link.value.variant : defVariants[0] return { link_type: "Media", ...(!options?.omitKey && { key: link.key }), kind: link.value.kind, ...(FilledFileLinkContent.is(link.value) && { id: link.value.id, url: ctx.urlRewriter.rewriteFileUrl(link.value.url), name: link.value.name, size: link.value.size, }), ...(def.allowText && link.value.text && { text: link.value.text }), ...(linkVariant && { variant: linkVariant }), } }, renderMocks( def: MediaLinkDef | AnyLinkDef, link: LinkContent & { value: FileLinkContent }, options?: LinkRendererOptions, ): unknown { return this.renderV2(def, link, undefined, options) }, }) export default FileLinkRenderer