MCPcopy
hub / github.com/npmx-dev/npmx.dev / renderMergedSymbol

Function renderMergedSymbol

server/utils/docs/render.ts:96–175  ·  view source on GitHub ↗

* Render a merged symbol (with all its overloads).

(
  symbol: MergedSymbol,
  symbolLookup: SymbolLookup,
)

Source from the content-addressed store, hash-verified

94 * Render a merged symbol (with all its overloads).
95 */
96async function renderMergedSymbol(
97 symbol: MergedSymbol,
98 symbolLookup: SymbolLookup,
99): Promise<string> {
100 const primaryNode = symbol.nodes[0]
101 if (!primaryNode) return '' // Safety check - should never happen
102
103 const lines: string[] = []
104 const id = createSymbolId(symbol.kind, symbol.name)
105 const hasOverloads = symbol.nodes.length > 1
106
107 lines.push(`<article class="docs-symbol" id="${id}">`)
108
109 // Header
110 lines.push(`<header class="docs-symbol-header">`)
111 lines.push(
112 `<a href="#${id}" class="docs-anchor" aria-label="Link to ${escapeHtml(symbol.name)}">#</a>`,
113 )
114 lines.push(`<h3 class="docs-symbol-name">${escapeHtml(symbol.name)}</h3>`)
115 lines.push(`<span class="docs-badge docs-badge--${symbol.kind}">${symbol.kind}</span>`)
116 if (primaryNode.functionDef?.isAsync) {
117 lines.push(`<span class="docs-badge docs-badge--async">async</span>`)
118 }
119 if (hasOverloads) {
120 lines.push(`<span class="docs-overload-count">${symbol.nodes.length} overloads</span>`)
121 }
122 lines.push(`</header>`)
123
124 // Signatures
125 const signatures = symbol.nodes
126 .slice(0, hasOverloads ? MAX_OVERLOAD_SIGNATURES : 1)
127 .map(n => getNodeSignature(n))
128 .filter(Boolean) as string[]
129
130 const description = symbol.jsDoc?.doc?.trim()
131 const signaturePromise =
132 signatures.length > 0 ? highlightCodeBlock(signatures.join('\n'), 'typescript') : null
133 const descriptionPromise = description ? renderMarkdown(description, symbolLookup) : null
134 const jsDocTagsPromise =
135 symbol.jsDoc?.tags && symbol.jsDoc.tags.length > 0
136 ? renderJsDocTags(symbol.jsDoc.tags, symbolLookup)
137 : null
138 const [highlightedSignature, renderedDescription, renderedJsDocTags] = await Promise.all([
139 signaturePromise,
140 descriptionPromise,
141 jsDocTagsPromise,
142 ])
143
144 if (highlightedSignature) {
145 lines.push(`<div class="docs-signature">${highlightedSignature}</div>`)
146
147 if (symbol.nodes.length > MAX_OVERLOAD_SIGNATURES) {
148 const remaining = symbol.nodes.length - MAX_OVERLOAD_SIGNATURES
149 lines.push(`<p class="docs-more-overloads">+ ${remaining} more overloads</p>`)
150 }
151 }
152
153 // Description

Callers 1

renderKindSectionFunction · 0.85

Calls 9

createSymbolIdFunction · 0.90
escapeHtmlFunction · 0.90
getNodeSignatureFunction · 0.90
highlightCodeBlockFunction · 0.90
renderMarkdownFunction · 0.90
renderJsDocTagsFunction · 0.85
renderClassMembersFunction · 0.85
renderInterfaceMembersFunction · 0.85
renderEnumMembersFunction · 0.85

Tested by

no test coverage detected