Share Rust system font registration with Node - #140
Conversation
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (5)
📝 WalkthroughWalkthroughThe change centralizes system font registration in ChangesSystem font registration
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant NodeConversion
participant minipdf
participant SystemFonts
participant FontRegistry
NodeConversion->>minipdf: call register_system_fonts
minipdf->>SystemFonts: discover fallback and cloud-font files
SystemFonts-->>minipdf: return readable font files
minipdf->>FontRegistry: register fonts and aliases
minipdf-->>NodeConversion: return success or mapped error
NodeConversion->>NodeConversion: continue PDF conversion
✨ Finishing Touches 💡 1🛠️ Fix failing CI checks 💡
📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
🟡 Changes recommended
register_system_fonts() can fail conversions and break intended idempotence if any single system font read errors mid-registration, leading to partial registration and retries duplicating fonts.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
This PR centralizes system fallback font and Office CloudFonts registration in the Rust minipdf core crate, then reuses that shared registration path from both the Rust CLI and the Node (napi) bindings to ensure consistent, idempotent font setup across entry points.
Changes:
- Added a core
register_system_fonts()API and implementation (including Windows Office CloudFonts scanning). - Updated the Rust CLI to delegate system font registration to the core crate.
- Updated Node conversion entry points to automatically register system fonts, plus a Windows-only test assertion for idempotence.
File summaries
| File | Description |
|---|---|
| minipdf-rs/crates/minipdf/src/lib.rs | Exposes the new shared system font registration API from the core crate. |
| minipdf-rs/crates/minipdf/src/fonts.rs | Implements idempotent system fallback + Office CloudFonts registration in core. |
| minipdf-rs/crates/minipdf-cli/src/main.rs | Reuses the shared core registration path instead of duplicating font discovery logic. |
| minipdf-node/src/lib.rs | Ensures system fonts are registered before each Node conversion entry point. |
| minipdf-node/test/index.test.js | Adds a Windows-only assertion to validate registration idempotence via registeredFonts(). |
Review details
- Files reviewed: 5/5 changed files
- Comments generated: 1
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| let name = path | ||
| .file_stem() | ||
| .and_then(|name| name.to_str()) | ||
| .unwrap_or("font") | ||
| .to_owned(); | ||
| crate::register_font(name, fs::read(path)?); | ||
| } |
Summary
Validation
cargo test -p minipdf -p minipdf-cli --manifest-path minipdf-rs/Cargo.toml(109 passed)npm run build:debug(passed)npm test(8 passed)git diff --check origin/main...HEADSummary by CodeRabbit
Improvements
Bug Fixes