import type { Root as HastRoot } from 'hast'; import { visit } from 'unist-util-visit'; import type { DatabaseMessageExtra, DatabaseMessageExtraImageFile } from '$lib/types/database'; import { AttachmentType, UrlPrefix } from '$lib/enums'; /** * Rehype plugin to resolve attachment image sources. * Converts attachment names to base64 data URLs. */ export function rehypeResolveAttachmentImages(options: { attachments?: DatabaseMessageExtra[] }) { return (tree: HastRoot) => { visit(tree, 'element', (node) => { if (node.tagName === 'img' && node.properties?.src) { const src = String(node.properties.src); if (src.startsWith(UrlPrefix.DATA) || src.startsWith(UrlPrefix.HTTP)) { return; } const attachment = options.attachments?.find( (a): a is DatabaseMessageExtraImageFile => a.type === AttachmentType.IMAGE && a.name === src ); if (attachment?.base64Url) { node.properties.src = attachment.base64Url; } } }); }; }