···184184 lines.push(`<div class="docs-deprecated">`)
185185 lines.push(`<strong>Deprecated</strong>`)
186186 if (deprecated.doc) {
187187- lines.push(`<p>${parseJsDocLinks(deprecated.doc, symbolLookup)}</p>`)
187187+ // We remove new lines because they look weird when rendered into the deprecated block
188188+ // I think markdown is actually supposed to collapse single new lines automatically but this function doesn't do that so if that changes remove this
189189+ const renderedMessage = await renderMarkdown(deprecated.doc.replace(/\n/g, ' '), symbolLookup)
190190+ lines.push(`<div class="docs-deprecated-message">${renderedMessage}</div>`)
188191 }
189192 lines.push(`</div>`)
190193 }
+7-1
server/utils/docs/text.ts
···75757676 // External URL
7777 if (target.startsWith('http://') || target.startsWith('https://')) {
7878- return `<a href="${target}" target="_blank" rel="noopener" class="docs-link">${displayText}</a>`
7878+ return `<a href="${target}" target="_blank" rel="noreferrer" class="docs-link">${displayText}</a>`
7979 }
80808181 // Internal symbol reference
···115115116116 // Now process the rest (JSDoc links, HTML escaping, etc.)
117117 result = parseJsDocLinks(result, symbolLookup)
118118+119119+ // Markdown links - i.e. [text](url)
120120+ result = result.replace(
121121+ /\[([^\]]+)\]\((https?:\/\/[^)]+)\)/g,
122122+ '<a href="$2" target="_blank" rel="noreferrer" class="docs-link">$1</a>',
123123+ )
118124119125 // Handle inline code (single backticks) - won't interfere with fenced blocks
120126 result = result