From 7bea737231e092446e40521d00e2490be630963a Mon Sep 17 00:00:00 2001 From: evan-lc <1411197585@qq.com> Date: Thu, 22 Oct 2026 23:19:45 +0800 Subject: [PATCH 1/5] fix(create): include root in standalone pnpm workspace --- .../create_next_command_library/snapshots.toml | 2 ++ .../snapshots/create_next_command_library.md | 16 ++++++++++++++++ .../cli/src/migration/__tests__/migrator.spec.ts | 6 ++++++ .../cli/src/migration/migrator/orchestrators.ts | 5 +++++ 4 files changed, 29 insertions(+) diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_next_command_library/snapshots.toml b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_next_command_library/snapshots.toml index 4592b57a1a..8aee841198 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_next_command_library/snapshots.toml +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_next_command_library/snapshots.toml @@ -3,4 +3,6 @@ name = "create_next_command_library" vp = "global" steps = [ { argv = ["vp", "create", "vite:library", "--no-interactive"], comment = "verify next command suggests vp run", timeout = 120000, continue-on-failure = true }, + { argv = ["vpt", "grep-file", "vite-plus-library/pnpm-workspace.yaml", "packages:"], comment = "standalone library workspace declares its root package", continue-on-failure = true }, + { argv = ["vpt", "grep-file", "vite-plus-library/pnpm-workspace.yaml", " - ."], comment = "standalone library workspace includes the root package", continue-on-failure = true }, ] diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_next_command_library/snapshots/create_next_command_library.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_next_command_library/snapshots/create_next_command_library.md index 4c05ed21ed..81ae82c067 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_next_command_library/snapshots/create_next_command_library.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_next_command_library/snapshots/create_next_command_library.md @@ -10,3 +10,19 @@ verify next command suggests vp run • Node pnpm → Next: cd vite-plus-library && vp run ``` + +## `vpt grep-file vite-plus-library/pnpm-workspace.yaml packages:` + +standalone library workspace declares its root package + +``` +vite-plus-library/pnpm-workspace.yaml: found "packages:" +``` + +## `vpt grep-file vite-plus-library/pnpm-workspace.yaml ' - .'` + +standalone library workspace includes the root package + +``` +vite-plus-library/pnpm-workspace.yaml: found " - ." +``` diff --git a/packages/cli/src/migration/__tests__/migrator.spec.ts b/packages/cli/src/migration/__tests__/migrator.spec.ts index c1bcb66131..6ea9d1d64c 100644 --- a/packages/cli/src/migration/__tests__/migrator.spec.ts +++ b/packages/cli/src/migration/__tests__/migrator.spec.ts @@ -4837,6 +4837,7 @@ describe('rewriteStandaloneProject pnpm workspace yaml', () => { expect(yaml).toContain('overrides:'); expect(yaml).toContain('peerDependencyRules:'); expect(yaml).toContain('catalog:'); + expect(readYamlObject(path.join(tmpDir, 'pnpm-workspace.yaml')).packages).toEqual(['.']); // package.json should not have pnpm section const pkg = readJson(path.join(tmpDir, 'package.json')); @@ -4846,6 +4847,10 @@ describe('rewriteStandaloneProject pnpm workspace yaml', () => { const devDeps = pkg.devDependencies as Record; expect(devDeps.vite).toBe('catalog:'); expect(devDeps['vite-plus']).toBe('catalog:'); + + const firstMigration = fs.readFileSync(path.join(tmpDir, 'pnpm-workspace.yaml'), 'utf8'); + rewriteStandaloneProject(tmpDir, makeWorkspaceInfo(tmpDir, PackageManager.pnpm), true, true); + expect(fs.readFileSync(path.join(tmpDir, 'pnpm-workspace.yaml'), 'utf8')).toBe(firstMigration); }); // PR #1891 review (P1): pnpm 9.5.0-10.6.1 supports catalogs (>= 9.5.0) but not @@ -4875,6 +4880,7 @@ describe('rewriteStandaloneProject pnpm workspace yaml', () => { expect(yaml).toContain('catalog:'); expect(yaml).toContain('vite-plus:'); expect(yaml).not.toContain('overrides:'); + expect(readYamlObject(path.join(tmpDir, 'pnpm-workspace.yaml')).packages).toEqual(['.']); }); it('does not duplicate vite-plus into devDependencies when it already lives in dependencies', () => { diff --git a/packages/cli/src/migration/migrator/orchestrators.ts b/packages/cli/src/migration/migrator/orchestrators.ts index dc4a2c5550..a775250c61 100644 --- a/packages/cli/src/migration/migrator/orchestrators.ts +++ b/packages/cli/src/migration/migrator/orchestrators.ts @@ -312,6 +312,11 @@ export function rewriteStandaloneProject( if (packageManager === PackageManager.pnpm) { ensurePnpmWorkspaceExoticSubdepsSetting(projectPath); + if (fs.existsSync(path.join(projectPath, 'pnpm-workspace.yaml'))) { + // pnpm reads settings from this file for standalone projects too. Declare + // the root package so workspace-aware installs can resolve it. + ensurePnpmWorkspacePackages(projectPath, ['.']); + } } if (packageManager === PackageManager.yarn) { From 207bfb59b94847d7a854d750bb09e5ef106948a5 Mon Sep 17 00:00:00 2001 From: evan-lc <1411197585@qq.com> Date: Sat, 24 Oct 2026 00:33:47 +0800 Subject: [PATCH 2/5] test(cli): refresh standalone pnpm workspace snapshots Snapshot the complete generated workspace file and update all standalone pnpm migration expectations. --- .../snapshots.toml | 3 +-- .../snapshots/create_next_command_library.md | 23 +++++++++++-------- .../snapshots/migration_add_git_hooks.md | 2 ++ .../migration_auto_create_vite_config.md | 2 ++ .../snapshots/migration_baseurl_tsconfig.md | 2 ++ ...igration_chained_lint_staged_pre_commit.md | 2 ++ .../migration_composed_husky_custom_dir.md | 2 ++ .../migration_composed_husky_prepare.md | 2 ++ .../migration_env_prefix_lint_staged.md | 2 ++ .../snapshots/migration_eslint.md | 2 ++ .../snapshots/migration_eslint_lint_staged.md | 2 ++ .../migration_eslint_lintstagedrc.md | 2 ++ .../snapshots/migration_eslint_npx_wrapper.md | 2 ++ .../snapshots/migration_existing_husky.md | 2 ++ .../migration_existing_husky_lint_staged.md | 2 ++ .../migration_existing_husky_v8_hooks.md | 2 ++ ...migration_existing_husky_v8_multi_hooks.md | 2 ++ .../migration_existing_lint_staged_config.md | 2 ++ ...igration_existing_pnpm_exec_lint_staged.md | 2 ++ .../migration_existing_prepare_script.md | 2 ++ .../snapshots/migration_from_tsdown.md | 2 ++ .../migration_from_tsdown_json_config.md | 2 ++ .../snapshots/migration_from_vitest_config.md | 2 ++ .../snapshots/migration_from_vitest_files.md | 2 ++ ...ration_hooks_skip_on_existing_hookspath.md | 2 ++ .../migration_husky_latest_dist_tag.md | 2 ++ ...tion_husky_latest_dist_tag_v9_installed.md | 2 ++ .../snapshots/migration_husky_or_prepare.md | 2 ++ .../migration_husky_semicolon_prepare.md | 2 ++ ...igration_husky_v8_preserves_lint_staged.md | 2 ++ .../snapshots/migration_lazy_plugins_await.md | 2 ++ .../migration_lint_staged_in_scripts.md | 2 ++ .../migration_lint_staged_merge_fail.md | 2 ++ .../migration_lint_staged_ts_config.md | 2 ++ .../snapshots/migration_lintstagedrc_json.md | 2 ++ .../migration_lintstagedrc_merge_fail.md | 2 ++ .../migration_lintstagedrc_not_support.md | 2 ++ .../migration_lintstagedrc_staged_exists.md | 2 ++ .../migration_merge_vite_config_js.md | 2 ++ .../migration_merge_vite_config_ts.md | 2 ++ .../snapshots/migration_no_git_repo.md | 2 ++ .../snapshots/migration_no_hooks.md | 2 ++ .../migration_no_hooks_with_husky.md | 2 ++ .../snapshots/migration_other_hook_tool.md | 2 ++ .../migration_oxlintrc_json_with_comments.md | 2 ++ .../snapshots/migration_oxlintrc_jsonc.md | 2 ++ ...migration_partially_migrated_pre_commit.md | 2 ++ .../snapshots/migration_prettier.md | 2 ++ .../migration_prettier_eslint_combo.md | 2 ++ .../migration_prettier_ignore_unknown.md | 2 ++ .../migration_prettier_lint_staged.md | 2 ++ .../snapshots/migration_prettier_pkg_json.md | 2 ++ .../migration_rewrite_declare_module.md | 2 ++ .../migration_skip_vite_dependency.md | 2 ++ .../migration_skip_vite_peer_dependency.md | 2 ++ .../snapshots/migration_standalone_pnpm.md | 2 ++ .../snapshots/migration_subpath.md | 2 ++ .../migration_tsconfig_esmoduleinterop.md | 2 ++ .../snapshots/migration_vite_version.md | 2 ++ .../snapshots/migration_vitest_import_only.md | 2 ++ .../snapshots/migration_vitest_peer_dep.md | 2 ++ .../migration_vitest_unmanaged_override.md | 2 ++ 62 files changed, 134 insertions(+), 12 deletions(-) diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_next_command_library/snapshots.toml b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_next_command_library/snapshots.toml index 8aee841198..99868e4ce4 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_next_command_library/snapshots.toml +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_next_command_library/snapshots.toml @@ -3,6 +3,5 @@ name = "create_next_command_library" vp = "global" steps = [ { argv = ["vp", "create", "vite:library", "--no-interactive"], comment = "verify next command suggests vp run", timeout = 120000, continue-on-failure = true }, - { argv = ["vpt", "grep-file", "vite-plus-library/pnpm-workspace.yaml", "packages:"], comment = "standalone library workspace declares its root package", continue-on-failure = true }, - { argv = ["vpt", "grep-file", "vite-plus-library/pnpm-workspace.yaml", " - ."], comment = "standalone library workspace includes the root package", continue-on-failure = true }, + { argv = ["vpt", "print-file", "vite-plus-library/pnpm-workspace.yaml"], comment = "standalone library workspace includes the root package", continue-on-failure = true }, ] diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_next_command_library/snapshots/create_next_command_library.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_next_command_library/snapshots/create_next_command_library.md index 81ae82c067..866bed3aab 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_next_command_library/snapshots/create_next_command_library.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_next_command_library/snapshots/create_next_command_library.md @@ -11,18 +11,21 @@ verify next command suggests vp run → Next: cd vite-plus-library && vp run ``` -## `vpt grep-file vite-plus-library/pnpm-workspace.yaml packages:` - -standalone library workspace declares its root package - -``` -vite-plus-library/pnpm-workspace.yaml: found "packages:" -``` - -## `vpt grep-file vite-plus-library/pnpm-workspace.yaml ' - .'` +## `vpt print-file vite-plus-library/pnpm-workspace.yaml` standalone library workspace includes the root package ``` -vite-plus-library/pnpm-workspace.yaml: found " - ." +catalog: + vite: npm:@voidzero-dev/vite-plus-core@ + vite-plus: +overrides: + vite@*: "catalog:" +peerDependencyRules: + allowAny: + - vite + allowedVersions: + vite: "*" +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_add_git_hooks/snapshots/migration_add_git_hooks.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_add_git_hooks/snapshots/migration_add_git_hooks.md index 54af3c6544..76cead136e 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_add_git_hooks/snapshots/migration_add_git_hooks.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_add_git_hooks/snapshots/migration_add_git_hooks.md @@ -48,6 +48,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file .vite-hooks/pre-commit` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_auto_create_vite_config/snapshots/migration_auto_create_vite_config.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_auto_create_vite_config/snapshots/migration_auto_create_vite_config.md index d206896401..c434d8d182 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_auto_create_vite_config/snapshots/migration_auto_create_vite_config.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_auto_create_vite_config/snapshots/migration_auto_create_vite_config.md @@ -95,4 +95,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_baseurl_tsconfig/snapshots/migration_baseurl_tsconfig.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_baseurl_tsconfig/snapshots/migration_baseurl_tsconfig.md index 786b036a0d..aad8905b3e 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_baseurl_tsconfig/snapshots/migration_baseurl_tsconfig.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_baseurl_tsconfig/snapshots/migration_baseurl_tsconfig.md @@ -102,4 +102,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_chained_lint_staged_pre_commit/snapshots/migration_chained_lint_staged_pre_commit.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_chained_lint_staged_pre_commit/snapshots/migration_chained_lint_staged_pre_commit.md index 41101ccc53..5047134009 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_chained_lint_staged_pre_commit/snapshots/migration_chained_lint_staged_pre_commit.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_chained_lint_staged_pre_commit/snapshots/migration_chained_lint_staged_pre_commit.md @@ -53,6 +53,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file vite.config.ts` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_composed_husky_custom_dir/snapshots/migration_composed_husky_custom_dir.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_composed_husky_custom_dir/snapshots/migration_composed_husky_custom_dir.md index 8f9a9de90b..83fcc4b2f5 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_composed_husky_custom_dir/snapshots/migration_composed_husky_custom_dir.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_composed_husky_custom_dir/snapshots/migration_composed_husky_custom_dir.md @@ -62,6 +62,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file .config/husky/pre-commit` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_composed_husky_prepare/snapshots/migration_composed_husky_prepare.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_composed_husky_prepare/snapshots/migration_composed_husky_prepare.md index f3126ccd6e..88f3d14536 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_composed_husky_prepare/snapshots/migration_composed_husky_prepare.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_composed_husky_prepare/snapshots/migration_composed_husky_prepare.md @@ -49,4 +49,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_env_prefix_lint_staged/snapshots/migration_env_prefix_lint_staged.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_env_prefix_lint_staged/snapshots/migration_env_prefix_lint_staged.md index 8448cf35d6..6ca4348f84 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_env_prefix_lint_staged/snapshots/migration_env_prefix_lint_staged.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_env_prefix_lint_staged/snapshots/migration_env_prefix_lint_staged.md @@ -53,6 +53,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file vite.config.ts` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_eslint/snapshots/migration_eslint.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_eslint/snapshots/migration_eslint.md index 6fd722d9e2..8a3a60d51e 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_eslint/snapshots/migration_eslint.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_eslint/snapshots/migration_eslint.md @@ -49,6 +49,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt stat-file eslint.config.mjs --assert-not file` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_eslint_lint_staged/snapshots/migration_eslint_lint_staged.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_eslint_lint_staged/snapshots/migration_eslint_lint_staged.md index 6e787aae18..5e574c6b5b 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_eslint_lint_staged/snapshots/migration_eslint_lint_staged.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_eslint_lint_staged/snapshots/migration_eslint_lint_staged.md @@ -46,6 +46,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file vite.config.ts` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_eslint_lintstagedrc/snapshots/migration_eslint_lintstagedrc.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_eslint_lintstagedrc/snapshots/migration_eslint_lintstagedrc.md index 6bb47ada0e..12365c9fb1 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_eslint_lintstagedrc/snapshots/migration_eslint_lintstagedrc.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_eslint_lintstagedrc/snapshots/migration_eslint_lintstagedrc.md @@ -46,6 +46,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt stat-file .lintstagedrc.json --assert-not file` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_eslint_npx_wrapper/snapshots/migration_eslint_npx_wrapper.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_eslint_npx_wrapper/snapshots/migration_eslint_npx_wrapper.md index cb125d95b5..39c5152429 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_eslint_npx_wrapper/snapshots/migration_eslint_npx_wrapper.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_eslint_npx_wrapper/snapshots/migration_eslint_npx_wrapper.md @@ -51,6 +51,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt stat-file eslint.config.mjs --assert-not file` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_husky/snapshots/migration_existing_husky.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_husky/snapshots/migration_existing_husky.md index 38647dd192..ce0da32b57 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_husky/snapshots/migration_existing_husky.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_husky/snapshots/migration_existing_husky.md @@ -49,6 +49,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file .husky/pre-commit` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_husky_lint_staged/snapshots/migration_existing_husky_lint_staged.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_husky_lint_staged/snapshots/migration_existing_husky_lint_staged.md index fc0951692c..0b072079b9 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_husky_lint_staged/snapshots/migration_existing_husky_lint_staged.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_husky_lint_staged/snapshots/migration_existing_husky_lint_staged.md @@ -53,6 +53,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file vite.config.ts` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_husky_v8_hooks/snapshots/migration_existing_husky_v8_hooks.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_husky_v8_hooks/snapshots/migration_existing_husky_v8_hooks.md index 45966828d4..1f514359d4 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_husky_v8_hooks/snapshots/migration_existing_husky_v8_hooks.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_husky_v8_hooks/snapshots/migration_existing_husky_v8_hooks.md @@ -50,6 +50,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file .husky/pre-commit` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_husky_v8_multi_hooks/snapshots/migration_existing_husky_v8_multi_hooks.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_husky_v8_multi_hooks/snapshots/migration_existing_husky_v8_multi_hooks.md index a6511ad5c9..797482d041 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_husky_v8_multi_hooks/snapshots/migration_existing_husky_v8_multi_hooks.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_husky_v8_multi_hooks/snapshots/migration_existing_husky_v8_multi_hooks.md @@ -50,6 +50,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file .husky/pre-commit` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_lint_staged_config/snapshots/migration_existing_lint_staged_config.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_lint_staged_config/snapshots/migration_existing_lint_staged_config.md index 2729823751..d1a3898616 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_lint_staged_config/snapshots/migration_existing_lint_staged_config.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_lint_staged_config/snapshots/migration_existing_lint_staged_config.md @@ -48,6 +48,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt stat-file .lintstagedrc.json --assert-not file` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_pnpm_exec_lint_staged/snapshots/migration_existing_pnpm_exec_lint_staged.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_pnpm_exec_lint_staged/snapshots/migration_existing_pnpm_exec_lint_staged.md index a40a4a8bb7..755a5a1cb8 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_pnpm_exec_lint_staged/snapshots/migration_existing_pnpm_exec_lint_staged.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_pnpm_exec_lint_staged/snapshots/migration_existing_pnpm_exec_lint_staged.md @@ -53,6 +53,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file vite.config.ts` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_prepare_script/snapshots/migration_existing_prepare_script.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_prepare_script/snapshots/migration_existing_prepare_script.md index 4de69944ad..bfebdffe1a 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_prepare_script/snapshots/migration_existing_prepare_script.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_existing_prepare_script/snapshots/migration_existing_prepare_script.md @@ -49,6 +49,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file .vite-hooks/pre-commit` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_from_tsdown/snapshots/migration_from_tsdown.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_from_tsdown/snapshots/migration_from_tsdown.md index e715a94cef..fa1d9112f3 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_from_tsdown/snapshots/migration_from_tsdown.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_from_tsdown/snapshots/migration_from_tsdown.md @@ -90,6 +90,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vp migrate --no-interactive` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_from_tsdown_json_config/snapshots/migration_from_tsdown_json_config.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_from_tsdown_json_config/snapshots/migration_from_tsdown_json_config.md index 7e226727f1..7c7d8798d8 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_from_tsdown_json_config/snapshots/migration_from_tsdown_json_config.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_from_tsdown_json_config/snapshots/migration_from_tsdown_json_config.md @@ -91,6 +91,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vp migrate --no-interactive` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_from_vitest_config/snapshots/migration_from_vitest_config.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_from_vitest_config/snapshots/migration_from_vitest_config.md index bcd8c684ae..c199ec6345 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_from_vitest_config/snapshots/migration_from_vitest_config.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_from_vitest_config/snapshots/migration_from_vitest_config.md @@ -113,4 +113,6 @@ peerDependencyRules: allowedVersions: vite: '*' vitest: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_from_vitest_files/snapshots/migration_from_vitest_files.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_from_vitest_files/snapshots/migration_from_vitest_files.md index 41978da470..a67dd54d0a 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_from_vitest_files/snapshots/migration_from_vitest_files.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_from_vitest_files/snapshots/migration_from_vitest_files.md @@ -57,6 +57,8 @@ peerDependencyRules: allowedVersions: vite: '*' vitest: '*' +packages: + - . ``` ## `vpt print-file test/hello.ts` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_hooks_skip_on_existing_hookspath/snapshots/migration_hooks_skip_on_existing_hookspath.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_hooks_skip_on_existing_hookspath/snapshots/migration_hooks_skip_on_existing_hookspath.md index ef9b150f19..d3315a3f58 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_hooks_skip_on_existing_hookspath/snapshots/migration_hooks_skip_on_existing_hookspath.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_hooks_skip_on_existing_hookspath/snapshots/migration_hooks_skip_on_existing_hookspath.md @@ -48,6 +48,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `git config --local core.hooksPath` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_latest_dist_tag/snapshots/migration_husky_latest_dist_tag.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_latest_dist_tag/snapshots/migration_husky_latest_dist_tag.md index 70af6b9a4b..816489a7b3 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_latest_dist_tag/snapshots/migration_husky_latest_dist_tag.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_latest_dist_tag/snapshots/migration_husky_latest_dist_tag.md @@ -49,4 +49,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_latest_dist_tag_v9_installed/snapshots/migration_husky_latest_dist_tag_v9_installed.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_latest_dist_tag_v9_installed/snapshots/migration_husky_latest_dist_tag_v9_installed.md index 2e5b05206c..5d3020f710 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_latest_dist_tag_v9_installed/snapshots/migration_husky_latest_dist_tag_v9_installed.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_latest_dist_tag_v9_installed/snapshots/migration_husky_latest_dist_tag_v9_installed.md @@ -53,4 +53,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_or_prepare/snapshots/migration_husky_or_prepare.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_or_prepare/snapshots/migration_husky_or_prepare.md index 9b895203cb..335bf4cc17 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_or_prepare/snapshots/migration_husky_or_prepare.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_or_prepare/snapshots/migration_husky_or_prepare.md @@ -53,4 +53,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_semicolon_prepare/snapshots/migration_husky_semicolon_prepare.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_semicolon_prepare/snapshots/migration_husky_semicolon_prepare.md index 1cca97e5b1..fa2430a7d8 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_semicolon_prepare/snapshots/migration_husky_semicolon_prepare.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_semicolon_prepare/snapshots/migration_husky_semicolon_prepare.md @@ -53,4 +53,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_v8_preserves_lint_staged/snapshots/migration_husky_v8_preserves_lint_staged.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_v8_preserves_lint_staged/snapshots/migration_husky_v8_preserves_lint_staged.md index b775701d03..5457b990a3 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_v8_preserves_lint_staged/snapshots/migration_husky_v8_preserves_lint_staged.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_husky_v8_preserves_lint_staged/snapshots/migration_husky_v8_preserves_lint_staged.md @@ -53,4 +53,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lazy_plugins_await/snapshots/migration_lazy_plugins_await.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lazy_plugins_await/snapshots/migration_lazy_plugins_await.md index 0f2a1951b1..09e7e06638 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lazy_plugins_await/snapshots/migration_lazy_plugins_await.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lazy_plugins_await/snapshots/migration_lazy_plugins_await.md @@ -67,4 +67,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lint_staged_in_scripts/snapshots/migration_lint_staged_in_scripts.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lint_staged_in_scripts/snapshots/migration_lint_staged_in_scripts.md index 467fd26f76..8b01460233 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lint_staged_in_scripts/snapshots/migration_lint_staged_in_scripts.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lint_staged_in_scripts/snapshots/migration_lint_staged_in_scripts.md @@ -54,6 +54,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file vite.config.ts` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lint_staged_merge_fail/snapshots/migration_lint_staged_merge_fail.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lint_staged_merge_fail/snapshots/migration_lint_staged_merge_fail.md index 23fb3a8a00..e6a1da2430 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lint_staged_merge_fail/snapshots/migration_lint_staged_merge_fail.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lint_staged_merge_fail/snapshots/migration_lint_staged_merge_fail.md @@ -55,6 +55,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file vite.config.ts` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lint_staged_ts_config/snapshots/migration_lint_staged_ts_config.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lint_staged_ts_config/snapshots/migration_lint_staged_ts_config.md index e13263d45d..12502ec5f6 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lint_staged_ts_config/snapshots/migration_lint_staged_ts_config.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lint_staged_ts_config/snapshots/migration_lint_staged_ts_config.md @@ -51,6 +51,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file lint-staged.config.ts` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lintstagedrc_json/snapshots/migration_lintstagedrc_json.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lintstagedrc_json/snapshots/migration_lintstagedrc_json.md index 4134ba0d43..5c500112f3 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lintstagedrc_json/snapshots/migration_lintstagedrc_json.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lintstagedrc_json/snapshots/migration_lintstagedrc_json.md @@ -103,6 +103,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file vite.config.ts` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lintstagedrc_merge_fail/snapshots/migration_lintstagedrc_merge_fail.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lintstagedrc_merge_fail/snapshots/migration_lintstagedrc_merge_fail.md index fe4904d1e5..e03db8eb9c 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lintstagedrc_merge_fail/snapshots/migration_lintstagedrc_merge_fail.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lintstagedrc_merge_fail/snapshots/migration_lintstagedrc_merge_fail.md @@ -52,6 +52,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file .lintstagedrc.json` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lintstagedrc_not_support/snapshots/migration_lintstagedrc_not_support.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lintstagedrc_not_support/snapshots/migration_lintstagedrc_not_support.md index beff4d8795..4670ab7b2a 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lintstagedrc_not_support/snapshots/migration_lintstagedrc_not_support.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lintstagedrc_not_support/snapshots/migration_lintstagedrc_not_support.md @@ -79,4 +79,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lintstagedrc_staged_exists/snapshots/migration_lintstagedrc_staged_exists.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lintstagedrc_staged_exists/snapshots/migration_lintstagedrc_staged_exists.md index e3662eebe4..cdb562a9c1 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lintstagedrc_staged_exists/snapshots/migration_lintstagedrc_staged_exists.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_lintstagedrc_staged_exists/snapshots/migration_lintstagedrc_staged_exists.md @@ -49,6 +49,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt stat-file .lintstagedrc.json --assert file` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_merge_vite_config_js/snapshots/migration_merge_vite_config_js.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_merge_vite_config_js/snapshots/migration_merge_vite_config_js.md index 165f3445bf..c53a0df297 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_merge_vite_config_js/snapshots/migration_merge_vite_config_js.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_merge_vite_config_js/snapshots/migration_merge_vite_config_js.md @@ -89,4 +89,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_merge_vite_config_ts/snapshots/migration_merge_vite_config_ts.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_merge_vite_config_ts/snapshots/migration_merge_vite_config_ts.md index f2189dde02..10cd542970 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_merge_vite_config_ts/snapshots/migration_merge_vite_config_ts.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_merge_vite_config_ts/snapshots/migration_merge_vite_config_ts.md @@ -153,4 +153,6 @@ peerDependencyRules: allowedVersions: vite: '*' vitest: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_no_git_repo/snapshots/migration_no_git_repo.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_no_git_repo/snapshots/migration_no_git_repo.md index cb103d8e0f..87652a65c2 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_no_git_repo/snapshots/migration_no_git_repo.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_no_git_repo/snapshots/migration_no_git_repo.md @@ -44,6 +44,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt stat-file .vite-hooks --assert dir` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_no_hooks/snapshots/migration_no_hooks.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_no_hooks/snapshots/migration_no_hooks.md index 830b4912ea..7afca60e77 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_no_hooks/snapshots/migration_no_hooks.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_no_hooks/snapshots/migration_no_hooks.md @@ -44,6 +44,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt stat-file .vite-hooks --assert-not dir` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_no_hooks_with_husky/snapshots/migration_no_hooks_with_husky.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_no_hooks_with_husky/snapshots/migration_no_hooks_with_husky.md index 4d0cd34d8b..93a89b3ca5 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_no_hooks_with_husky/snapshots/migration_no_hooks_with_husky.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_no_hooks_with_husky/snapshots/migration_no_hooks_with_husky.md @@ -53,6 +53,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt stat-file .husky --assert-not dir` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_other_hook_tool/snapshots/migration_other_hook_tool.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_other_hook_tool/snapshots/migration_other_hook_tool.md index cade69a2f6..71241f025e 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_other_hook_tool/snapshots/migration_other_hook_tool.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_other_hook_tool/snapshots/migration_other_hook_tool.md @@ -53,4 +53,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_oxlintrc_json_with_comments/snapshots/migration_oxlintrc_json_with_comments.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_oxlintrc_json_with_comments/snapshots/migration_oxlintrc_json_with_comments.md index 0bce7e8eea..43b539f059 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_oxlintrc_json_with_comments/snapshots/migration_oxlintrc_json_with_comments.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_oxlintrc_json_with_comments/snapshots/migration_oxlintrc_json_with_comments.md @@ -86,4 +86,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_oxlintrc_jsonc/snapshots/migration_oxlintrc_jsonc.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_oxlintrc_jsonc/snapshots/migration_oxlintrc_jsonc.md index 494f0ccc1d..052c98baf1 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_oxlintrc_jsonc/snapshots/migration_oxlintrc_jsonc.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_oxlintrc_jsonc/snapshots/migration_oxlintrc_jsonc.md @@ -95,4 +95,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_partially_migrated_pre_commit/snapshots/migration_partially_migrated_pre_commit.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_partially_migrated_pre_commit/snapshots/migration_partially_migrated_pre_commit.md index 5bb81236bb..dba95bb230 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_partially_migrated_pre_commit/snapshots/migration_partially_migrated_pre_commit.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_partially_migrated_pre_commit/snapshots/migration_partially_migrated_pre_commit.md @@ -50,6 +50,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file .husky/pre-commit` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier/snapshots/migration_prettier.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier/snapshots/migration_prettier.md index bd736ea504..e20cef5d59 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier/snapshots/migration_prettier.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier/snapshots/migration_prettier.md @@ -50,6 +50,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt stat-file .prettierrc.json --assert-not file` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier_eslint_combo/snapshots/migration_prettier_eslint_combo.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier_eslint_combo/snapshots/migration_prettier_eslint_combo.md index 53f8b36cda..55cd6daba1 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier_eslint_combo/snapshots/migration_prettier_eslint_combo.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier_eslint_combo/snapshots/migration_prettier_eslint_combo.md @@ -52,6 +52,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt stat-file eslint.config.mjs --assert-not file` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier_ignore_unknown/snapshots/migration_prettier_ignore_unknown.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier_ignore_unknown/snapshots/migration_prettier_ignore_unknown.md index 69ad496ca8..5192a5bb29 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier_ignore_unknown/snapshots/migration_prettier_ignore_unknown.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier_ignore_unknown/snapshots/migration_prettier_ignore_unknown.md @@ -50,6 +50,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt stat-file .prettierrc.json --assert-not file` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier_lint_staged/snapshots/migration_prettier_lint_staged.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier_lint_staged/snapshots/migration_prettier_lint_staged.md index 09e6ef9c66..8b7eb0bbdf 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier_lint_staged/snapshots/migration_prettier_lint_staged.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier_lint_staged/snapshots/migration_prettier_lint_staged.md @@ -47,6 +47,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file vite.config.ts` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier_pkg_json/snapshots/migration_prettier_pkg_json.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier_pkg_json/snapshots/migration_prettier_pkg_json.md index b0dd73997e..62a5409fce 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier_pkg_json/snapshots/migration_prettier_pkg_json.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_prettier_pkg_json/snapshots/migration_prettier_pkg_json.md @@ -48,6 +48,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vpt print-file vite.config.ts` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_rewrite_declare_module/snapshots/migration_rewrite_declare_module.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_rewrite_declare_module/snapshots/migration_rewrite_declare_module.md index 16d65ed4e1..a04785d1a2 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_rewrite_declare_module/snapshots/migration_rewrite_declare_module.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_rewrite_declare_module/snapshots/migration_rewrite_declare_module.md @@ -89,4 +89,6 @@ peerDependencyRules: allowedVersions: vite: '*' vitest: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_skip_vite_dependency/snapshots/migration_skip_vite_dependency.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_skip_vite_dependency/snapshots/migration_skip_vite_dependency.md index 6681cd8c83..a72e0a1dd2 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_skip_vite_dependency/snapshots/migration_skip_vite_dependency.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_skip_vite_dependency/snapshots/migration_skip_vite_dependency.md @@ -79,4 +79,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_skip_vite_peer_dependency/snapshots/migration_skip_vite_peer_dependency.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_skip_vite_peer_dependency/snapshots/migration_skip_vite_peer_dependency.md index 3e2ad38e8c..b3182d0e43 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_skip_vite_peer_dependency/snapshots/migration_skip_vite_peer_dependency.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_skip_vite_peer_dependency/snapshots/migration_skip_vite_peer_dependency.md @@ -79,4 +79,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_standalone_pnpm/snapshots/migration_standalone_pnpm.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_standalone_pnpm/snapshots/migration_standalone_pnpm.md index 190803a2df..5a612f56f5 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_standalone_pnpm/snapshots/migration_standalone_pnpm.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_standalone_pnpm/snapshots/migration_standalone_pnpm.md @@ -45,4 +45,6 @@ peerDependencyRules: - vite allowedVersions: vite: "*" +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_subpath/snapshots/migration_subpath.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_subpath/snapshots/migration_subpath.md index bea45e89e0..ea8534c3cd 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_subpath/snapshots/migration_subpath.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_subpath/snapshots/migration_subpath.md @@ -74,4 +74,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_tsconfig_esmoduleinterop/snapshots/migration_tsconfig_esmoduleinterop.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_tsconfig_esmoduleinterop/snapshots/migration_tsconfig_esmoduleinterop.md index 02ac9a1233..df2d36dd15 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_tsconfig_esmoduleinterop/snapshots/migration_tsconfig_esmoduleinterop.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_tsconfig_esmoduleinterop/snapshots/migration_tsconfig_esmoduleinterop.md @@ -76,4 +76,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_vite_version/snapshots/migration_vite_version.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_vite_version/snapshots/migration_vite_version.md index 2e5cc07b7f..da57d2c40f 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_vite_version/snapshots/migration_vite_version.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_vite_version/snapshots/migration_vite_version.md @@ -46,4 +46,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_vitest_import_only/snapshots/migration_vitest_import_only.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_vitest_import_only/snapshots/migration_vitest_import_only.md index d20d676a0a..07dd8a8d78 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_vitest_import_only/snapshots/migration_vitest_import_only.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_vitest_import_only/snapshots/migration_vitest_import_only.md @@ -55,4 +55,6 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_vitest_peer_dep/snapshots/migration_vitest_peer_dep.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_vitest_peer_dep/snapshots/migration_vitest_peer_dep.md index f67ce74fd3..f0cfdb9b20 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_vitest_peer_dep/snapshots/migration_vitest_peer_dep.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_vitest_peer_dep/snapshots/migration_vitest_peer_dep.md @@ -56,4 +56,6 @@ peerDependencyRules: allowedVersions: vite: '*' vitest: '*' +packages: + - . ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_vitest_unmanaged_override/snapshots/migration_vitest_unmanaged_override.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_vitest_unmanaged_override/snapshots/migration_vitest_unmanaged_override.md index 093f671893..222f55cac6 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_vitest_unmanaged_override/snapshots/migration_vitest_unmanaged_override.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_vitest_unmanaged_override/snapshots/migration_vitest_unmanaged_override.md @@ -47,6 +47,8 @@ peerDependencyRules: - vite allowedVersions: vite: '*' +packages: + - . ``` ## `vp migrate --no-interactive` From 993864721df9abd4061e32e1251d61d0d370aace Mon Sep 17 00:00:00 2001 From: MK Date: Tue, 10 Nov 2026 14:03:15 +0800 Subject: [PATCH 3/5] fix(create): honor effective package manager overrides --- .../.node-version | 1 + .../mock-manifest.json | 27 +++++++ .../create_package_manager_override/pack.mjs | 54 ++++++++++++++ .../package.json | 8 +++ .../record-install.cjs | 1 + .../snapshots.toml | 30 ++++++++ ..._package_manager_override_family.global.md | 11 +++ ...e_package_manager_override_family.local.md | 11 +++ ...ackage_manager_override_monorepo.global.md | 16 +++++ ...package_manager_override_monorepo.local.md | 16 +++++ ...package_manager_override_version.global.md | 11 +++ ..._package_manager_override_version.local.md | 11 +++ .../tarballs/create-1.0.0.tgz | Bin 0 -> 398 bytes .../template/package.json | 5 ++ .../verify-create.mjs | 54 ++++++++++++++ .../src/commands/env/package_manager.rs | 9 +-- crates/vp_global_cli/src/commands/env/spec.rs | 15 +--- crates/vp_pm_cli/src/dispatch.rs | 38 +++++----- crates/vp_pm_cli/src/error.rs | 5 ++ crates/vp_pm_cli/src/lib.rs | 2 + crates/vp_pm_cli/src/spec.rs | 68 ++++++++++++++++++ packages/cli/binding/index.cjs | 1 + packages/cli/binding/index.d.cts | 9 +++ packages/cli/binding/src/package_manager.rs | 19 +++++ packages/cli/src/create/bin.ts | 21 ++++-- .../cli/src/utils/__tests__/prompts.spec.ts | 25 +++++++ packages/cli/src/utils/prompts.ts | 8 ++- 27 files changed, 433 insertions(+), 43 deletions(-) create mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/.node-version create mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/mock-manifest.json create mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/pack.mjs create mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/package.json create mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/record-install.cjs create mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots.toml create mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_family.global.md create mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_family.local.md create mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_monorepo.global.md create mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_monorepo.local.md create mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_version.global.md create mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_version.local.md create mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/tarballs/create-1.0.0.tgz create mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/template/package.json create mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/verify-create.mjs create mode 100644 crates/vp_pm_cli/src/spec.rs diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/.node-version b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/.node-version new file mode 100644 index 0000000000..b8b23ca93c --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/.node-version @@ -0,0 +1 @@ +22.23.4 diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/mock-manifest.json b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/mock-manifest.json new file mode 100644 index 0000000000..81356ac470 --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/mock-manifest.json @@ -0,0 +1,27 @@ +{ + "@override/create": { + "name": "@override/create", + "dist-tags": { + "latest": "1.0.0" + }, + "versions": { + "1.0.0": { + "name": "@override/create", + "version": "1.0.0", + "createConfig": { + "templates": [ + { + "name": "demo", + "description": "Package manager override fixture", + "template": "./template" + } + ] + }, + "dist": { + "tarball": "{REGISTRY}/@override/create/-/create-1.0.0.tgz", + "integrity": "sha512-lm2dmUGQCijrsmtG2bfY3GmTbonpnUU7Ioz3ykIqS6ifRrP2hiRr/IxRlyy9WTGIv97SEJXCHWxo1C3K6IxZ3A==" + } + } + } + } +} diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/pack.mjs b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/pack.mjs new file mode 100644 index 0000000000..5448e85497 --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/pack.mjs @@ -0,0 +1,54 @@ +// Run with node to regenerate this fixture's local template tarball and metadata. +import { createHash } from 'node:crypto'; +import { mkdirSync, readFileSync, writeFileSync } from 'node:fs'; +import path from 'node:path'; + +import { createTarball } from '../../registry/archive.mjs'; + +const root = import.meta.dirname; +const pkg = { + name: '@override/create', + version: '1.0.0', + createConfig: { + templates: [ + { name: 'demo', description: 'Package manager override fixture', template: './template' }, + ], + }, +}; +const tarball = createTarball([ + { name: 'package/package.json', contents: Buffer.from(JSON.stringify(pkg)), mode: 0o644 }, + { + name: 'package/template/package.json', + contents: readFileSync(path.join(root, 'template/package.json')), + mode: 0o644, + }, + { + name: 'package/template/record-install.cjs', + contents: readFileSync(path.join(root, 'record-install.cjs')), + mode: 0o644, + }, +]); +mkdirSync(path.join(root, 'tarballs'), { recursive: true }); +writeFileSync(path.join(root, 'tarballs/create-1.0.0.tgz'), tarball); +writeFileSync( + path.join(root, 'mock-manifest.json'), + JSON.stringify( + { + [pkg.name]: { + name: pkg.name, + 'dist-tags': { latest: pkg.version }, + versions: { + [pkg.version]: { + ...pkg, + dist: { + tarball: '{REGISTRY}/@override/create/-/create-1.0.0.tgz', + integrity: `sha512-${createHash('sha512').update(tarball).digest('base64')}`, + }, + }, + }, + }, + }, + null, + 2, + ) + '\n', +); diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/package.json b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/package.json new file mode 100644 index 0000000000..5c15e74c36 --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/package.json @@ -0,0 +1,8 @@ +{ + "name": "create-override-parent", + "private": true, + "devEngines": { + "packageManager": { "name": "pnpm", "version": "12.11.2", "onFail": "download" } + }, + "scripts": { "postinstall": "node record-install.cjs" } +} diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/record-install.cjs b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/record-install.cjs new file mode 100644 index 0000000000..6d08f72d11 --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/record-install.cjs @@ -0,0 +1 @@ +require('node:fs').writeFileSync('installed-with.txt', process.env.npm_config_user_agent); diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots.toml b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots.toml new file mode 100644 index 0000000000..387414ad84 --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots.toml @@ -0,0 +1,30 @@ +[[case]] +name = "create_package_manager_override_version" +vp = ["global", "local"] +local-registry = true +unset-env = ["VP_SKIP_INSTALL", "CI"] +env = { VP_PACKAGE_MANAGER = "pnpm@10.6.1" } +steps = [ + { argv = ["node", "verify-create.mjs", "pnpm", "10.6.1"], timeout = 180000 }, +] + +[[case]] +name = "create_package_manager_override_family" +vp = ["global", "local"] +local-registry = true +unset-env = ["VP_SKIP_INSTALL", "CI"] +env = { VP_PACKAGE_MANAGER = "npm@10.9.2" } +steps = [ + { argv = ["node", "verify-create.mjs", "npm", "10.9.2"], timeout = 180000 }, +] + +[[case]] +name = "create_package_manager_override_monorepo" +vp = ["global", "local"] +local-registry = true +unset-env = ["VP_SKIP_INSTALL", "CI"] +env = { VP_PACKAGE_MANAGER = "pnpm@10.6.1" } +steps = [ + { argv = ["vpt", "write-file", "pnpm-workspace.yaml", "packages:\n - packages/*\n"], snapshot = false }, + { argv = ["node", "verify-create.mjs", "pnpm", "10.6.1", "monorepo"], timeout = 180000 }, +] diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_family.global.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_family.global.md new file mode 100644 index 0000000000..5b056f3352 --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_family.global.md @@ -0,0 +1,11 @@ +# create_package_manager_override_family + +## `node verify-create.mjs npm 10.9.2` + +``` +◇ Scaffolded demo +• Node npm +✓ Dependencies installed in +→ Next: cd demo && vp run +Verified generated configuration, actual installer, and summary. +``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_family.local.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_family.local.md new file mode 100644 index 0000000000..5b056f3352 --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_family.local.md @@ -0,0 +1,11 @@ +# create_package_manager_override_family + +## `node verify-create.mjs npm 10.9.2` + +``` +◇ Scaffolded demo +• Node npm +✓ Dependencies installed in +→ Next: cd demo && vp run +Verified generated configuration, actual installer, and summary. +``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_monorepo.global.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_monorepo.global.md new file mode 100644 index 0000000000..b7026c2dfe --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_monorepo.global.md @@ -0,0 +1,16 @@ +# create_package_manager_override_monorepo + +## `vpt write-file pnpm-workspace.yaml 'packages: + - packages/* +'` + + +## `node verify-create.mjs pnpm 10.6.1 monorepo` + +``` +◇ Scaffolded packages/demo +• Node pnpm +✓ Dependencies installed in +→ Next: cd packages/demo && vp run +Verified generated configuration, actual installer, and summary. +``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_monorepo.local.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_monorepo.local.md new file mode 100644 index 0000000000..b7026c2dfe --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_monorepo.local.md @@ -0,0 +1,16 @@ +# create_package_manager_override_monorepo + +## `vpt write-file pnpm-workspace.yaml 'packages: + - packages/* +'` + + +## `node verify-create.mjs pnpm 10.6.1 monorepo` + +``` +◇ Scaffolded packages/demo +• Node pnpm +✓ Dependencies installed in +→ Next: cd packages/demo && vp run +Verified generated configuration, actual installer, and summary. +``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_version.global.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_version.global.md new file mode 100644 index 0000000000..3af167ca04 --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_version.global.md @@ -0,0 +1,11 @@ +# create_package_manager_override_version + +## `node verify-create.mjs pnpm 10.6.1` + +``` +◇ Scaffolded demo +• Node pnpm +✓ Dependencies installed in +→ Next: cd demo && vp run +Verified generated configuration, actual installer, and summary. +``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_version.local.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_version.local.md new file mode 100644 index 0000000000..3af167ca04 --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_version.local.md @@ -0,0 +1,11 @@ +# create_package_manager_override_version + +## `node verify-create.mjs pnpm 10.6.1` + +``` +◇ Scaffolded demo +• Node pnpm +✓ Dependencies installed in +→ Next: cd demo && vp run +Verified generated configuration, actual installer, and summary. +``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/tarballs/create-1.0.0.tgz b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/tarballs/create-1.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..4cd460057a96483ed873c9e8225c9f5f4e91447f GIT binary patch literal 398 zcmV;90df8xiwFP!00002|LxX6Yuhjw#&MtXDa3n83yvZ;ZVK*YQ0RHkV;Mo%Z!)#9 zo*JeY-fg;zTsums;!t|i#D0bE{qrSiZS{t|IPWIb<}>bmx7~R$ zDoD`EPE*l%S8@oF?OxiZ sUX{mJg4HgtU+E3oc>9RX0RR9100000000000074H2jafC-2f;60M7o$$N&HU literal 0 HcmV?d00001 diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/template/package.json b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/template/package.json new file mode 100644 index 0000000000..700a36c3f3 --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/template/package.json @@ -0,0 +1,5 @@ +{ + "name": "override-template", + "version": "0.0.0", + "scripts": { "postinstall": "node record-install.cjs" } +} diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/verify-create.mjs b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/verify-create.mjs new file mode 100644 index 0000000000..b475556644 --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/verify-create.mjs @@ -0,0 +1,54 @@ +import assert from 'node:assert/strict'; +import { spawnSync } from 'node:child_process'; +import { existsSync, readFileSync } from 'node:fs'; +import { stripVTControlCharacters } from 'node:util'; + +const [name, version, monorepo] = process.argv.slice(2); +const directory = monorepo ? 'packages/demo' : 'demo'; +const args = [ + 'create', + '@override:demo', + '--directory', + directory, + '--package-manager', + 'pnpm', + '--no-interactive', + '--no-agent', + '--no-editor', + '--no-hooks', +]; +// Windows needs cmd to launch the local CLI's .cmd shim. All arguments are fixture literals. +const result = + process.platform === 'win32' + ? spawnSync('cmd.exe', ['/d', '/s', '/c', `vp ${args.join(' ')}`], { encoding: 'utf8' }) + : spawnSync('vp', args, { encoding: 'utf8' }); +const output = stripVTControlCharacters(`${result.stdout ?? ''}${result.stderr ?? ''}`); +process.stdout.write(output); +assert.ifError(result.error); +assert.equal(result.status, 0); +assert.ok(output.includes(`${name} ${version}`), 'summary must report the effective version'); +assert.ok(!output.includes('Install failed'), 'dependency installation must succeed'); +const installRoot = monorepo ? '.' : directory; +const agent = readFileSync(`${installRoot}/installed-with.txt`, 'utf8'); +assert.ok(agent.startsWith(`${name}/${version} `), `actual installer: ${agent}`); +const manifest = JSON.parse(readFileSync(`${installRoot}/package.json`, 'utf8')); +assert.deepEqual(manifest.devEngines.packageManager, { + name: monorepo ? 'pnpm' : name, + version: monorepo ? '12.11.2' : version, + onFail: 'download', +}); +if (name === 'pnpm') { + assert.ok(existsSync(`${installRoot}/pnpm-lock.yaml`)); + if (!monorepo) { + // pnpm 10.6.1 supports catalogs but still reads settings from package.json. + assert.ok(manifest.pnpm?.overrides, 'settings must use the effective version'); + } else { + const workspace = readFileSync('pnpm-workspace.yaml', 'utf8'); + assert.match(workspace, /packages\/\*/); + assert.doesNotMatch(workspace, /^\s*- ['"]?\.['"]?\s*$/m); + } +} else { + assert.ok(existsSync(`${installRoot}/package-lock.json`)); + assert.ok(!existsSync(`${installRoot}/pnpm-workspace.yaml`)); +} +console.log('Verified generated configuration, actual installer, and summary.'); diff --git a/crates/vp_global_cli/src/commands/env/package_manager.rs b/crates/vp_global_cli/src/commands/env/package_manager.rs index 96aa878118..0da70a23a3 100644 --- a/crates/vp_global_cli/src/commands/env/package_manager.rs +++ b/crates/vp_global_cli/src/commands/env/package_manager.rs @@ -91,14 +91,7 @@ pub(crate) async fn resolve_current_or_fallback_for( pub(crate) async fn resolve_current_spec( cwd: &AbsolutePath, ) -> Result, Error> { - let env = vp_shared::EnvConfig::get(); - let selected = env - .package_manager - .as_deref() - .map(str::trim) - .filter(|spec| !spec.is_empty()) - .map(parse_package_manager_spec_with_hash) - .transpose()?; + let selected = vp_pm_cli::package_manager_override()?; let mut resolution = resolve_environment_package_manager_spec( cwd, selected.as_ref().map(|(kind, version, hash)| (*kind, version.as_str(), hash.as_deref())), diff --git a/crates/vp_global_cli/src/commands/env/spec.rs b/crates/vp_global_cli/src/commands/env/spec.rs index bf5c679634..4abfd0abf4 100644 --- a/crates/vp_global_cli/src/commands/env/spec.rs +++ b/crates/vp_global_cli/src/commands/env/spec.rs @@ -95,20 +95,7 @@ impl EnvSpecs { pub(crate) fn parse_package_manager_spec_with_hash( value: &str, ) -> Result<(PackageManagerType, String, Option), Error> { - let Some((name, version)) = value.split_once('@') else { - return Err(invalid_spec(value)); - }; - let package_manager = PackageManagerType::from_name(name).ok_or_else(|| invalid_spec(value))?; - if version.is_empty() { - return Err(invalid_spec(value)); - } - let (version, hash) = version - .split_once('+') - .map_or((version, None), |(version, hash)| (version, Some(hash.to_string()))); - if version.is_empty() || hash.as_deref() == Some("") { - return Err(invalid_spec(value)); - } - Ok((package_manager, version.to_string(), hash)) + vp_pm_cli::parse_package_manager_spec(value).map_err(|_| invalid_spec(value)) } fn invalid_scope(value: &str) -> Error { diff --git a/crates/vp_pm_cli/src/dispatch.rs b/crates/vp_pm_cli/src/dispatch.rs index 225be29721..d4697bb81a 100644 --- a/crates/vp_pm_cli/src/dispatch.rs +++ b/crates/vp_pm_cli/src/dispatch.rs @@ -10,7 +10,7 @@ use vt_path::AbsolutePath; use crate::{ EnvironmentPackageManagerResolution, PackageManager, PackageManagerType, cli::PackageManagerCommand, download_package_manager_for_cwd, error::Error, - resolution::run_resolution, + package_manager_override, resolution::run_resolution, }; #[derive(Debug)] @@ -63,13 +63,23 @@ async fn dispatch_with_manager( let render_diagnostics = command.should_render_diagnostics(); let manager = match source { ManagerSource::Detect => { - PackageManager::builder(cwd) - .package_manager_type(PackageManagerType::Pnpm) - .build() - .await? + if let Some((kind, version, hash)) = package_manager_override()? { + build_selected_package_manager(cwd, kind, &version, hash.as_deref()).await? + } else { + PackageManager::builder(cwd) + .package_manager_type(PackageManagerType::Pnpm) + .build() + .await? + } } ManagerSource::Environment(package_manager) => { - build_selected_package_manager(cwd, package_manager).await? + build_selected_package_manager( + cwd, + package_manager.package_manager_type, + &package_manager.version, + package_manager.hash.as_deref(), + ) + .await? } ManagerSource::Resolved(manager) => manager, }; @@ -82,15 +92,11 @@ async fn dispatch_with_manager( async fn build_selected_package_manager( cwd: &AbsolutePath, - package_manager: &EnvironmentPackageManagerResolution, + kind: PackageManagerType, + version: &str, + hash: Option<&str>, ) -> Result { - let (install_dir, _, version) = download_package_manager_for_cwd( - cwd, - package_manager.package_manager_type, - &package_manager.version, - package_manager.hash.as_deref(), - ) - .await - .map_err(Error::Install)?; - Ok(PackageManager::from_install_dir(package_manager.package_manager_type, version, install_dir)) + let (install_dir, _, version) = + download_package_manager_for_cwd(cwd, kind, version, hash).await.map_err(Error::Install)?; + Ok(PackageManager::from_install_dir(kind, version, install_dir)) } diff --git a/crates/vp_pm_cli/src/error.rs b/crates/vp_pm_cli/src/error.rs index 11de599488..0f65cf34fc 100644 --- a/crates/vp_pm_cli/src/error.rs +++ b/crates/vp_pm_cli/src/error.rs @@ -20,6 +20,11 @@ pub enum Error { #[error("JSON error: {0}")] Json(#[from] serde_json::Error), + #[error( + "invalid environment specification {0:?}; expected a Node.js version or node|npm|pnpm|yarn|bun@" + )] + InvalidPackageManagerSpec(String), + #[error("Invalid {manager} version {version}: {source}")] InvalidPackageManagerVersion { manager: crate::PackageManagerType, diff --git a/crates/vp_pm_cli/src/lib.rs b/crates/vp_pm_cli/src/lib.rs index 509b6979bc..ee369b6dea 100644 --- a/crates/vp_pm_cli/src/lib.rs +++ b/crates/vp_pm_cli/src/lib.rs @@ -16,6 +16,7 @@ mod package_manager; mod request; pub(crate) mod resolution; mod shim; +mod spec; pub use cli::{ManagedGlobalCommand, PackageManagerCommand, PmCommand}; pub use config::{ @@ -47,3 +48,4 @@ pub use resolution::{ PublishArgs, RebuildArgs, RemoveArgs, SearchArgs, StageCommand, TeamCommand, TokenCommand, UnlinkArgs, UpdateArgs, VersionArgs, ViewArgs, WhoamiArgs, WhyArgs, }; +pub use spec::{PackageManagerSpec, package_manager_override, parse_package_manager_spec}; diff --git a/crates/vp_pm_cli/src/spec.rs b/crates/vp_pm_cli/src/spec.rs new file mode 100644 index 0000000000..2efef252d9 --- /dev/null +++ b/crates/vp_pm_cli/src/spec.rs @@ -0,0 +1,68 @@ +use vp_shared::EnvConfig; + +use crate::{Error, PackageManagerType}; + +pub type PackageManagerSpec = (PackageManagerType, String, Option); + +/// Parse a package manager requirement, including an optional Corepack integrity hash. +pub fn parse_package_manager_spec(value: &str) -> Result { + let invalid_spec = || Error::InvalidPackageManagerSpec(value.to_string()); + let (name, version) = value.split_once('@').ok_or_else(invalid_spec)?; + let package_manager = PackageManagerType::from_name(name).ok_or_else(invalid_spec)?; + let (version, hash) = version + .split_once('+') + .map_or((version, None), |(version, hash)| (version, Some(hash.to_string()))); + if version.is_empty() || hash.as_deref() == Some("") { + return Err(invalid_spec()); + } + Ok((package_manager, version.to_string(), hash)) +} + +/// Read the package manager override used by `vp` commands. +pub fn package_manager_override() -> Result, Error> { + EnvConfig::get() + .package_manager + .as_deref() + .map(str::trim) + .filter(|spec| !spec.is_empty()) + .map(parse_package_manager_spec) + .transpose() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn override_preserves_version_and_integrity() { + EnvConfig::with_vars( + [("VP_PACKAGE_MANAGER", " pnpm@10.6.1+sha512.0123456789abcdef ")], + |_| { + assert_eq!( + package_manager_override().unwrap(), + Some(( + PackageManagerType::Pnpm, + "10.6.1".into(), + Some("sha512.0123456789abcdef".into()) + )) + ); + }, + ); + } + + #[test] + fn empty_override_is_ignored() { + EnvConfig::with_vars([("VP_PACKAGE_MANAGER", " ")], |_| { + assert_eq!(package_manager_override().unwrap(), None); + }); + } + + #[test] + fn invalid_override_is_rejected() { + for value in ["pnpm", "pnpm@", "pnpm@+sha512.abc", "pnpm@10.6.1+", "other@1"] { + EnvConfig::with_vars([("VP_PACKAGE_MANAGER", value)], |_| { + assert!(package_manager_override().is_err(), "{value}"); + }); + } + } +} diff --git a/packages/cli/binding/index.cjs b/packages/cli/binding/index.cjs index b616595e5f..a1248292b1 100644 --- a/packages/cli/binding/index.cjs +++ b/packages/cli/binding/index.cjs @@ -1108,6 +1108,7 @@ module.exports.documentationUrl = nativeBinding.documentationUrl; module.exports.downloadPackageManager = nativeBinding.downloadPackageManager; module.exports.ensureBlockingStdio = nativeBinding.ensureBlockingStdio; module.exports.findMonorepoRoot = nativeBinding.findMonorepoRoot; +module.exports.getPackageManagerOverride = nativeBinding.getPackageManagerOverride; module.exports.getVpDirs = nativeBinding.getVpDirs; module.exports.hasConfigKey = nativeBinding.hasConfigKey; module.exports.isDirectoryGitignored = nativeBinding.isDirectoryGitignored; diff --git a/packages/cli/binding/index.d.cts b/packages/cli/binding/index.d.cts index 3f25e0aab7..42d608349c 100644 --- a/packages/cli/binding/index.d.cts +++ b/packages/cli/binding/index.d.cts @@ -3787,6 +3787,9 @@ export declare function ensureBlockingStdio(): void; */ export declare function findMonorepoRoot(cwd: string): string | null; +/** Read the same `VP_PACKAGE_MANAGER` override used by `vp install`. */ +export declare function getPackageManagerOverride(): PackageManagerOverride | null; + /** * Resolved on-disk category roots from [`vp_shared::EnvConfig`]. * @@ -3919,6 +3922,12 @@ export interface MigrateArgs { */ export declare function migrateTaskCacheConfig(viteConfigPath: string): TaskCacheConfigResult; +export interface PackageManagerOverride { + name: string; + version: string; + expectedHash?: string; +} + export declare function parseConfigArgs(argv: Array): ParseConfigArgsOutcome; export type ParseConfigArgsOutcome = diff --git a/packages/cli/binding/src/package_manager.rs b/packages/cli/binding/src/package_manager.rs index 1ed2e201a5..17a0004650 100644 --- a/packages/cli/binding/src/package_manager.rs +++ b/packages/cli/binding/src/package_manager.rs @@ -24,6 +24,25 @@ pub struct DownloadPackageManagerResult { pub version: String, } +#[napi(object)] +pub struct PackageManagerOverride { + pub name: String, + pub version: String, + pub expected_hash: Option, +} + +/// Read the same `VP_PACKAGE_MANAGER` override used by `vp install`. +#[napi] +pub fn get_package_manager_override() -> Result> { + Ok(vp_pm_cli::package_manager_override().map_err(anyhow::Error::from)?.map( + |(name, version, expected_hash)| PackageManagerOverride { + name: name.to_string(), + version, + expected_hash, + }, + )) +} + /// Download a package manager /// /// ## Parameters diff --git a/packages/cli/src/create/bin.ts b/packages/cli/src/create/bin.ts index bca384dd70..3f651b1b17 100644 --- a/packages/cli/src/create/bin.ts +++ b/packages/cli/src/create/bin.ts @@ -4,7 +4,7 @@ import { styleText } from 'node:util'; import * as prompts from '@voidzero-dev/vite-plus-prompts'; -import { parseCreateArgs, vitePlusHeader } from '../../binding/index.js'; +import { getPackageManagerOverride, parseCreateArgs, vitePlusHeader } from '../../binding/index.js'; import { addFrameworkShim, createCatalogDependencyResolver, @@ -675,20 +675,24 @@ Use \`vp create --list\` to list all available templates, or run \`vp create --h } } - // Resolve package manager: existing monorepo > CLI flag > ambient detection > launcher > prompt/default + // The installer applies VP_PACKAGE_MANAGER before project pins or the create CLI flag. + const packageManagerOverride = getPackageManagerOverride(); + // Otherwise: existing monorepo > CLI flag > ambient detection > launcher > prompt/default. const requestedPackageManager = options.packageManager; const detectedPackageManager = workspaceInfoOptional.packageManager; const launcherPackageManager = detectLauncherPackageManager(); const packageManager = + (packageManagerOverride?.name as PackageManager | undefined) ?? (isMonorepo ? (detectedPackageManager ?? requestedPackageManager) : (requestedPackageManager ?? detectedPackageManager)) ?? launcherPackageManager ?? (await selectPackageManager(options.interactive, compactOutput)); const packageManagerVersion = - packageManager === detectedPackageManager + packageManagerOverride?.version ?? + (packageManager === detectedPackageManager ? workspaceInfoOptional.packageManagerVersion - : 'latest'; + : 'latest'); const shouldSilencePackageManagerInstallLog = compactOutput || (isMonorepo && workspaceInfoOptional.packageManager !== undefined); // ensure the package manager is installed by vite-plus @@ -698,10 +702,15 @@ Use \`vp create --list\` to list all available templates, or run \`vp create --h options.interactive, shouldSilencePackageManagerInstallLog, workspaceInfoOptional.rootDir, + packageManagerOverride?.expectedHash ?? undefined, ); + const resolvedPackageManagerOverride = packageManagerOverride + ? `${packageManager}@${downloadResult.version}${packageManagerOverride.expectedHash ? `+${packageManagerOverride.expectedHash}` : ''}` + : undefined; const workspaceInfo: WorkspaceInfo = { ...workspaceInfoOptional, packageManager, + packageManagerVersion: downloadResult.version, downloadPackageManager: downloadResult, }; // Only the global CLI puts `vp` on PATH; launches through a package manager reach it through the project's package manager. @@ -974,6 +983,7 @@ Use \`vp create --list\` to list all available templates, or run \`vp create --h silent: compactOutput, packageManager: workspaceInfo.packageManager, packageManagerVersion: workspaceInfo.downloadPackageManager.version, + packageManagerOverride: resolvedPackageManagerOverride, detectIgnoredBuilds: true, }); await handleIgnoredBuilds(fullPath, fullPath, installSummary); @@ -1167,6 +1177,7 @@ Use \`vp create --list\` to list all available templates, or run \`vp create --h silent: compactOutput, packageManager: workspaceInfo.packageManager, packageManagerVersion: workspaceInfo.downloadPackageManager.version, + packageManagerOverride: resolvedPackageManagerOverride, detectIgnoredBuilds: true, }); if (installSummary.status !== 'installed') { @@ -1288,6 +1299,7 @@ Use \`vp create --list\` to list all available templates, or run \`vp create --h silent: compactOutput, packageManager: workspaceInfo.packageManager, packageManagerVersion: workspaceInfo.downloadPackageManager.version, + packageManagerOverride: resolvedPackageManagerOverride, detectIgnoredBuilds: true, }); await handleIgnoredBuilds(fullPath, workspaceInfo.rootDir, installSummary); @@ -1337,6 +1349,7 @@ Use \`vp create --list\` to list all available templates, or run \`vp create --h silent: compactOutput, packageManager: workspaceInfo.packageManager, packageManagerVersion: workspaceInfo.downloadPackageManager.version, + packageManagerOverride: resolvedPackageManagerOverride, detectIgnoredBuilds: true, }); await handleIgnoredBuilds(fullPath, fullPath, installSummary); diff --git a/packages/cli/src/utils/__tests__/prompts.spec.ts b/packages/cli/src/utils/__tests__/prompts.spec.ts index 2ff55bcc3d..aaa3ec4a81 100644 --- a/packages/cli/src/utils/__tests__/prompts.spec.ts +++ b/packages/cli/src/utils/__tests__/prompts.spec.ts @@ -30,6 +30,31 @@ describe('downloadPackageManager', () => { name: 'pnpm', version: 'latest', cwd: '/target/workspace', + expectedHash: undefined, + }); + }); + + it('preserves the integrity hash from a package manager override', async () => { + vi.mocked(downloadPackageManagerBinding).mockResolvedValueOnce({ + name: 'pnpm', + version: '10.6.1', + installDir: '/cache/pnpm', + binPrefix: '/cache/pnpm/bin', + packageName: 'pnpm', + }); + await downloadPackageManager( + PackageManager.pnpm, + '10.6.1', + false, + true, + '/target/workspace', + 'sha512.0123456789abcdef', + ); + expect(downloadPackageManagerBinding).toHaveBeenLastCalledWith({ + name: 'pnpm', + version: '10.6.1', + cwd: '/target/workspace', + expectedHash: 'sha512.0123456789abcdef', }); }); }); diff --git a/packages/cli/src/utils/prompts.ts b/packages/cli/src/utils/prompts.ts index 95a9f5900d..7289af7768 100644 --- a/packages/cli/src/utils/prompts.ts +++ b/packages/cli/src/utils/prompts.ts @@ -81,6 +81,7 @@ export async function downloadPackageManager( interactive?: boolean, silent = false, cwd?: string, + expectedHash?: string, ) { const spinner = silent ? getSilentSpinner() : getSpinner(interactive); spinner.start(`${packageManager}@${version} installing...`); @@ -88,6 +89,7 @@ export async function downloadPackageManager( name: packageManager, version, cwd, + expectedHash, }); spinner.stop(`${packageManager}@${downloadResult.version} installed`); return downloadResult; @@ -101,6 +103,8 @@ export async function runViteInstall( silent?: boolean; packageManager?: PackageManager; packageManagerVersion?: string; + /** Keep creation's resolved version when installation runs in the generated project. */ + packageManagerOverride?: string; /** * Surface the package manager's gated build scripts instead of suppressing * them. When set, the auto `--ignore-scripts` workaround is skipped (so @@ -147,7 +151,9 @@ export async function runViteInstall( const { exitCode, stderr, stdout } = await runCommandSilently({ ...getVpCommand(['install', ...installArgs]), cwd, - envs: process.env, + envs: options?.packageManagerOverride + ? { ...process.env, VP_PACKAGE_MANAGER: options.packageManagerOverride } + : process.env, }); const combinedOutput = `${stdout.toString()}\n${stderr.toString()}`; const pendingBuilds = detectIgnoredBuilds From 9f4a90e44ed2f30314a806623fb911854382dc58 Mon Sep 17 00:00:00 2001 From: MK Date: Tue, 10 Nov 2026 14:13:47 +0800 Subject: [PATCH 4/5] test(create): refresh standalone workspace approval snapshots --- .../snapshots/create_approve_builds_migrate_pnpm11.md | 6 ++++++ .../snapshots/create_approve_builds_pnpm11.md | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_approve_builds_migrate_pnpm11/snapshots/create_approve_builds_migrate_pnpm11.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_approve_builds_migrate_pnpm11/snapshots/create_approve_builds_migrate_pnpm11.md index 7121581f7a..b0d12cd780 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_approve_builds_migrate_pnpm11/snapshots/create_approve_builds_migrate_pnpm11.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_approve_builds_migrate_pnpm11/snapshots/create_approve_builds_migrate_pnpm11.md @@ -17,6 +17,8 @@ template ships Prettier, so create installs+migrates before the main install; th approval recorded under allowBuilds despite the migration pre-install ``` +packages: + - . allowBuilds: core-js: true catalog: @@ -62,6 +64,8 @@ peerDependencyRules: - vite allowedVersions: vite: "*" +packages: + - . ``` ## `cd default-app && vp pm approve-builds core-js` @@ -77,6 +81,8 @@ node_modules/.pnpm/core-js@3.39.0/node_modules/core-js: Running postinstall scri core-js is now allowed under allowBuilds ``` +packages: + - . allowBuilds: core-js: true catalog: diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_approve_builds_pnpm11/snapshots/create_approve_builds_pnpm11.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_approve_builds_pnpm11/snapshots/create_approve_builds_pnpm11.md index 6c8ca152cb..320ec81dc6 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_approve_builds_pnpm11/snapshots/create_approve_builds_pnpm11.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_approve_builds_pnpm11/snapshots/create_approve_builds_pnpm11.md @@ -16,6 +16,8 @@ approval recorded under allowBuilds ``` +packages: + - . allowBuilds: core-js: true catalog: @@ -48,6 +50,8 @@ default run surfaces the gated build with guidance, leaving it unapproved no allowBuilds, the build was not run ``` +packages: + - . allowBuilds: core-js: set this to true or false catalog: @@ -75,6 +79,8 @@ node_modules/.pnpm/core-js@3.39.0/node_modules/core-js: Running postinstall scri core-js is now allowed under allowBuilds ``` +packages: + - . allowBuilds: core-js: true catalog: From e042038045059c5bf516affba5f97f13689ab866 Mon Sep 17 00:00:00 2001 From: MK Date: Tue, 10 Nov 2026 14:32:31 +0800 Subject: [PATCH 5/5] test(create): compare package manager details in snapshots --- .../capture-create.mjs | 21 +++++ .../mock-manifest.json | 2 +- .../record-install.cjs | 7 +- .../snapshots.toml | 23 ++++- ..._package_manager_override_family.global.md | 67 +++++++++++++- ...e_package_manager_override_family.local.md | 67 +++++++++++++- ...ackage_manager_override_monorepo.global.md | 63 ++++++++++++- ...package_manager_override_monorepo.local.md | 63 ++++++++++++- ...package_manager_override_version.global.md | 86 +++++++++++++++++- ..._package_manager_override_version.local.md | 86 +++++++++++++++++- .../tarballs/create-1.0.0.tgz | Bin 398 -> 473 bytes .../verify-create.mjs | 54 ----------- 12 files changed, 468 insertions(+), 71 deletions(-) create mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/capture-create.mjs delete mode 100644 crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/verify-create.mjs diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/capture-create.mjs b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/capture-create.mjs new file mode 100644 index 0000000000..e8976184a7 --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/capture-create.mjs @@ -0,0 +1,21 @@ +import { spawnSync } from 'node:child_process'; +import { writeFileSync } from 'node:fs'; +import { stripVTControlCharacters } from 'node:util'; + +const args = ['create', ...process.argv.slice(2)]; +// Windows needs cmd to launch the local CLI's .cmd shim. All arguments are fixture literals. +const result = + process.platform === 'win32' + ? spawnSync('cmd.exe', ['/d', '/s', '/c', `vp ${args.join(' ')}`], { encoding: 'utf8' }) + : spawnSync('vp', args, { encoding: 'utf8' }); +const output = stripVTControlCharacters(`${result.stdout ?? ''}${result.stderr ?? ''}`); +process.stdout.write(output); + +// Keep the summary's exact package-manager version visible despite banner version redaction. +const summary = output.match(/• Node \S+\s+(\S+) (\S+)/); +writeFileSync( + 'create-summary.json', + JSON.stringify({ packageManager: summary?.[1] ?? null, version: summary?.[2] ?? null }, null, 2) + '\n', +); +if (result.error) throw result.error; +process.exitCode = result.status ?? 1; diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/mock-manifest.json b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/mock-manifest.json index 81356ac470..2530bbbb87 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/mock-manifest.json +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/mock-manifest.json @@ -19,7 +19,7 @@ }, "dist": { "tarball": "{REGISTRY}/@override/create/-/create-1.0.0.tgz", - "integrity": "sha512-lm2dmUGQCijrsmtG2bfY3GmTbonpnUU7Ioz3ykIqS6ifRrP2hiRr/IxRlyy9WTGIv97SEJXCHWxo1C3K6IxZ3A==" + "integrity": "sha512-BtnLAbJfxjm1whROR0IFq3HsDYEvBsV9IUGLvVHGmzZ63TYs6By4DehJouH2jN1q0H9dIJPBkiLds1DGmzxTqg==" } } } diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/record-install.cjs b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/record-install.cjs index 6d08f72d11..b64fc121c9 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/record-install.cjs +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/record-install.cjs @@ -1 +1,6 @@ -require('node:fs').writeFileSync('installed-with.txt', process.env.npm_config_user_agent); +const [packageManager, version] = process.env.npm_config_user_agent.split(' ')[0].split('/'); + +require('node:fs').writeFileSync( + 'installed-with.json', + JSON.stringify({ packageManager, version }, null, 2) + '\n', +); diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots.toml b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots.toml index 387414ad84..b02449db97 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots.toml +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots.toml @@ -5,7 +5,13 @@ local-registry = true unset-env = ["VP_SKIP_INSTALL", "CI"] env = { VP_PACKAGE_MANAGER = "pnpm@10.6.1" } steps = [ - { argv = ["node", "verify-create.mjs", "pnpm", "10.6.1"], timeout = 180000 }, + { argv = ["node", "capture-create.mjs", "@override:demo", "--directory", "demo", "--package-manager", "pnpm", "--no-interactive", "--no-agent", "--no-editor", "--no-hooks"], timeout = 180000 }, + { argv = ["vpt", "print-file", "create-summary.json"], comment = "the exact package-manager version reported in the summary" }, + { argv = ["vpt", "print-file", "demo/package.json"], comment = "pnpm 10.6.1 reads settings from package.json" }, + { argv = ["node", "-p", "require('./demo/package.json').devEngines.packageManager.version"], comment = "record the exact pin separately from manifest version redaction" }, + { argv = ["vpt", "print-file", "demo/installed-with.json"], comment = "package manager recorded by the install lifecycle script" }, + { argv = ["vpt", "print-file", "demo/pnpm-workspace.yaml"] }, + { argv = ["vpt", "stat-file", "demo/pnpm-lock.yaml"] }, ] [[case]] @@ -15,7 +21,12 @@ local-registry = true unset-env = ["VP_SKIP_INSTALL", "CI"] env = { VP_PACKAGE_MANAGER = "npm@10.9.2" } steps = [ - { argv = ["node", "verify-create.mjs", "npm", "10.9.2"], timeout = 180000 }, + { argv = ["node", "capture-create.mjs", "@override:demo", "--directory", "demo", "--package-manager", "pnpm", "--no-interactive", "--no-agent", "--no-editor", "--no-hooks"], timeout = 180000 }, + { argv = ["vpt", "print-file", "create-summary.json"], comment = "the exact package-manager version reported in the summary" }, + { argv = ["vpt", "print-file", "demo/package.json"], comment = "the npm override takes precedence over the pnpm selection" }, + { argv = ["node", "-p", "require('./demo/package.json').devEngines.packageManager.version"], comment = "record the exact pin separately from manifest version redaction" }, + { argv = ["vpt", "print-file", "demo/installed-with.json"], comment = "package manager recorded by the install lifecycle script" }, + { argv = ["vpt", "stat-file", "demo/package-lock.json", "demo/pnpm-workspace.yaml"] }, ] [[case]] @@ -26,5 +37,11 @@ unset-env = ["VP_SKIP_INSTALL", "CI"] env = { VP_PACKAGE_MANAGER = "pnpm@10.6.1" } steps = [ { argv = ["vpt", "write-file", "pnpm-workspace.yaml", "packages:\n - packages/*\n"], snapshot = false }, - { argv = ["node", "verify-create.mjs", "pnpm", "10.6.1", "monorepo"], timeout = 180000 }, + { argv = ["node", "capture-create.mjs", "@override:demo", "--directory", "packages/demo", "--package-manager", "pnpm", "--no-interactive", "--no-agent", "--no-editor", "--no-hooks"], timeout = 180000 }, + { argv = ["vpt", "print-file", "create-summary.json"], comment = "the exact package-manager version reported in the summary" }, + { argv = ["vpt", "print-file", "package.json"], comment = "the session override preserves the existing project pin" }, + { argv = ["node", "-p", "require('./package.json').devEngines.packageManager.version"], comment = "record the exact existing pin separately from manifest version redaction" }, + { argv = ["vpt", "print-file", "installed-with.json"], comment = "the install uses the session override" }, + { argv = ["vpt", "print-file", "pnpm-workspace.yaml"], comment = "preserve the workspace patterns without adding a standalone root" }, + { argv = ["vpt", "stat-file", "pnpm-lock.yaml"] }, ] diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_family.global.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_family.global.md index 5b056f3352..5af3890253 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_family.global.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_family.global.md @@ -1,11 +1,74 @@ # create_package_manager_override_family -## `node verify-create.mjs npm 10.9.2` +## `node capture-create.mjs @override:demo --directory demo --package-manager pnpm --no-interactive --no-agent --no-editor --no-hooks` ``` ◇ Scaffolded demo • Node npm ✓ Dependencies installed in → Next: cd demo && vp run -Verified generated configuration, actual installer, and summary. +``` + +## `vpt print-file create-summary.json` + +the exact package-manager version reported in the summary + +``` +{ + "packageManager": "npm", + "version": "10.9.2" +} +``` + +## `vpt print-file demo/package.json` + +the npm override takes precedence over the pnpm selection + +``` +{ + "name": "demo", + "version": "0.0.0", + "scripts": { + "postinstall": "node record-install.cjs" + }, + "devDependencies": { + "vite-plus": "" + }, + "overrides": { + "vite": "npm:@voidzero-dev/vite-plus-core@" + }, + "devEngines": { + "packageManager": { + "name": "npm", + "version": "", + "onFail": "download" + } + } +} +``` + +## `node -p require('./demo/package.json').devEngines.packageManager.version` + +record the exact pin separately from manifest version redaction + +``` +10.9.2 +``` + +## `vpt print-file demo/installed-with.json` + +package manager recorded by the install lifecycle script + +``` +{ + "packageManager": "npm", + "version": "10.9.2" +} +``` + +## `vpt stat-file demo/package-lock.json demo/pnpm-workspace.yaml` + +``` +demo/package-lock.json: file +demo/pnpm-workspace.yaml: missing ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_family.local.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_family.local.md index 5b056f3352..5af3890253 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_family.local.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_family.local.md @@ -1,11 +1,74 @@ # create_package_manager_override_family -## `node verify-create.mjs npm 10.9.2` +## `node capture-create.mjs @override:demo --directory demo --package-manager pnpm --no-interactive --no-agent --no-editor --no-hooks` ``` ◇ Scaffolded demo • Node npm ✓ Dependencies installed in → Next: cd demo && vp run -Verified generated configuration, actual installer, and summary. +``` + +## `vpt print-file create-summary.json` + +the exact package-manager version reported in the summary + +``` +{ + "packageManager": "npm", + "version": "10.9.2" +} +``` + +## `vpt print-file demo/package.json` + +the npm override takes precedence over the pnpm selection + +``` +{ + "name": "demo", + "version": "0.0.0", + "scripts": { + "postinstall": "node record-install.cjs" + }, + "devDependencies": { + "vite-plus": "" + }, + "overrides": { + "vite": "npm:@voidzero-dev/vite-plus-core@" + }, + "devEngines": { + "packageManager": { + "name": "npm", + "version": "", + "onFail": "download" + } + } +} +``` + +## `node -p require('./demo/package.json').devEngines.packageManager.version` + +record the exact pin separately from manifest version redaction + +``` +10.9.2 +``` + +## `vpt print-file demo/installed-with.json` + +package manager recorded by the install lifecycle script + +``` +{ + "packageManager": "npm", + "version": "10.9.2" +} +``` + +## `vpt stat-file demo/package-lock.json demo/pnpm-workspace.yaml` + +``` +demo/package-lock.json: file +demo/pnpm-workspace.yaml: missing ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_monorepo.global.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_monorepo.global.md index b7026c2dfe..3a04cd2984 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_monorepo.global.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_monorepo.global.md @@ -5,12 +5,71 @@ '` -## `node verify-create.mjs pnpm 10.6.1 monorepo` +## `node capture-create.mjs @override:demo --directory packages/demo --package-manager pnpm --no-interactive --no-agent --no-editor --no-hooks` ``` ◇ Scaffolded packages/demo • Node pnpm ✓ Dependencies installed in → Next: cd packages/demo && vp run -Verified generated configuration, actual installer, and summary. +``` + +## `vpt print-file create-summary.json` + +the exact package-manager version reported in the summary + +``` +{ + "packageManager": "pnpm", + "version": "10.6.1" +} +``` + +## `vpt print-file package.json` + +the session override preserves the existing project pin + +``` +{ + "name": "create-override-parent", + "private": true, + "devEngines": { + "packageManager": { "name": "pnpm", "version": "", "onFail": "download" } + }, + "scripts": { "postinstall": "node record-install.cjs" } +} +``` + +## `node -p require('./package.json').devEngines.packageManager.version` + +record the exact existing pin separately from manifest version redaction + +``` +12.11.2 +``` + +## `vpt print-file installed-with.json` + +the install uses the session override + +``` +{ + "packageManager": "pnpm", + "version": "10.6.1" +} +``` + +## `vpt print-file pnpm-workspace.yaml` + +preserve the workspace patterns without adding a standalone root + +``` +packages: + - packages/* +``` + +## `vpt stat-file pnpm-lock.yaml` + +``` +pnpm-lock.yaml: file ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_monorepo.local.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_monorepo.local.md index b7026c2dfe..3a04cd2984 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_monorepo.local.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_monorepo.local.md @@ -5,12 +5,71 @@ '` -## `node verify-create.mjs pnpm 10.6.1 monorepo` +## `node capture-create.mjs @override:demo --directory packages/demo --package-manager pnpm --no-interactive --no-agent --no-editor --no-hooks` ``` ◇ Scaffolded packages/demo • Node pnpm ✓ Dependencies installed in → Next: cd packages/demo && vp run -Verified generated configuration, actual installer, and summary. +``` + +## `vpt print-file create-summary.json` + +the exact package-manager version reported in the summary + +``` +{ + "packageManager": "pnpm", + "version": "10.6.1" +} +``` + +## `vpt print-file package.json` + +the session override preserves the existing project pin + +``` +{ + "name": "create-override-parent", + "private": true, + "devEngines": { + "packageManager": { "name": "pnpm", "version": "", "onFail": "download" } + }, + "scripts": { "postinstall": "node record-install.cjs" } +} +``` + +## `node -p require('./package.json').devEngines.packageManager.version` + +record the exact existing pin separately from manifest version redaction + +``` +12.11.2 +``` + +## `vpt print-file installed-with.json` + +the install uses the session override + +``` +{ + "packageManager": "pnpm", + "version": "10.6.1" +} +``` + +## `vpt print-file pnpm-workspace.yaml` + +preserve the workspace patterns without adding a standalone root + +``` +packages: + - packages/* +``` + +## `vpt stat-file pnpm-lock.yaml` + +``` +pnpm-lock.yaml: file ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_version.global.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_version.global.md index 3af167ca04..9de5f23cc1 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_version.global.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_version.global.md @@ -1,11 +1,93 @@ # create_package_manager_override_version -## `node verify-create.mjs pnpm 10.6.1` +## `node capture-create.mjs @override:demo --directory demo --package-manager pnpm --no-interactive --no-agent --no-editor --no-hooks` ``` ◇ Scaffolded demo • Node pnpm ✓ Dependencies installed in → Next: cd demo && vp run -Verified generated configuration, actual installer, and summary. +``` + +## `vpt print-file create-summary.json` + +the exact package-manager version reported in the summary + +``` +{ + "packageManager": "pnpm", + "version": "10.6.1" +} +``` + +## `vpt print-file demo/package.json` + +pnpm 10.6.1 reads settings from package.json + +``` +{ + "name": "demo", + "version": "0.0.0", + "scripts": { + "postinstall": "node record-install.cjs" + }, + "devDependencies": { + "vite-plus": "catalog:" + }, + "devEngines": { + "packageManager": { + "name": "pnpm", + "version": "", + "onFail": "download" + } + }, + "pnpm": { + "overrides": { + "vite@*": "npm:@voidzero-dev/vite-plus-core@" + }, + "peerDependencyRules": { + "allowAny": [ + "vite" + ], + "allowedVersions": { + "vite": "*" + } + } + } +} +``` + +## `node -p require('./demo/package.json').devEngines.packageManager.version` + +record the exact pin separately from manifest version redaction + +``` +10.6.1 +``` + +## `vpt print-file demo/installed-with.json` + +package manager recorded by the install lifecycle script + +``` +{ + "packageManager": "pnpm", + "version": "10.6.1" +} +``` + +## `vpt print-file demo/pnpm-workspace.yaml` + +``` +catalog: + vite: npm:@voidzero-dev/vite-plus-core@ + vite-plus: +packages: + - . +``` + +## `vpt stat-file demo/pnpm-lock.yaml` + +``` +demo/pnpm-lock.yaml: file ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_version.local.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_version.local.md index 3af167ca04..9de5f23cc1 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_version.local.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/snapshots/create_package_manager_override_version.local.md @@ -1,11 +1,93 @@ # create_package_manager_override_version -## `node verify-create.mjs pnpm 10.6.1` +## `node capture-create.mjs @override:demo --directory demo --package-manager pnpm --no-interactive --no-agent --no-editor --no-hooks` ``` ◇ Scaffolded demo • Node pnpm ✓ Dependencies installed in → Next: cd demo && vp run -Verified generated configuration, actual installer, and summary. +``` + +## `vpt print-file create-summary.json` + +the exact package-manager version reported in the summary + +``` +{ + "packageManager": "pnpm", + "version": "10.6.1" +} +``` + +## `vpt print-file demo/package.json` + +pnpm 10.6.1 reads settings from package.json + +``` +{ + "name": "demo", + "version": "0.0.0", + "scripts": { + "postinstall": "node record-install.cjs" + }, + "devDependencies": { + "vite-plus": "catalog:" + }, + "devEngines": { + "packageManager": { + "name": "pnpm", + "version": "", + "onFail": "download" + } + }, + "pnpm": { + "overrides": { + "vite@*": "npm:@voidzero-dev/vite-plus-core@" + }, + "peerDependencyRules": { + "allowAny": [ + "vite" + ], + "allowedVersions": { + "vite": "*" + } + } + } +} +``` + +## `node -p require('./demo/package.json').devEngines.packageManager.version` + +record the exact pin separately from manifest version redaction + +``` +10.6.1 +``` + +## `vpt print-file demo/installed-with.json` + +package manager recorded by the install lifecycle script + +``` +{ + "packageManager": "pnpm", + "version": "10.6.1" +} +``` + +## `vpt print-file demo/pnpm-workspace.yaml` + +``` +catalog: + vite: npm:@voidzero-dev/vite-plus-core@ + vite-plus: +packages: + - . +``` + +## `vpt stat-file demo/pnpm-lock.yaml` + +``` +demo/pnpm-lock.yaml: file ``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/tarballs/create-1.0.0.tgz b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/tarballs/create-1.0.0.tgz index 4cd460057a96483ed873c9e8225c9f5f4e91447f..efc9bb00582db6a8983f50cdbf5103a8015d4ace 100644 GIT binary patch literal 473 zcmV;~0Ve(*iwFP!00002|LxV!i<>|c2XN2+6_0l@p~j4fn+2Cbq0mF2KVXm95JX?> zY<09VW4251e=kPkA!XT16BhbDm(fvYMCbdaPST%APV>5NgGW;-=N}V7h*cCFTOq`G zD;Cksczo;+!`0%}0pVOhV{D=wah18=paZI;B#iMxwI{7*M)OotVhMfRlQyza7-JZS zK%kHPrH_@`$sFSYS}N-zv1Bk_k0WJNR_J3!Ce^aG{RrRt^#x_3lAJW0W`mvlZ5!Q9 zcNz?14CdoWyJ=g8UCNOA@q1sQ5WJTEaJ4+k|1yd~&i_^N?*a_L1w4gvHm1+-E{}Bp zQ1peM>+RERFopwQT^TEtu}M*Mx2Y;4(3Dm>n+@GT`e+bZw{@1fRJO2!1F_JOL)ZF=1Ow~ZmaO>$B;Fm)mA z!~<`-7Ms)A+?(FHuBKm&)HLzBiV*LNHw~V&wDd_9bpNcsdBk{o*dwXw}jRQ)f9yfiz&PV@1c8qddG!^F~%5Uj4{R-V~jDz7-Nhv P_Fwq}R;>E~04M+e8|mwH literal 398 zcmV;90df8xiwFP!00002|LxX6Yuhjw#&MtXDa3n83yvZ;ZVK*YQ0RHkV;Mo%Z!)#9 zo*JeY-fg;zTsums;!t|i#D0bE{qrSiZS{t|IPWIb<}>bmx7~R$ zDoD`EPE*l%S8@oF?OxiZ sUX{mJg4HgtU+E3oc>9RX0RR9100000000000074H2jafC-2f;60M7o$$N&HU diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/verify-create.mjs b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/verify-create.mjs deleted file mode 100644 index b475556644..0000000000 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/create_package_manager_override/verify-create.mjs +++ /dev/null @@ -1,54 +0,0 @@ -import assert from 'node:assert/strict'; -import { spawnSync } from 'node:child_process'; -import { existsSync, readFileSync } from 'node:fs'; -import { stripVTControlCharacters } from 'node:util'; - -const [name, version, monorepo] = process.argv.slice(2); -const directory = monorepo ? 'packages/demo' : 'demo'; -const args = [ - 'create', - '@override:demo', - '--directory', - directory, - '--package-manager', - 'pnpm', - '--no-interactive', - '--no-agent', - '--no-editor', - '--no-hooks', -]; -// Windows needs cmd to launch the local CLI's .cmd shim. All arguments are fixture literals. -const result = - process.platform === 'win32' - ? spawnSync('cmd.exe', ['/d', '/s', '/c', `vp ${args.join(' ')}`], { encoding: 'utf8' }) - : spawnSync('vp', args, { encoding: 'utf8' }); -const output = stripVTControlCharacters(`${result.stdout ?? ''}${result.stderr ?? ''}`); -process.stdout.write(output); -assert.ifError(result.error); -assert.equal(result.status, 0); -assert.ok(output.includes(`${name} ${version}`), 'summary must report the effective version'); -assert.ok(!output.includes('Install failed'), 'dependency installation must succeed'); -const installRoot = monorepo ? '.' : directory; -const agent = readFileSync(`${installRoot}/installed-with.txt`, 'utf8'); -assert.ok(agent.startsWith(`${name}/${version} `), `actual installer: ${agent}`); -const manifest = JSON.parse(readFileSync(`${installRoot}/package.json`, 'utf8')); -assert.deepEqual(manifest.devEngines.packageManager, { - name: monorepo ? 'pnpm' : name, - version: monorepo ? '12.11.2' : version, - onFail: 'download', -}); -if (name === 'pnpm') { - assert.ok(existsSync(`${installRoot}/pnpm-lock.yaml`)); - if (!monorepo) { - // pnpm 10.6.1 supports catalogs but still reads settings from package.json. - assert.ok(manifest.pnpm?.overrides, 'settings must use the effective version'); - } else { - const workspace = readFileSync('pnpm-workspace.yaml', 'utf8'); - assert.match(workspace, /packages\/\*/); - assert.doesNotMatch(workspace, /^\s*- ['"]?\.['"]?\s*$/m); - } -} else { - assert.ok(existsSync(`${installRoot}/package-lock.json`)); - assert.ok(!existsSync(`${installRoot}/pnpm-workspace.yaml`)); -} -console.log('Verified generated configuration, actual installer, and summary.');