vite-plus 0.3.2 → 1.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +35 -146
- package/README.md +3 -3
- package/binding/index.cjs +140 -55
- package/binding/index.d.cts +49 -0
- package/dist/{agent-C59HKB4Y.js → agent-Dinpyd-k.js} +6 -5
- package/dist/bin.js +48 -18
- package/dist/config/bin.js +2 -2
- package/dist/constants-CiKwrA0v.js +356 -0
- package/dist/create/bin.js +96 -71
- package/dist/{define-config-DPNEJxPz.d.ts → define-config-B9usMnEa.d.ts} +51 -10
- package/dist/{define-config-DpAPETDf.cjs → define-config-CBccpane.cjs} +173 -44
- package/dist/{define-config-DAaCa0U_.js → define-config-jhuYJ7Tb.js} +158 -42
- package/dist/define-config.cjs +1 -1
- package/dist/define-config.d.ts +1 -1
- package/dist/define-config.js +1 -1
- package/dist/documentation-DqcZSthV.js +11 -0
- package/dist/{editor-QOIGtmH4.js → editor-DMBczTdj.js} +216 -152
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/{json-cULBl7Pi.js → json-JP24qHUF.js} +14 -6
- package/dist/lint-plugins.cjs +1 -1
- package/dist/migration/bin.js +3122 -15
- package/dist/{oxlint-plugin-config-BU42tr8y.js → oxlint-plugin-config-BgsDA6ua.js} +1 -1
- package/dist/oxlint-plugin.js +9 -7
- package/dist/pack-bin.js +1 -1
- package/dist/{package-BB-Jh_z3.js → package-B85H2Nw0.js} +6 -2
- package/dist/{vitest-ecosystem-BiRqcaRI.js → package-overrides-Dpn4scvN.js} +1 -7
- package/dist/{prompts-CujFOJXu.js → prompts-CQobX7uP.js} +2 -2
- package/dist/{resolve-vite-config-CHHjsjKJ.js → resolve-vite-config-BUFUmi8h.js} +2 -2
- package/dist/{resolve-vite-config-6Nox70uP.js → resolve-vite-config-I8fmpR7I.js} +1 -1
- package/dist/staged/bin.js +1205 -3317
- package/dist/sync-versions/bin.js +3 -2
- package/dist/sync-versions/bin.mjs +17 -2
- package/dist/test/browser/context.js +1 -1
- package/dist/test/browser/providers/playwright/context.js +1 -1
- package/dist/test/browser/providers/preview/context.js +1 -1
- package/dist/test/browser-playwright/context.js +1 -1
- package/dist/test/browser-preview/context.js +1 -1
- package/dist/test/context.d.ts +2 -942
- package/dist/test/context.js +1 -1
- package/dist/test/internal/traces.js +1 -0
- package/dist/test/locators.d.ts +2 -294
- package/dist/test/matchers.d.ts +2 -29
- package/dist/test/mocker.d.ts +2 -0
- package/dist/test/mocker.js +1 -0
- package/dist/test/{browser-webdriverio/context.js → plugins/browser-context.d.ts} +1 -0
- package/dist/test/plugins/browser-context.js +1 -1
- package/dist/test/plugins/browser-locators.d.ts +2 -0
- package/dist/test/plugins/browser-playwright.d.ts +2 -0
- package/dist/test/plugins/browser-preview.d.ts +2 -0
- package/dist/test/plugins/browser.d.ts +2 -0
- package/dist/test/plugins/mocker-automock.d.ts +2 -0
- package/dist/test/plugins/mocker-browser.d.ts +2 -0
- package/dist/test/plugins/mocker-node.d.ts +2 -0
- package/dist/test/plugins/mocker-redirect.d.ts +2 -0
- package/dist/test/plugins/mocker-register.d.ts +2 -0
- package/dist/test/plugins/mocker-transforms.d.ts +2 -0
- package/dist/test/plugins/mocker.d.ts +2 -0
- package/dist/test/plugins/pretty-format.d.ts +2 -0
- package/dist/test/plugins/snapshot-environment.d.ts +2 -0
- package/dist/test/plugins/snapshot-manager.d.ts +2 -0
- package/dist/test/plugins/snapshot.d.ts +2 -0
- package/dist/test/plugins/spy.d.ts +2 -0
- package/dist/test/plugins/utils-constants.d.ts +2 -0
- package/dist/test/plugins/utils-diff.d.ts +2 -0
- package/dist/test/plugins/utils-display.d.ts +2 -0
- package/dist/test/plugins/utils-error.d.ts +2 -0
- package/dist/test/plugins/utils-helpers.d.ts +2 -0
- package/dist/test/plugins/utils-offset.d.ts +2 -0
- package/dist/test/plugins/utils-resolver.d.ts +2 -0
- package/dist/test/plugins/utils-serialize.d.ts +2 -0
- package/dist/test/plugins/utils-source-map-node.d.ts +2 -0
- package/dist/test/plugins/utils-source-map.d.ts +2 -0
- package/dist/test/plugins/utils-timers.d.ts +2 -0
- package/dist/test/plugins/utils.d.ts +2 -0
- package/dist/toolchain.js +10 -10
- package/dist/toolchain.json +10 -10
- package/dist/{tsconfig-DCtWfQPA.js → tsconfig-Buo0RSzz.js} +8 -4
- package/dist/{tsconfig-MXktI3SX.js → tsconfig-C1VeTG9k.js} +1 -1
- package/dist/version.js +5 -3
- package/dist/versions.js +5 -5
- package/dist/vitest-ecosystem-BU0AqZq-.js +23 -0
- package/dist/vitest-v5-entry-points-DthU1e_O.js +25 -0
- package/docs/config/fmt.md +2 -2
- package/docs/config/lint.md +2 -2
- package/docs/config/run.md +1 -1
- package/docs/config/staged.md +1 -2
- package/docs/guide/check.md +2 -0
- package/docs/guide/ci.md +28 -31
- package/docs/guide/commit-hooks.md +18 -34
- package/docs/guide/create.md +1 -2
- package/docs/guide/docker.md +20 -68
- package/docs/guide/env.md +47 -32
- package/docs/guide/fmt.md +4 -2
- package/docs/guide/global-cli.md +426 -0
- package/docs/guide/ide-integration.md +1 -2
- package/docs/guide/implode.md +14 -1
- package/docs/guide/index.md +38 -35
- package/docs/guide/install.md +18 -20
- package/docs/guide/lint.md +6 -10
- package/docs/guide/local-cli.md +123 -0
- package/docs/guide/migrate-rules.md +104 -297
- package/docs/guide/migrate.md +82 -59
- package/docs/guide/monorepo.md +5 -1
- package/docs/guide/run.md +1 -1
- package/docs/guide/test.md +2 -0
- package/docs/guide/troubleshooting.md +6 -11
- package/docs/guide/upgrade-project.md +61 -0
- package/docs/guide/upgrade.md +17 -62
- package/docs/guide/vitest-v5.md +221 -0
- package/package.json +67 -90
- package/bin/oxfmt +0 -33
- package/bin/oxlint +0 -38
- package/dist/cli-truncate-Bg3RDXpi.js +0 -865
- package/dist/constants-IhOditRA.js +0 -80
- package/dist/is-fullwidth-code-point-BUNlIICg.js +0 -8
- package/dist/log-update-CoW8Z4Dl.js +0 -491
- package/dist/strip-ansi-C3wrWz9t.js +0 -853
- package/dist/test/browser/providers/webdriverio/context.d.ts +0 -1
- package/dist/test/browser/providers/webdriverio/context.js +0 -1
- package/dist/test/browser/providers/webdriverio.d.ts +0 -77
- package/dist/test/browser/providers/webdriverio.js +0 -1
- package/dist/test/browser-webdriverio/context.d.ts +0 -1
- package/dist/test/browser-webdriverio.d.ts +0 -77
- package/dist/test/browser-webdriverio.js +0 -1
- package/dist/test/coverage.d.ts +0 -2
- package/dist/test/coverage.js +0 -1
- package/dist/test/environments.d.ts +0 -2
- package/dist/test/environments.js +0 -1
- package/dist/test/plugins/browser-webdriverio.js +0 -1
- package/dist/test/plugins/expect.js +0 -1
- package/dist/test/plugins/runner-types.js +0 -1
- package/dist/test/plugins/runner-utils.js +0 -1
- package/dist/test/plugins/runner.js +0 -1
- package/dist/test/reporters.d.ts +0 -2
- package/dist/test/reporters.js +0 -1
- package/dist/test/runners.d.ts +0 -2
- package/dist/test/runners.js +0 -1
- package/dist/test/snapshot.d.ts +0 -2
- package/dist/test/snapshot.js +0 -1
- package/dist/test/suite.d.ts +0 -2
- package/dist/test/suite.js +0 -1
- package/dist/tsgolint-path-CbDReEOx.js +0 -34
- package/dist/tsgolint-path.d.ts +0 -7
- package/dist/tsgolint-path.js +0 -2
- package/dist/wrap-ansi-DNjkuBEp.js +0 -157
- package/dist/wrap-ansi-DUi52C6W.js +0 -2
- package/docs/guide/installer-env-vars.md +0 -286
|
@@ -1,52 +1,31 @@
|
|
|
1
1
|
# Migration Rules
|
|
2
2
|
|
|
3
|
-
This reference describes exactly what `vp migrate` does to a project: how it
|
|
4
|
-
updates dependencies, rewrites source imports and package scripts, and adjusts
|
|
5
|
-
package-manager configuration. See the [migration guide](./migrate.md) for the
|
|
6
|
-
command overview and workflow.
|
|
3
|
+
This reference describes exactly what `vp migrate` does to a project: how it updates dependencies, rewrites source imports and package scripts, and adjusts package-manager configuration. See the [migration guide](./migrate.md) for the command overview and workflow.
|
|
7
4
|
|
|
8
|
-
Except for [Before You Migrate](#before-you-migrate), which lists steps you
|
|
9
|
-
take yourself, everything below describes automatic behavior.
|
|
5
|
+
Except for [Before You Migrate](#before-you-migrate), which lists steps you take yourself, everything below describes automatic behavior.
|
|
10
6
|
|
|
11
7
|
## Before You Migrate
|
|
12
8
|
|
|
13
|
-
1. Run `vp upgrade` so the global CLI has the latest migration rules. A stale
|
|
14
|
-
local `vite-plus` is not a blocker: when the project's local copy is older,
|
|
15
|
-
migration delegates to the global CLI.
|
|
9
|
+
1. Run `vp upgrade` so the global CLI has the latest migration rules. A stale local `vite-plus` is not a blocker: when the project's local copy is older, migration delegates to the global CLI.
|
|
16
10
|
2. Upgrade the project to Vite 8+ and Vitest 4.1+ when necessary.
|
|
17
|
-
3. Run `vp migrate` from the workspace root. Use `--no-interactive` in
|
|
18
|
-
|
|
19
|
-
4. Review every changed manifest, package-manager config, source rewrite, and
|
|
20
|
-
generated lockfile.
|
|
11
|
+
3. Run `vp migrate` from the workspace root. Use `--no-interactive` in automated environments.
|
|
12
|
+
4. Review every changed manifest, package-manager config, source rewrite, and generated lockfile.
|
|
21
13
|
5. Validate with `vp install`, `vp check`, `vp test`, and `vp build`.
|
|
22
14
|
|
|
23
|
-
Migration is idempotent: running it again after a successful migration should
|
|
24
|
-
not produce another diff.
|
|
15
|
+
Migration is idempotent: running it again after a successful migration should not produce another diff.
|
|
25
16
|
|
|
26
17
|
## Upgrade vs. Full Setup
|
|
27
18
|
|
|
28
|
-
On a project that already depends on `vite-plus`, `vp migrate` performs an
|
|
29
|
-
upgrade only: it updates dependencies and package-manager configuration and
|
|
30
|
-
finalizes imports. It does not touch project setup.
|
|
19
|
+
On a project that already depends on `vite-plus`, `vp migrate` performs an upgrade only: it updates dependencies and package-manager configuration and finalizes imports. It does not touch project setup.
|
|
31
20
|
|
|
32
|
-
- `--full` also runs the setup actions: git hooks, editor config, agent files,
|
|
33
|
-
|
|
34
|
-
and the `.nvmrc`/Volta to `.node-version` conversion.
|
|
35
|
-
- `--hooks`, `--agent`, and `--editor` opt into a single setup action without
|
|
36
|
-
`--full`.
|
|
21
|
+
- `--full` also runs the setup actions: git hooks, editor config, agent files, ESLint and Prettier migration, framework shims, the tsconfig `baseUrl` fix, and the `.nvmrc`/Volta to `.node-version` conversion.
|
|
22
|
+
- `--hooks`, `--agent`, and `--editor` opt into a single setup action without `--full`.
|
|
37
23
|
|
|
38
|
-
When a default upgrade skips setup actions that would apply, it prints a hint
|
|
39
|
-
to run `vp migrate --full`. Fresh (non Vite+) projects always run the full
|
|
40
|
-
migration.
|
|
24
|
+
When a default upgrade skips setup actions that would apply, it prints a hint to run `vp migrate --full`. Fresh (non Vite+) projects always run the full migration.
|
|
41
25
|
|
|
42
26
|
## Pack Configuration
|
|
43
27
|
|
|
44
|
-
`vp migrate` updates static `pack` objects in `vite.config.*` and exported
|
|
45
|
-
objects in `tsdown.config.*` for [tsdown 0.23](https://github.com/rolldown/tsdown/releases/tag/v0.23.0).
|
|
46
|
-
This also runs on existing Vite+ projects without `--full`, including workspace
|
|
47
|
-
packages. Arrays and direct objects returned by `defineConfig` callbacks are
|
|
48
|
-
supported. JSON tsdown configs receive the same updates after they merge into
|
|
49
|
-
`vite.config.ts`.
|
|
28
|
+
`vp migrate` updates static `pack` objects in `vite.config.*` and exported objects in `tsdown.config.*` for [tsdown 0.23](https://github.com/rolldown/tsdown/releases/tag/v0.23.0). This also runs on existing Vite+ projects without `--full`, including workspace packages. Arrays and direct objects returned by `defineConfig` callbacks are supported. JSON tsdown configs receive the same updates after they merge into `vite.config.ts`.
|
|
50
29
|
|
|
51
30
|
| Previous option | Updated option |
|
|
52
31
|
| ------------------------------------------------------------------ | ------------------------------------------------------------------------------------- |
|
|
@@ -63,252 +42,141 @@ supported. JSON tsdown configs receive the same updates after they merge into
|
|
|
63
42
|
| `dts.cjsReexport` | Removed; tsdown generates CJS declarations separately |
|
|
64
43
|
| `--public-dir` in `tsdown` or `vp pack` scripts | `--copy` |
|
|
65
44
|
|
|
66
|
-
Migration preserves the previous defaults by setting `deps.resolveDepSubpath`
|
|
67
|
-
to `true` when absent. Enabled ATTW checks receive `profile: 'strict'` when
|
|
68
|
-
no profile is set. Explicit values, including `false`, remain unchanged.
|
|
45
|
+
Migration preserves the previous defaults by setting `deps.resolveDepSubpath` to `true` when absent. Enabled ATTW checks receive `profile: 'strict'` when no profile is set. Explicit values, including `false`, remain unchanged.
|
|
69
46
|
|
|
70
|
-
`
|
|
71
|
-
references, and callback methods. Existing `deps.alwaysBundle` values remain
|
|
72
|
-
unchanged.
|
|
47
|
+
The inserted settings include comments with documentation links and instructions for adopting the new defaults. Remove `deps.resolveDepSubpath: true` to [preserve external subpath imports as written](https://tsdown.dev/options/dependencies#deps-resolvedepsubpath). Remove the inserted `attw.profile: 'strict'` to use the new `esm-only` [resolution profile](https://tsdown.dev/options/lint#profiles). This skips `node10` and CommonJS resolution checks. Keep either setting if your package requires the previous behavior. Migration does not add these comments to explicit settings.
|
|
73
48
|
|
|
74
|
-
|
|
75
|
-
and references to local constants move to `inputOptions.external` before
|
|
76
|
-
`deps.neverBundle` is set. Constant declarations and references stay intact.
|
|
77
|
-
This preserves the original matching rules, including external file paths. Unsupported matchers,
|
|
78
|
-
conflicting `inputOptions`, and declaration-specific dependency rules leave the
|
|
79
|
-
pack object unchanged and produce a manual-migration warning.
|
|
49
|
+
`noExternal` moves to `deps.alwaysBundle`, preserving matcher expressions, references, and callback methods. Existing `deps.alwaysBundle` values remain unchanged.
|
|
80
50
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
manual review. Dynamic boolean selectors remain unchanged. Unrelated Vite and
|
|
84
|
-
plugin options remain unchanged. Run `vp pack` after migration to check the
|
|
85
|
-
result. Node.js requirements, TypeScript module resolution, and programmatic
|
|
86
|
-
`build()` return values require separate review.
|
|
51
|
+
When `external` accompanies either `skipNodeModulesBundle` form, static matchers and references to local constants move to `inputOptions.external` before `deps.neverBundle` is set. Constant declarations and references stay intact. This preserves the original matching rules, including external file paths. Unsupported matchers, conflicting `inputOptions`, and declaration-specific dependency rules leave the pack object unchanged and produce a manual-migration warning.
|
|
52
|
+
|
|
53
|
+
The transform does not evaluate configuration code. Objects with spreads, computed keys, or duplicate keys, and conflicting old and new options require manual review. Dynamic boolean selectors remain unchanged. Unrelated Vite and plugin options remain unchanged. Run `vp pack` after migration to check the result. Node.js requirements, TypeScript module resolution, and programmatic `build()` return values require separate review.
|
|
87
54
|
|
|
88
55
|
## Dependency Rules
|
|
89
56
|
|
|
90
57
|
What happens to each toolchain dependency, at a glance:
|
|
91
58
|
|
|
92
|
-
| Dependency | What happens
|
|
93
|
-
| ------------------------------ |
|
|
94
|
-
| `vite-plus` | Added where the package is migrated; plain ranges re-pinned to the concrete target, directly or through a catalog.
|
|
95
|
-
| `vite` | Existing declarations kept and pointed at the core alias.
|
|
96
|
-
| `vitest` | Removed in the common node-mode case because `vite-plus` provides it transitively. Kept or added only when [directly required](#when-vitest-is-directly-required).
|
|
97
|
-
| `@vitest/*` | Directly installed lockstep packages aligned to the bundled Vitest version (see [Vitest Ecosystem Packages](#vitest-ecosystem-packages)).
|
|
98
|
-
| `@voidzero-dev/vite-plus-test` | Removed everywhere: dependencies, overrides, resolutions, and catalog aliases. Imports are rewritten to the current `vite-plus/test*` surface.
|
|
59
|
+
| Dependency | What happens |
|
|
60
|
+
| ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
61
|
+
| `vite-plus` | Added where the package is migrated; plain ranges re-pinned to the concrete target, directly or through a catalog. |
|
|
62
|
+
| `vite` | Existing declarations kept and pointed at the core alias. pnpm packages that use only `vite-plus` need no new `vite` entry (see [Vite and Overrides](#vite-and-overrides)). |
|
|
63
|
+
| `vitest` | Removed in the common node-mode case because `vite-plus` provides it transitively. Kept or added only when [directly required](#when-vitest-is-directly-required). |
|
|
64
|
+
| `@vitest/*` | Directly installed lockstep packages aligned to the bundled Vitest version (see [Vitest Ecosystem Packages](#vitest-ecosystem-packages)). |
|
|
65
|
+
| `@voidzero-dev/vite-plus-test` | Removed everywhere: dependencies, overrides, resolutions, and catalog aliases. Imports are rewritten to the current `vite-plus/test*` surface. |
|
|
99
66
|
|
|
100
67
|
### Version Selection
|
|
101
68
|
|
|
102
|
-
- `vite-plus` is pinned to the concrete version of the CLI running the
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
|
|
106
|
-
-
|
|
107
|
-
reference. Migration keeps the reference and updates the referenced catalog
|
|
108
|
-
value to the concrete toolchain target.
|
|
109
|
-
- Deliberate protocol pins are preserved: `workspace:`, `file:`, `link:`,
|
|
110
|
-
`npm:`, `github:`, Git URLs, and HTTP URLs.
|
|
111
|
-
- Migration reconciles every workspace package, not only the root manifest.
|
|
112
|
-
Shared overrides and catalogs stay at the workspace root; dependencies that
|
|
113
|
-
provide a peer belong in each package that needs them.
|
|
69
|
+
- `vite-plus` is pinned to the concrete version of the CLI running the migration, never the `latest` dist-tag.
|
|
70
|
+
- The `vite` alias targets `@voidzero-dev/vite-plus-core` from the same Vite+ release.
|
|
71
|
+
- A catalog-backed manifest may contain `catalog:` or a named catalog reference. Migration keeps the reference and updates the referenced catalog value to the concrete toolchain target.
|
|
72
|
+
- Deliberate protocol pins are preserved: `workspace:`, `file:`, `link:`, `npm:`, `github:`, Git URLs, and HTTP URLs.
|
|
73
|
+
- Migration reconciles every workspace package, not only the root manifest. Shared overrides and catalogs stay at the workspace root; dependencies that provide a peer belong in each package that needs them.
|
|
114
74
|
|
|
115
75
|
### Vite and Overrides
|
|
116
76
|
|
|
117
|
-
|
|
118
|
-
pnpm, a package that lists `vite-plus` in `dependencies` or `devDependencies`
|
|
119
|
-
but has no `vite` entry anywhere (`dependencies`, `devDependencies`,
|
|
120
|
-
`optionalDependencies`, or `peerDependencies`) lets pnpm auto-install upstream
|
|
121
|
-
Vite to satisfy Vitest's required `vite` peer, splitting the project across
|
|
122
|
-
separate Vite+, Vite, and Vitest instances. To prevent this, `vp migrate` adds
|
|
123
|
-
the missing `vite` entry to `devDependencies` of every such package; the
|
|
124
|
-
workspace override then redirects it to Vite+ core.
|
|
77
|
+
You can use `vite-plus` in a pnpm package without declaring `vite`. The `vite-plus` package includes a `vite` dependency aliased to its core, which provides Vitest's required peer. Migration keeps the workspace override for other Vite consumers but does not add `vite` to a package solely because it uses `vite-plus`.
|
|
125
78
|
|
|
126
79
|
Related rules:
|
|
127
80
|
|
|
128
|
-
- A direct `vite` declaration is never removed merely because a root override
|
|
129
|
-
exists.
|
|
81
|
+
- A direct `vite` declaration is never removed merely because a root override exists.
|
|
130
82
|
- Plain or stale aliases are normalized; named catalog references are kept.
|
|
131
|
-
- Under pnpm the managed override keys use an explicit `@*` range (`vite@*`,
|
|
132
|
-
|
|
133
|
-
manifest, importer manifests included. A bare key matches any spec, including
|
|
134
|
-
`catalog:`, and `vp up` then rewrites that reference to a concrete version.
|
|
135
|
-
The `@*` range keeps the override on the semver ranges that transitive and
|
|
136
|
-
peer declarations use. It leaves `catalog:` references to the catalog, which
|
|
137
|
-
already resolves them to Vite+ core. Migration re-keys a project that still
|
|
138
|
-
holds the bare key, and keeps its named-catalog choice.
|
|
139
|
-
- The direct-entry rule above is pnpm-specific. Bun mirrors its core alias as
|
|
140
|
-
a direct dependency for its peer resolver, and npm browser-provider layouts
|
|
141
|
-
may need a top-level `vite` edge so nested Vitest packages can resolve
|
|
142
|
-
`vite`.
|
|
83
|
+
- Under pnpm the managed override keys use an explicit `@*` range (`vite@*`, `vitest@*`). pnpm applies an override by replacing the declared spec on every manifest, importer manifests included. A bare key matches any spec, including `catalog:`, and `vp up` then rewrites that reference to a concrete version. The `@*` range keeps the override on the semver ranges that transitive and peer declarations use. It leaves `catalog:` references to the catalog, which already resolves them to Vite+ core. Migration re-keys a project that still holds the bare key, and keeps its named-catalog choice.
|
|
84
|
+
- Bun mirrors its core alias as a direct dependency for its peer resolver, and npm browser-provider layouts may need a top-level `vite` edge so nested Vitest packages can resolve `vite`.
|
|
143
85
|
|
|
144
86
|
### When Vitest Is Directly Required
|
|
145
87
|
|
|
146
|
-
Migration keeps or adds a package-local `vitest` at the exact bundled version
|
|
147
|
-
when any of the following is true:
|
|
88
|
+
Migration keeps or adds a package-local `vitest` at the exact bundled version when any of the following is true:
|
|
148
89
|
|
|
149
|
-
- an installed dependency has a non-optional `vitest` peer, whether exact or a
|
|
150
|
-
range;
|
|
90
|
+
- an installed dependency has a non-optional `vitest` peer, whether exact or a range;
|
|
151
91
|
- the package uses Vitest browser mode or an opt-in browser provider;
|
|
152
92
|
- source or TypeScript configuration retains an upstream `vitest` reference;
|
|
153
93
|
- the package declares `@nuxt/test-utils`; or
|
|
154
|
-
- dependency metadata is unavailable and an existing direct `vitest` might be
|
|
155
|
-
satisfying an unknown required peer.
|
|
94
|
+
- dependency metadata is unavailable and an existing direct `vitest` might be satisfying an unknown required peer.
|
|
156
95
|
|
|
157
|
-
Detection reads installed peer metadata, so integrations such as
|
|
158
|
-
`vite-plugin-gherkin` are handled even though their names do not contain
|
|
159
|
-
`vitest`.
|
|
96
|
+
Detection reads installed peer metadata, so integrations such as `vite-plugin-gherkin` are handled even though their names do not contain `vitest`.
|
|
160
97
|
|
|
161
98
|
When a package qualifies, migration:
|
|
162
99
|
|
|
163
|
-
- adds `vitest` to that package, not indiscriminately to every workspace
|
|
164
|
-
|
|
165
|
-
-
|
|
166
|
-
bundled version; and
|
|
167
|
-
- keeps a matching workspace override or resolution so the graph resolves a
|
|
168
|
-
single Vitest version.
|
|
100
|
+
- adds `vitest` to that package, not indiscriminately to every workspace package;
|
|
101
|
+
- uses the existing catalog reference when supported, otherwise the exact bundled version; and
|
|
102
|
+
- keeps a matching workspace override or resolution so the graph resolves a single Vitest version.
|
|
169
103
|
|
|
170
|
-
A peer declaration alone does not install Vitest. If a surviving
|
|
171
|
-
`peerDependencies.vitest` uses a catalog entry that migration will remove, it
|
|
172
|
-
is resolved to the public peer range first.
|
|
104
|
+
A peer declaration alone does not install Vitest. If a surviving `peerDependencies.vitest` uses a catalog entry that migration will remove, it is resolved to the public peer range first.
|
|
173
105
|
|
|
174
106
|
### Vitest Ecosystem Packages
|
|
175
107
|
|
|
176
|
-
Official current `@vitest/*` packages generally publish in lockstep with
|
|
177
|
-
Vitest. Migration aligns the ones the project directly installs, including
|
|
178
|
-
`@vitest/coverage-v8`, `@vitest/coverage-istanbul`, `@vitest/ui`, and
|
|
179
|
-
`@vitest/web-worker`:
|
|
108
|
+
Official current `@vitest/*` packages generally publish in lockstep with Vitest. Migration aligns the ones the project directly installs, including `@vitest/coverage-v8`, `@vitest/coverage-istanbul`, `@vitest/ui`, and `@vitest/web-worker`:
|
|
180
109
|
|
|
181
|
-
- when the package manager supports catalogs, they are referenced through the
|
|
182
|
-
|
|
183
|
-
preserved, a catalog entry is added for any package that lacks one, and each
|
|
184
|
-
entry is updated to the bundled Vitest version;
|
|
185
|
-
- when catalogs are unsupported (npm, a standalone bun project, or a
|
|
186
|
-
pre-catalog pnpm/Yarn), the concrete bundled version is written instead.
|
|
110
|
+
- when the package manager supports catalogs, they are referenced through the toolchain catalog: an existing `catalog:` / `catalog:<name>` reference is preserved, a catalog entry is added for any package that lacks one, and each entry is updated to the bundled Vitest version;
|
|
111
|
+
- when catalogs are unsupported (npm, a standalone bun project, or a pre-catalog pnpm/Yarn), the concrete bundled version is written instead.
|
|
187
112
|
|
|
188
113
|
Packages that are **not** aligned:
|
|
189
114
|
|
|
190
115
|
- `@vitest/eslint-plugin` follows its own version line;
|
|
191
|
-
- `@vitest/coverage-c8` stopped at an older release and has no Vitest 4
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
`@vitest/browser-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
bundled Vitest version (or written concretely when catalogs are unsupported),
|
|
202
|
-
and its `playwright` or `webdriverio` peer is installed alongside.
|
|
203
|
-
|
|
204
|
-
Providers are detected before imports are rewritten. This covers legacy
|
|
205
|
-
projects that aliased `vitest` to `@voidzero-dev/vite-plus-test` and import
|
|
206
|
-
from `vitest/browser-<provider>`, `vitest/browser/providers/<provider>`, or
|
|
207
|
-
`vitest/plugins/browser-<provider>`: those imports still install the
|
|
208
|
-
corresponding `@vitest/browser-playwright` or `@vitest/browser-webdriverio`
|
|
209
|
-
dependency and its framework peer.
|
|
210
|
-
|
|
211
|
-
Object-valued nested npm and Bun overrides are preserved: they are
|
|
212
|
-
user-defined scopes rather than scalar version pins.
|
|
116
|
+
- `@vitest/coverage-c8` stopped at an older release and has no Vitest 4 version; and
|
|
117
|
+
- third-party `vitest-*` integrations keep their own compatible versions, though their required Vitest peer may still trigger [direct provisioning](#when-vitest-is-directly-required).
|
|
118
|
+
|
|
119
|
+
For browser mode, Vite+ bundles the base `@vitest/browser` runtime and `@vitest/browser-preview`; migration removes their direct dependency entries. The Playwright provider stays opt-in. Migration uses the bundled Vitest version for `@vitest/browser-playwright`, through the preferred toolchain catalog or the dependency entry, and installs its `playwright` peer alongside.
|
|
120
|
+
|
|
121
|
+
Migration detects Playwright usage before it rewrites imports, including legacy `vitest/browser-playwright`, `vitest/browser/providers/playwright`, and `vitest/plugins/browser-playwright` aliases.
|
|
122
|
+
|
|
123
|
+
`vp migrate` restores removed Vite+ WebDriverIO aliases to `@vitest/browser-webdriverio` and adds `^5.0.0` if the provider is missing. It upgrades older versions, narrows ranges that allow versions below `5.0.0`, updates referenced catalog entries, and removes overrides that force an older provider. Versions and ranges that meet the minimum stay unchanged. Migration ensures the required `webdriverio` peer and adds an `@vitest/browser` override matching bundled Vitest (`resolutions` for Yarn). You manage later community provider upgrades. See [Community WebDriverIO provider](./vitest-v5.md#community-webdriverio-provider).
|
|
124
|
+
|
|
125
|
+
Object-valued nested npm and Bun overrides are preserved: they are user-defined scopes rather than scalar version pins.
|
|
213
126
|
|
|
214
127
|
## Source Rewrite Rules
|
|
215
128
|
|
|
216
129
|
### `vite` Imports
|
|
217
130
|
|
|
218
|
-
`vite` and `vite/*` imports are rewritten to `vite-plus` **only in config
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
(including in `typeof import('vite')` type positions) can break.
|
|
227
|
-
- An unrewritten `vite` import still resolves through the
|
|
228
|
-
`@voidzero-dev/vite-plus-core` alias in a Vite+ project.
|
|
229
|
-
|
|
230
|
-
Plugin packages (an unscoped name starting with `vite-plugin-` or
|
|
231
|
-
`unplugin-`, or `vite` in `peerDependencies`/`dependencies`) skip the rewrite
|
|
232
|
-
even in config files. Only the `vite` specifier is in scope for this rule.
|
|
233
|
-
|
|
234
|
-
`declare module 'vite'` augmentations follow the same rule and are preserved
|
|
235
|
-
outside config files. Through the core alias they reach the same
|
|
236
|
-
`@voidzero-dev/vite-plus-core` module whose `UserConfig` types `defineConfig`
|
|
237
|
-
from `vite-plus`, so they keep working after migration; `vite-plus` itself
|
|
238
|
-
exports no `UserConfig` symbol, so a rewritten `declare module 'vite-plus'`
|
|
239
|
-
augmentation would merge with nothing. Extensions aimed at `vite-plus`'s own
|
|
240
|
-
surface are written against `vite-plus` by hand.
|
|
131
|
+
`vite` and `vite/*` imports are rewritten to `vite-plus` **only in config entry files**: `vite.config.*`, `vitest.config.*`, and any config file the migration resolved. Every other file keeps its `vite` imports, for two reasons:
|
|
132
|
+
|
|
133
|
+
- `vite-plus` is not a guaranteed superset of Vite's exposed surface. It owns only `defineConfig`, `defineProject`, and `lazyPlugins`, so rewriting a pass-through symbol such as `createBuilder` or `loadConfigFromFile` (including in `typeof import('vite')` type positions) can break.
|
|
134
|
+
- An unrewritten `vite` import still resolves through the `@voidzero-dev/vite-plus-core` alias in a Vite+ project.
|
|
135
|
+
|
|
136
|
+
Plugin packages (an unscoped name starting with `vite-plugin-` or `unplugin-`, or `vite` in `peerDependencies`/`dependencies`) skip the rewrite even in config files. Only the `vite` specifier is in scope for this rule.
|
|
137
|
+
|
|
138
|
+
`declare module 'vite'` augmentations follow the same rule and are preserved outside config files. Through the core alias they reach the same `@voidzero-dev/vite-plus-core` module whose `UserConfig` types `defineConfig` from `vite-plus`, so they keep working after migration; `vite-plus` itself exports no `UserConfig` symbol, so a rewritten `declare module 'vite-plus'` augmentation would merge with nothing. Extensions aimed at `vite-plus`'s own surface are written against `vite-plus` by hand.
|
|
241
139
|
|
|
242
140
|
### `vitest` and Browser Imports
|
|
243
141
|
|
|
244
|
-
- Ordinary `vitest` and `vitest/*` imports are rewritten to
|
|
245
|
-
|
|
246
|
-
-
|
|
247
|
-
rewrite so their optional provider dependencies are not lost.
|
|
248
|
-
- Scoped `@vitest/browser*` imports are rewritten to the corresponding
|
|
249
|
-
`vite-plus/test/browser*` exports, provisioning opt-in providers when
|
|
250
|
-
needed.
|
|
142
|
+
- Ordinary `vitest` and `vitest/*` imports are rewritten to `vite-plus/test*`.
|
|
143
|
+
- Legacy Playwright and WebdriverIO provider imports are detected before this rewrite so their optional provider dependencies are not lost.
|
|
144
|
+
- Scoped `@vitest/browser*` imports are rewritten to the corresponding `vite-plus/test/browser*` exports, provisioning opt-in providers when needed.
|
|
251
145
|
- Existing `vite-plus/test*` imports are left unchanged.
|
|
252
146
|
|
|
253
147
|
### Oxlint JS Plugin Imports
|
|
254
148
|
|
|
255
|
-
Vite+ bundles Oxlint, so the migration removes a standalone `oxlint`
|
|
256
|
-
dependency. Your own Oxlint JS plugins import the authoring API by name. That
|
|
257
|
-
import stops resolving when the dependency goes away. `vp lint` then fails to
|
|
258
|
-
load the plugin.
|
|
149
|
+
Vite+ bundles Oxlint, so the migration removes a standalone `oxlint` dependency. Your own Oxlint JS plugins import the authoring API by name. That import stops resolving when the dependency goes away. `vp lint` then fails to load the plugin.
|
|
259
150
|
|
|
260
151
|
The migration repoints those imports at Vite+:
|
|
261
152
|
|
|
262
153
|
- It rewrites `@oxlint/plugins` to `vite-plus/lint/plugins`.
|
|
263
154
|
- It rewrites `oxlint/plugins-dev` to `vite-plus/lint/plugins-dev`.
|
|
264
|
-
- It rewrites `oxlint` to `vite-plus/lint/plugins` when the import names a
|
|
265
|
-
binding from the authoring API, such as `defineRule`, `definePlugin`, or
|
|
266
|
-
`Context`. Older Oxlint releases exposed that API from the main entry. It now
|
|
267
|
-
lives in `@oxlint/plugins`.
|
|
155
|
+
- It rewrites `oxlint` to `vite-plus/lint/plugins` when the import names a binding from the authoring API, such as `defineRule`, `definePlugin`, or `Context`. Older Oxlint releases exposed that API from the main entry. It now lives in `@oxlint/plugins`.
|
|
268
156
|
|
|
269
|
-
An import through Vite+ always matches the version of Oxlint that Vite+
|
|
270
|
-
bundles. You pin no second package. The import also resolves from any package
|
|
271
|
-
that already depends on `vite-plus`.
|
|
157
|
+
An import through Vite+ always matches the version of Oxlint that Vite+ bundles. You pin no second package. The import also resolves from any package that already depends on `vite-plus`.
|
|
272
158
|
|
|
273
159
|
The migration leaves three forms alone:
|
|
274
160
|
|
|
275
|
-
- `oxlint` imports that name only the config surface, such as `defineConfig`,
|
|
276
|
-
|
|
277
|
-
standalone package.
|
|
278
|
-
- Default and namespace `oxlint` imports. They name no binding, so the
|
|
279
|
-
migration cannot tell the two surfaces apart.
|
|
161
|
+
- `oxlint` imports that name only the config surface, such as `defineConfig`, `OxlintConfig`, or `OxlintOverride`. These still resolve against the standalone package.
|
|
162
|
+
- Default and namespace `oxlint` imports. They name no binding, so the migration cannot tell the two surfaces apart.
|
|
280
163
|
- Bare side-effect `oxlint` imports, for the same reason.
|
|
281
164
|
|
|
282
|
-
The migration also skips a package that declares `oxlint` or `@oxlint/plugins`
|
|
283
|
-
in `dependencies` or `peerDependencies`, or `@oxlint/plugins` in
|
|
284
|
-
`optionalDependencies`. These dependencies can supply a published Oxlint plugin.
|
|
285
|
-
Its consumers may not run Vite+.
|
|
165
|
+
The migration also skips a package that declares `oxlint` or `@oxlint/plugins` in `dependencies` or `peerDependencies`, or `@oxlint/plugins` in `optionalDependencies`. These dependencies can supply a published Oxlint plugin. Its consumers may not run Vite+.
|
|
286
166
|
|
|
287
|
-
The cleanup retains a development dependency on `@oxlint/plugins` when source,
|
|
288
|
-
package import aliases, or built plugins still reference it. This includes
|
|
289
|
-
ignored output in directories such as `dist`, `build`, and `out`.
|
|
167
|
+
The cleanup retains a development dependency on `@oxlint/plugins` when source, package import aliases, or built plugins still reference it. This includes ignored output in directories such as `dist`, `build`, and `out`.
|
|
290
168
|
|
|
291
169
|
### What Is Never Rewritten
|
|
292
170
|
|
|
293
|
-
- `declare module 'vitest'` and `declare module '@vitest/browser*'`: module
|
|
294
|
-
|
|
295
|
-
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
[When Vitest Is Directly Required](#when-vitest-is-directly-required)).
|
|
299
|
-
- In a package that declares `@nuxt/test-utils`, every `vitest` and
|
|
300
|
-
`vitest/*` module specifier is preserved package-wide: the Nuxt transform
|
|
301
|
-
requires the upstream identity and can otherwise inject a duplicate `vi`
|
|
302
|
-
import. This exception does not apply to sibling packages or to scoped
|
|
303
|
-
`@vitest/browser*` imports.
|
|
304
|
-
|
|
305
|
-
The `prefer-vite-plus-imports` lint rule follows the same Nuxt exception, so
|
|
306
|
-
lint autofix preserves these imports too.
|
|
171
|
+
- `declare module 'vitest'` and `declare module '@vitest/browser*'`: module augmentation must retain the upstream module identity.
|
|
172
|
+
- References that stay behind, such as `compilerOptions.types`, `require.resolve`, `import.meta.resolve`, and `vitest/package.json`, require package-local Vitest (see [When Vitest Is Directly Required](#when-vitest-is-directly-required)).
|
|
173
|
+
- In a package that declares `@nuxt/test-utils`, every `vitest` and `vitest/*` module specifier is preserved package-wide: the Nuxt transform requires the upstream identity and can otherwise inject a duplicate `vi` import. This exception does not apply to sibling packages or to scoped `@vitest/browser*` imports.
|
|
174
|
+
|
|
175
|
+
The `prefer-vite-plus-imports` lint rule follows the same Nuxt exception, so lint autofix preserves these imports too.
|
|
307
176
|
|
|
308
177
|
## Package Script Rewrite Rules
|
|
309
178
|
|
|
310
|
-
Migration rewrites commands provided by the Vite+ toolchain in `package.json`
|
|
311
|
-
scripts while preserving their arguments:
|
|
179
|
+
Migration rewrites commands provided by the Vite+ toolchain in `package.json` scripts while preserving their arguments:
|
|
312
180
|
|
|
313
181
|
| Before | After |
|
|
314
182
|
| ------------- | ------------------------------------------- |
|
|
@@ -322,10 +190,7 @@ scripts while preserving their arguments:
|
|
|
322
190
|
| `prettier` | `vp fmt`, when its optional migration runs |
|
|
323
191
|
| `tsup` | `vp pack`, when its optional migration runs |
|
|
324
192
|
|
|
325
|
-
For commands launched through `bunx`, migration preserves `bunx` and its
|
|
326
|
-
`--bun` flag (keeping the user's chosen runtime) and rewrites only the managed
|
|
327
|
-
command. This also works when `bunx` follows a command-launcher delimiter such
|
|
328
|
-
as `run` or `--`:
|
|
193
|
+
For commands launched through `bunx`, migration preserves `bunx` and its `--bun` flag (keeping the user's chosen runtime) and rewrites only the managed command. This also works when `bunx` follows a command-launcher delimiter such as `run` or `--`:
|
|
329
194
|
|
|
330
195
|
| Before | After |
|
|
331
196
|
| ------------------------------------------------------- | -------------------------------------------------------- |
|
|
@@ -338,112 +203,54 @@ Unrelated `bunx` commands and other package-executor forms remain unchanged.
|
|
|
338
203
|
|
|
339
204
|
## Continuous Integration Rules
|
|
340
205
|
|
|
341
|
-
Migration replaces exact `voidzero-dev/setup-vp@v1` references in GitHub
|
|
342
|
-
Actions workflows and composite actions under `.github` with the latest exact
|
|
343
|
-
`setup-vp` release known to that Vite+ version. The frozen `v1` tag does not
|
|
344
|
-
receive new releases. Existing exact versions and commit SHAs are left
|
|
345
|
-
unchanged.
|
|
206
|
+
Migration replaces exact `voidzero-dev/setup-vp@v1` references in GitHub Actions workflows and composite actions under `.github` with the latest exact `setup-vp` release known to that Vite+ version. The frozen `v1` tag does not receive new releases. Existing exact versions and commit SHAs are left unchanged.
|
|
346
207
|
|
|
347
208
|
## Node.js Version Rules
|
|
348
209
|
|
|
349
|
-
Migration converts legacy Node.js version-manager files to `.node-version`,
|
|
350
|
-
the format Vite+ reads. On an existing Vite+ project this conversion is part
|
|
351
|
-
of the full setup bucket, so it runs with `vp migrate --full`; fresh
|
|
352
|
-
migrations run it unconditionally.
|
|
210
|
+
Migration converts legacy Node.js version-manager files to `.node-version`, the format Vite+ reads. On an existing Vite+ project this conversion is part of the full setup bucket, so it runs with `vp migrate --full`; fresh migrations run it unconditionally.
|
|
353
211
|
|
|
354
|
-
- `.nvmrc` and Volta `volta.node` pins are converted to `.node-version`. An
|
|
355
|
-
|
|
356
|
-
- When `.nvmrc` is removed, any `actions/setup-node` `node-version-file:
|
|
357
|
-
.nvmrc` reference in `.github/workflows/*.{yml,yaml}` and composite actions
|
|
358
|
-
under `.github` (`.github/**/action.{yml,yaml}`) is repointed to
|
|
359
|
-
`.node-version` so CI does not fail with "node version file ... does not
|
|
360
|
-
exist".
|
|
212
|
+
- `.nvmrc` and Volta `volta.node` pins are converted to `.node-version`. An existing `.node-version` is kept.
|
|
213
|
+
- When `.nvmrc` is removed, any `actions/setup-node` `node-version-file: .nvmrc` reference in `.github/workflows/*.{yml,yaml}` and composite actions under `.github` (`.github/**/action.{yml,yaml}`) is repointed to `.node-version` so CI does not fail with "node version file ... does not exist".
|
|
361
214
|
|
|
362
215
|
## Package-Manager Rules
|
|
363
216
|
|
|
364
217
|
### pnpm
|
|
365
218
|
|
|
366
|
-
**Root settings location.** pnpm 10.6.2+ uses `pnpm-workspace.yaml` as the
|
|
367
|
-
|
|
368
|
-
`package.json#pnpm`
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
-
|
|
375
|
-
|
|
376
|
-
`package.json#pnpm` win at conflicting scalar leaves, while workspace-only
|
|
377
|
-
sibling entries are preserved.
|
|
378
|
-
- Before pnpm 10.6.2, these settings stay in `package.json#pnpm`. (Workspace
|
|
379
|
-
settings support arrived incrementally: 10.5.0 in general, 10.5.1 for
|
|
380
|
-
overrides, 10.6.2 for `peerDependencyRules`. pnpm 11 no longer reads the
|
|
381
|
-
legacy `package.json` settings.)
|
|
382
|
-
|
|
383
|
-
**Catalogs.** Catalogs are a separate feature, supported from pnpm 9.5.0,
|
|
384
|
-
independent of the settings boundary above. Even below 10.6.2, where
|
|
385
|
-
overrides stay in `package.json#pnpm`, migration still rewrites the workspace
|
|
386
|
-
catalog off stale wrapper aliases and keeps `catalog:` overrides as
|
|
387
|
-
references rather than inlining them to concrete versions.
|
|
388
|
-
|
|
389
|
-
- Dependency references, default and named catalogs, overrides, and
|
|
390
|
-
`peerDependencyRules` are kept consistent with each other.
|
|
391
|
-
- pnpm accepts the logical default catalog as either top-level `catalog` or
|
|
392
|
-
`catalogs.default`, but not both. Migration preserves the existing form and
|
|
393
|
-
never creates the other form beside it.
|
|
394
|
-
- When an existing named catalog already owns `vite-plus`, `vite`, or
|
|
395
|
-
`vitest`, migration reuses that managed toolchain catalog for newly added
|
|
396
|
-
dependencies and overrides. It creates a top-level default catalog only
|
|
397
|
-
when no managed or default catalog can be reused.
|
|
219
|
+
**Root settings location.** pnpm 10.6.2+ uses `pnpm-workspace.yaml` as the single source for supported root settings. Migration moves recognized `package.json#pnpm` fields there, including overrides, peer rules, patch settings, package extensions, architecture and build policy, audit/update configuration, and configuration dependencies. It removes the `pnpm` object when it becomes empty and preserves unknown keys that may belong to other tooling.
|
|
220
|
+
|
|
221
|
+
- When both files define the same migrated setting, object entries are merged recursively and unique array entries are retained. Values from `package.json#pnpm` win at conflicting scalar leaves, while workspace-only sibling entries are preserved.
|
|
222
|
+
- Before pnpm 10.6.2, these settings stay in `package.json#pnpm`. (Workspace settings support arrived incrementally: 10.5.0 in general, 10.5.1 for overrides, 10.6.2 for `peerDependencyRules`. pnpm 11 no longer reads the legacy `package.json` settings.)
|
|
223
|
+
|
|
224
|
+
**Catalogs.** Catalogs are a separate feature, supported from pnpm 9.5.0, independent of the settings boundary above. Even below 10.6.2, where overrides stay in `package.json#pnpm`, migration still rewrites the workspace catalog off stale wrapper aliases and keeps `catalog:` overrides as references rather than inlining them to concrete versions.
|
|
225
|
+
|
|
226
|
+
- Dependency references, default and named catalogs, overrides, and `peerDependencyRules` are kept consistent with each other.
|
|
227
|
+
- pnpm accepts the logical default catalog as either top-level `catalog` or `catalogs.default`, but not both. Migration preserves the existing form and never creates the other form beside it.
|
|
228
|
+
- When an existing named catalog already owns `vite-plus`, `vite`, or `vitest`, migration reuses that managed toolchain catalog for newly added dependencies and overrides. It creates a top-level default catalog only when no managed or default catalog can be reused.
|
|
398
229
|
|
|
399
230
|
**Other rules.**
|
|
400
231
|
|
|
401
|
-
-
|
|
402
|
-
dependency (see [Vite and Overrides](#vite-and-overrides)).
|
|
232
|
+
- Packages that use `vite-plus` without a direct `vite` declaration keep that layout (see [Vite and Overrides](#vite-and-overrides)).
|
|
403
233
|
- Unrelated selector-shaped and object-valued overrides are preserved.
|
|
404
234
|
|
|
405
235
|
### npm
|
|
406
236
|
|
|
407
|
-
- Direct aliases are normalized before the matching override is added, so npm
|
|
408
|
-
|
|
409
|
-
-
|
|
410
|
-
and lockfile state is removed before reinstalling.
|
|
411
|
-
- Opt-in browser-provider layouts get a top-level `vite` edge when nested
|
|
412
|
-
Vitest packages otherwise cannot resolve it.
|
|
237
|
+
- Direct aliases are normalized before the matching override is added, so npm does not fail with `EOVERRIDE`.
|
|
238
|
+
- When a real Vite installation changes to the core alias, stale Vite install and lockfile state is removed before reinstalling.
|
|
239
|
+
- Opt-in browser-provider layouts get a top-level `vite` edge when nested Vitest packages otherwise cannot resolve it.
|
|
413
240
|
|
|
414
241
|
### Yarn
|
|
415
242
|
|
|
416
|
-
- Vite+ does not support Plug'n'Play. Migration detects explicit and implicit
|
|
417
|
-
PnP and converts the project to `nodeLinker: node-modules`, preserving all
|
|
418
|
-
unrelated `.yarnrc.yml` settings. `--no-interactive` accepts the
|
|
419
|
-
conversion; a process-level `YARN_NODE_LINKER=pnp` must be fixed by the
|
|
420
|
-
caller.
|
|
243
|
+
- Vite+ does not support Plug'n'Play. Migration detects explicit and implicit PnP and converts the project to `nodeLinker: node-modules`, preserving all unrelated `.yarnrc.yml` settings. `--no-interactive` accepts the conversion; a process-level `YARN_NODE_LINKER=pnp` must be fixed by the caller.
|
|
421
244
|
- Catalog references and user hoisting settings are preserved.
|
|
422
|
-
- Migration avoids split Vitest copies under workspace hoisting isolation: it
|
|
423
|
-
applies a package-level fix where possible and warns when the isolation
|
|
424
|
-
cannot be changed safely.
|
|
245
|
+
- Migration avoids split Vitest copies under workspace hoisting isolation: it applies a package-level fix where possible and warns when the isolation cannot be changed safely.
|
|
425
246
|
|
|
426
247
|
### Bun
|
|
427
248
|
|
|
428
|
-
- Bun catalogs only resolve inside a workspace (a root `package.json` with a
|
|
429
|
-
|
|
430
|
-
workspace catalog locations and named catalog references are preserved. A
|
|
431
|
-
standalone (single-package) bun project keeps concrete specs and gets no
|
|
432
|
-
catalog field, because `bun install` cannot resolve `catalog:` outside a
|
|
433
|
-
workspace.
|
|
434
|
-
- The core alias is mirrored as a direct `vite` dependency so Bun sees the
|
|
435
|
-
peer provider before applying overrides.
|
|
249
|
+
- Bun catalogs only resolve inside a workspace (a root `package.json` with a non-empty `workspaces`). In a bun workspace, existing top-level or workspace catalog locations and named catalog references are preserved. A standalone (single-package) bun project keeps concrete specs and gets no catalog field, because `bun install` cannot resolve `catalog:` outside a workspace.
|
|
250
|
+
- The core alias is mirrored as a direct `vite` dependency so Bun sees the peer provider before applying overrides.
|
|
436
251
|
|
|
437
252
|
## After the Migration
|
|
438
253
|
|
|
439
|
-
- Each Vite config is inspected for Rolldown-incompatible patterns (such as
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
- Dependencies are reinstalled once to refresh the lockfile. If installation
|
|
443
|
-
fails, migration reports the error and exits with a nonzero status.
|
|
444
|
-
- After a successful migration, `vp fmt` runs on the files changed during
|
|
445
|
-
migration, excluding paths that were already dirty in the Git worktree.
|
|
446
|
-
Oxfmt selects the supported formats; non-Git projects retain full-project
|
|
447
|
-
formatting. Formatting is skipped while the project still uses Prettier. A
|
|
448
|
-
formatter failure is reported as a warning so the migration result and the
|
|
449
|
-
manual formatting command remain available.
|
|
254
|
+
- Each Vite config is inspected for Rolldown-incompatible patterns (such as `manualChunks`). Anything found is reported as a warning; the config is not changed.
|
|
255
|
+
- Dependencies are reinstalled once to refresh the lockfile. If installation fails, migration reports the error and exits with a nonzero status.
|
|
256
|
+
- After a successful migration, `vp fmt` runs on the files changed during migration, excluding paths that were already dirty in the Git worktree. Oxfmt selects the supported formats; non-Git projects retain full-project formatting. Formatting is skipped while the project still uses Prettier. A formatter failure is reported as a warning so the migration result and the manual formatting command remain available.
|