mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 10:58:56 +00:00
## Summary - Fixes #26360 - Detects when `Bun.build` is called from within macro mode during bundling and throws a clear error instead of hanging indefinitely ## Problem When `Bun.build` API is called to bundle a file that imports from a macro which itself uses `Bun.build`, the process would hang indefinitely due to a deadlock: 1. The bundler uses a singleton thread for processing `Bun.build` calls 2. During parsing, when a macro is encountered, it's evaluated on that thread 3. If the macro calls `Bun.build`, it tries to enqueue to the same singleton thread 4. The singleton is blocked waiting for macro completion → deadlock ## Solution Added a check in `Bun.build` that detects when it's called from macro mode (`vm.macro_mode`) and throws a clear error with guidance: ``` Bun.build cannot be called from within a macro during bundling. This would cause a deadlock because the bundler is waiting for the macro to complete, but the macro's Bun.build call is waiting for the bundler. To bundle code at compile time in a macro, use Bun.spawnSync to invoke the CLI: const result = Bun.spawnSync(["bun", "build", entrypoint, "--format=esm"]); ``` ## Test plan - [x] Added regression test in `test/regression/issue/26360.test.ts` - [x] Verified test hangs/fails with system Bun (the bug exists) - [x] Verified test passes with the fix applied - [x] Verified regular `Bun.build` (not in macro context) still works 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Bot <claude-bot@bun.sh> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
4.4 KiB
4.4 KiB