How Rolldown Works: Tree-Shaking, and Why It Looks So Different from esbuild

Why does esbuild tree-shake in one pass while Rolldown needs fixpoint iteration? The answer reveals how each bundler handles the ESM/CJS divide.