From 338e5c82e19f2b98cc3b2632a438bc014aa18672 Mon Sep 17 00:00:00 2001 From: taskylizard <75871323+taskylizard@users.noreply.github.com> Date: Tue, 27 Jan 2026 19:03:12 +0100 Subject: [PATCH] fix(api/readme): resolve srcset URLs in elements Fixes #161. --- server/api/registry/readme/[...pkg].get.ts | 2 +- server/utils/readme.ts | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/server/api/registry/readme/[...pkg].get.ts b/server/api/registry/readme/[...pkg].get.ts index 8f455e7989..b892b93ad7 100644 --- a/server/api/registry/readme/[...pkg].get.ts +++ b/server/api/registry/readme/[...pkg].get.ts @@ -126,7 +126,7 @@ export default defineCachedEventHandler( swr: true, getKey: event => { const pkg = getRouterParam(event, 'pkg') ?? '' - return `readme:v4:${pkg.replace(/\/+$/, '').trim()}` + return `readme:v5:${pkg.replace(/\/+$/, '').trim()}` }, }, ) diff --git a/server/utils/readme.ts b/server/utils/readme.ts index 1a97a5e93d..0d70491de5 100644 --- a/server/utils/readme.ts +++ b/server/utils/readme.ts @@ -354,6 +354,25 @@ export async function renderReadmeHtml( } return { tagName, attribs } }, + source: (tagName, attribs) => { + if (attribs.src) { + attribs.src = resolveImageUrl(attribs.src, packageName, repoInfo) + } + if (attribs.srcset) { + attribs.srcset = attribs.srcset + .split(',') + .map(entry => { + const parts = entry.trim().split(/\s+/) + const url = parts[0] + if (!url) return entry.trim() + const descriptor = parts[1] + const resolvedUrl = resolveImageUrl(url, packageName, repoInfo) + return descriptor ? `${resolvedUrl} ${descriptor}` : resolvedUrl + }) + .join(', ') + } + return { tagName, attribs } + }, a: (tagName, attribs) => { // Add security attributes for external links if (attribs.href && hasProtocol(attribs.href, { acceptRelative: true })) {