feat: expose getPandocPath/getMutoolPath to reuse resolved binary paths - #266
Merged
Conversation
html-get owns the pandoc/mutool `which` lookup: cache it per binary so the internal runners and consumers share a single resolution per process. Expose getPandocPath() so an app (microlink api) reuses the resolved path for its own pandoc pipeline instead of running `which pandoc` again. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Fold the two near-identical accessor tests into one loop with consistent error handling, removing the copy-pasted which resolution. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
html-get already resolves
pandoc(office→HTML) andmutool(PDF→HTML) internally. This makes html-get the single owner of that binary resolution and exposes the resolved paths so a consumer can reuse them instead of running its ownwhich.which <bin>lookup per binary (whichCacheMap), so the internal runners (defaultMutool/defaultPandoc) and the new accessors share one resolution per process. Absent binaries are cached asundefinedtoo, so a missing tool isn't re-probed.getPandocPath()andgetMutoolPath()— each returns the cached path, orundefinedwhen the binary is not installed. Lazy: nothing runs until first call.Why
The microlink api runs its own
execFileSync('which', ['pandoc'])in the markdown pipeline, and passes amutoolPaththat html-get never read. With this, the api reusesrequire('html-get').getPandocPath()and drops both redundantwhichcalls (separate api PR, gated on this release).getMutoolPath()is exposed for parity/future use.Tests
getPandocPath/getMutoolPath exposes the resolved <bin> path(parameterized, asserts each matcheswhich <bin>, tolerates an absent binary)test/office.jspass, lint cleanNotes
memoizeOneon the runners stays:whichCacheonly dedupes thewhichlookup, whilememoizeOnealso avoids re-running thepandoc --list-input-formatsprobe and rebuilding the runner closure per request.🤖 Generated with Claude Code