feat: implement core parser and Forgejo API client
Implementiert: - YAML Front Matter Extractor mit parse/remove/has Funktionen - AMB Metadata Extractor für Schema.org-konforme Metadaten - Core Parser mit unified/remark Pipeline - parseMarkdownFile für lokale Dateien - parseMarkdownString für Strings - extractHeadings, extractLinks, extractImages Utilities - Forgejo API Client - getFileContent, listDirectory, listPosts - getPostContent, getAllPosts - Volle API-Integration mit Token-Auth - Public API in src/index.js - 3 Beispiele (parse-forgejo, list-all-posts, parse-local) - 11 Unit Tests (alle passing) - Test-Fixtures mit AMB-konformen Beispieldaten Tests: 11 passing ✅ Beispiel erfolgreich mit echtem Forgejo-Repo getestet ✅
This commit is contained in:
parent
fbd6630f6d
commit
c31423d811
10 changed files with 1376 additions and 0 deletions
67
examples/list-all-posts.js
Normal file
67
examples/list-all-posts.js
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
/**
|
||||
* Beispiel: Alle Posts von Forgejo abrufen und analysieren
|
||||
*/
|
||||
|
||||
import { createForgejoClient } from '../src/forgejo-client.js'
|
||||
import { parseMarkdownString } from '../src/parser.js'
|
||||
|
||||
async function main() {
|
||||
console.log('🚀 Alle Posts von Forgejo abrufen\n')
|
||||
|
||||
try {
|
||||
const client = createForgejoClient()
|
||||
|
||||
console.log('📡 Liste alle Posts...')
|
||||
const postDirs = await client.listPosts()
|
||||
|
||||
console.log(`✅ ${postDirs.length} Posts gefunden\n`)
|
||||
|
||||
// Ersten 5 Posts parsen
|
||||
const limit = 5
|
||||
console.log(`🔍 Parse die ersten ${limit} Posts...\n`)
|
||||
|
||||
for (let i = 0; i < Math.min(limit, postDirs.length); i++) {
|
||||
const dir = postDirs[i]
|
||||
|
||||
console.log(`\n📄 [${i + 1}/${limit}] ${dir.name}`)
|
||||
console.log('─'.repeat(60))
|
||||
|
||||
try {
|
||||
const markdown = await client.getPostContent(dir.name)
|
||||
const result = await parseMarkdownString(markdown)
|
||||
|
||||
if (result.metadata) {
|
||||
console.log(` Titel: ${result.metadata.name || 'Unbekannt'}`)
|
||||
console.log(` Typ: ${result.metadata.type}`)
|
||||
console.log(` Datum: ${result.metadata.datePublished || 'N/A'}`)
|
||||
console.log(` Lizenz: ${result.metadata.license || 'N/A'}`)
|
||||
|
||||
if (result.metadata.creator) {
|
||||
const authors = result.metadata.creator
|
||||
.map(c => c.name || `${c.givenName} ${c.familyName}`)
|
||||
.join(', ')
|
||||
console.log(` Autoren: ${authors}`)
|
||||
}
|
||||
|
||||
console.log(` Content: ${result.content.length} Zeichen`)
|
||||
} else {
|
||||
console.log(' ⚠️ Keine Metadaten gefunden')
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.log(` ❌ Fehler: ${error.message}`)
|
||||
}
|
||||
}
|
||||
|
||||
console.log('\n\n📊 Zusammenfassung:')
|
||||
console.log(` Gesamt: ${postDirs.length} Posts im Repository`)
|
||||
console.log(` Analysiert: ${Math.min(limit, postDirs.length)} Posts`)
|
||||
console.log('\n✅ Fertig!')
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Fehler:', error.message)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue