diff --git a/.github/actions/clone/action.yml b/.github/actions/clone/action.yml index ac291fc82a..ced4ff0ccb 100644 --- a/.github/actions/clone/action.yml +++ b/.github/actions/clone/action.yml @@ -47,6 +47,12 @@ runs: ref: ${{ steps.upstream-versions.outputs.ROLLDOWN_VITE_HASH }} persist-credentials: false + # Match the manifests used by sync-remote when it generated the root lockfile. + # setup-node installs with --frozen-lockfile, so this must run before it. + - name: Align vendored Vitest dependencies + shell: bash + run: node packages/tools/src/vendored-vitest.mjs + # Disable autocrlf to preserve LF line endings on Windows # This prevents prettier/eslint from failing with "Delete ␍" errors - name: Configure git for LF line endings diff --git a/.github/scripts/__tests__/upgrade-deps-utils.spec.ts b/.github/scripts/__tests__/upgrade-deps-utils.spec.ts index b8b6b1f4a8..671ff1d069 100644 --- a/.github/scripts/__tests__/upgrade-deps-utils.spec.ts +++ b/.github/scripts/__tests__/upgrade-deps-utils.spec.ts @@ -16,3 +16,9 @@ test('selects the highest stable version from the supported major', () => { test('returns undefined when the supported major has no stable release', () => { expect(findLatestStableVersionForMajor(['4.2.0-beta.1', '5.0.0'], 4)).toBeUndefined(); }); + +test('keeps Vitest upgrades on v5 after the migration', () => { + expect( + findLatestStableVersionForMajor(['4.1.11', '5.0.0', '5.1.0', '5.2.0-beta.1', '6.0.0'], 5), + ).toBe('5.1.0'); +}); diff --git a/.github/scripts/upgrade-deps.ts b/.github/scripts/upgrade-deps.ts index acc5a6e633..b895b6f2d0 100644 --- a/.github/scripts/upgrade-deps.ts +++ b/.github/scripts/upgrade-deps.ts @@ -72,7 +72,7 @@ type PnpmWorkspaceEntry = { const STABLE_SEMVER_TAG_RE = /^v?\d+\.\d+\.\d+$/; // Vitest major upgrades can change the bundled API, export shims, and CLI // behavior. Advance this only after Vite+ has adapted to the new major. -const SUPPORTED_VITEST_MAJOR = 4; +const SUPPORTED_VITEST_MAJOR = 5; const isFullSha = (s: string): boolean => /^[0-9a-f]{40}$/.test(s); @@ -211,18 +211,15 @@ async function updatePnpmWorkspace(versions: PnpmWorkspaceVersions): Promise: ^X vs ^Y`. The merger refuses to auto-resolve cross-major conflicts for packages outside its synced list - (oxc-*, vitest deps). For passthrough deps that vp does NOT import + (oxc-* and tinybench). For passthrough deps that vp does NOT import directly (e.g. `diff`, `acorn`, `astring`, anything only present in `rolldown/scripts/package.json` or vite's internals), bump vp's `pnpm-workspace.yaml` catalog entry to match the rolldown/vite version, diff --git a/.typos.toml b/.typos.toml index 0c6c885186..ae1189d497 100644 --- a/.typos.toml +++ b/.typos.toml @@ -1,3 +1,7 @@ +[default] +# Vitest v4 used this misspelled directory; the migrator must recognize it. +extend-ignore-re = ['\.vitest-attachements\b'] + [default.extend-words] ratatui = "ratatui" PUNICODE = "PUNICODE" diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_add_yarn4/snapshots/command_add_yarn4.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_add_yarn4/snapshots/command_add_yarn4.md index d29294bbd0..68f22d6544 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_add_yarn4/snapshots/command_add_yarn4.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_add_yarn4/snapshots/command_add_yarn4.md @@ -49,7 +49,7 @@ should add package as dev dependencies ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` @@ -80,7 +80,7 @@ warn: yarn does not support --allow-build. ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` @@ -113,7 +113,7 @@ VITE+ - The Unified Toolchain for the Web ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` @@ -149,7 +149,7 @@ should add package as optional dependencies ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` @@ -186,7 +186,7 @@ support pass through arguments ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_add_yarn4_with_workspace/snapshots/command_add_yarn4_with_workspace.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_add_yarn4_with_workspace/snapshots/command_add_yarn4_with_workspace.md index 18086d0307..34432f0dde 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_add_yarn4_with_workspace/snapshots/command_add_yarn4_with_workspace.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_add_yarn4_with_workspace/snapshots/command_add_yarn4_with_workspace.md @@ -14,7 +14,7 @@ should add package to workspace root ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json packages/app/package.json packages/utils/package.json` @@ -54,7 +54,7 @@ warn: yarn does not support --workspace. ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json packages/app/package.json packages/utils/package.json` @@ -99,10 +99,10 @@ should add packages to packages/app [app]: ➤ YN0000: └ Completed [app]: ➤ YN0000: ┌ Link step [app]: ➤ YN0000: └ Completed -[app]: ➤ YN0000: · Done in -[app]: Process exited (exit code 0), completed in +[app]: ➤ YN0000: · Done in +[app]: Process exited (exit code 0), completed in -Done in +Done in ``` ## `vpt print-file package.json packages/app/package.json packages/utils/package.json` @@ -150,10 +150,10 @@ warn: yarn does not support --workspace. [app]: ➤ YN0000: └ Completed [app]: ➤ YN0000: ┌ Link step [app]: ➤ YN0000: └ Completed -[app]: ➤ YN0000: · Done in -[app]: Process exited (exit code 0), completed in +[app]: ➤ YN0000: · Done in +[app]: Process exited (exit code 0), completed in -Done in +Done in ``` ## `vpt print-file package.json packages/app/package.json packages/utils/package.json` @@ -201,8 +201,8 @@ should add testnpm2 test-vite-plus-install to all packages and workspace root [command-add-yarn4-with-workspace]: ➤ YN0000: └ Completed [command-add-yarn4-with-workspace]: ➤ YN0000: ┌ Link step [command-add-yarn4-with-workspace]: ➤ YN0000: └ Completed -[command-add-yarn4-with-workspace]: ➤ YN0000: · Done in -[command-add-yarn4-with-workspace]: Process exited (exit code 0), completed in +[command-add-yarn4-with-workspace]: ➤ YN0000: · Done in +[command-add-yarn4-with-workspace]: Process exited (exit code 0), completed in [admin]: Process started [admin]: ➤ YN0000: · Yarn @@ -212,8 +212,8 @@ should add testnpm2 test-vite-plus-install to all packages and workspace root [admin]: ➤ YN0000: └ Completed [admin]: ➤ YN0000: ┌ Link step [admin]: ➤ YN0000: └ Completed -[admin]: ➤ YN0000: · Done in -[admin]: Process exited (exit code 0), completed in +[admin]: ➤ YN0000: · Done in +[admin]: Process exited (exit code 0), completed in [app]: Process started [app]: ➤ YN0000: · Yarn @@ -223,8 +223,8 @@ should add testnpm2 test-vite-plus-install to all packages and workspace root [app]: ➤ YN0000: └ Completed [app]: ➤ YN0000: ┌ Link step [app]: ➤ YN0000: └ Completed -[app]: ➤ YN0000: · Done in -[app]: Process exited (exit code 0), completed in +[app]: ➤ YN0000: · Done in +[app]: Process exited (exit code 0), completed in [@vite-plus-test/utils]: Process started [@vite-plus-test/utils]: ➤ YN0000: · Yarn @@ -234,10 +234,10 @@ should add testnpm2 test-vite-plus-install to all packages and workspace root [@vite-plus-test/utils]: ➤ YN0000: └ Completed [@vite-plus-test/utils]: ➤ YN0000: ┌ Link step [@vite-plus-test/utils]: ➤ YN0000: └ Completed -[@vite-plus-test/utils]: ➤ YN0000: · Done in -[@vite-plus-test/utils]: Process exited (exit code 0), completed in +[@vite-plus-test/utils]: ➤ YN0000: · Done in +[@vite-plus-test/utils]: Process exited (exit code 0), completed in -Done in +Done in ``` ## `vpt print-file package.json packages/app/package.json packages/admin/package.json packages/utils/package.json` @@ -301,8 +301,8 @@ VITE+ - The Unified Toolchain for the Web [command-add-yarn4-with-workspace]: ➤ YN0000: └ Completed [command-add-yarn4-with-workspace]: ➤ YN0000: ┌ Link step [command-add-yarn4-with-workspace]: ➤ YN0000: └ Completed -[command-add-yarn4-with-workspace]: ➤ YN0000: · Done in -[command-add-yarn4-with-workspace]: Process exited (exit code 0), completed in +[command-add-yarn4-with-workspace]: ➤ YN0000: · Done in +[command-add-yarn4-with-workspace]: Process exited (exit code 0), completed in [admin]: Process started [admin]: ➤ YN0000: · Yarn @@ -312,8 +312,8 @@ VITE+ - The Unified Toolchain for the Web [admin]: ➤ YN0000: └ Completed [admin]: ➤ YN0000: ┌ Link step [admin]: ➤ YN0000: └ Completed -[admin]: ➤ YN0000: · Done in -[admin]: Process exited (exit code 0), completed in +[admin]: ➤ YN0000: · Done in +[admin]: Process exited (exit code 0), completed in [app]: Process started [app]: ➤ YN0000: · Yarn @@ -323,10 +323,10 @@ VITE+ - The Unified Toolchain for the Web [app]: ➤ YN0000: └ Completed [app]: ➤ YN0000: ┌ Link step [app]: ➤ YN0000: └ Completed -[app]: ➤ YN0000: · Done in -[app]: Process exited (exit code 0), completed in +[app]: ➤ YN0000: · Done in +[app]: Process exited (exit code 0), completed in -Done in +Done in ``` ## `vpt print-file package.json packages/app/package.json packages/admin/package.json packages/utils/package.json` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_dedupe_yarn4/snapshots/command_dedupe_yarn4.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_dedupe_yarn4/snapshots/command_dedupe_yarn4.md index 24cc7616fc..217c332fed 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_dedupe_yarn4/snapshots/command_dedupe_yarn4.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_dedupe_yarn4/snapshots/command_dedupe_yarn4.md @@ -17,7 +17,7 @@ should dedupe dependencies ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_link_yarn4/snapshots/command_link_yarn4.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_link_yarn4/snapshots/command_link_yarn4.md index b80751d968..1ab706215b 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_link_yarn4/snapshots/command_link_yarn4.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_link_yarn4/snapshots/command_link_yarn4.md @@ -25,7 +25,7 @@ should link local directory ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` @@ -53,7 +53,7 @@ should work with ln alias ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` @@ -81,7 +81,7 @@ cleanup temp states ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_pack_yarn4/snapshots/command_pack_yarn4.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_pack_yarn4/snapshots/command_pack_yarn4.md index 0f03fe7b74..6eaa9537aa 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_pack_yarn4/snapshots/command_pack_yarn4.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_pack_yarn4/snapshots/command_pack_yarn4.md @@ -7,7 +7,7 @@ should pack current package ``` ➤ YN0000: package.json ➤ YN0000: Package archive generated in /package.tgz -➤ YN0000: Done in +➤ YN0000: Done in ``` ## `vp pm pack --out ./dist/package.tgz` @@ -17,7 +17,7 @@ should pack with output file ``` ➤ YN0000: package.json ➤ YN0000: Package archive generated in /dist/package.tgz -➤ YN0000: Done in +➤ YN0000: Done in ``` ## `vp pm pack --json` @@ -38,5 +38,5 @@ should support pass through arguments ``` ➤ YN0000: dist/package.tgz ➤ YN0000: package.json -➤ YN0000: Done in +➤ YN0000: Done in ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_pack_yarn4_with_workspace/snapshots/command_pack_yarn4_with_workspace.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_pack_yarn4_with_workspace/snapshots/command_pack_yarn4_with_workspace.md index 9f43a23b24..fc748b3431 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_pack_yarn4_with_workspace/snapshots/command_pack_yarn4_with_workspace.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_pack_yarn4_with_workspace/snapshots/command_pack_yarn4_with_workspace.md @@ -15,7 +15,7 @@ VITE+ - The Unified Toolchain for the Web ➤ YN0000: ┌ Link step ➤ YN0073: │ Skipped due to mode=update-lockfile ➤ YN0000: └ Completed -➤ YN0000: · Done with warnings in +➤ YN0000: · Done with warnings in ``` ## `vp pm pack` @@ -25,7 +25,7 @@ should pack current workspace root ``` ➤ YN0000: package.json ➤ YN0000: Package archive generated in /package.tgz -➤ YN0000: Done in +➤ YN0000: Done in ``` ## `vp pm pack --recursive` @@ -36,22 +36,22 @@ should pack all packages in workspace (uses workspaces foreach --all pack) [command-pack-yarn4-with-workspace]: Process started [command-pack-yarn4-with-workspace]: ➤ YN0000: package.json [command-pack-yarn4-with-workspace]: ➤ YN0000: Package archive generated in /package.tgz -[command-pack-yarn4-with-workspace]: ➤ YN0000: Done in -[command-pack-yarn4-with-workspace]: Process exited (exit code 0), completed in +[command-pack-yarn4-with-workspace]: ➤ YN0000: Done in +[command-pack-yarn4-with-workspace]: Process exited (exit code 0), completed in [app]: Process started [app]: ➤ YN0000: package.json [app]: ➤ YN0000: Package archive generated in /packages/app/package.tgz -[app]: ➤ YN0000: Done in -[app]: Process exited (exit code 0), completed in +[app]: ➤ YN0000: Done in +[app]: Process exited (exit code 0), completed in [@vite-plus-test/utils]: Process started [@vite-plus-test/utils]: ➤ YN0000: package.json [@vite-plus-test/utils]: ➤ YN0000: Package archive generated in /packages/utils/package.tgz -[@vite-plus-test/utils]: ➤ YN0000: Done in -[@vite-plus-test/utils]: Process exited (exit code 0), completed in +[@vite-plus-test/utils]: ➤ YN0000: Done in +[@vite-plus-test/utils]: Process exited (exit code 0), completed in -Done in +Done in ``` ## `vp pm pack --filter app` @@ -62,10 +62,10 @@ should pack specific package (uses workspaces foreach --all --include app pack) [app]: Process started [app]: ➤ YN0000: package.json [app]: ➤ YN0000: Package archive generated in /packages/app/package.tgz -[app]: ➤ YN0000: Done in -[app]: Process exited (exit code 0), completed in +[app]: ➤ YN0000: Done in +[app]: Process exited (exit code 0), completed in -Done in +Done in ``` ## `vp pm pack --filter app --filter @vite-plus-test/utils` @@ -76,16 +76,16 @@ should pack multiple packages [app]: Process started [app]: ➤ YN0000: package.json [app]: ➤ YN0000: Package archive generated in /packages/app/package.tgz -[app]: ➤ YN0000: Done in -[app]: Process exited (exit code 0), completed in +[app]: ➤ YN0000: Done in +[app]: Process exited (exit code 0), completed in [@vite-plus-test/utils]: Process started [@vite-plus-test/utils]: ➤ YN0000: package.json [@vite-plus-test/utils]: ➤ YN0000: Package archive generated in /packages/utils/package.tgz -[@vite-plus-test/utils]: ➤ YN0000: Done in -[@vite-plus-test/utils]: Process exited (exit code 0), completed in +[@vite-plus-test/utils]: ➤ YN0000: Done in +[@vite-plus-test/utils]: Process exited (exit code 0), completed in -Done in +Done in ``` ## `vp pm pack --out ./dist/package.tgz` @@ -95,7 +95,7 @@ should pack with output file ``` ➤ YN0000: package.json ➤ YN0000: Package archive generated in /dist/package.tgz -➤ YN0000: Done in +➤ YN0000: Done in ``` ## `vp pm pack --json` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_remove_yarn4/snapshots/command_remove_yarn4.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_remove_yarn4/snapshots/command_remove_yarn4.md index 36812df7d0..e50ab482ec 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_remove_yarn4/snapshots/command_remove_yarn4.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_remove_yarn4/snapshots/command_remove_yarn4.md @@ -28,7 +28,7 @@ should add packages to dependencies ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vp add -D test-vite-plus-install` @@ -43,7 +43,7 @@ should add packages to dependencies ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vp add -O test-vite-plus-package-optional` @@ -58,7 +58,7 @@ should add packages to dependencies ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` @@ -93,7 +93,7 @@ should remove packages from dependencies ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` @@ -122,7 +122,7 @@ support ignore -O flag and remove package from optional dependencies ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_remove_yarn4_with_workspace/snapshots/command_remove_yarn4_with_workspace.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_remove_yarn4_with_workspace/snapshots/command_remove_yarn4_with_workspace.md index af098d5d41..f11d40f4a4 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_remove_yarn4_with_workspace/snapshots/command_remove_yarn4_with_workspace.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_remove_yarn4_with_workspace/snapshots/command_remove_yarn4_with_workspace.md @@ -88,7 +88,7 @@ should remove package from all workspaces and root ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json packages/app/package.json packages/admin/package.json packages/utils/package.json` @@ -151,7 +151,7 @@ should remove optional package from all workspaces ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json packages/app/package.json packages/admin/package.json packages/utils/package.json` @@ -202,10 +202,10 @@ should remove package by filter=app [app]: ➤ YN0000: └ Completed [app]: ➤ YN0000: ┌ Link step [app]: ➤ YN0000: └ Completed -[app]: ➤ YN0000: · Done in -[app]: Process exited (exit code 0), completed in +[app]: ➤ YN0000: · Done in +[app]: Process exited (exit code 0), completed in -Done in +Done in ``` ## `vpt print-file package.json packages/app/package.json packages/admin/package.json packages/utils/package.json` @@ -253,10 +253,10 @@ should remove package by filter=* [app]: ➤ YN0000: └ Completed [app]: ➤ YN0000: ┌ Link step [app]: ➤ YN0000: └ Completed -[app]: ➤ YN0000: · Done in -[app]: Process exited (exit code 0), completed in +[app]: ➤ YN0000: · Done in +[app]: Process exited (exit code 0), completed in -Done in +Done in ``` ## `vp remove test-vite-plus-install --filter=*` @@ -270,8 +270,8 @@ Done in [command-remove-yarn4-with-workspace]: ➤ YN0000: └ Completed [command-remove-yarn4-with-workspace]: ➤ YN0000: ┌ Link step [command-remove-yarn4-with-workspace]: ➤ YN0000: └ Completed -[command-remove-yarn4-with-workspace]: ➤ YN0000: · Done in -[command-remove-yarn4-with-workspace]: Process exited (exit code 0), completed in +[command-remove-yarn4-with-workspace]: ➤ YN0000: · Done in +[command-remove-yarn4-with-workspace]: Process exited (exit code 0), completed in [admin]: Process started [admin]: ➤ YN0000: · Yarn @@ -281,8 +281,8 @@ Done in [admin]: ➤ YN0000: └ Completed [admin]: ➤ YN0000: ┌ Link step [admin]: ➤ YN0000: └ Completed -[admin]: ➤ YN0000: · Done in -[admin]: Process exited (exit code 0), completed in +[admin]: ➤ YN0000: · Done in +[admin]: Process exited (exit code 0), completed in [app]: Process started [app]: ➤ YN0000: · Yarn @@ -292,10 +292,10 @@ Done in [app]: ➤ YN0000: └ Completed [app]: ➤ YN0000: ┌ Link step [app]: ➤ YN0000: └ Completed -[app]: ➤ YN0000: · Done in -[app]: Process exited (exit code 0), completed in +[app]: ➤ YN0000: · Done in +[app]: Process exited (exit code 0), completed in -Done in +Done in ``` ## `vpt print-file package.json packages/app/package.json packages/admin/package.json packages/utils/package.json` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_tool_help/snapshots/command_tool_deep_help_delegation.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_tool_help/snapshots/command_tool_deep_help_delegation.md index 327af269cb..6f3bf09aaa 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_tool_help/snapshots/command_tool_deep_help_delegation.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_tool_help/snapshots/command_tool_deep_help_delegation.md @@ -5,7 +5,7 @@ Help requests with additional arguments delegate to the underlying tool. ## `vp test --help --coverage` ``` -vitest/4.1.11 +vitest/5.0.0 Usage: $ vitest [...filters] @@ -17,6 +17,7 @@ Commands: dev [...filters] bench [...filters] init + doctor [...filters] list [...filters] [...filters] complete [shell] @@ -28,6 +29,7 @@ For more info, run any command with the `--help` flag: $ vitest dev --help $ vitest bench --help $ vitest init --help + $ vitest doctor --help $ vitest list --help $ vitest --help $ vitest complete --help @@ -47,7 +49,7 @@ Options: --coverage.allowExternal Collect coverage of files outside the project root (default: false) --coverage.skipFull Do not show files with 100% statement, branch, and function coverage (default: false) --coverage.thresholds.100 Shortcut to set all coverage thresholds to 100 (default: false) - --coverage.thresholds.perFile Check thresholds per file. See --coverage.thresholds.lines, --coverage.thresholds.functions, --coverage.thresholds.branches and --coverage.thresholds.statements for the actual thresholds (default: false) + --coverage.thresholds.perFile Check thresholds per file. See --coverage.thresholds.lines, --coverage.thresholds.functions, --coverage.thresholds.branches and --coverage.thresholds.statements for the actual thresholds (default: false). Object form is available in config files only. --coverage.thresholds.autoUpdate Update threshold values: "lines", "functions", "branches" and "statements" to configuration file when current coverage is above the configured thresholds (default: false) --coverage.thresholds.lines Threshold for lines. Visit https://github.com/istanbuljs/nyc#coverage-thresholds for more information. This option is not available for custom providers --coverage.thresholds.functions Threshold for functions. Visit https://github.com/istanbuljs/nyc#coverage-thresholds for more information. This option is not available for custom providers @@ -63,4 +65,5 @@ Options: --coverage.changed Collect coverage only for files changed since a specified commit or branch (e.g., origin/main or HEAD~1). Inherits value from --changed by default. --coverage.excludeAfterRemap Apply exclusions again after coverage has been remapped to original sources. (default: false) --coverage.htmlDir Directory of HTML coverage output to be served in UI mode and HTML reporter. + --coverage.autoAttachSubprocess Track coverage of the node:child_process and node:worker_threads spawned during test run. Supported only by v8 provider. (default: false) ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_unlink_yarn4/snapshots/command_unlink_yarn4.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_unlink_yarn4/snapshots/command_unlink_yarn4.md index 53e3073c3b..5db048eb19 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_unlink_yarn4/snapshots/command_unlink_yarn4.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_unlink_yarn4/snapshots/command_unlink_yarn4.md @@ -25,7 +25,7 @@ link the library first ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` @@ -53,7 +53,7 @@ should unlink the package ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` @@ -78,7 +78,7 @@ link again ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` @@ -106,7 +106,7 @@ should unlink all with --all flag ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` @@ -131,7 +131,7 @@ should work with -r short form ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_yarn4/snapshots/command_update_yarn4.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_yarn4/snapshots/command_update_yarn4.md index f2720d8611..b8e1dd9e1f 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_yarn4/snapshots/command_update_yarn4.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_yarn4/snapshots/command_update_yarn4.md @@ -14,7 +14,7 @@ should update package within semver range ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` @@ -49,7 +49,7 @@ should to absolute latest version ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vp add testnpm2@1.0.0 -D` @@ -64,7 +64,7 @@ should to absolute latest version ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vp update testnpm2 --latest` @@ -79,7 +79,7 @@ should to absolute latest version ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` @@ -111,7 +111,7 @@ should update and ignore -D options ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` @@ -143,7 +143,7 @@ should update all packages but won't change the package.json ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_yarn4_with_workspace/snapshots/command_update_yarn4_with_workspace.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_yarn4_with_workspace/snapshots/command_update_yarn4_with_workspace.md index 7f9951c7a9..bcf0da5d52 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_yarn4_with_workspace/snapshots/command_update_yarn4_with_workspace.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_yarn4_with_workspace/snapshots/command_update_yarn4_with_workspace.md @@ -14,7 +14,7 @@ should update all testnpm2 versions ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json packages/utils/package.json` @@ -54,10 +54,10 @@ should update in specific package [app]: ➤ YN0000: └ Completed [app]: ➤ YN0000: ┌ Link step [app]: ➤ YN0000: └ Completed -[app]: ➤ YN0000: · Done in -[app]: Process exited (exit code 0), completed in +[app]: ➤ YN0000: · Done in +[app]: Process exited (exit code 0), completed in -Done in +Done in ``` ## `vpt print-file packages/app/package.json` @@ -89,10 +89,10 @@ should update dev dependencies in app [app]: ➤ YN0000: └ Completed [app]: ➤ YN0000: ┌ Link step [app]: ➤ YN0000: └ Completed -[app]: ➤ YN0000: · Done in -[app]: Process exited (exit code 0), completed in +[app]: ➤ YN0000: · Done in +[app]: Process exited (exit code 0), completed in -Done in +Done in ``` ## `vpt print-file packages/app/package.json` @@ -124,8 +124,8 @@ should update in all packages [command-update-yarn4-with-workspace]: ➤ YN0000: └ Completed [command-update-yarn4-with-workspace]: ➤ YN0000: ┌ Link step [command-update-yarn4-with-workspace]: ➤ YN0000: └ Completed -[command-update-yarn4-with-workspace]: ➤ YN0000: · Done in -[command-update-yarn4-with-workspace]: Process exited (exit code 0), completed in +[command-update-yarn4-with-workspace]: ➤ YN0000: · Done in +[command-update-yarn4-with-workspace]: Process exited (exit code 0), completed in [app]: Process started [app]: ➤ YN0000: · Yarn @@ -135,10 +135,10 @@ should update in all packages [app]: ➤ YN0000: └ Completed [app]: ➤ YN0000: ┌ Link step [app]: ➤ YN0000: └ Completed -[app]: ➤ YN0000: · Done in -[app]: Process exited (exit code 0), completed in +[app]: ➤ YN0000: · Done in +[app]: Process exited (exit code 0), completed in -Done in +Done in ``` ## `vpt print-file packages/app/package.json packages/utils/package.json` @@ -176,7 +176,7 @@ should update recursively without saving ➤ YN0000: └ Completed ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed -➤ YN0000: · Done in +➤ YN0000: · Done in ``` ## `vpt print-file package.json packages/app/package.json` @@ -219,10 +219,10 @@ should update workspace dependency [app]: ➤ YN0000: └ Completed [app]: ➤ YN0000: ┌ Link step [app]: ➤ YN0000: └ Completed -[app]: ➤ YN0000: · Done in -[app]: Process exited (exit code 0), completed in +[app]: ➤ YN0000: · Done in +[app]: Process exited (exit code 0), completed in -Done in +Done in ``` ## `vpt print-file packages/app/package.json` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_why_yarn4/snapshots/command_why_yarn4.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_why_yarn4/snapshots/command_why_yarn4.md index 3f2ef70f63..11a36d36c7 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_why_yarn4/snapshots/command_why_yarn4.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_why_yarn4/snapshots/command_why_yarn4.md @@ -17,7 +17,7 @@ VITE+ - The Unified Toolchain for the Web ➤ YN0000: ┌ Link step ➤ YN0073: │ Skipped due to mode=update-lockfile ➤ YN0000: └ Completed -➤ YN0000: · Done with warnings in +➤ YN0000: · Done with warnings in ``` ## `vp why testnpm2` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/check-npm-layout.mjs b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/check-npm-layout.mjs index db39f0147f..7d71f37cc7 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/check-npm-layout.mjs +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/check-npm-layout.mjs @@ -7,10 +7,23 @@ const vitestRequire = createRequire(cliRequire.resolve('vitest/package.json')); const project = require('./package.json'); assert.equal(project.overrides, undefined); assert.equal(cliRequire('vite/package.json').name, '@voidzero-dev/vite-plus-core'); -assert.equal(vitestRequire('vite/package.json').name, 'vite'); -assert.notEqual(cliRequire.resolve('vite/package.json'), vitestRequire.resolve('vite/package.json')); -if (!project.devDependencies.vite) { +if (project.devDependencies.vite) { + assert.equal( + project.devDependencies.vite, + `npm:@voidzero-dev/vite-plus-core@${cliRequire('vite-plus/package.json').version}`, + ); + assert.equal(require.resolve('vite/package.json'), cliRequire.resolve('vite/package.json')); + assert.equal(vitestRequire.resolve('vite/package.json'), cliRequire.resolve('vite/package.json')); + console.log( + 'npm shares the exact core alias between the project, CLI, and Vitest without overrides', + ); +} else { assert.deepEqual(Object.keys(project.devDependencies), ['vite-plus']); assert.equal(require('vite/package.json').name, 'vite'); + assert.equal(vitestRequire('vite/package.json').name, 'vite'); + assert.notEqual( + cliRequire.resolve('vite/package.json'), + vitestRequire.resolve('vite/package.json'), + ); + console.log('npm installed separate CLI core and upstream Vitest peer without overrides'); } -console.log('npm installed separate CLI core and upstream Vitest peer without overrides'); diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/check-tagged-alias.mjs b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/check-tagged-alias.mjs new file mode 100644 index 0000000000..40e971754c --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/check-tagged-alias.mjs @@ -0,0 +1,24 @@ +import assert from 'node:assert/strict'; +import { spawnSync } from 'node:child_process'; +import { createRequire } from 'node:module'; + +const require = createRequire(import.meta.url); +const cliRequire = createRequire(require.resolve('vite-plus/package.json')); +const project = require('./package.json'); +assert.equal(project.overrides, undefined); +assert.equal(project.devDependencies.vite, 'npm:@voidzero-dev/vite-plus-core@latest'); +// npm 11.11 accepts a peer's upstream Vite as satisfying the tagged alias. +assert.equal(require('vite/package.json').name, 'vite'); +assert.equal(cliRequire('vite/package.json').name, '@voidzero-dev/vite-plus-core'); +assert.notEqual(require.resolve('vite/package.json'), cliRequire.resolve('vite/package.json')); + +for (const args of [['dev'], ['pack', 'entry.js']]) { + const result = spawnSync('vp', args, { encoding: 'utf8', timeout: 30_000 }); + assert.ifError(result.error); + const output = result.stdout + result.stderr; + assert.equal(result.status, 1, output); + assert.match(output, /Expected @voidzero-dev\/vite-plus-core@/); + assert.match(output, /but found vite@/); + assert.match(output, /Run `vp migrate` to align the Vite alias, then run `vp install`\./); + console.log(`vp ${args[0]} rejects the replaced npm alias and reports the repair command`); +} diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/pin-core-alias.mjs b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/pin-core-alias.mjs new file mode 100644 index 0000000000..b1e29e051d --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/pin-core-alias.mjs @@ -0,0 +1,10 @@ +import { readFileSync, writeFileSync } from 'node:fs'; +import { createRequire } from 'node:module'; + +// Before installation, resolve the checkout exposed by the snapshot runner. +// CI can stamp its version, so do not hard-code the committed package version. +const require = createRequire(import.meta.url); +const { version } = require('vite-plus/package.json'); +const project = JSON.parse(readFileSync('package.json', 'utf8')); +project.devDependencies.vite = `npm:@voidzero-dev/vite-plus-core@${version}`; +writeFileSync('package.json', `${JSON.stringify(project, null, 2)}\n`); diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/snapshots.toml b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/snapshots.toml index 1c4edad856..32f5b2447f 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/snapshots.toml +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/snapshots.toml @@ -133,14 +133,26 @@ vp = "global" local-registry = true steps = [ { argv = ["vpt", "write-file", "package.json", "{\"name\":\"core-module-identity\",\"private\":true,\"type\":\"module\",\"packageManager\":\"npm@11.11.0\",\"devDependencies\":{\"vite-plus\":\"latest\",\"vite\":\"npm:@voidzero-dev/vite-plus-core@latest\"}}\n"], snapshot = false }, + { argv = ["node", "pin-core-alias.mjs"], snapshot = false }, { argv = ["vp", "install", "--ignore-scripts"], timeout = 120000, snapshot = false }, { argv = ["node", "check-npm-layout.mjs"] }, { argv = ["node", "check-api.mjs"] }, { argv = ["vp", "dev"] }, { argv = ["vp", "build"] }, + { argv = ["vp", "test", "run"], snapshot = false }, { argv = ["vp", "pack", "entry.js"] }, { argv = ["vpt", "write-file", "typecheck/package.json", "{\"name\":\"typecheck-tools\",\"private\":true,\"dependencies\":{\"typescript\":\"6.0.3\"},\"packageManager\":\"npm@11.11.0\"}\n"], snapshot = false }, { argv = ["vp", "install", "--ignore-scripts"], cwd = "typecheck", snapshot = false }, { argv = ["vpt", "cp", "check-config.mts", "check-config.cts"], snapshot = false }, { argv = ["node", "typecheck/node_modules/typescript/bin/tsc", "--noEmit", "--skipLibCheck", "--module", "NodeNext", "--target", "ESNext", "check-config.mts", "check-config.cts"] }, ] + +[[case]] +name = "core_module_identity_npm_tagged_alias_rejected" +vp = "global" +local-registry = true +steps = [ + { argv = ["vpt", "write-file", "package.json", "{\"name\":\"core-module-identity\",\"private\":true,\"type\":\"module\",\"packageManager\":\"npm@11.11.0\",\"devDependencies\":{\"vite-plus\":\"latest\",\"vite\":\"npm:@voidzero-dev/vite-plus-core@latest\"}}\n"], snapshot = false }, + { argv = ["vp", "install", "--ignore-scripts"], timeout = 120000, snapshot = false }, + ["node", "check-tagged-alias.mjs"], +] diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/snapshots/core_module_identity_npm_matching_alias_no_override.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/snapshots/core_module_identity_npm_matching_alias_no_override.md index ad57acf182..572998d838 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/snapshots/core_module_identity_npm_matching_alias_no_override.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/snapshots/core_module_identity_npm_matching_alias_no_override.md @@ -4,13 +4,16 @@ '` +## `node pin-core-alias.mjs` + + ## `vp install --ignore-scripts` ## `node check-npm-layout.mjs` ``` -npm installed separate CLI core and upstream Vitest peer without overrides +npm shares the exact core alias between the project, CLI, and Vitest without overrides ``` ## `node check-api.mjs` @@ -43,6 +46,9 @@ dist/assets/index-.js kB │ gzip: kB ✓ built in ``` +## `vp test run` + + ## `vp pack entry.js` ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/snapshots/core_module_identity_npm_tagged_alias_rejected.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/snapshots/core_module_identity_npm_tagged_alias_rejected.md new file mode 100644 index 0000000000..8f3b5c664c --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/snapshots/core_module_identity_npm_tagged_alias_rejected.md @@ -0,0 +1,15 @@ +# core_module_identity_npm_tagged_alias_rejected + +## `vpt write-file package.json '{"name":"core-module-identity","private":true,"type":"module","packageManager":"npm@11.11.0","devDependencies":{"vite-plus":"latest","vite":"npm:@voidzero-dev/vite-plus-core@latest"}} +'` + + +## `vp install --ignore-scripts` + + +## `node check-tagged-alias.mjs` + +``` +vp dev rejects the replaced npm alias and reports the repair command +vp pack rejects the replaced npm alias and reports the repair command +``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/snapshots/core_module_identity_without_project_alias.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/snapshots/core_module_identity_without_project_alias.md index 121227e830..e6e7a495b4 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/snapshots/core_module_identity_without_project_alias.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/core_module_identity/snapshots/core_module_identity_without_project_alias.md @@ -60,7 +60,7 @@ VITE+ - The Unified Toolchain for the Web Test Files 1 passed (1) Tests 1 passed (1) Start at