Skip to content

Comments

feat: option watch.clearScreen#5518

Merged
shulaoda merged 6 commits intorolldown:mainfrom
situ2001:situ/feat-clear-screen
Aug 3, 2025
Merged

feat: option watch.clearScreen#5518
shulaoda merged 6 commits intorolldown:mainfrom
situ2001:situ/feat-clear-screen

Conversation

@situ2001
Copy link
Contributor

@situ2001 situ2001 commented Jul 30, 2025

closes #5473

@IWANABETHATGUY
Copy link
Member

Can you also update the related validator logic as well?

const WatchOptionsSchema = v.strictObject({
chokidar: v.optional(
v.never(
`The "watch.chokidar" option is deprecated, please use "watch.notify" instead of it`,
),
),
exclude: v.optional(
v.union([StringOrRegExpSchema, v.array(StringOrRegExpSchema)]),
),
include: v.optional(
v.union([StringOrRegExpSchema, v.array(StringOrRegExpSchema)]),
),
notify: v.pipe(
v.optional(
v.strictObject({
compareContents: v.optional(v.boolean()),
pollInterval: v.optional(v.number()),
}),
),
v.description('Notify options'),
),
skipWrite: v.pipe(
v.optional(v.boolean()),
v.description('Skip the bundle.write() step'),
),
buildDelay: v.pipe(
v.optional(v.number()),
v.description('Throttle watch rebuilds'),
),
});

@IWANABETHATGUY
Copy link
Member

Can you help with testing if it also works on Windows? @shulaoda

@hyf0 hyf0 requested a review from Copilot July 30, 2025 05:30
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 implements a new watch.clearScreen option that allows users to control whether the terminal screen is cleared during watch mode rebuilds. When enabled (default), the screen clears when a rebuild starts; when disabled, the terminal preserves existing output.

  • Adds clearScreen boolean option to WatcherOptions interface with default value of true
  • Implements getClearScreenFunction utility that returns a screen clearing function or no-op based on configuration
  • Integrates screen clearing into the watch command to clear screen on 'START' events

Reviewed Changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
packages/rolldown/src/options/input-options.ts Adds clearScreen property to WatcherOptions interface
packages/rolldown/src/utils/clear-screen.ts New utility for creating conditional screen clearing function
packages/rolldown/src/cli/commands/bundle.ts Integrates screen clearing into watch mode event handling
Comments suppressed due to low confidence (1)

packages/rolldown/src/utils/clear-screen.ts:13

  • [nitpick] The variable name isAnyOptionNotAllowingClearScreen is verbose and uses a double negative. Consider renaming to hasClearScreenDisabled or shouldDisableClearScreen for better readability.
  let isAnyOptionNotAllowingClearScreen = arraify(rolldownOptions)

@situ2001
Copy link
Contributor Author

Can you also update the related validator logic as well?

const WatchOptionsSchema = v.strictObject({
chokidar: v.optional(
v.never(
`The "watch.chokidar" option is deprecated, please use "watch.notify" instead of it`,
),
),
exclude: v.optional(
v.union([StringOrRegExpSchema, v.array(StringOrRegExpSchema)]),
),
include: v.optional(
v.union([StringOrRegExpSchema, v.array(StringOrRegExpSchema)]),
),
notify: v.pipe(
v.optional(
v.strictObject({
compareContents: v.optional(v.boolean()),
pollInterval: v.optional(v.number()),
}),
),
v.description('Notify options'),
),
skipWrite: v.pipe(
v.optional(v.boolean()),
v.description('Skip the bundle.write() step'),
),
buildDelay: v.pipe(
v.optional(v.number()),
v.description('Throttle watch rebuilds'),
),
});

Sure. I have added this option as optional boolean.

@shulaoda shulaoda self-assigned this Jul 30, 2025
@shulaoda shulaoda added this pull request to the merge queue Aug 3, 2025
Merged via the queue into rolldown:main with commit f23ed02 Aug 3, 2025
15 checks passed
This was referenced Aug 4, 2025
shulaoda added a commit that referenced this pull request Aug 4, 2025
## [1.0.0-beta.31] - 2025-08-04

### 🚀 Features

