UNPKG

@kimsungwhee/apple-docs-mcp

Version:

MCP server for Apple Developer Documentation - Search iOS/macOS/SwiftUI/UIKit docs, WWDC videos, Swift/Objective-C APIs & code examples in Claude, Cursor & AI assistants

120 lines 3.9 kB
/** * Document formatting utilities */ /** * Format document header with title and status */ export function formatDocumentHeader(jsonData) { let content = ''; // Add title with status information const title = jsonData.metadata?.title ?? jsonData.title ?? 'Documentation'; const statusInfo = []; // Check for beta/deprecated status const isBeta = jsonData.metadata?.platforms?.some((p) => p.beta) ?? false; const isDeprecated = jsonData.metadata?.platforms?.some((p) => p.deprecated) ?? false; if (isBeta) { statusInfo.push('**Beta**'); } if (isDeprecated) { statusInfo.push('**Deprecated**'); } const statusText = statusInfo.length > 0 ? ` (${statusInfo.join(', ')})` : ''; content += `# ${title}${statusText}\n\n`; // Add role/type information with symbol kind if (jsonData.metadata?.roleHeading) { let roleInfo = `**${jsonData.metadata.roleHeading}**`; if (jsonData.metadata?.symbolKind) { roleInfo += ` (${jsonData.metadata.symbolKind})`; } content += `${roleInfo}\n\n`; } return content; } /** * Format document abstract */ export function formatDocumentAbstract(jsonData) { if (!jsonData.abstract || !Array.isArray(jsonData.abstract)) { return ''; } const abstractText = jsonData.abstract .map((item) => item?.text ?? '') .join(' ') .trim(); return abstractText ? `${abstractText}\n\n` : ''; } /** * Format platform availability section */ export function formatPlatformAvailability(jsonData) { if (!jsonData.metadata?.platforms || !Array.isArray(jsonData.metadata.platforms)) { return ''; } let content = '## Platform Availability\n\n'; jsonData.metadata.platforms.forEach((platform) => { content += formatPlatformLine(platform); }); return content + '\n'; } /** * Format a single platform line */ function formatPlatformLine(platform) { const platformStatus = []; if (platform.beta) { platformStatus.push('Beta'); } if (platform.deprecated) { platformStatus.push('Deprecated'); } if (platform.unavailable) { platformStatus.push('Unavailable'); } let platformLine = `- **${platform.name}** ${platform.introducedAt ?? 'Unknown'}+`; if (platform.deprecatedAt) { platformLine += ` | Deprecated in ${platform.deprecatedAt}`; } if (platform.obsoletedAt) { platformLine += ` | Obsoleted in ${platform.obsoletedAt}`; } if (platformStatus.length > 0) { platformLine += ` | Status: ${platformStatus.join(', ')}`; } return `${platformLine}\n`; } /** * Format See Also section */ export function formatSeeAlsoSection(jsonData) { if (!jsonData.seeAlsoSections || !Array.isArray(jsonData.seeAlsoSections)) { return ''; } let content = '## See Also\n\n'; jsonData.seeAlsoSections.forEach((seeAlso) => { if (seeAlso.title && seeAlso.identifiers) { content += `### ${seeAlso.title}\n\n`; content += formatSeeAlsoIdentifiers(seeAlso.identifiers); } }); return content; } /** * Format See Also identifiers */ function formatSeeAlsoIdentifiers(identifiers) { let content = ''; identifiers.forEach((identifier) => { const apiName = identifier.split('/').pop() ?? identifier; const apiPath = identifier.replace('doc://com.apple.SwiftUI/documentation/', ''); const apiUrl = `https://developer.apple.com/documentation/${apiPath}`; content += `- [\`${apiName}\`](${apiUrl})\n`; }); return content + '\n'; } /** * Check if document is a specific API */ export function isSpecificAPIDocument(jsonData) { return jsonData.primaryContentSections?.some((section) => section?.kind === 'declarations') ?? false; } //# sourceMappingURL=doc-formatter.js.map