UNPKG

@compodoc/compodoc

Version:

The missing documentation tool for your Angular application

121 lines (112 loc) 3.52 kB
import { emitClass, emitComponent, emitDirective, emitEnumeration, emitFunction, emitGuard, emitInjectable, emitInterceptor, emitInterface, emitModule, emitPipe, emitTypeAlias, emitVariable, } from "./emit"; import { collapseDescription, escapeMarkdown, joinSections } from "./format"; const sectionHeader = (title: string): string => `## ${title}`; const renderSection = <T>( title: string, items: ReadonlyArray<T> | undefined, emit: (item: T) => string, ): string => { if (!items || items.length === 0) { return ""; } const blocks = items.map(emit).filter((s) => s.length > 0); if (blocks.length === 0) { return ""; } return `${sectionHeader(title)}\n\n${blocks.join("\n\n")}`; }; const renderListSection = <T>( title: string, items: ReadonlyArray<T> | undefined, emit: (item: T) => string, ): string => { if (!items || items.length === 0) { return ""; } const lines = items.map(emit).filter((s) => s.length > 0); if (lines.length === 0) { return ""; } return `${sectionHeader(title)}\n\n${lines.join("\n")}`; }; const buildHeader = ( projectName: string, projectDescription: string | undefined, compodocVersion: string, generatedAt: string, ): string => { const lines = [`# ${escapeMarkdown(projectName)}`]; if (projectDescription) { const collapsed = collapseDescription(projectDescription); if (collapsed) { lines.push("", `> ${escapeMarkdown(collapsed)}`); } } const versionPart = compodocVersion ? ` ${compodocVersion}` : ""; const generatedPart = generatedAt ? ` at ${generatedAt}` : ""; lines.push( "", `> Generated by compodoc${versionPart}${generatedPart}, llm-md export.`, ); return lines.join("\n"); }; export const renderLlmMd = ( data: any, options: { projectName: string; projectDescription?: string }, compodocVersion: string, ): string => { const generatedAt = new Date().toISOString(); const sections: string[] = [ buildHeader( options.projectName, options.projectDescription, compodocVersion, generatedAt, ), renderSection("Modules", data.modules, emitModule), renderSection("Components", data.components, emitComponent), renderSection("Directives", data.directives, emitDirective), renderSection("Pipes", data.pipes, emitPipe), renderSection( "Services / Injectables", data.injectables, emitInjectable, ), renderSection("Guards", data.guards, emitGuard), renderSection("Interceptors", data.interceptors, emitInterceptor), renderSection("Classes", data.classes, emitClass), renderSection("Interfaces", data.interfaces, emitInterface), ]; const misc = data.miscellaneous; if (misc) { sections.push( renderListSection("Public functions", misc.functions, emitFunction), renderListSection( "Public type aliases", misc.typealiases, emitTypeAlias, ), renderSection( "Public enumerations", misc.enumerations, emitEnumeration, ), renderListSection("Public variables", misc.variables, emitVariable), ); } return `${joinSections(sections)}\n`; };