65 lines
2.2 KiB
JavaScript
65 lines
2.2 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Auto-generate docs/README.md index.
|
|
* Scans docs directory for .md files (excluding README.md) and categorizes by simple heuristics.
|
|
*/
|
|
import { readdirSync, readFileSync, writeFileSync } from 'fs'
|
|
import { join } from 'path'
|
|
|
|
const DOCS_DIR = join(process.cwd(), 'docs')
|
|
const OUTPUT = join(DOCS_DIR, 'README.md')
|
|
|
|
// Basic categorization keywords
|
|
const categories = [
|
|
{ name: 'Getting Started', match: [/quickstart/i, /usermanual/i] },
|
|
{ name: 'Architecture & Engineering', match: [/architecture/i, /implementation/i, /diagram/i] },
|
|
{ name: 'Delivery & Reports', match: [/completion/i, /deployment/, /update/, /phases_all/i, /production_deployment/ ] },
|
|
{ name: 'Performance & Optimization', match: [/performance/i, /seo/i] },
|
|
{ name: 'Change History', match: [/changelog/i] },
|
|
{ name: 'AI & Advanced Features', match: [/ai/i] }
|
|
]
|
|
|
|
function categorize(file) {
|
|
const lower = file.toLowerCase()
|
|
for (const cat of categories) {
|
|
if (cat.match.some(r => r.test(lower))) return cat.name
|
|
}
|
|
return 'Other'
|
|
}
|
|
|
|
function build() {
|
|
const files = readdirSync(DOCS_DIR)
|
|
.filter(f => f.endsWith('.md') && f !== 'README.md')
|
|
.sort()
|
|
|
|
const byCategory = {}
|
|
for (const f of files) {
|
|
const cat = categorize(f)
|
|
byCategory[cat] = byCategory[cat] || []
|
|
byCategory[cat].push(f)
|
|
}
|
|
|
|
const quickLinks = files.map(f => `- [${f.replace(/_/g,' ')}](./${f})`).join('\n')
|
|
|
|
let body = '# Documentation Index\n\n(Generated by scripts/generate-doc-index.mjs)\n\n## Quick Links\n' + quickLinks + '\n\n'
|
|
|
|
for (const cat of Object.keys(byCategory).sort()) {
|
|
body += `### ${cat}\n` + byCategory[cat].map(f => `- ${f}`).join('\n') + '\n\n'
|
|
}
|
|
// Append diagram export instructions (persistent section)
|
|
body += '## Diagram Export\n'
|
|
body += 'The architecture diagram source is `ArchitectureDiagram.mmd`. Export updated images using:\n\n'
|
|
body += '```bash\n'
|
|
body += 'npm run diagram:png\n'
|
|
body += 'npm run diagram:svg\n'
|
|
body += '```\n\n'
|
|
body += 'Refresh docs index and PNG in one step:\n\n'
|
|
body += '```bash\n'
|
|
body += 'npm run docs:refresh\n'
|
|
body += '```\n\n'
|
|
body += '---\nLast regenerated: ' + new Date().toISOString() + '\n'
|
|
writeFileSync(OUTPUT, body)
|
|
console.log('docs/README.md regenerated.')
|
|
}
|
|
|
|
build() |