mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-03-01 15:03:57 +08:00
docs: add VitePress documentation site
- Add docs directory with VitePress configuration - Add GitHub Actions workflow for docs build and deploy - Support bilingual (English/Chinese) documentation - Include search, custom theme, and responsive design
This commit is contained in:
91
docs/scripts/check-index-size.js
Normal file
91
docs/scripts/check-index-size.js
Normal file
@@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Search Index Size Checker
|
||||
* Alerts when search index exceeds recommended size for FlexSearch
|
||||
*/
|
||||
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import { pathToFileURL } from 'node:url'
|
||||
|
||||
const INDEX_PATHS = [
|
||||
path.join(process.cwd(), '.vitepress/dist/search-index.root.json'),
|
||||
path.join(process.cwd(), '.vitepress/dist/search-index.zh.json')
|
||||
]
|
||||
const MAX_SIZE = 1024 * 1024 // 1MB
|
||||
const MAX_DOCS = 2000
|
||||
|
||||
function checkIndexSize() {
|
||||
const missing = INDEX_PATHS.filter((p) => !fs.existsSync(p))
|
||||
if (missing.length > 0) {
|
||||
console.log('⚠️ Search index not found. Run build first.')
|
||||
for (const p of missing) console.log(` Missing: ${p}`)
|
||||
return 1
|
||||
}
|
||||
|
||||
let totalBytes = 0
|
||||
let totalDocs = 0
|
||||
|
||||
console.log(`\n📊 Search Index Analysis`)
|
||||
console.log(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`)
|
||||
for (const indexPath of INDEX_PATHS) {
|
||||
const stats = fs.statSync(indexPath)
|
||||
totalBytes += stats.size
|
||||
|
||||
const sizeKB = (stats.size / 1024).toFixed(2)
|
||||
const sizeMB = (stats.size / (1024 * 1024)).toFixed(2)
|
||||
console.log(`File: ${path.relative(process.cwd(), indexPath)}`)
|
||||
console.log(`Size: ${sizeKB} KB (${sizeMB} MB)`)
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(fs.readFileSync(indexPath, 'utf-8'))
|
||||
if (Array.isArray(parsed.docs)) {
|
||||
totalDocs += parsed.docs.length
|
||||
console.log(`Docs: ${parsed.docs.length}`)
|
||||
} else {
|
||||
console.log(`Docs: (unknown format)`)
|
||||
}
|
||||
} catch {
|
||||
console.log(`Docs: (unavailable)`)
|
||||
}
|
||||
console.log('')
|
||||
}
|
||||
|
||||
const totalKB = (totalBytes / 1024).toFixed(2)
|
||||
const totalMB = (totalBytes / (1024 * 1024)).toFixed(2)
|
||||
console.log(`Total: ${totalKB} KB (${totalMB} MB)`)
|
||||
console.log(`Total docs: ~${totalDocs}`)
|
||||
|
||||
// Check size threshold
|
||||
if (totalBytes > MAX_SIZE) {
|
||||
console.log(`\n⚠️ WARNING: Index size exceeds ${MAX_SIZE / 1024 / 1024} MB`)
|
||||
console.log(` Current: ${totalMB} MB`)
|
||||
console.log(` Impact: Slower search performance`)
|
||||
console.log(` Recommendation: Consider Algolia DocSearch\n`)
|
||||
|
||||
console.log(`Migration Options:`)
|
||||
console.log(` 1. Apply for Algolia DocSearch (free for open source)`)
|
||||
console.log(` 2. Reduce indexed content`)
|
||||
console.log(` 3. Split documentation into multiple sites\n`)
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
if (totalDocs > MAX_DOCS) {
|
||||
console.log(`\n⚠️ WARNING: Indexed docs exceeds ${MAX_DOCS}`)
|
||||
console.log(` Current: ${totalDocs} docs`)
|
||||
console.log(` Recommendation: Consider Algolia DocSearch\n`)
|
||||
return 1
|
||||
}
|
||||
|
||||
console.log(`\n✅ Search index is within recommended limits\n`)
|
||||
return 0
|
||||
}
|
||||
|
||||
// Run if called directly
|
||||
if (import.meta.url === pathToFileURL(process.argv[1]).href) {
|
||||
process.exit(checkIndexSize())
|
||||
}
|
||||
|
||||
export { checkIndexSize }
|
||||
Reference in New Issue
Block a user