Ship tree-sitter.wasm as a sibling file next to the CLI binary
Five attempts to embed the wasm into the bun --compile binary all
failed on Windows in different ways. Each one's bytes ended up in the
binary (we verified this directly), but every JS-level retrieval
mechanism we tried got stripped by the time the runtime ran:
1. `with { type: 'file' }` of `web-tree-sitter/tree-sitter.wasm`
subpath — bytes embedded, import variable bound to undefined.
2. `with { type: 'file' }` of a copied-in relative .wasm — same as #1.
3. Single 274KB base64 string literal — got dropped by the minifier.
4. ~268 chunked base64 string literals — same fate.
5. Function-export wrapping the chunked array, with eager file write
verification on disk — chunks confirmed on disk after embed,
still not present in the compiled output.
The bun-compile-on-Windows code path is doing something destructive
to JS-source-level wasm asset references that we cannot reliably
work around from the source. So bypass the bundler entirely: ship
tree-sitter.wasm as a *sibling file* next to the binary.
- cli/scripts/build-binary.ts: copies the wasm from node_modules to
cli/bin/tree-sitter.wasm after `bun build --compile`, alongside the
binary. Drops all the embed/verify machinery from previous rounds.
- cli/src/pre-init/tree-sitter-wasm.ts: at runtime, looks for
`dirname(process.execPath)/tree-sitter.wasm`, sets the env var that
init-node.ts reads, and (best-effort) reads the bytes synchronously
to publish on globalThis for the wasmBinary fast path. Both
channels feed the same SDK init.
- cli/src/pre-init/tree-sitter-wasm-bytes.ts: deleted. No more
generated module.
- .github/workflows/cli-release-build.yml: tarball includes
`tree-sitter.wasm` next to the binary (both matrix and Windows-
specific job).
- cli/release/index.js + freebuff/cli/release/index.js: the npm
postinstall downloader now also moves tree-sitter.wasm out of the
temp extraction dir to live next to the installed binary.
Verified locally: build copies the wasm into bin/, --smoke-tree-sitter
exits 0 with "tree-sitter smoke ok (wasmBinary, 205488 bytes)", full
boot smoke passes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> J
James Grugett committed
299a4df963b44bc4131f333e30fb2c826cf660e7
Parent: 24346bc