Skip to content

fix: use ImportKind::Import for common-chunk root computation#8899

Merged
graphite-app[bot] merged 1 commit intomainfrom
03-25-fix_8812
Mar 27, 2026
Merged

fix: use ImportKind::Import for common-chunk root computation#8899
graphite-app[bot] merged 1 commit intomainfrom
03-25-fix_8812

Conversation

@IWANABETHATGUY
Copy link
Copy Markdown
Member

@IWANABETHATGUY IWANABETHATGUY commented Mar 25, 2026

Summary

  • Aligns common-chunk root computation with js_import_order DFS traversal by filtering on ImportKind::Import instead of is_static()
  • Previously, modules reached only via require() in a common chunk were excluded from roots but never visited by DFS, causing wrapped CJS dependencies to miss the init-order fixup
  • Generalizes js_import_order to accept multiple roots so common chunks are processed alongside entry chunks

Test plan

🤖 Generated with Claude Code

Copy link
Copy Markdown
Member Author


How to use the Graphite Merge Queue

Add the label graphite: merge-when-ready to this PR to add it to the merge queue.

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

This stack of pull requests is managed by Graphite. Learn more about stacking.

@netlify
Copy link
Copy Markdown

netlify bot commented Mar 25, 2026

Deploy Preview for rolldown-rs canceled.

Name Link
🔨 Latest commit 7f454c8
🔍 Latest deploy log https://app.netlify.com/projects/rolldown-rs/deploys/69c5ff026e6a20000827e75d

@IWANABETHATGUY IWANABETHATGUY force-pushed the 03-25-fix_8812 branch 2 times, most recently from 142cb48 to 22026f0 Compare March 25, 2026 08:47
@IWANABETHATGUY IWANABETHATGUY changed the title fix: 8812 fix: use ImportKind::Import for common-chunk root computation Mar 25, 2026
@IWANABETHATGUY IWANABETHATGUY force-pushed the 03-25-fix_8812 branch 4 times, most recently from c18ded4 to 9f1139c Compare March 26, 2026 14:26
@IWANABETHATGUY IWANABETHATGUY marked this pull request as ready for review March 26, 2026 14:42
@codspeed-hq
Copy link
Copy Markdown

codspeed-hq bot commented Mar 26, 2026

Merging this PR will not alter performance

✅ 4 untouched benchmarks
⏩ 10 skipped benchmarks1


Comparing 03-25-fix_8812 (7dd60cb) with main (e9cde37)2

Open in CodSpeed

Footnotes

  1. 10 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

  2. No successful run was found on main (e0dd665) during the generation of this report, so e9cde37 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@IWANABETHATGUY IWANABETHATGUY requested review from hyf0 and shulaoda March 27, 2026 03:23
Copy link
Copy Markdown
Member Author

IWANABETHATGUY commented Mar 27, 2026

Merge activity

  • Mar 27, 3:48 AM UTC: The merge label 'graphite: merge-when-ready' was detected. This PR will be added to the Graphite merge queue once it meets the requirements.
  • Mar 27, 3:51 AM UTC: IWANABETHATGUY added this pull request to the Graphite merge queue.
  • Mar 27, 3:56 AM UTC: Merged by the Graphite merge queue.

## Summary
- Aligns common-chunk root computation with `js_import_order` DFS traversal by filtering on `ImportKind::Import` instead of `is_static()`
- Previously, modules reached only via `require()` in a common chunk were excluded from roots but never visited by DFS, causing wrapped CJS dependencies to miss the init-order fixup
- Generalizes `js_import_order` to accept multiple roots so common chunks are processed alongside entry chunks

## Test plan
- [x] Added integration test for issue #8812 (two entry points sharing CJS modules with require-only edges)
- [x] Snapshot verifies `require_fake_core()` executes before `require_fake_plugin_model()`

