feat: support ImporterId hook filter#7540
Conversation
How to use the Graphite Merge QueueAdd the label graphite: merge 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. |
✅ Deploy Preview for rolldown-rs ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
✅ Deploy Preview for rolldown-rs ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
96ba1fb to
18091b6
Compare
Benchmarks Rust |
3bed6d2 to
997c675
Compare
There was a problem hiding this comment.
Pull request overview
This PR adds support for an importerId hook filter that allows plugins to filter resolveId hook calls based on the importing module's ID. This enables plugins to selectively handle resolution based on which module is performing the import, rather than just what is being imported.
Key changes:
- Adds
ImporterIdfilter expression type to both TypeScript and Rust filter systems - Implements validation to restrict
importerIdfilter usage to only theresolveIdhook - Entry files (where importer is None) naturally don't match
importerIdfilters
Reviewed changes
Copilot reviewed 14 out of 14 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| packages/pluginutils/src/composable-filters.ts | Adds ImporterId class and integrates it into filter expression types and interpreter logic |
| packages/pluginutils/src/composable-filters.test.ts | Adds comprehensive test coverage for importerId filter with various patterns and edge cases |
| packages/rolldown/src/plugin/bindingify-hook-filter.ts | Implements importerId token binding and validation to prevent misuse in non-resolveId hooks |
| packages/rolldown/src/binding.d.cts | Adds ImporterId to the FilterTokenKind union type |
| packages/rolldown/tests/fixtures/plugin/resolve-id/filter-importer-id/* | Adds integration test showing importerId filter correctly filters imports from main.js |
| packages/rolldown/tests/fixtures/plugin/load/filter-importer-id-error/* | Adds test verifying error is thrown when importerId is used with load hook |
| crates/rolldown_utils/src/filter_expression.rs | Adds ImporterId variant to FilterExpr enum and implements interpreter logic that returns false for None importers |
| crates/rolldown_binding/src/options/plugin/types/binding_filter_expression.rs | Adds ImporterId token handling in the binding layer |
| crates/rolldown_binding/src/options/plugin/js_plugin.rs | Threads importer parameter through filter_exprs_interpreter calls in resolveId hook, passes None for other hooks |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 14 out of 14 changed files in this pull request and generated 1 comment.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 14 out of 14 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
packages/rolldown/tests/fixtures/plugin/resolve-id/filter-importer-id/_config.ts
Show resolved
Hide resolved
|
@IWANABETHATGUY Would you update the PR description? |
445b4d9 to
f79bc82
Compare
f79bc82 to
6728a41
Compare
Updated |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 14 out of 14 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (1)
packages/rolldown/tests/fixtures/plugin/resolve-id/filter-importer-id/_config.ts:6
- Unused variable calledArgs.
let calledArgs = [];
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
packages/rolldown/tests/fixtures/plugin/resolve-id/filter-importer-id/_config.ts
Show resolved
Hide resolved
Merge activity
|
closed #7529 Completing composable hook filter of `ImporterId`
6728a41 to
f052fb8
Compare
## [1.0.0-beta.56] - 2025-12-22 ### 💥 BREAKING CHANGES - rename `MIXED_EXPORT` error to `MIXED_EXPORTS` (#7565) by @sapphi-red ### 🚀 Features - rename `id` property to `exporter` in CIRCULAR_REEXPORT error (#7592) by @sapphi-red - add `ids` property to `CIRCULAR_DEPENDENCY` error (#7591) by @sapphi-red - node/dev: expose `devMode.lazy` (#7549) by @hyf0 - set log and pos properties for `parseAst` function errors (#7568) by @sapphi-red - set log and pos properties for logs (#7567) by @sapphi-red - test-dev-sever: support to manually configure port, run tests in concurrent (#7576) by @hyf0 - add `exporter` property to `MISSING_EXPORT` error (#7564) by @sapphi-red - add `id` property to `PARSE_ERROR` error (#7563) by @sapphi-red - support ImporterId hook filter (#7540) by @IWANABETHATGUY ### 🐛 Bug Fixes - types: better "go to definition" experience for interface `OutputPlugin` (#7610) by @KazariEX - `postBanner` content should be placed after shebang (#7583) by @btea - use sanitized filename for preserve modules chunk name (#7603) by @IWANABETHATGUY - correct filter out unused cjs namespace (#7602) by @IWANABETHATGUY - watch: property respect `notify.pollInternal` and `notify.compareContents` (#7595) by @sapphi-red - make `cleanDir` work with default output directory (#7579) by @shulaoda - merge `MISSING_NAME_OPTION_FOR_UMD_EXPORT` error to `MISSING_NAME_OPTION_FOR_IIFE_EXPORT` error (#7566) by @sapphi-red - dev/hmr: ensure cjs modules with no exports reference correct `module` identifier (#7544) by @leegeunhyeok ### 🚜 Refactor - remove `stable_id` field from `PARSE_ERROR` error (#7593) by @sapphi-red - make include_runtime_symbol reuseable after linking stage (#7580) by @IWANABETHATGUY - rust/dev: construct the bundler within itself (#7553) by @hyf0 - rust/watcher: polish API of `Watcher` struct (#7551) by @hyf0 - use `LinkingMetadata::stmt_info_included` to check if a stmt_info is included (#7572) by @IWANABETHATGUY - use `LinkingMetadata::is_included` to check if a module is included (#7571) by @IWANABETHATGUY - store module and stmt_info is included info to module meta (#7570) by @IWANABETHATGUY - make include_* method reunsable after linking stage (#7552) by @IWANABETHATGUY - rust/watcher: construct the bundler within watcher itself (#7550) by @hyf0 - extract make include_runtime_symbol reusable (#7546) by @IWANABETHATGUY ### ⚙️ Miscellaneous Tasks - renovate: add `kill-port` in `ignoreDeps` in renovate.json (#7619) by @sapphi-red - deps: update rust crates (#7617) by @renovate[bot] - deps: update npm packages (#7616) by @renovate[bot] - deps: update github-actions (#7615) by @renovate[bot] - ci: skip benchmark workflows on draft PRs (#7611) by @Copilot - deps: update dependency rolldown-plugin-dts to ^0.19.0 (#7607) by @renovate[bot] - deps: update dependency oxlint-tsgolint to v0.10.0 (#7601) by @renovate[bot] - deps: update dependency rolldown-plugin-dts to v0.18.4 (#7599) by @renovate[bot] - deps: update notify (#7594) by @sapphi-red - test-dev-server: add retry mechanism to hmr-full-bundle-mode tests (#7588) by @Copilot - deps: update napi to v3.7.1 (#7590) by @renovate[bot] - add JSDoc documentation for memfs type (#7587) by @Copilot - deps: update dependency oxlint to v1.34.0 (#7589) by @renovate[bot] - move some tests in ignored-by-unsupported-features that are passing (#7569) by @sapphi-red - deps: update dependency oxlint-tsgolint to v0.9.2 (#7582) by @renovate[bot] - deps: update oxc resolver to v11.16.0 (#7574) by @renovate[bot] - test/dev-server: don't run `pnpm install` during tests (#7560) by @hyf0 - test/dev-server: use `kill-port@1` to improve performance (#7575) by @hyf0 - normalize error object to make some Rollup tests pass (#7562) by @sapphi-red - ci: separate dev-server(hmr) tests and normal tests (#7558) by @hyf0 - ci: make native rolldown build reusable (#7557) by @hyf0 - resolve some TODOs (#7561) by @sapphi-red ### ❤️ New Contributors * @KazariEX made their first contribution in [#7610](#7610) * @leegeunhyeok made their first contribution in [#7544](#7544) Co-authored-by: shulaoda <[email protected]>

closed #7529
Completing composable hook filter of
ImporterId