mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
## Summary This PR fixes a bug in Bun's bundler where cyclic imports with async dependencies would produce invalid JavaScript with syntax errors. ## Problem When modules have cyclic imports and one uses top-level await, the bundler wasn't properly marking all modules in the cycle as async. This resulted in non-async wrapper functions containing `await` statements, causing syntax errors like: ``` error: "await" can only be used inside an "async" function ``` ## Solution The fix matches esbuild's approach by calling `validateTLA` for all files before `scanImportsAndExports` begins. This ensures async status is properly propagated through import chains before dependency resolution. Key changes: 1. Added a new phase that validates top-level await for all parsed JavaScript files before import/export scanning 2. This matches esbuild's `finishScan` function which processes all files in source index order 3. Ensures the `is_async_or_has_async_dependency` flag is properly set for all modules in cyclic import chains ## Test Plan - Fixed the reproduction case provided in `/Users/dylan/clones/bun-esm-bug` - All existing bundler tests pass, including `test/bundler/esbuild/default.test.ts` - The bundled output now correctly generates async wrapper functions when needed fixes #21113 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>