diff --git a/.github/scripts/__tests__/upgrade-deps.spec.ts b/.github/scripts/__tests__/upgrade-deps.spec.ts
new file mode 100644
index 0000000000..a9cd1a258b
--- /dev/null
+++ b/.github/scripts/__tests__/upgrade-deps.spec.ts
@@ -0,0 +1,71 @@
+///
+
+import { copyFileSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
+import { tmpdir } from 'node:os';
+import { dirname, join, resolve } from 'node:path';
+
+import { expect, test, vi } from 'vitest';
+
+test('upgrades lint-staged across major versions and includes it in upgrade metadata', async ({
+ onTestFinished,
+}) => {
+ const root = resolve(import.meta.dirname, '../../..');
+ const tempDir = mkdtempSync(join(tmpdir(), 'vite-plus-upgrade-deps-'));
+ const metaDir = join(tempDir, 'meta');
+ onTestFinished(() => {
+ vi.restoreAllMocks();
+ vi.unstubAllGlobals();
+ vi.unstubAllEnvs();
+ vi.resetModules();
+ rmSync(tempDir, { recursive: true, force: true });
+ });
+
+ for (const file of [
+ 'pnpm-workspace.yaml',
+ 'packages/tools/.upstream-versions.json',
+ 'packages/cli/src/utils/constants.ts',
+ ]) {
+ mkdirSync(dirname(join(tempDir, file)), { recursive: true });
+ copyFileSync(join(root, file), join(tempDir, file));
+ }
+ const workspacePath = join(tempDir, 'pnpm-workspace.yaml');
+ writeFileSync(
+ workspacePath,
+ readFileSync(workspacePath, 'utf8').replace(/ lint-staged: .+/, ' lint-staged: ^16.2.6'),
+ );
+
+ vi.spyOn(process, 'cwd').mockReturnValue(tempDir);
+ vi.spyOn(console, 'log').mockImplementation(() => {});
+ vi.stubEnv('UPGRADE_DEPS_META_DIR', metaDir);
+ vi.stubGlobal('fetch', async (url: string) => {
+ if (url.startsWith('https://api.github.com/repos/')) {
+ return Response.json([{ name: 'v1.2.3', commit: { sha: 'a'.repeat(40) } }]);
+ }
+ if (url === 'https://registry.npmjs.org/vitest') {
+ return Response.json({ versions: { '4.1.11': {}, '5.0.0': {} } });
+ }
+ if (url === 'https://registry.npmjs.org/@tsdown/css/latest') {
+ return Response.json({ dependencies: { lightningcss: '^1.33.0' } });
+ }
+ if (url === 'https://registry.npmjs.org/lint-staged/latest') {
+ return Response.json({ version: '17.5.1' });
+ }
+ if (url.startsWith('https://registry.npmjs.org/') && url.endsWith('/latest')) {
+ return Response.json({ version: '1.2.3' });
+ }
+ throw new Error(`Unexpected request: ${url}`);
+ });
+
+ vi.resetModules();
+ await import('../upgrade-deps.ts');
+
+ expect(readFileSync(workspacePath, 'utf8')).toContain('\n lint-staged: ^17.5.1\n');
+ const versions = JSON.parse(readFileSync(join(metaDir, 'versions.json'), 'utf8'));
+ expect(versions['lint-staged']).toEqual({ old: '16.2.6', new: '17.5.1' });
+ expect(readFileSync(join(metaDir, 'commit-message.txt'), 'utf8')).toContain(
+ '- lint-staged: 16.2.6 -> 17.5.1',
+ );
+ expect(readFileSync(join(metaDir, 'pr-body.md'), 'utf8')).toContain(
+ '| `lint-staged` | `16.2.6` | `17.5.1` |',
+ );
+});
diff --git a/.github/scripts/upgrade-deps.ts b/.github/scripts/upgrade-deps.ts
index acc5a6e633..feeded4c71 100644
--- a/.github/scripts/upgrade-deps.ts
+++ b/.github/scripts/upgrade-deps.ts
@@ -50,6 +50,7 @@ type PnpmWorkspaceVersions = {
vitest: string;
tsdown: string;
lightningcss: string;
+ lintStaged: string;
oxcNodeCli: string;
oxcNodeCore: string;
oxfmt: string;
@@ -278,6 +279,12 @@ async function updatePnpmWorkspace(versions: PnpmWorkspaceVersions): Promise)
-✔ Running tasks for staged files...
-✔ Applying modifications from tasks...
-✔ Cleaning up temporary files...
+⋯ Backing up original state…
+✔ Done backing up original state ()!
+⋯ Running tasks for staged files…
+ *.txt — 1 file
+ ⋯ vpt print linted
+
+✔ vpt print linted
+
+✔ Done running tasks for staged files!
+⋯ Staging changes from tasks…
+✔ Done staging changes from tasks!
+⋯ Cleaning up temporary files…
+✔ Done cleaning up temporary files!
→ vpt print linted:
linted /a.txt
diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/fail.cjs b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/fail.cjs
new file mode 100644
index 0000000000..6cee2e1e79
--- /dev/null
+++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/fail.cjs
@@ -0,0 +1 @@
+process.exit(1);
diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/file.txt b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/file.txt
new file mode 100644
index 0000000000..4b48deed3a
--- /dev/null
+++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/file.txt
@@ -0,0 +1 @@
+original
diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/package.json b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/package.json
new file mode 100644
index 0000000000..71a678f6fe
--- /dev/null
+++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "command-staged-no-stash-restore",
+ "private": true,
+ "type": "module"
+}
diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/snapshots.toml b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/snapshots.toml
new file mode 100644
index 0000000000..833701b6a6
--- /dev/null
+++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/snapshots.toml
@@ -0,0 +1,16 @@
+[[case]]
+name = "command_staged_no_stash_restore"
+vp = ["local", "global"]
+comment = "A failed task with --no-stash must restore the unstaged part of a partially staged file."
+steps = [
+ { argv = ["git", "init"], snapshot = false },
+ { argv = ["git", "add", "-A"], snapshot = false },
+ { argv = ["git", "-c", "user.name=Vite Plus", "-c", "user.email=vite-plus@example.com", "commit", "-m", "init"], snapshot = false },
+ { argv = ["vpt", "write-file", "file.txt", "staged\n"], snapshot = false },
+ { argv = ["git", "add", "file.txt"], snapshot = false },
+ { argv = ["vpt", "write-file", "file.txt", "staged\nunstaged\n"], snapshot = false },
+ { argv = ["vp", "staged", "--no-stash", "--quiet"], continue-on-failure = true },
+ { argv = ["vpt", "print-file", "file.txt"], comment = "The working tree retains both staged and unstaged changes.", continue-on-failure = true },
+ { argv = ["git", "show", ":file.txt"], comment = "The index retains only the staged change." },
+ { argv = ["git", "stash", "list"], comment = "No backup stash is created." },
+]
diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/snapshots/command_staged_no_stash_restore.global.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/snapshots/command_staged_no_stash_restore.global.md
new file mode 100644
index 0000000000..3c19ba8675
--- /dev/null
+++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/snapshots/command_staged_no_stash_restore.global.md
@@ -0,0 +1,56 @@
+# command_staged_no_stash_restore
+
+A failed task with --no-stash must restore the unstaged part of a partially staged file.
+
+## `git init`
+
+
+## `git add -A`
+
+
+## `git -c 'user.name=Vite Plus' -c user.email=vite-plus@example.com commit -m init`
+
+
+## `vpt write-file file.txt 'staged
+'`
+
+
+## `git add file.txt`
+
+
+## `vpt write-file file.txt 'staged
+unstaged
+'`
+
+
+## `vp staged --no-stash --quiet`
+
+**Exit code:** 1
+
+```
+✖ node fail.cjs
+```
+
+## `vpt print-file file.txt`
+
+The working tree retains both staged and unstaged changes.
+
+```
+staged
+unstaged
+```
+
+## `git show :file.txt`
+
+The index retains only the staged change.
+
+```
+staged
+```
+
+## `git stash list`
+
+No backup stash is created.
+
+```
+```
diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/snapshots/command_staged_no_stash_restore.local.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/snapshots/command_staged_no_stash_restore.local.md
new file mode 100644
index 0000000000..3c19ba8675
--- /dev/null
+++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/snapshots/command_staged_no_stash_restore.local.md
@@ -0,0 +1,56 @@
+# command_staged_no_stash_restore
+
+A failed task with --no-stash must restore the unstaged part of a partially staged file.
+
+## `git init`
+
+
+## `git add -A`
+
+
+## `git -c 'user.name=Vite Plus' -c user.email=vite-plus@example.com commit -m init`
+
+
+## `vpt write-file file.txt 'staged
+'`
+
+
+## `git add file.txt`
+
+
+## `vpt write-file file.txt 'staged
+unstaged
+'`
+
+
+## `vp staged --no-stash --quiet`
+
+**Exit code:** 1
+
+```
+✖ node fail.cjs
+```
+
+## `vpt print-file file.txt`
+
+The working tree retains both staged and unstaged changes.
+
+```
+staged
+unstaged
+```
+
+## `git show :file.txt`
+
+The index retains only the staged change.
+
+```
+staged
+```
+
+## `git stash list`
+
+No backup stash is created.
+
+```
+```
diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/vite.config.ts b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/vite.config.ts
new file mode 100644
index 0000000000..cf48a2c048
--- /dev/null
+++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_no_stash_restore/vite.config.ts
@@ -0,0 +1,5 @@
+export default {
+ staged: {
+ '*.txt': 'node fail.cjs',
+ },
+};
diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_with_config/snapshots/command_staged_with_config.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_with_config/snapshots/command_staged_with_config.md
index 93d3225ae5..f43d6670d4 100644
--- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_with_config/snapshots/command_staged_with_config.md
+++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_staged_with_config/snapshots/command_staged_with_config.md
@@ -24,10 +24,19 @@ append foo (write-file with the full appended content)
should succeed with staged .ts files
```
-✔ Backed up original state in git stash ()
-✔ Running tasks for staged files...
-✔ Applying modifications from tasks...
-✔ Cleaning up temporary files...
+⋯ Backing up original state…
+✔ Done backing up original state ()!
+⋯ Running tasks for staged files…
+ *.ts — 1 file
+ ⋯ vp check --fix
+
+✔ vp check --fix
+
+✔ Done running tasks for staged files!
+⋯ Staging changes from tasks…
+✔ Done staging changes from tasks!
+⋯ Cleaning up temporary files…
+✔ Done cleaning up temporary files!
```
## `git add -A`
@@ -72,15 +81,20 @@ should fail when staged .js file has lint errors
**Exit code:** 1
```
-✔ Backed up original state in git stash ()
-⚠ Running tasks for staged files...
- ❯ Config object — 1 file
- ↓ *.ts — no files
- ❯ *.js — 1 file
- ✖ vp lint [FAILED]
-↓ Skipped because of errors from tasks.
-✔ Reverting to original state because of errors...
-✔ Cleaning up temporary files...
+⋯ Backing up original state…
+✔ Done backing up original state ()!
+⋯ Running tasks for staged files…
+ *.js — 1 file
+ ⋯ vp lint
+
+✖ vp lint
+
+✖ Failed to run tasks for staged files!
+↓ Skipped staging changes from tasks…
+⋯ Reverting to original state because of errors…
+✔ Done reverting to original state!
+⋯ Cleaning up temporary files…
+✔ Done cleaning up temporary files!
✖ vp lint:
diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/redact.rs b/crates/vp_cli_snapshots/tests/cli_snapshots/redact.rs
index 5cc9576271..cff1c8f647 100644
--- a/crates/vp_cli_snapshots/tests/cli_snapshots/redact.rs
+++ b/crates/vp_cli_snapshots/tests/cli_snapshots/redact.rs
@@ -278,8 +278,9 @@ static YARN_TELEMETRY_RE: LazyLock =
LazyLock::new(|| regex::Regex::new(r"(?m)^\u{27A4} YN0065: [^\n]*\n(?:[ \t]*\n)*").unwrap());
// `vp staged` reports the backup stash it created; the short hash covers a
// commit of the working tree at run time, so it can never be stable.
-static STASH_HASH_RE: LazyLock =
- LazyLock::new(|| regex::Regex::new(r"(git stash \()[0-9a-f]+(\))").unwrap());
+static STASH_HASH_RE: LazyLock = LazyLock::new(|| {
+ regex::Regex::new(r"((?:git stash|Done backing up original state) \()[0-9a-f]+(\))").unwrap()
+});
// Package managers emit blank separator lines whose count races their own
// progress rendering under a PTY; collapse runs so spacing is stable.
static BLANK_RUN_RE: LazyLock =
diff --git a/crates/vp_cli_snapshots/tests/redact_unit.rs b/crates/vp_cli_snapshots/tests/redact_unit.rs
index 71a80ff3ad..3d63124d11 100644
--- a/crates/vp_cli_snapshots/tests/redact_unit.rs
+++ b/crates/vp_cli_snapshots/tests/redact_unit.rs
@@ -87,6 +87,24 @@ fn masks_bun_build_hash_only_in_bun_banners() {
assert_eq!(redact_output(unrelated.clone(), &[], true), unrelated);
}
+#[test]
+fn masks_lint_staged_backup_hashes() {
+ let input = concat!(
+ "✔ Backed up original state in git stash (a1b2c3d)\n",
+ "✔ Done backing up original state (d4e5f6a)!\n",
+ "commit (deadbeef1) applied\n",
+ )
+ .to_owned();
+ assert_eq!(
+ redact_output(input, &[], true),
+ concat!(
+ "✔ Backed up original state in git stash ()\n",
+ "✔ Done backing up original state ()!\n",
+ "commit (deadbeef1) applied\n",
+ )
+ );
+}
+
#[test]
fn normalizes_managed_executable_paths_and_missing_commands() {
let input = concat!(
diff --git a/docs/guide/commit-hooks.md b/docs/guide/commit-hooks.md
index 96a5480bc2..6b3fe4be6e 100644
--- a/docs/guide/commit-hooks.md
+++ b/docs/guide/commit-hooks.md
@@ -80,7 +80,14 @@ Project-owned hook scripts such as `.vite-hooks/pre-commit` should be committed
### `vp staged`
-`vp staged` runs staged-file checks using the `staged` config from `vite.config.ts`. To run it before each commit, add it to the project-owned pre-commit hook:
+`vp staged` runs staged-file checks using the `staged` config from `vite.config.ts`. It bundles `lint-staged` 17 and requires:
+
+- Node.js `22.22.1` or later in the `22.x` line, or `24.11.0` or later
+- Git `2.32.0` or later
+
+Node.js `20.x` is no longer supported for staged checks. These requirements also apply when a pre-commit hook runs `vp staged`. Upgrade the project's Node.js runtime and the Git installation on developer machines and CI runners before using the command. See the [lint-staged 17 release notes](https://github.com/lint-staged/lint-staged/releases/tag/v17.0.0) for the upstream changes.
+
+To run it before each commit, add it to the project-owned pre-commit hook:
```bash
vp staged
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 17a7772290..f6bfc1ab5c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -172,8 +172,8 @@ catalogs:
specifier: ^1.33.0
version: 1.33.0
lint-staged:
- specifier: ^16.2.6
- version: 16.4.0
+ specifier: ^17.5.1
+ version: 17.5.1
lodash-es:
specifier: ^4.17.21
version: 4.17.23
@@ -425,7 +425,7 @@ importers:
version: 3.3.1
lint-staged:
specifier: 'catalog:'
- version: 16.4.0
+ version: 17.5.1
minimatch:
specifier: 'catalog:'
version: 10.2.4
@@ -5258,10 +5258,6 @@ packages:
resolution: {integrity: sha512-Ab9UQDstwhrTcsRP1m4QkT6W1PRMBoAnPJeB5LZcuum/nLiFMlSwYxH1J8fsRAolaXez0ijgbm6BAWZkQC9DVg==}
engines: {node: '>=18.3.0'}
- ansi-escapes@7.2.0:
- resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==}
- engines: {node: '>=18'}
-
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@@ -5563,14 +5559,6 @@ packages:
cjs-module-lexer@2.1.1:
resolution: {integrity: sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==}
- cli-cursor@5.0.0:
- resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
- engines: {node: '>=18'}
-
- cli-truncate@5.2.0:
- resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==}
- engines: {node: '>=20'}
-
cli-width@4.1.0:
resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
engines: {node: '>= 12'}
@@ -5597,10 +5585,6 @@ packages:
colorjs.io@0.7.1:
resolution: {integrity: sha512-LY7OHnJZxHwT5UlzNa9bbhHHDbzB6yE5+3MIPwJEQKRvSCt/T4G7epsj+9j2BExUIIfXFIJGsIXUKdfrK9Q5tA==}
- commander@14.0.3:
- resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==}
- engines: {node: '>=20'}
-
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
@@ -5904,9 +5888,6 @@ packages:
node-addon-api:
optional: true
- emoji-regex@10.6.0:
- resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
-
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -5951,10 +5932,6 @@ packages:
resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==}
engines: {node: '>=20.19.0'}
- environment@1.1.0:
- resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
- engines: {node: '>=18'}
-
errno@0.1.8:
resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
hasBin: true
@@ -6117,9 +6094,6 @@ packages:
resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
engines: {node: '>=6'}
- eventemitter3@5.0.4:
- resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==}
-
events-universal@1.0.1:
resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==}
@@ -6292,10 +6266,6 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
- get-east-asian-width@1.6.0:
- resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==}
- engines: {node: '>=18'}
-
get-github-auth-token@0.1.2:
resolution: {integrity: sha512-vcGCRhKNOOynlxi7j3dOrkCkxG1rxt/IbmZY9A+xXMhRAUMeIA5T4Fn0LTaPXfQWdUkOcc3DBWDvcc6dmnxmYw==}
engines: {node: '>=18'}
@@ -6527,10 +6497,6 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
- is-fullwidth-code-point@5.1.0:
- resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==}
- engines: {node: '>=18'}
-
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
@@ -6774,20 +6740,11 @@ packages:
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
engines: {node: '>=14'}
- lint-staged@16.4.0:
- resolution: {integrity: sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==}
- engines: {node: '>=20.17'}
- hasBin: true
-
lint-staged@17.5.1:
resolution: {integrity: sha512-7EDuco1xnBMeVpvAbeMq1U5KXwJGLmY8q6l+Ye78r36C4mPc+Vg1Z2SK8gHyRTyvPro90A0q5/FAZ+Au23d6QQ==}
engines: {node: '>=22.22.1'}
hasBin: true
- listr2@9.0.5:
- resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==}
- engines: {node: '>=20.0.0'}
-
loader-utils@3.3.1:
resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==}
engines: {node: '>= 12.13.0'}
@@ -6824,10 +6781,6 @@ packages:
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
- log-update@6.1.0:
- resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
- engines: {node: '>=18'}
-
loglevel-plugin-prefix@0.8.4:
resolution: {integrity: sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==}
@@ -6891,10 +6844,6 @@ packages:
engines: {node: '>=4'}
hasBin: true
- mimic-function@5.0.1:
- resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
- engines: {node: '>=18'}
-
minimatch@10.2.4:
resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==}
engines: {node: 18 || 20 || >=22}
@@ -7059,10 +7008,6 @@ packages:
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
- onetime@7.0.0:
- resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
- engines: {node: '>=18'}
-
open@10.2.0:
resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==}
engines: {node: '>=18'}
@@ -7525,17 +7470,10 @@ packages:
resq@1.11.0:
resolution: {integrity: sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==}
- restore-cursor@5.1.0:
- resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
- engines: {node: '>=18'}
-
ret@0.5.0:
resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==}
engines: {node: '>=10'}
- rfdc@1.4.1:
- resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
-
rgb2hex@0.2.5:
resolution: {integrity: sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==}
@@ -7842,14 +7780,6 @@ packages:
sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
- slice-ansi@7.1.2:
- resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==}
- engines: {node: '>=18'}
-
- slice-ansi@8.0.0:
- resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==}
- engines: {node: '>=20'}
-
slugify@1.6.6:
resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==}
engines: {node: '>=8.0.0'}
@@ -7965,14 +7895,6 @@ packages:
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines: {node: '>=12'}
- string-width@7.2.0:
- resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
- engines: {node: '>=18'}
-
- string-width@8.2.1:
- resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==}
- engines: {node: '>=20'}
-
string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
@@ -8582,10 +8504,6 @@ packages:
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
engines: {node: '>=12'}
- wrap-ansi@9.0.2:
- resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
- engines: {node: '>=18'}
-
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
@@ -12235,10 +12153,6 @@ snapshots:
dependencies:
without-undefined-properties: 0.1.2
- ansi-escapes@7.2.0:
- dependencies:
- environment: 1.1.0
-
ansi-regex@5.0.1: {}
ansi-regex@6.2.2: {}
@@ -12551,15 +12465,6 @@ snapshots:
cjs-module-lexer@2.1.1: {}
- cli-cursor@5.0.0:
- dependencies:
- restore-cursor: 5.1.0
-
- cli-truncate@5.2.0:
- dependencies:
- slice-ansi: 8.0.0
- string-width: 8.2.1
-
cli-width@4.1.0: {}
clipanion@4.0.0-rc.4(typanion@3.14.0):
@@ -12582,8 +12487,6 @@ snapshots:
colorjs.io@0.7.1: {}
- commander@14.0.3: {}
-
commander@2.20.3: {}
commander@9.5.0: {}
@@ -12861,8 +12764,6 @@ snapshots:
optionalDependencies:
node-addon-api: 7.1.1
- emoji-regex@10.6.0: {}
-
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
@@ -12895,8 +12796,6 @@ snapshots:
entities@8.0.0: {}
- environment@1.1.0: {}
-
errno@0.1.8:
dependencies:
prr: 1.0.1
@@ -13126,8 +13025,6 @@ snapshots:
event-target-shim@5.0.1: {}
- eventemitter3@5.0.4: {}
-
events-universal@1.0.1:
dependencies:
bare-events: 2.8.2
@@ -13312,8 +13209,6 @@ snapshots:
get-caller-file@2.0.5: {}
- get-east-asian-width@1.6.0: {}
-
get-github-auth-token@0.1.2: {}
get-port@7.1.0: {}
@@ -13529,10 +13424,6 @@ snapshots:
is-fullwidth-code-point@3.0.0: {}
- is-fullwidth-code-point@5.1.0:
- dependencies:
- get-east-asian-width: 1.6.0
-
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
@@ -13766,15 +13657,6 @@ snapshots:
lilconfig@3.1.3: {}
- lint-staged@16.4.0:
- dependencies:
- commander: 14.0.3
- listr2: 9.0.5
- picomatch: 4.0.7
- string-argv: 0.3.2
- tinyexec: 1.3.1
- yaml: 2.9.0
-
lint-staged@17.5.1:
dependencies:
picomatch: 4.0.7
@@ -13783,15 +13665,6 @@ snapshots:
optionalDependencies:
yaml: 2.9.0
- listr2@9.0.5:
- dependencies:
- cli-truncate: 5.2.0
- colorette: 2.0.20
- eventemitter3: 5.0.4
- log-update: 6.1.0
- rfdc: 1.4.1
- wrap-ansi: 9.0.2
-
loader-utils@3.3.1: {}
local-pkg@1.2.1:
@@ -13824,14 +13697,6 @@ snapshots:
lodash@4.17.21: {}
- log-update@6.1.0:
- dependencies:
- ansi-escapes: 7.2.0
- cli-cursor: 5.0.0
- slice-ansi: 7.1.2
- strip-ansi: 7.1.2
- wrap-ansi: 9.0.2
-
loglevel-plugin-prefix@0.8.4: {}
loglevel@1.9.2: {}
@@ -13886,8 +13751,6 @@ snapshots:
mime@1.6.0:
optional: true
- mimic-function@5.0.1: {}
-
minimatch@10.2.4:
dependencies:
brace-expansion: 5.0.3
@@ -14034,10 +13897,6 @@ snapshots:
dependencies:
wrappy: 1.0.2
- onetime@7.0.0:
- dependencies:
- mimic-function: 5.0.1
-
open@10.2.0:
dependencies:
default-browser: 5.4.0
@@ -14599,15 +14458,8 @@ snapshots:
dependencies:
fast-deep-equal: 2.0.1
- restore-cursor@5.1.0:
- dependencies:
- onetime: 7.0.0
- signal-exit: 4.1.0
-
ret@0.5.0: {}
- rfdc@1.4.1: {}
-
rgb2hex@0.2.5: {}
rolldown-plugin-dts@0.27.13(@typescript/native-preview@7.0.0-dev.20260605.1)(oxc-resolver@11.24.2)(rolldown@rolldown+packages+rolldown)(typescript@6.0.3):
@@ -14914,16 +14766,6 @@ snapshots:
sisteransi@1.0.5: {}
- slice-ansi@7.1.2:
- dependencies:
- ansi-styles: 6.2.3
- is-fullwidth-code-point: 5.1.0
-
- slice-ansi@8.0.0:
- dependencies:
- ansi-styles: 6.2.3
- is-fullwidth-code-point: 5.1.0
-
slugify@1.6.6: {}
smart-buffer@4.2.0: {}
@@ -15033,17 +14875,6 @@ snapshots:
emoji-regex: 9.2.2
strip-ansi: 7.1.2
- string-width@7.2.0:
- dependencies:
- emoji-regex: 10.6.0
- get-east-asian-width: 1.6.0
- strip-ansi: 7.1.2
-
- string-width@8.2.1:
- dependencies:
- get-east-asian-width: 1.6.0
- strip-ansi: 7.1.2
-
string_decoder@1.1.1:
dependencies:
safe-buffer: 5.1.2
@@ -15677,12 +15508,6 @@ snapshots:
string-width: 5.1.2
strip-ansi: 7.1.2
- wrap-ansi@9.0.2:
- dependencies:
- ansi-styles: 6.2.3
- string-width: 7.2.0
- strip-ansi: 7.1.2
-
wrappy@1.0.2: {}
ws@8.21.1: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 606a3a82dd..ead74cabbb 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -89,7 +89,7 @@ catalog:
jsonc-parser: ^3.3.1
# Kept in lockstep with the bundled @tsdown/css by .github/scripts/upgrade-deps.ts
lightningcss: ^1.33.0
- lint-staged: ^16.2.6
+ lint-staged: ^17.5.1
lodash-es: ^4.17.21
micromatch: ^4.0.9
minimatch: ^10.0.3