Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Oct 27, 2025

Rolldown defaulted to strict while Rollup defaults to exports-only.

Changes

  • Changed default from PreserveEntrySignatures::Strict to PreserveEntrySignatures::ExportsOnly in the Rust enum
  • Updated test snapshots reflecting the new chunking behavior
  • Added extended test variant to automatically test with preserveEntrySignatures: 'strict' for backward compatibility validation

Behavior

With exports-only:

  • Entry points with exports: preserve signature (behaves like strict)
  • Entry points without exports: use allow-extension mode, enabling more flexible chunking

Example: an entry with no exports can now be merged with shared chunks rather than maintaining a strict facade, reducing output size.

Testing

The extended test framework will now automatically run an additional variant with preserveEntrySignatures: 'strict' for all tests that don't explicitly set this option. This ensures that both the new default behavior and the previous behavior are tested, validating backward compatibility.

Original prompt

This section details on the original issue you should resolve

<issue_title>Align preserveEntrySignatures default value to Rollup</issue_title>
<issue_description>It is currently strict by default.


Rollup defaults to export-only.
https://rollupjs.org/configuration-options/#preserveentrysignatures
</issue_description>

Comments on the Issue (you are @copilot in this section)


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

@graphite-app
Copy link
Contributor

graphite-app bot commented Oct 27, 2025

How to use the Graphite Merge Queue

Add 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.

@netlify
Copy link

netlify bot commented Oct 27, 2025

Deploy Preview for rolldown-rs ready!

Name Link
🔨 Latest commit 07d9994
🔍 Latest deploy log https://app.netlify.com/projects/rolldown-rs/deploys/68ff91cd0b820d0008338431
😎 Deploy Preview https://deploy-preview-6723--rolldown-rs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Copilot AI changed the title [WIP] Align preserveEntrySignatures default value to Rollup Align preserveEntrySignatures default to Rollup Oct 27, 2025
Copilot AI requested a review from sapphi-red October 27, 2025 08:04
@github-actions
Copy link
Contributor

github-actions bot commented Oct 27, 2025

Benchmarks Rust

  • target: main(762eec9)
  • pr: copilot/align-preserve-entry-signatures(07d9994)
group                                                        pr                                     target
-----                                                        --                                     ------
bundle/bundle@multi-duplicated-top-level-symbol              1.04     74.4±4.67ms        ? ?/sec    1.00     71.3±3.83ms        ? ?/sec
bundle/bundle@multi-duplicated-top-level-symbol-sourcemap    1.02     80.7±4.56ms        ? ?/sec    1.00     79.1±4.72ms        ? ?/sec
bundle/bundle@rome_ts                                        1.01    116.1±6.25ms        ? ?/sec    1.00    114.6±5.08ms        ? ?/sec
bundle/bundle@rome_ts-sourcemap                              1.00    128.8±4.82ms        ? ?/sec    1.00    128.8±7.35ms        ? ?/sec
bundle/bundle@threejs                                        1.00     42.3±2.48ms        ? ?/sec    1.00     42.4±1.69ms        ? ?/sec
bundle/bundle@threejs-sourcemap                              1.02     46.9±2.24ms        ? ?/sec    1.00     46.1±2.09ms        ? ?/sec
bundle/bundle@threejs10x                                     1.01   428.0±21.99ms        ? ?/sec    1.00   422.6±21.30ms        ? ?/sec
bundle/bundle@threejs10x-sourcemap                           1.00   487.4±21.13ms        ? ?/sec    1.00   485.8±22.30ms        ? ?/sec
scan/scan@rome_ts                                            1.02     91.5±4.31ms        ? ?/sec    1.00     90.0±3.73ms        ? ?/sec
scan/scan@threejs                                            1.00     31.0±2.07ms        ? ?/sec    1.00     30.9±2.16ms        ? ?/sec
scan/scan@threejs10x                                         1.00   311.6±10.73ms        ? ?/sec    1.01   315.9±12.09ms        ? ?/sec

@sapphi-red
Copy link
Member

@copilot add code to apply_extended_tests in crates/rolldown_testing/src/fixture.rs that adds a variant with preserveEntrySignatures: 'strict'

Copy link
Contributor Author

Copilot AI commented Oct 27, 2025

@copilot add code to apply_extended_tests in crates/rolldown_testing/src/fixture.rs that adds a variant with preserveEntrySignatures: 'strict'

Added the extended test variant in commit 5cc8f9a. The test framework will now automatically run an additional variant with preserveEntrySignatures: 'strict' for tests that don't explicitly set this option, ensuring backward compatibility is tested alongside the new default.

@sapphi-red sapphi-red changed the title Align preserveEntrySignatures default to Rollup feat!: align preserveEntrySignatures default to Rollup Oct 27, 2025
@sapphi-red sapphi-red changed the title feat!: align preserveEntrySignatures default to Rollup feat!: default preserveEntrySignatures to 'exports-only' to align with Rollup Oct 27, 2025
@sapphi-red sapphi-red assigned hyf0 and unassigned sapphi-red Oct 27, 2025
@sapphi-red sapphi-red requested a review from hyf0 October 27, 2025 15:21
@sapphi-red sapphi-red marked this pull request as ready for review October 27, 2025 15:22
@hyf0 hyf0 requested a review from Copilot October 27, 2025 15:28
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR aligns Rolldown's default preserveEntrySignatures behavior with Rollup by changing it from 'strict' to 'exports-only'. This allows entry points without exports to be merged with shared chunks, enabling more flexible chunking and reducing output size.