🤖 Generated with [Claude Code](https://claude.com/claude-code)
chunk_graph.chunk_table.iter_mut().for_each(|chunk| {
// Determine DFS roots based on chunk kind.
// For entry chunks, the root is the entry module.
// For common chunks, roots are modules not imported by any other module in the chunk.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you could start to commit design doc about related features so others could understand the flow via doc instead of reading code.

Like I don't get why root modules in the common chunk is defined this way.

@graphite-app graphite-app bot merged commit 7f454c8 into main Mar 27, 2026
31 checks passed
@graphite-app graphite-app bot deleted the 03-25-fix_8812 branch March 27, 2026 03:56
This was referenced Apr 1, 2026
shulaoda added a commit that referenced this pull request Apr 1, 2026
## [1.0.0-rc.13] - 2026-04-01

### 🚀 Features

- add friendly error for unloadable virtual modules (#8955) by @sapphi-red
- better error message for unsupported CSS error (#8911) by @sapphi-red

### 🐛 Bug Fixes

- prevent chunk merging from leaking entry side effects (#8979) by @IWANABETHATGUY
- correct inlining based on module's def format and esModule flag (#8975) by @h-a-n-a
- generate init calls for excluded re-exports in strict execution order (#8858) by @IWANABETHATGUY
- consistent order for `meta.chunks` in `renderChunk` hook (#8956) by @sapphi-red
- subpath imports in glob imports failing to find files (#8885) by @kalvenschraut
- browser: bundle binding types in dts output (#8930) by @nyan-left
- ci: guard artifact download step in `vite-test-ubuntu` when build is skipped (#8934) by @Copilot
- track CJS re-export import records to fix inline const and tree-shaking (#8925) by @h-a-n-a
- use ImportKind::Import for common-chunk root computation (#8899) by @IWANABETHATGUY
- watch: clear emitted_filenames between rebuilds (#8914) by @IWANABETHATGUY
- ci: cache esbuild snapshots to avoid 429 rate limiting (#8921) by @IWANABETHATGUY
- always check circular deps in chunk optimizer (#8915) by @IWANABETHATGUY
- don't mark calls to reassigned bindings as pure (#8917) by @IWANABETHATGUY
- magic-string: throw TypeError for non-string content args (#8905) by @IWANABETHATGUY
- magic-string: add split-point validation and overwrite/update options (#8904) by @IWANABETHATGUY

### 🚜 Refactor

- pre-compute has_side_effects on ChunkCandidate (#8981) by @IWANABETHATGUY
- cleanup and simplify in dynamic_import.rs (#8927) by @ulrichstark
- rename came_from_cjs to came_from_commonjs for consistency (#8938) by @IWANABETHATGUY
- inline `create_ecma_view` return destructuring and remove redundant binding (#8932) by @shulaoda

### 📚 Documentation

- document ensure_lazy_module_initialization_order in code-splitting design doc (#8931) by @IWANABETHATGUY

### 🧪 Testing

- add regression test for runtime helper circular dependency (#8958) by @h-a-n-a
- enable 8 previously-skipped MagicString remove tests (#8945) by @IWANABETHATGUY
- add test for why PureAnnotation is needed in execution order check (#8933) by @IWANABETHATGUY

### ⚙️ Miscellaneous Tasks

- add `@emnapi/runtime` and `@emnapi/core` as direct deps of `@rolldown/browser` (#8978) by @Copilot
- deps: update dependency vite-plus to v0.1.15 (#8970) by @renovate[bot]
- deps: update dependency oxfmt to ^0.43.0 (#8969) by @renovate[bot]
- deps: upgrade oxc to 0.123.0 (#8967) by @shulaoda
- justfile: deduplicate update-submodule as alias of setup-submodule (#8968) by @shulaoda
- deps: update rollup submodule for tests to v4.60.1 (#8965) by @sapphi-red
- deps: update test262 submodule for tests (#8966) by @sapphi-red
- remove unused `type-check` scripts (#8957) by @sapphi-red
- deps: update actions/cache action to v5 (#8953) by @renovate[bot]
- deps: update npm packages to v6 (major) (#8954) by @renovate[bot]
- deps: update npm packages (#8948) by @renovate[bot]
- deps: update rust crates (#8949) by @renovate[bot]
- deps: update github-actions (#8947) by @renovate[bot]
- deps: update napi (#8943) by @renovate[bot]
- deps: update dependency rolldown-plugin-dts to ^0.23.0 (#8944) by @renovate[bot]
- regenerate testing snapshots (#8928) by @ulrichstark
- deps: update dependency rust to v1.94.1 (#8923) by @renovate[bot]

### ❤️ New Contributors

* @kalvenschraut made their first contribution in [#8885](#8885)
* @nyan-left made their first contribution in [#8930](#8930)

Co-authored-by: shulaoda <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants