-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathexportMarkdownRenderer.ts
More file actions
62 lines (53 loc) · 2.26 KB
/
exportMarkdownRenderer.ts
File metadata and controls
62 lines (53 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import type { ProcessedFiles } from '../types';
import type { ExportOptions } from './exportTypes';
import {
buildAnalysisSummary,
buildDirectoryString,
buildNotes,
buildSecurityWarnings,
SUMMARY_FILE_FORMAT_PLAIN,
SUMMARY_GENERATION_HEADER,
SUMMARY_PURPOSE,
SUMMARY_USAGE_GUIDELINES,
} from './exportRendererShared';
export function renderMarkdown(data: ProcessedFiles, options: ExportOptions): string {
const directoryString = buildDirectoryString(data);
const analysisSummary = buildAnalysisSummary(data);
const securityWarnings = buildSecurityWarnings(data);
const sections: string[] = [];
if (options.includeFileSummary) {
sections.push(
`${SUMMARY_GENERATION_HEADER}\n\n# File Summary\n\n## Purpose\n${SUMMARY_PURPOSE}\n\n## File Format\n${SUMMARY_FILE_FORMAT_PLAIN}\n5. Multiple file entries, each consisting of:\n a. A header with the file path (## File: path/to/file)\n b. The full contents of the file in a code block\n\n## Usage Guidelines\n${SUMMARY_USAGE_GUIDELINES}\n\n## Notes\n${buildNotes(data)}`
);
}
if (options.userProvidedHeader.trim()) {
sections.push(`# User Provided Header\n${options.userProvidedHeader.trim()}`);
}
if (options.includeDirectoryStructure) {
sections.push(`# Directory Structure\n\`\`\`\n${directoryString}\n\`\`\``);
}
sections.push(
[
'# Repository Analysis',
`- Files: ${data.fileContents.length}`,
`- Lines: ${data.fileContents.reduce((sum, file) => sum + file.stats.lines, 0)}`,
`- Characters: ${data.fileContents.reduce((sum, file) => sum + file.stats.chars, 0)}`,
`- Estimated Tokens: ${analysisSummary.totalEstimatedTokens}`,
`- Sensitive Findings: ${analysisSummary.securityFindingCount}`,
].join('\n')
);
if (options.includeFiles) {
sections.push(
`# Files\n\n${data.fileContents.map((file) => `## File: ${file.path}\n\`\`\`\n${file.content}\n\`\`\``).join('\n\n')}`
);
}
if (securityWarnings.length > 0) {
sections.push(
`# Security Warnings\n${securityWarnings.map((finding) => `- [${finding.severity}] ${finding.filePath}: ${finding.message}`).join('\n')}`
);
}
if (options.instruction.trim()) {
sections.push(`# Instruction\n${options.instruction.trim()}`);
}
return `${sections.join('\n\n')}\n`;
}