Key Changes

  • Changed the default PreserveEntrySignatures enum variant from Strict to ExportsOnly
  • Added automatic test variant generation with preserveEntrySignatures: 'strict' to validate backward compatibility
  • Updated test snapshots to reflect new chunking patterns where entry points without exports can be merged with shared chunks

Reviewed Changes

Copilot reviewed 20 out of 20 changed files in this pull request and generated no comments.

Show a summary per file
File Description
crates/rolldown_common/src/inner_bundler_options/types/output_option/preserve_entry_signatures.rs Changed the #[default] attribute from Strict to ExportsOnly variant
crates/rolldown_testing_config/src/extended_tests.rs Added preserve_entry_signatures_strict field to enable automatic testing with strict mode
crates/rolldown_testing/src/fixture.rs Implemented logic to automatically generate test variant with PreserveEntrySignatures::Strict
crates/rolldown_testing/_config.schema.json Added schema definition for preserveEntrySignaturesStrict field
Multiple snapshot files Updated to reflect new chunking behavior where fewer intermediate chunk files are generated

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@hyf0
Copy link
Member

hyf0 commented Oct 27, 2025

LGTM. FYI @IWANABETHATGUY cc

Copy link
Member

hyf0 commented Oct 27, 2025

Merge activity

… with Rollup (#6723)

Rolldown defaulted to `strict` while Rollup defaults to `exports-only`.

## Changes

- Changed default from `PreserveEntrySignatures::Strict` to `PreserveEntrySignatures::ExportsOnly` in the Rust enum
- Updated test snapshots reflecting the new chunking behavior
- Added extended test variant to automatically test with `preserveEntrySignatures: 'strict'` for backward compatibility validation

## Behavior

With `exports-only`:
- Entry points **with exports**: preserve signature (behaves like `strict`)
- Entry points **without exports**: use `allow-extension` mode, enabling more flexible chunking

Example: an entry with no exports can now be merged with shared chunks rather than maintaining a strict facade, reducing output size.

## Testing

The extended test framework will now automatically run an additional variant with `preserveEntrySignatures: 'strict'` for all tests that don't explicitly set this option. This ensures that both the new default behavior and the previous behavior are tested, validating backward compatibility.

- Fixes #6722

<!-- START COPILOT CODING AGENT SUFFIX -->

<details>

<summary>Original prompt</summary>

>
> ----
>
> *This section details on the original issue you should resolve*
>
> <issue_title>Align `preserveEntrySignatures` default value to Rollup</issue_title>
> <issue_description>It is currently `strict` by default.
> https://github.com/rolldown/rolldown/blob/fecc8ee07749b742d0d86e8f4160acc6849fc1a0/crates/rolldown_common/src/inner_bundler_options/types/output_option/preserve_entry_signatures.rs#L16-L17
> Rollup defaults to `export-only`.
> https://rollupjs.org/configuration-options/#preserveentrysignatures
> </issue_description>
>
> ## Comments on the Issue (you are @copilot in this section)
>
> <comments>
> </comments>
>

</details>

- Fixes #6722

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in our [2 minute survey](https://gh.io/copilot-coding-agent-survey).
@graphite-app graphite-app bot force-pushed the copilot/align-preserve-entry-signatures branch from 5cc8f9a to 07d9994 Compare October 27, 2025 15:37
@graphite-app graphite-app bot merged commit 07d9994 into main Oct 27, 2025
27 checks passed
@graphite-app graphite-app bot deleted the copilot/align-preserve-entry-signatures branch October 27, 2025 15:51
@github-actions github-actions bot mentioned this pull request Nov 3, 2025
shulaoda added a commit that referenced this pull request Nov 3, 2025
## [1.0.0-beta.46] - 2025-11-03

### 💥 BREAKING CHANGES

- default `preserveEntrySignatures` to `'exports-only'` to align with
Rollup (#6723) by @Copilot

### 🚀 Features

- link to docs for commonjs prefer_builtin_feature diagnostic (#6793) by
@sapphi-red
- rolldown_plugin_build_import_analysis: align partial logic (#6789) by
@shulaoda
- improve `EVAL` warning message (#6776) by @sapphi-red
- rolldown: oxc v0.96.0 (#6774) by @Boshen
- rolldown_plugin_build_import_analysis: align partial logic (#6773) by
@shulaoda
- skip `__toESM` when not needed to reduce output size (#6751) by
@Copilot
- improve `EMPTY_IMPORT_META` warning message (#6761) by @sapphi-red
- rolldown_plugin_build_import_analysis: align no preload logic (#6762)
by @shulaoda
- rolldown_plugin_vite_css_post: align `RemovedPureCSSFilesCache` logic
(#6745) by @shulaoda
- rolldown_plugin_build_import_analysis: initialize `generateBundle`
logic (#6744) by @shulaoda
- experimental: introduce `freeExternalMemory` to free external memory
immediately (#6721) by @hyf0

### 🐛 Bug Fixes

- plugins: wrap replacePlugin with makeBuiltinPluginCallable (#6782) by
@huang-julien
- debug: make sure `this.resolve` is also tracked under corresponding
session (#6798) by @hyf0
- legal comments above directives are not preserved (#6787) by @shulaoda
- panic when rendering exports to other chunks (#6765) by @Copilot
- transform/inject: escape special characters in import source (#6778)
by @Copilot
- handle default exports from CJS modules correctly (#6767) by
@IWANABETHATGUY
- rolldown_plugin_build_import_analysis: correct aligned logic (#6768)
by @shulaoda
- duplicate default export when using both import and require (#6764) by
@Copilot
- handle arbitrary module namespace identifiers in
`preserveEntrySignatures: 'allow-extension'` (#6753) by @Copilot
- TypeError when loading CJS files after bundling mixed CJS+TS project
(#6743) by @IWANABETHATGUY
- add warnings for import.meta.dirname/filename/url in UMD and IIFE
formats (#6747) by @Copilot
- rolldown_plugin_manifest: should keep `names` field (#6742) by
@shulaoda
- legal comments above import statements are not preserved (#6717) by
@shulaoda
- remove redundant node check in dynamic entry graph construction
(#6730) by @IWANABETHATGUY

### 🚜 Refactor

- remove unnecessary `#[napi(gettter)]`, use function call directly
(#6694) by @hyf0
- explain the reason if memory doesn't get dropped by
`freeExternalMemory` (#6781) by @hyf0
- pre compute exports (#6755) by @IWANABETHATGUY
- dev: receive an interface for DevRuntime rather than WebSocket
directly (#6734) by @sapphi-red
- dev: fix types for the runtime file and expose it properly (#6731) by
@sapphi-red

### 📚 Documentation

- fix magicstring credit (#6812) by @TheAlexLichter
- in-depth/bundling-cjs: wrap some sections with caveats section (#6796)
by @sapphi-red
- in-depth/bundling-cjs: add "Ambiguous `default` import from CJS
modules" section (#6795) by @sapphi-red
- in-depth/bundling-cjs: make `esmExternalRequirePlugin` link more
prominent (#6792) by @sapphi-red
- add explanation about direct eval (#6775) by @sapphi-red
- add "Non-ESM Output Formats" page (#6760) by @sapphi-red
- use oxc for benchmark comparison in native magic string doc (#6740) by
@sapphi-red
- polish `cleanDir` option (#6741) by @hyf0
- fix image in native magic string doc (#6739) by @sapphi-red
- update description about `attachDebugInfo: 'none'` (#6738) by
@IWANABETHATGUY
- add warning about cleanDir behavior with multiple configs (#6735) by
@Copilot

### 🧪 Testing

- skip paths function test (#6771) by @IWANABETHATGUY
- rust/dev: add test about recover from initial build error (#6567) by
@hyf0

### ⚙️ Miscellaneous Tasks

- correct prepare release binding file (#6817) by @shulaoda
- deps: update github-actions (#6806) by @renovate[bot]
- deps: lock file maintenance npm packages (#6814) by @renovate[bot]
- use correct node version (#6809) by @shulaoda
- deps: lock file maintenance rust crates (#6815) by @renovate[bot]
- deps: update npm packages (major) (#6813) by @renovate[bot]
- deps: update dependency dprint-typescript to v0.95.12 (#6805) by
@renovate[bot]
- fix typo (#6801) by @iiio2
- fix typo in is_import_expr_ignored_by_comment method name (#6797) by
@sapphi-red
- deps: update crate-ci/typos action to v1.39.0 (#6794) by
@renovate[bot]
- deps: upgrade Rust to v1.91.0 and fix new clippy lints (#6785) by
@Copilot
- allow dprint to format `packages/rolldown/tests` except diagnostics
directory (#6772) by @Copilot
- deps: update dependency tsdown to v0.15.12 (#6759) by @renovate[bot]
- deps: update dependency rolldown-plugin-dts to v0.17.3 (#6758) by
@renovate[bot]
- test/dev: collect multiple build outputs for each step (#6736) by
@hyf0
- rolldown: change the NAPI-RS binding file to the cjs (#6688) by
@Brooooooklyn
- test: automatically run extra test with `preserve_entry_signatures:
'allow-extension'` (#6727) by @Copilot
- deps: update dependency rolldown-plugin-dts to v0.17.2 (#6732) by
@renovate[bot]
- fix node validation (#6728) by @shulaoda
- deps: lock file maintenance rust crates (#6636) by @renovate[bot]
- deps: update dependency tsdown to v0.15.11 (#6725) by @renovate[bot]

### ❤️ New Contributors

* @huang-julien made their first contribution in
[#6782](#6782)

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.

Align preserveEntrySignatures default value to Rollup

3 participants