@animuni-express/flowcore
v0.2.1
Published
The document engine that powers [FlowNotes](https://github.com/Animuni-Express/FlowNotes) — parse almost any classroom document into clean, structured Markdown.
Readme
FlowCore
The document engine that powers FlowNotes — parse almost any classroom document into clean, structured Markdown.
Formats
| Kind | Extensions | Notes |
|------|-----------|-------|
| PDF | .pdf | Text layer → headings/paragraphs/Q&A; scanned pages flagged for OCR (100-page cap) |
| Word | .docx, .docm | Via mammoth (classroom style map preserved) |
| PowerPoint | .pptx | Per-slide sections, tables, notes, images |
| Excel | .xlsx, .xlsm | Every worksheet → GFM table |
| OpenDocument | .odt, .odp, .ods | Headings, lists, tables |
| Ebooks | .epub | Chapters in spine order, sanitized |
| Rich text | .rtf | Dependency-free tokenizer |
| Web | .html, .htm, .xhtml | Sanitized HTML → Markdown |
| Data | .json, .yaml, .yml | Objects → sections, record arrays → tables |
| Text | .md, .txt | Structure detection (headings, Q&A, lists) |
| Tables | .csv, .tsv | Delimiter-sniffed → GFM table |
| Markup | .xml | Elements → headed blocks, repeated records → tables |
| Images | .png, .jpg, .gif, .webp | Placeholder queued for OCR |
Legacy .doc / .ppt / .xls are detected and rejected with a "resave as .docx/.pptx/.xlsx" hint instead of garbled output. Extensionless files are sniffed by magic bytes (and ZIPs are probed by inner paths).
Usage
import { importFileBuffer } from '@animuni-express/flowcore';
const buf = await file.arrayBuffer();
const lesson = await importFileBuffer(buf, file.name);
// lesson.markdown, lesson.suggestedTitle, lesson.warnings, ...Lazy seams keep heavy deps (pdfjs-dist, mammoth, fflate) out of the initial bundle — import loadPdfImporter() / loadDocxImporter() / loadPptxImporter() / … up front if you want to prefetch.
CLI
No code needed — convert a file straight from the terminal:
bunx @animuni-express/flowcore convert lesson.pdf
bunx @animuni-express/flowcore convert slides.pptx --out slides.md
bunx @animuni-express/flowcore convert notes.docx --format html --out notes.htmlconvert <file> [--out FILE] [--format md|html] [--quiet] prints Markdown to stdout (or --out), warnings to stderr. Exit codes: 0 ok · 1 usage error · 2 conversion failed.
Develop
bun install
bun test ./src # Bun built-in runner
bun run build # tsc → dist/Security posture: javascript:/event-handler stripping, 25 MB file caps, 100-page PDF cap, zip-bomb guards. See FlowNotes Plan.md Phase 1 for the full threat model.
