Repository navigation
fix(cli): preserve nested function returns during migration - #3325
Conversation
Restrict config return matching to direct defineConfig callbacks so merging configuration does not change Rolldown chunk callbacks or other nested functions. Add regression coverage for nested returns and retain direct callback support.
|
@codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Extend the config merge fixture with a Vite 8 Rolldown chunk name callback. Record that migration merges tooling settings without changing return c.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f219c788fd
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Allow parentheses, as expressions, and satisfies expressions between a defineConfig callback and its arguments without crossing other expressions or nested function boundaries. Extend regression tests and add a CLI snapshot for wrapped callbacks.
|
@codex review |
|
Codex Review: Didn't find any major issues. Another round soon, please! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Allow angle-bracket type assertions and non-null expressions around direct defineConfig callbacks while retaining function and expression boundaries. Cover object and variable returns, nested callbacks, and the CLI snapshot.
|
@codex review |
|
Codex Review: Didn't find any major issues. Keep it up! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
A direct defineConfig callback can return a value that the merge rules cannot rewrite, such as a helper call. The merge previously reported success after updating only the other returns, so the migration deleted the JSON config and that branch lost its settings. The merge now leaves the files unchanged and reports the existing manual merge warning instead.
|
@codex review |
|
Codex Review: Didn't find any major issues. Can't wait for the next one! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Follow-up to #3325. Task cache migration and pack migration share a check for direct config objects. That check looked only at an object's immediate parent. As a result, a config wrapped in parentheses, `as`, `satisfies`, `<T>`, or `!` was not recognized, and the same was true when the wrapper surrounded the `defineConfig` callback. Pack migration skipped these configs silently, and task cache migration reported them for manual migration. ```ts // Pack options were left unchanged before this PR export default defineConfig({ pack: { bundle: false } } as UserConfig); ``` The check now looks through these wrappers. It also uses the function boundaries from #3325, so a return inside a nested generator is no longer treated as the config. Other callers of the check, such as `wrap_lazy_plugins`, now handle wrapped configs too. This is why the `migration_merge_wrapped_callback` snapshot now uses `lazyPlugins`, which matches the unwrapped case. --------- Co-authored-by: MK (fengmk2) <fengmk2@gmail.com>
Vite+ 1.5.1 checks managed package-manager downloads against the integrity hash in `packageManager`, restores interactive input in `vp run` tasks, fixes `vp migrate` config merges, and adds a reference page for each package command. ### Features - Vite+ checks a downloaded pnpm, Yarn 2+, or bun against the integrity hash in the project's `packageManager` field instead of the hash that the registry reports, and rejects a download that does not match. Mirrors and private registries that serve the same package still pass. Each pinned version gets its own cache directory, so a project with a pinned package manager downloads it once more after the upgrade. Unpinned installs keep their current location ([#3400](#3400)), by @fengmk2 and @arkmarta. - Upgrade the bundled Vite and Rolldown ([#3390](#3390)), by @voidzero-guard[bot] and @fengmk2: - `vite@8.3.5` to `vite@8.3.7`. A pnpm install no longer turns every cached build into a cache miss, because Vite tells Vite Task to ignore `node_modules/.modules.yaml`. It also fixes named imports from Node.js built-ins and reloads in bundled dev mode, subpath imports (`#`) in the dependency optimizer, SSR builds with `build.ssr: true`, and chunks shared with workers. - `rolldown@1.2.16` to `rolldown@1.2.18`, with module source maps that keep only the sources and names that they trace. - `@voidzero-dev/vite-plus-core` requires `postcss@^8.5.32`, as the bundled Vite does. ### Fixes & Enhancements - Scripts that `vp run` starts get a blocking stdin again when the `run` block of `vite.config.ts` is not statically analyzable (for example, a task command held in a constant), so interactive prompts such as `vp update --interactive` wait for input instead of failing with `EAGAIN` ([#3361](#3361)), by @everton-dgn. - `vp migrate` changes only the `return` statements of a `defineConfig` callback, so functions inside the config, such as Rolldown `codeSplitting.groups[].name` callbacks, keep their return values and the build no longer fails. When a callback return cannot receive the merged settings, migration keeps the standalone config files and asks for a manual merge. Pack and task cache migration also recognize configs wrapped in parentheses, `as`, `satisfies`, `<T>`, or `!` ([#3325](#3325), [#3372](#3372)), by @jong-kyung. - `vp create react-router` passes `--no-git-init` to `create-react-router`, so the generator's initial commit no longer stops the Vite+ setup when no Git identity is configured ([#3363](#3363)), by @chbaefront. - `env.fish` calls fish built-ins through `builtin`, so `vp env use` changes the Node.js version even when a user function has the name of a built-in such as `count` ([#3353](#3353)), by @naokihaba. - Shell completion suggests full command names before aliases, so `vp i<Tab>` offers `install` and `vp up<Tab>` offers `update`. An alias stays available when no full name matches ([#3337](#3337)), by @nekomoyi. - Completion for `vp run` and `vpr` skips comment keys such as `"# docs #"` in `package.json` scripts, matches task names that contain `:`, and shows each task's command as its description in Zsh and Fish ([#3354](#3354)), by @nekomoyi. - `vp pm dist-tag rm` works with Yarn Berry, because Vite+ passes `remove` to `yarn npm tag` ([#3358](#3358)), by @jong-kyung. - A package-manager version that resolves through a dist-tag, such as `pnpm@latest` in `vp env use`, must be a valid semver version. Vite+ rejects any other registry reply with an error, including a version with surrounding whitespace ([#3395](#3395)), by @fengmk2 and @arkmarta. ### Docs - Add a Package Management section to the guide, with a reference page for each of the 38 package commands that lists its options, package-manager support, version requirements, and npm fallbacks. Help output for package commands and the old package management and install URLs point to the new pages ([docs](https://viteplus.dev/guide/package-management/)) ([#3105](#3105)), by @jong-kyung. - Show the README logo that matches the GitHub theme, so the logo stays visible after a theme change ([#3350](#3350)), by @fengmk2. ### Chore - Build Linux native bindings against the napi-cross glibc 2.17 sysroot with `@napi-rs/cli@3.10.12`, let the linker reject unresolved symbols, and run Linux CI on `ubuntu-latest` again. Let the dependency upgrade workflow change workflow files ([#3349](#3349), [#3384](#3384)), by @fengmk2. - Refine contributor guidance: `AGENTS.md` separates the `vite-plus` package from the global `vp` CLI and replaces `CLAUDE.md`, and the Node.js version RFCs describe `.nvmrc` support ([#3388](#3388), [#3383](#3383)), by @liangmiQwQ and @hyunbinseo. - Resolve the docs theme aliases from `import.meta.dirname`, so the docs dev server no longer warns about `__dirname` ([#3379](#3379)), by @liangmiQwQ. - Fold the `.node-version` parse tests into one table ([#3355](#3355)), by @Brooooooklyn. ### Bundled Versions | Tool | Version | Source | Changelog | | --------------- | ---------- | ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | vite | `8.3.7` | [`5def936`](vitejs/vite@5def936) | [8.3.6](https://github.com/vitejs/vite/releases/tag/v8.3.6), [8.3.7](https://github.com/vitejs/vite/releases/tag/v8.3.7) | | rolldown | `1.2.18` | [`f9a49d6`](rolldown/rolldown@f9a49d6) | [1.2.18](https://github.com/rolldown/rolldown/releases/tag/v1.2.18) | | oxc-node | `1.0.1` | [`7ff14c3`](oxc-project/oxc-node@7ff14c3) | unchanged | | tsdown | `0.23.4` | [npm](https://npmx.dev/package/tsdown/v/0.23.4) | unchanged | | vitest | `5.1.0` | [npm](https://npmx.dev/package/vitest/v/5.1.0) | unchanged | | oxlint | `1.91.0` | [npm](https://npmx.dev/package/oxlint/v/1.91.0) | unchanged | | oxlint-tsgolint | `7.0.2005` | [npm](https://npmx.dev/package/oxlint-tsgolint/v/7.0.2005) | unchanged | | oxfmt | `0.76.0` | [npm](https://npmx.dev/package/oxfmt/v/0.76.0) | unchanged | ### Upgrade ```bash vp upgrade ``` ### New Contributors @chbaefront, @everton-dgn **Full Changelog**: v1.5.0...v1.5.1 --- Merging this PR will trigger the release workflow. --------- Co-authored-by: voidzero-guard[bot] <278573678+voidzero-guard[bot]@users.noreply.github.com> Co-authored-by: MK (fengmk2) <fengmk2@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Config migration could rewrite returns inside nested functions, including Rolldown
codeSplitting.groups[].namecallbacks. This changed chunk names into objects and caused builds to fail.Restrict return matching to direct
defineConfigcallbacks while preserving support for variable returns, conditional returns, and async callbacks.