- support function for asset_inline_limit (#5453) by @AliceLanniste
- hmr: generate initializer for `export * from ...` (#5577) by @hyf0
- hmr: remove meaningless stmt instead of replacing with empty stmt (#5570) by @hyf0
- option `watch.clearScreen` (#5518) by @situ2001
- rolldown: oxc v0.80.0 (#5538) by @Boshen
- plugin/generateBundle: add support for modifying chunk filename (#5564) by @shulaoda
- assetFileNames: support `name` and `originalFileName` (#5555) by @shulaoda
- add optional `onInvalidate` schema to validator (#5528) by @situ2001
- don't throw resolve errors for dynamic import inside try block (#5537) by @shulaoda
- rolldown: oxc v0.79.0 (#5512) by @Boshen
- rolldown_plugin_asset: align `render_chunk` logic (#5511) by @shulaoda
- rolldown_plugin_utls: finish `render_asset_url_in_js` (#5508) by @shulaoda
- rolldown_plugin_utils: align replacement logic for `__VITE_ASSET__` (#5507) by @shulaoda
- rolldown_plugin_utils: add partial `render_asset_url_in_js` support (#5504) by @shulaoda
- expose `sourcemapBaseUrl` from NormalizedOutputOptions (#5513) by @sapphi-red

### 🐛 Bug Fixes

- modify output filename correctly in `generateBundle` and `writeBundle` (#5580) by @shulaoda
- hmr: ensure correct runtime behavior for `export * from ...` (#5578) by @hyf0
- hmr: repeated imports should point to the same binding (#5571) by @hyf0
- hmr: handle `export * from ...` (#5566) by @hyf0
- rolldown_plugin_web_worker_post: handle `import.meta` correctly (#5565) by @shulaoda
- antd bundle output not correct (#5549) by @IWANABETHATGUY
- hmr: module namespace object should be included via treeshaking mechanism normally (#5543) by @hyf0
- plugin/vite-resolve: use `import` / `require` conditions for external modules resolution (#5540) by @sapphi-red
- rolldown_plugin_asset: InvalidAsset#is should match InvalidAsset::True (#5529) by @AliceLanniste
- __name lacks require('./chunk-containing-runtime') when format: 'cjs' + keepNames: true (#5526) by @IWANABETHATGUY
- plugin/vite-resolve: resolve externalized packages with `resolve.externalConditions` (#5491) by @sapphi-red
- optimization.inlineConst: true does not keep export names when output.minifyInternalExports: true is enabled (#5520) by @IWANABETHATGUY
- scanner: identify `module.exports.__esModule = true` (#5503) by @overlookmotel
- error instead of panic if `sourcemapBaseUrl` is an invalid URL (#5514) by @sapphi-red

### 🚜 Refactor

- hmr: use `__rolldown_exports__` as the name for esm module namespace object (#5579) by @hyf0
- tests: rename `_configName` to `_testName` in configuration files and update variant formatting in snapshots (#5569) by @hyf0
- rolldown: remove unnecessary comments (#5552) by @situ2001
- rolldown: Remove `rolldown_rstr` crate and use `CompactStr` directly (#5542) by @Copilot
- hide namespace statement index knowledge inside StmtInfos (#5545) by @sapphi-red
- use pascal case when naming bitflags field for `ImportRecordMeta` (#5539) by @IWANABETHATGUY
- use concat_string! to simplify string concatenation (#5527) by @IWANABETHATGUY
- use combinator function handle `sourcemap_base_url` parsing (#5517) by @IWANABETHATGUY
- rolldown_plugin_utils: improve `to_output_file_path_in_js` (#5505) by @shulaoda

### 📚 Documentation

- wording nit (#5521) by @nullxone

### 🧪 Testing

- rust: rename `configName` to `_configName` and add comments (#5568) by @hyf0
- rust: re-organize `rolldown_testing_config` (#5567) by @hyf0

### ⚙️ Miscellaneous Tasks

- deps: lock file maintenance npm packages (#5582) by @renovate[bot]
- deps: lock file maintenance (#5581) by @renovate[bot]
- deps: lock file maintenance rust crates (#5576) by @renovate[bot]
- deps: lock file maintenance npm packages (#5574) by @renovate[bot]
- deps: update github-actions (#5573) by @renovate[bot]
- deps: update dependency rolldown-plugin-dts to v0.15.1 (#5572) by @renovate[bot]
- deps: update dependency tsdown to v0.13.2 (#5562) by @renovate[bot]
- deps: update dependency rolldown-plugin-dts to ^0.15.0 (#5563) by @renovate[bot]
- ai: Add AGENTS.md and GitHub Copilot setup workflow (#5556) by @Copilot
- deps: update dependency tsdown to v0.13.1 (#5551) by @renovate[bot]
- deps: update dependency rolldown-plugin-dts to v0.14.3 (#5544) by @renovate[bot]
- ensure all diagnostics in self.errors have Severity::Error (#5494) by @sapphi-red
- vscode: remove `code-spell-checker` extension (#5530) by @shulaoda
- deps: update dependency rolldown-plugin-dts to v0.14.2 (#5522) by @renovate[bot]
- add link to the REPL in the reproduction field description (#5519) by @sapphi-red
- enable some rollup tests (#5515) by @sapphi-red

### ❤️ New Contributors

* @Copilot made their first contribution in [#5556](#5556)
* @nullxone made their first contribution in [#5521](#5521)

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.

[Feature Request]: support option watch.clearScreen

3 participants