Repository navigation
Commit aa23cd5
chore(deps): update all non-major dependencies (#86)
> [!NOTE]
> This PR body was truncated due to platform limits.
This PR contains the following updates:
| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) | Type |
Update |
|---|---|---|---|---|---|
|
[@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node)
([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node))
| [`^24.0.12` →
`^24.19.2`](https://renovatebot.com/diffs/npm/@types%2fnode/24.13.3/24.19.2)
|

|

| devDependencies | minor |
| [async-trait](https://redirect.github.com/dtolnay/async-trait) | `0.1`
→ `0.1.92` |

|

| workspace.dependencies | patch |
| [husky](https://redirect.github.com/typicode/husky) | [`^9.0.0` →
`^9.1.7`](https://renovatebot.com/diffs/npm/husky/9.1.7/9.1.7) |

|

| devDependencies | patch |
| [lint-staged](https://redirect.github.com/lint-staged/lint-staged) |
[`^17.0.0` →
`^17.6.0`](https://renovatebot.com/diffs/npm/lint-staged/17.0.8/17.6.0)
|

|

| devDependencies | minor |
| [pnpm](https://pnpm.io)
([source](https://redirect.github.com/pnpm/pnpm/tree/HEAD/pnpm/npm/pnpm))
| [`12.4.1` →
`12.14.0`](https://renovatebot.com/diffs/npm/pnpm/12.4.1/12.14.0) |

|

| packageManager | minor |
| [rspack_sources](https://rspack.rs/)
([source](https://redirect.github.com/web-infra-dev/rspack)) | `0.4.21`
→ `0.102.9` |

|

| workspace.dependencies | minor |
---
### Release Notes
<details>
<summary>dtolnay/async-trait (async-trait)</summary>
###
[`v0.1.92`](https://redirect.github.com/dtolnay/async-trait/releases/tag/0.1.92)
[Compare
Source](https://redirect.github.com/dtolnay/async-trait/compare/0.1.91...0.1.92)
- Resolve double_must_use clippy lint in generated code
([#​303](https://redirect.github.com/dtolnay/async-trait/issues/303))
###
[`v0.1.91`](https://redirect.github.com/dtolnay/async-trait/releases/tag/0.1.91)
[Compare
Source](https://redirect.github.com/dtolnay/async-trait/compare/0.1.90...0.1.91)
- Update to syn 3
([#​299](https://redirect.github.com/dtolnay/async-trait/issues/299))
- Fix mutability for by-reference receivers
([#​301](https://redirect.github.com/dtolnay/async-trait/issues/301))
###
[`v0.1.90`](https://redirect.github.com/dtolnay/async-trait/releases/tag/0.1.90)
[Compare
Source](https://redirect.github.com/dtolnay/async-trait/compare/0.1.89...0.1.90)
*(yanked)*
</details>
<details>
<summary>lint-staged/lint-staged (lint-staged)</summary>
###
[`v17.6.0`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1760)
[Compare
Source](https://redirect.github.com/lint-staged/lint-staged/compare/v17.5.1...v17.6.0)
##### Minor Changes
-
[#​1850](https://redirect.github.com/lint-staged/lint-staged/pull/1850)
[`938d3f4`](https://redirect.github.com/lint-staged/lint-staged/commit/938d3f43d07cbd74f08052dfb8a7380ce8868180)
- Task functions like `{ title, task }` can now use a logger function
`log()` to emit output while the task runs. By default, the output will
only be visible if the task fails, unless the `--verbose` option was
used. Additionally, when the task rejects, the error will be shown in
the output.
```js
import { defineConfig } from 'lint-staged/config'
export default defineConfig({
'*': {
title: 'Fail if PDF files are committed',
task: async (filepaths, { log }) => {
const pdfFiles = filepaths.filter((f) =>
f.toLowerCase().endsWith('.pdf'))
if (pdfFiles.length > 0) {
log('PDF files should not be committed: %s', pdfFiles)
throw new Error('Failed')
}
},
},
})
```
-
[#​1854](https://redirect.github.com/lint-staged/lint-staged/pull/1854)
[`30562bc`](https://redirect.github.com/lint-staged/lint-staged/commit/30562bcbc5267bdb733c257c79c0a65c34465ba3)
- *lint-staged* now stages changes to **all tracked files modified by
tasks**, including files that weren’t originally staged or didn’t match
the configured globs. This can happen when your task has side-effects,
or it's a function that ignores the staged files like `() => "prettier
--write ."`.
If you have unstaged changes in a file and the task also edits that
file, your unstaged changes will be staged too. Use `--hide-unstaged` to
hide your changes while tasks run.
##### Patch Changes
-
[#​1860](https://redirect.github.com/lint-staged/lint-staged/pull/1860)
[`4296532`](https://redirect.github.com/lint-staged/lint-staged/commit/4296532155fb893ab8f754a47f3518f691fd4d98)
- The assignment of staged files to *lint-staged* configuration files
(when using multiple, for example in a monorepo) has been rewritten to
be more efficient. As a reminder, each staged file is assigned to
exactly one configuration (the closest one), even if that config doesn't
match the file in its globs.
-
[#​1861](https://redirect.github.com/lint-staged/lint-staged/pull/1861)
[`c45f28a`](https://redirect.github.com/lint-staged/lint-staged/commit/c45f28af47a540730de2bf22fddedeb8fac5952a)
- Fix running parallel tasks for a single glob, when tasks are created
by a function. Nesting one level of arrays inside an array of tasks will
result in the inner tasks running in parallel. This behavior should now
be consistent when creating tasks using functions. In the following
example `eslint` and `prettier` will run in parallel (for all files,
when any JS files are staged):
```js
import { defineConfig } from 'lint-staged/config'
export default defineConfig({
'*.js': () => [['eslint --max-warnings=0 .', 'prettier --list-different
.']],
})
```
-
[#​1859](https://redirect.github.com/lint-staged/lint-staged/pull/1859)
[`f0ea69d`](https://redirect.github.com/lint-staged/lint-staged/commit/f0ea69dc67399e504a08db67594f697d4c24df6d)
- Various performance improvements from skipping redundant internal Git
calls.
-
[#​1856](https://redirect.github.com/lint-staged/lint-staged/pull/1856)
[`69d7d17`](https://redirect.github.com/lint-staged/lint-staged/commit/69d7d17ca6d3b10f2ececf8b2756c1927a627821)
- Partially staged changes are hidden in a uniquely-named patch file to
avoid multiple invocations of *lint-staged* overwriting it. This makes
it safer to run *lint-staged* in multiple worktrees at the same time.
###
[`v17.5.1`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1751)
[Compare
Source](https://redirect.github.com/lint-staged/lint-staged/compare/v17.5.0...v17.5.1)
##### Patch Changes
-
[#​1852](https://redirect.github.com/lint-staged/lint-staged/pull/1852)
[`bfcca94`](https://redirect.github.com/lint-staged/lint-staged/commit/bfcca94e61aef7078a7a0ec8165c0cc2c9baca99)
- Fix TypeScript issue `TS1254` from `defineConfig()` by changing the
signature from `const` to a `function`:
> A 'const' initializer in an ambient context must be a string or
numeric literal or literal enum reference.
###
[`v17.5.0`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1750)
[Compare
Source](https://redirect.github.com/lint-staged/lint-staged/compare/v17.4.1...v17.5.0)
##### Minor Changes
-
[#​1847](https://redirect.github.com/lint-staged/lint-staged/pull/1847)
[`f9063b7`](https://redirect.github.com/lint-staged/lint-staged/commit/f9063b7d71857cb8893ee1bb5b63da05b2819b23)
- *Lint-staged* now refuses to run when files were staged with
`--intent-to-add`, because Git stash doesn't support them. Previously
this was an unhandled error.
##### Patch Changes
-
[#​1848](https://redirect.github.com/lint-staged/lint-staged/pull/1848)
[`d718ccc`](https://redirect.github.com/lint-staged/lint-staged/commit/d718ccc59cf73bf7d333135826270b5742fefec1)
- *Lint-staged* now handles color support better in non-TTY streams, and
honors the `FORCE_COLOR` environment variable.
-
[#​1845](https://redirect.github.com/lint-staged/lint-staged/pull/1845)
[`7e5ece8`](https://redirect.github.com/lint-staged/lint-staged/commit/7e5ece8408097994bd1dfcfbf395aa9838782d19)
- Update `tinyexec@1.3.1` so that local binaries from
`node_modules/.bin` are resolved starting from the directory of each
*lint-staged* configuration file (in monorepo setups). This behavior was
broken in `lint-staged@16.3.0` where they were only resolved from the
current working directory and up.
-
[#​1845](https://redirect.github.com/lint-staged/lint-staged/pull/1845)
[`eb8a4e3`](https://redirect.github.com/lint-staged/lint-staged/commit/eb8a4e3ae1bbdf648b647ff3a17a6205870b27be)
- Do not try to restore untracked files when using `--hide-all` and
there is no initial commit yet.
###
[`v17.4.1`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1741)
[Compare
Source](https://redirect.github.com/lint-staged/lint-staged/compare/v17.3.0...v17.4.1)
##### Patch Changes
-
[#​1840](https://redirect.github.com/lint-staged/lint-staged/pull/1840)
[`efe5b63`](https://redirect.github.com/lint-staged/lint-staged/commit/efe5b63cc4961c80b6363fe40bac3c145e3ddbb2)
- This is a version-bump-only release because the previous version
`17.4.0` was not published to npmjs.com due to problems with GitHub
Actions and Changesets.
###
[`v17.3.0`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1730)
[Compare
Source](https://redirect.github.com/lint-staged/lint-staged/compare/v17.2.0...v17.3.0)
##### Minor Changes
-
[#​1825](https://redirect.github.com/lint-staged/lint-staged/pull/1825)
[`16b3f74`](https://redirect.github.com/lint-staged/lint-staged/commit/16b3f74850e5d2811b5fbaea6c136733a71ad3e4)
- It is now possible to run multiple tasks in parallel for a single glob
by configuring it with an array of tasks (which run sequentially), and
then placing another array inside it (where the tasks will run in
parallel). The following demonstrates the order tasks will start in:
```json
{
"*.ts": ["first", "second", ["third", "third"], "fourth"]
}
```
As a concrete example, *lint-staged*'s own configuration is:
```js
/** @type {import('./lib/index.js').Configuration} */
export default {
'*': [
['oxfmt --check --no-error-on-unmatched-pattern', 'oxlint
--no-error-on-unmatched-pattern'],
],
'*.ts': () => 'tsc',
}
```
which means:
1. for all staged files, run the two commands in parallel with staged
filenames appended, for example:
- `oxfmt --check --no-error-on-unmatched-pattern lib/index.js`
- `oxlint --no-error-on-unmatched-pattern lib/index.js`
2. additionally, if any `*.ts` files are staged, run `tsc` without
appending any arguments
3. The two sets of commands also run in parallel
##### Patch Changes
-
[#​1829](https://redirect.github.com/lint-staged/lint-staged/pull/1829)
[`15f7e53`](https://redirect.github.com/lint-staged/lint-staged/commit/15f7e5314b4afe4702808d978758b22d42437f43)
- During an in-progress merge, files that are unchanged from the branch
being merged are now skipped. Technically, files are only included if
there are staged changes against both `HEAD` and `MERGE_HEAD`.
###
[`v17.2.0`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1720)
[Compare
Source](https://redirect.github.com/lint-staged/lint-staged/compare/v17.1.1...v17.2.0)
##### Minor Changes
-
[#​1823](https://redirect.github.com/lint-staged/lint-staged/pull/1823)
[`ee156cc`](https://redirect.github.com/lint-staged/lint-staged/commit/ee156cc7039494f1db11f389b1233c78f588238c)
- The chunking of tasks based on maximum command line argument length
has been re-implemented to be more precise. Now the chunking happens
based on the final generated command string, instead of just the list of
staged files like previously. This benefits mainly Windows platforms and
function commands like:
```js
/** @type {import('lint-staged').Configuration} */
export default {
'*.ts': () => 'tsc', // Run "tsc" when any TS file is changed (for
entire project)
}
```
Where the spawned command is literally `"tsc"` without any extra
arguments. Previously, this was still chunked when a lot of files were
staged. Now, it probably won't be chunked because the length of the
command is just three letters.
Also, native JavaScript/Node.js function tasks won't be chunked at all,
when previously they were run multiple times when chunked:
```js
/** @type {import('lint-staged').Configuration} */
export default {
'*.js': {
title: 'Log staged JS files to console',
task: async (files) => {
console.log('Staged JS files:', files)
},
},
}
```
###
[`v17.1.1`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1711)
[Compare
Source](https://redirect.github.com/lint-staged/lint-staged/compare/v17.1.0...v17.1.1)
##### Patch Changes
-
[#​1820](https://redirect.github.com/lint-staged/lint-staged/pull/1820)
[`a626a9f`](https://redirect.github.com/lint-staged/lint-staged/commit/a626a9f269d9ff6498a9b8245490e096f90c4bb7)
- It's now possible to set `--max-arg-length=Infinity` to effectively
disable chunking of tasks based on the number of staged files. The
parsing and validation of the numeric CLI options `--max-arg-length` and
`--concurrency` has been improved.
###
[`v17.1.0`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1710)
[Compare
Source](https://redirect.github.com/lint-staged/lint-staged/compare/v17.0.8...v17.1.0)
##### Minor Changes
-
[#​1816](https://redirect.github.com/lint-staged/lint-staged/pull/1816)
[`7568d4f`](https://redirect.github.com/lint-staged/lint-staged/commit/7568d4fb15ba3c3317a7aec36195461cb2f272d7)
- The console output of *lint-staged* has been simplified so that
there's less interactive spinners and more explicit messages like
*"Started…*" -> "*Done!*". The primary purpose of this was to remove
[`Listr2`](https://redirect.github.com/listr2/listr2), a very large
dependency.
**Before:**
Size of `node_modules/` after installing: `1561.7 kB` with 29 packages.
Fancy interactive spinners, but output dynamically changes:
```shell
✔ Backed up original state in git stash (0b191303)
✔ Running tasks for staged files...
✔ Staging changes from tasks...
✔ Cleaning up temporary files...
```
**After:**
Size of `node_modules/` after installing: `974.0 kB` with 5 packages
(37.6 % smaller, 82.7 % less transitive dependencies).
Simpler but more explicit output:
```shell
⋯ Backing up original state…
✔ Done backing up original state (35b38ed1)!
⋯ Running tasks for staged files…
*.js — 1 file
⋯ oxlint --fix
*.{json,md} — 1 file
⋯ oxfmt --write
✔ oxfmt --write
✔ oxlint --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!
```
##### Patch Changes
-
[#​1816](https://redirect.github.com/lint-staged/lint-staged/pull/1816)
[`c19079d`](https://redirect.github.com/lint-staged/lint-staged/commit/c19079d808d557b538c34fe69381d2ef970c7acc)
- Try to restore hidden unstaged changes when using `--no-revert`.
-
[#​1818](https://redirect.github.com/lint-staged/lint-staged/pull/1818)
[`efb23a2`](https://redirect.github.com/lint-staged/lint-staged/commit/efb23a25075d980db9edabd2f71e769fc97d48c8)
- Console output colors are enabled/disabled more consistently.
-
[#​1818](https://redirect.github.com/lint-staged/lint-staged/pull/1818)
[`26112a1`](https://redirect.github.com/lint-staged/lint-staged/commit/26112a19151f9678861d51ea7416e9f9bef24bbb)
- Failed JS function tasks now properly kill other tasks, unless
`--continue-on-error` is used. Previously their failure didn't affect
other tasks.
</details>
<details>
<summary>pnpm/pnpm (pnpm)</summary>
###
[`v12.14.0`](https://redirect.github.com/pnpm/pnpm/releases/tag/v12.14.0):
pnpm 12.14.0
[Compare
Source](https://redirect.github.com/pnpm/pnpm/compare/v12.13.0...v12.14.0)
This release adds the `sideEffectsCache.exclude` setting, stops `pnpm
install` from waiting on the daily update check, and keeps pnpm from
aborting with a core dump when the reader of its output exits.
##### Minor Changes
- Added the `sideEffectsCache.exclude` setting for packages whose build
depends on something pnpm cannot include in the cache key, such as the
system libraries a native addon links against. pnpm builds the listed
packages in every project and never restores or saves their builds
through the side-effects cache, locally or on a `remoteCache` server.
Under the global virtual store, each project gets its own copy of these
packages and of the packages that depend on them. Entries use the same
`name`, `@scope/*`, and `name@version` patterns as
`minimumReleaseAgeExclude`
[#​5271](https://redirect.github.com/pnpm/pnpm/issues/5271).
- `pnpm login` now prints the `npm-notice` response header during
web-based login. Registries use it to show the verification code that
completes the sign-in in the browser.
##### Patch Changes
##### Installing packages
- `pnpm install` and `pnpm add` no longer wait for the daily update
check. If the command finishes first, pnpm skips the update notice and
checks again next time. On a registry that accepted the connection but
never answered, an install that had nothing to do used to take minutes
[#​16839](https://redirect.github.com/pnpm/pnpm/issues/16839).
- `pnpm install`, `pnpm add` and `pnpm update` now reuse
`pnpm-lock.yaml` when the workspace configures a catalog entry that no
dependency references, such as an unused entry or one whose package an
`overrides` entry replaces. Before, every resolution in such a workspace
resolved all dependencies again from the registry
[#​16923](https://redirect.github.com/pnpm/pnpm/issues/16923).
- `pnpm install` now looks up a git dependency's branch or tag once per
install, even when many workspace projects depend on it. With
`linkWorkspacePackages` enabled, it used to run `git ls-remote` once per
project
[#​16899](https://redirect.github.com/pnpm/pnpm/issues/16899).
- A filtered install, such as `pnpm install --filter <pkg>`, now keeps
the `pnpm-lock.yaml` entries of workspace projects that are missing from
disk, as in a sparse checkout. Their importers, packages, and catalog
entries stay even when the filter matches every project on disk
[#​16931](https://redirect.github.com/pnpm/pnpm/issues/16931).
- pnpm now decides whether a dependency that a package also declares as
an optional peer is linked as a dependency or as a peer from the
shallowest path that reaches the package. When an existing lockfile
records such a dependency as a regular dependency and a newly added
dependency now provides the peer, pnpm records it as a peer, as a fresh
install does. The lockfile entry of such a package can change on the
next install
[#​16901](https://redirect.github.com/pnpm/pnpm/issues/16901).
- An install that adds nothing to the store no longer changes the
modification time of the store directory. CI caches that check
modification times, such as GitLab's, no longer re-upload an unchanged
store
[#​16929](https://redirect.github.com/pnpm/pnpm/issues/16929).
##### Running commands and scripts
- pnpm no longer aborts with a core dump when the reader of its output
has exited, as in `pnpm list | head -1` or `pnpm start 2>&1 | head -1`.
The command finishes with its usual exit code, and a failing script's
exit code is kept. A write to stdout that fails for another reason, such
as a full disk, ends the command with exit code 1
[#​16904](https://redirect.github.com/pnpm/pnpm/issues/16904)
[pnpm/tasks#132](https://redirect.github.com/pnpm/tasks/issues/132).
- On Windows, `pnpm exec`, `pnpm run`, and commands such as `pnpm nx`
now return when the command they run exits, even if it left a detached
process running and pnpm's output is redirected or piped. Previously a
shell reading that output waited until the detached process, such as the
Nx daemon, exited
[#​16930](https://redirect.github.com/pnpm/pnpm/issues/16930).
- Commands that do not write the project manifest now leave a missing
`package.json` absent. This covers queries such as `pnpm why` and `pnpm
outdated`, `pnpm fetch`, `pnpm dedupe --check`, and commands that exit
with an error, such as `pnpm rt ls`. These commands used to create one
from the initialization template. `pnpm sbom` run from a lockfile alone
now reports the root component as `unknown` with version `0.0.0`
[#​16907](https://redirect.github.com/pnpm/pnpm/issues/16907).
- `pnpm run` now reports a failed script as a JSON record under
`--reporter=ndjson`. It printed a plain `[ELIFECYCLE]` line to stderr.
- `pnpm run` no longer prints `[ELIFECYCLE] Command failed with exit
code N.` to stderr when a script fails under `--reporter=silent`,
`--silent`, or `--loglevel=silent`.
- `pnpm pipeline --dry-run` no longer writes a run report when no
projects are selected. With `--json` it prints `{"tasks": []}`
[pnpm/tasks#126](https://redirect.github.com/pnpm/tasks/issues/126).
##### Packing and publishing
- `pnpm pack` and `pnpm publish` now ship the whole gitignored directory
that `main`, `browser`, or `bin` points into, as npm does. Previously
only the `main` and `bin` files themselves were packed, and a gitignored
`browser` file was left out
[#​16908](https://redirect.github.com/pnpm/pnpm/issues/16908).
- `pnpm pack` and `pnpm publish` now honor a `.npmignore` or
`.gitignore` inside a subdirectory when `package.json` has a `files`
field. The package root's ignore files and those inherited from the
workspace are still skipped
[#​16909](https://redirect.github.com/pnpm/pnpm/issues/16909).
##### Setting up pnpm and toolchains
- `--registry`, `--https-proxy`, `--http-proxy`, and `--no-proxy` now
apply when pnpm resolves and downloads the pnpm version a project pins
in `packageManager`. Before, these lookups went to
`https://registry.npmjs.org/`, which a firewall that only allows a
private registry blocks
[#​16911](https://redirect.github.com/pnpm/pnpm/discussions/16911).
- On Windows, `pnpm install` now installs the Rust toolchain for
rustup's default host, so a machine set up with `rustup set default-host
x86_64-pc-windows-gnu` gets the MinGW toolchain. Without a default host,
pnpm installs the MSVC toolchain for the machine's architecture, as
rustup does. This includes a pnpm built for MinGW, such as the MSYS2
package, which has installed the MinGW toolchain since 12.13.0. An x64
pnpm on ARM64 Windows now installs the ARM64 toolchain
[#​16854](https://redirect.github.com/pnpm/pnpm/issues/16854).
<!-- sponsors -->
##### Platinum Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://bit.cloud/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/bit.svg" width="80" alt="Bit"></a>
</td>
<td align="center" valign="middle">
<a href="https://openai.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/openai_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/openai_light.svg" />
<img src="https://pnpm.io/img/users/openai_dark.svg" width="160"
alt="OpenAI" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://notion.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/notion.svg" width="80" alt="Notion"></a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a
href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/coderabbit.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/coderabbit_light.svg" />
<img src="https://pnpm.io/img/users/coderabbit.svg" width="220"
alt="CodeRabbit" />
</picture>
</a>
</td>
</tr>
</tbody>
</table>
##### Gold Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://sanity.io/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/sanity.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/sanity_light.svg" />
<img src="https://pnpm.io/img/users/sanity.svg" width="120" alt="Sanity"
/>
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://discord.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/discord.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/discord_light.svg" />
<img src="https://pnpm.io/img/users/discord.svg" width="220"
alt="Discord" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://vite.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/vitejs.svg" width="42" alt="Vite"></a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://serpapi.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/serpapi_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/serpapi_light.svg" />
<img src="https://pnpm.io/img/users/serpapi_dark.svg" width="160"
alt="SerpApi" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a
href="https://stackblitz.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/stackblitz.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/stackblitz_light.svg" />
<img src="https://pnpm.io/img/users/stackblitz.svg" width="190"
alt="Stackblitz" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://workleap.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/workleap.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/workleap_light.svg" />
<img src="https://pnpm.io/img/users/workleap.svg" width="190"
alt="Workleap" />
</picture>
</a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://nx.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/nx.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/nx_light.svg" />
<img src="https://pnpm.io/img/users/nx.svg" width="50" alt="Nx" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://latitude.so/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/latitude.svg" width="160"
alt="Latitude"></a>
</td>
</tr>
</tbody>
</table>
<!-- sponsors end -->
###
[`v12.13.0`](https://redirect.github.com/pnpm/pnpm/releases/tag/v12.13.0):
pnpm 12.13.0
[Compare
Source](https://redirect.github.com/pnpm/pnpm/compare/v12.12.1...v12.13.0)
This release adds the `pnpm profile` and `pnpm token` commands, the
`storeIndexFormat: files` setting for stores shared over a network
filesystem, and faster Python dependency resolution.
##### Minor Changes
- Added the `pnpm profile` command to view and update registry user
profile settings.
- Added `pnpm token` to list, create, and revoke authentication tokens
on the registry.
- Added the `storeIndexFormat` setting. Set it to `files` to keep a
store's package index as one file per package instead of the SQLite
`index.db`, for a store on a network filesystem that several machines
use at once. SQLite's locking does not work across machines, so
concurrent installs on such a store could corrupt `index.db`.
- Added the `nodePackageMap` setting, which groups the package-map
settings. `nodePackageMap.mode: write-only` writes
`node_modules/.package-map.json` for other tools without making Node.js
load it. `mode: load` also makes Node.js load the map, like
`nodeExperimentalPackageMap: true`. `nodePackageMap.type` replaces
`nodePackageMapType`. The old settings still work
[#​14937](https://redirect.github.com/pnpm/pnpm/issues/14937).
```yaml
nodePackageMap:
mode: write-only
type: loose
```
##### Patch Changes
##### Setting up pnpm
- `pnpm setup` now works when pnpm was installed with npm on macOS. It
installed pnpm from npm's `bin` directory and left a
`$PNPM_HOME/bin/pnpm` that could not run
[#​16855](https://redirect.github.com/pnpm/pnpm/issues/16855).
- pnpm runs again after `pnpm setup` when `globalShims` enables pnpm.
Every command failed with "the global target of the pnpm shim points
back at the shim"
[#​16874](https://redirect.github.com/pnpm/pnpm/issues/16874).
- A pnpm built for the MinGW target on Windows, such as the MSYS2
package, now installs the MinGW Rust toolchain that
`rust-toolchain.toml` names. It used to install the MSVC toolchain.
##### Installing packages
- On macOS, `pnpm install` no longer fails with
`ERR_PNPM_LOCKFILE_WRITE_FILE` when the project is on a virtiofs or SMB
share. pnpm now falls back to a regular `fsync` when the file system
rejects a full sync
[#​16846](https://redirect.github.com/pnpm/pnpm/issues/16846).
- On macOS, `pnpm install`, `pnpm patch-commit`, and other commands that
load a pnpmfile no longer hang at random.
- `pnpm install` now puts the executables of a Python build backend's
requirements on the `PATH` while the backend runs. Projects built with
`uv_build` now install. Before, they failed with "uv-build was not
properly installed".
- Removing a `link:` dependency now also removes its symlink from
`node_modules` when `nodeLinker` is `hoisted`
[#​16884](https://redirect.github.com/pnpm/pnpm/issues/16884).
- `pnpm-lock.yaml` no longer records the tarball URL of a package
installed from a scoped registry, such as one set by `@types:registry=`,
when pnpm can rebuild the URL from that registry
[#​16866](https://redirect.github.com/pnpm/pnpm/issues/16866).
##### Packing, auditing, and pipelines
- `pnpm pack` and `pnpm publish` now pack only `package.json`, the
README, the license, and the files named in `main` and `bin` when
`files` is an empty array. They used to pack every file in the package
[#​16889](https://redirect.github.com/pnpm/pnpm/issues/16889).
- `pnpm audit` and `pnpm audit signatures` no longer check runtimes
installed through `devEngines.runtime`, such as `node@runtime:24.21.0`,
against the npm package of the same name. `pnpm audit signatures`
reported these runtimes as having an invalid registry signature
[#​16869](https://redirect.github.com/pnpm/pnpm/issues/16869).
- `pnpm pipeline` now runs the root's tasks when `pnpm-workspace.yaml`
lists only the root in `packages` or omits `packages`, as `pnpm -r run`
does. A change to a root file in such a workspace no longer triggers a
full-run warning. When a full run has no projects to run, `pnpm
pipeline` now reports that no projects are selected
[#​16849](https://redirect.github.com/pnpm/pnpm/issues/16849).
##### Performance
- `pnpm install` resolves Python dependencies faster. With
`--lockfile-only`, a project with 10 dependencies now resolves in about
4 seconds, down from about 40. When the index publishes a metadata file
beside each wheel (PEP 658), as PyPI does, pnpm downloads only the
wheels of the releases it selects.
- A repeat install against an existing lockfile no longer reads registry
metadata for the dependencies it takes from that lockfile. On a warm
store this removes thousands of metadata lookups from a repeat install
of a large workspace.
- `pnpm install` with `enableModulesDir: false` now verifies the
packages already in the store while the dependencies resolve, and checks
a package's files in parallel. On a 5,100-package install with the store
on a network filesystem, this removed a 19-second pause between
resolution and fetching.
<!-- sponsors -->
##### Platinum Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://bit.cloud/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/bit.svg" width="80" alt="Bit"></a>
</td>
<td align="center" valign="middle">
<a href="https://openai.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/openai_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/openai_light.svg" />
<img src="https://pnpm.io/img/users/openai_dark.svg" width="160"
alt="OpenAI" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://notion.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/notion.svg" width="80" alt="Notion"></a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a
href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/coderabbit.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/coderabbit_light.svg" />
<img src="https://pnpm.io/img/users/coderabbit.svg" width="220"
alt="CodeRabbit" />
</picture>
</a>
</td>
</tr>
</tbody>
</table>
##### Gold Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://sanity.io/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/sanity.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/sanity_light.svg" />
<img src="https://pnpm.io/img/users/sanity.svg" width="120" alt="Sanity"
/>
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://discord.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/discord.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/discord_light.svg" />
<img src="https://pnpm.io/img/users/discord.svg" width="220"
alt="Discord" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://vite.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/vitejs.svg" width="42" alt="Vite"></a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://serpapi.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/serpapi_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/serpapi_light.svg" />
<img src="https://pnpm.io/img/users/serpapi_dark.svg" width="160"
alt="SerpApi" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a
href="https://stackblitz.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/stackblitz.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/stackblitz_light.svg" />
<img src="https://pnpm.io/img/users/stackblitz.svg" width="190"
alt="Stackblitz" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://workleap.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/workleap.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/workleap_light.svg" />
<img src="https://pnpm.io/img/users/workleap.svg" width="190"
alt="Workleap" />
</picture>
</a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://nx.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/nx.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/nx_light.svg" />
<img src="https://pnpm.io/img/users/nx.svg" width="50" alt="Nx" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://latitude.so/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/latitude.svg" width="160"
alt="Latitude"></a>
</td>
</tr>
</tbody>
</table>
<!-- sponsors end -->
###
[`v12.12.1`](https://redirect.github.com/pnpm/pnpm/releases/tag/v12.12.1):
pnpm 12.12.1
[Compare
Source](https://redirect.github.com/pnpm/pnpm/compare/v12.12.0...v12.12.1)
This release adds OIDC authentication to `pnpm dist-tag` and the `tool:`
protocol. `pnpm publish` now checks which registry an `NPM_ID_TOKEN` was
issued for before using it.
##### Patch Changes
- `pnpm publish` now uses an `NPM_ID_TOKEN` only if its `aud` claim
matches the selected registry, such as `npm:registry.npmjs.org`. A token
for another registry is skipped with a warning, and pnpm falls back to
the configured credentials.
- `pnpm dist-tag add`, `rm`, and `ls` now support OIDC authentication in
CI. Enable "Allow npm dist-tag" in the package's trusted publishing
settings to manage tags without a stored npm token.
- Added the `tool:` protocol for the tools pnpm downloads itself:
Node.js, Bun, Deno, and Yarn. `pnpm add bun@tool:1.3.0`, `pnx
node@tool:22`, and `pnx yarn@tool:4` work like the `runtime:` spelling,
which stays supported as an alias. A lockfile written for `runtime:`
stays up to date when `package.json` switches to `tool:`, and the other
way around.
A named registry can no longer be called `tool`.
<!-- sponsors -->
#### Platinum Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://bit.cloud/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/bit.svg" width="80" alt="Bit"></a>
</td>
<td align="center" valign="middle">
<a href="https://openai.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/openai_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/openai_light.svg" />
<img src="https://pnpm.io/img/users/openai_dark.svg" width="160"
alt="OpenAI" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://notion.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/notion.svg" width="80" alt="Notion"></a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a
href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/coderabbit.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/coderabbit_light.svg" />
<img src="https://pnpm.io/img/users/coderabbit.svg" width="220"
alt="CodeRabbit" />
</picture>
</a>
</td>
</tr>
</tbody>
</table>
#### Gold Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://sanity.io/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/sanity.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/sanity_light.svg" />
<img src="https://pnpm.io/img/users/sanity.svg" width="120" alt="Sanity"
/>
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://discord.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/discord.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/discord_light.svg" />
<img src="https://pnpm.io/img/users/discord.svg" width="220"
alt="Discord" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://vite.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/vitejs.svg" width="42" alt="Vite"></a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://serpapi.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/serpapi_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/serpapi_light.svg" />
<img src="https://pnpm.io/img/users/serpapi_dark.svg" width="160"
alt="SerpApi" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a
href="https://stackblitz.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/stackblitz.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/stackblitz_light.svg" />
<img src="https://pnpm.io/img/users/stackblitz.svg" width="190"
alt="Stackblitz" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://workleap.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/workleap.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/workleap_light.svg" />
<img src="https://pnpm.io/img/users/workleap.svg" width="190"
alt="Workleap" />
</picture>
</a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://nx.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/nx.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/nx_light.svg" />
<img src="https://pnpm.io/img/users/nx.svg" width="50" alt="Nx" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://latitude.so/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/latitude.svg" width="160"
alt="Latitude"></a>
</td>
</tr>
</tbody>
</table>
<!-- sponsors end -->
###
[`v12.12.0`](https://redirect.github.com/pnpm/pnpm/releases/tag/v12.12.0):
pnpm 12.12.0
[Compare
Source](https://redirect.github.com/pnpm/pnpm/compare/v12.11.2...v12.12.0)
This release shares task results and dependency builds through a remote
cache, adds the `addMissingPeerTypes` setting, and lets `pnpm add
--config` and `pnpm update` manage configuration dependencies. It also
fixes `dangerouslyAllowAllBuilds` running the build scripts of packages
that `allowBuilds` denies.
##### Minor Changes
- `pnpm pipeline` can share task results between machines. A result is a
signed artifact stored on a pnpr server or on a server that speaks the
Turborepo Remote Cache API, such as Vercel Remote Cache.
The remote side-effects cache can also store dependency builds on a
Turborepo Remote Cache server. Both caches read the new `remoteCache`
setting, which names the server and holds the signing keys. `pnpm
pipeline --report` records the run under the organization
`remoteCache.org` names.
- Added the `addMissingPeerTypes` setting, which links the `@types`
package of a peer dependency next to every package that peer-depends on
it. For example, a package that peer-depends on `react` gets the
project's `@types/react` linked next to it. This lets TypeScript find
the types of a peer dependency when the global virtual store is on
[#​15689](https://redirect.github.com/pnpm/pnpm/discussions/15689).
- `pnpm add --config` and `pnpm update` now handle configuration
dependencies the way they handle other dependencies
[#​16814](https://redirect.github.com/pnpm/pnpm/issues/16814).
`pnpm add --config` saves a version range in `pnpm-workspace.yaml` by
the same rules as `pnpm add`, so `pnpm add --config my-config@latest`
saves a range such as `^1.2.0`. It also resolves the package again when
`pnpm-lock.yaml` already locks an older version.
`pnpm update` updates configuration dependencies within their ranges,
and `pnpm update --latest` moves them to their latest version. A
selector such as `pnpm update my-config` updates only the configuration
dependencies it names.
##### Patch Changes
- A package set to `false` in `allowBuilds` no longer runs its build
scripts when `dangerouslyAllowAllBuilds` is `true`. The two settings
together now allow every build except the denied ones. Previously,
`dangerouslyAllowAllBuilds` ignored the denials.
- pnpm now switches to the pnpm version a project pins even when it
cannot read its configuration. Previously, a setting it rejected in the
global config file, an `.npmrc` file, or `_auth`, or a
`pnpm-workspace.yaml` it could not parse, stopped every command, `pnpm
--version` included.
- `pnpm update` and `pnpm why` accept `--depth Infinity` again. They
failed with `invalid value 'Infinity' for '--depth <DEPTH>'`
[#​16817](https://redirect.github.com/pnpm/pnpm/issues/16817).
- `pnpm deploy` without `injectWorkspacePackages` now binds a peer
dependency of a linked workspace package to the version its parent
provides, as an injected install does. Previously the deploy failed with
`ERR_PNPM_DEPLOY_AMBIGUOUS_PEER` whenever other packages in the deployed
graph depended on different versions of that peer
[#​16807](https://redirect.github.com/pnpm/pnpm/issues/16807).
- `pnpm deploy --legacy` no longer fails with
`ERR_PNPM_SPEC_NOT_SUPPORTED_BY_ANY_RESOLVER` when a workspace
dependency of the deployed project declares a `workspace:` peer
dependency that the project does not depend on itself. pnpm now copies
that peer from the workspace into the deploy directory.
An auto-installed peer declared with `workspace:` now always resolves to
the workspace project. Previously, `workspace:*` and `workspace:^1.0.0`
peers could be installed from the registry
[#​16806](https://redirect.github.com/pnpm/pnpm/issues/16806).
- Repeat installs no longer resolve again when an injected workspace
package lists a dependency also as a peer dependency.
- Sped up frozen installs of unchanged injected workspace packages that
use hardlinks.
- Sped up workspace discovery with subtree exclusions such as
`!generated/**`.
- A key under a registry URL in the `_auth` setting that does not start
with `@` is now skipped with a warning, so a field a later pnpm version
adds there no longer breaks this one. A key that holds an `authToken`
object but lacks its `@`, such as `org` for `@org`, is still an error.
<!-- sponsors -->
#### Platinum Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://bit.cloud/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/bit.svg" width="80" alt="Bit"></a>
</td>
<td align="center" valign="middle">
<a href="https://openai.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/openai_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/openai_light.svg" />
<img src="https://pnpm.io/img/users/openai_dark.svg" width="160"
alt="OpenAI" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://notion.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/notion.svg" width="80" alt="Notion"></a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a
href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/coderabbit.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/coderabbit_light.svg" />
<img src="https://pnpm.io/img/users/coderabbit.svg" width="220"
alt="CodeRabbit" />
</picture>
</a>
</td>
</tr>
</tbody>
</table>
#### Gold Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://sanity.io/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/sanity.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/sanity_light.svg" />
<img src="https://pnpm.io/img/users/sanity.svg" width="120" alt="Sanity"
/>
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://discord.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/discord.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/discord_light.svg" />
<img src="https://pnpm.io/img/users/discord.svg" width="220"
alt="Discord" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://vite.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/vitejs.svg" width="42" alt="Vite"></a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://serpapi.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/serpapi_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/serpapi_light.svg" />
<img src="https://pnpm.io/img/users/serpapi_dark.svg" width="160"
alt="SerpApi" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a
href="https://stackblitz.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/stackblitz.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/stackblitz_light.svg" />
<img src="https://pnpm.io/img/users/stackblitz.svg" width="190"
alt="Stackblitz" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://workleap.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/workleap.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/workleap_light.svg" />
<img src="https://pnpm.io/img/users/workleap.svg" width="190"
alt="Workleap" />
</picture>
</a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://nx.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/nx.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/nx_light.svg" />
<img src="https://pnpm.io/img/users/nx.svg" width="50" alt="Nx" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://latitude.so/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/latitude.svg" width="160"
alt="Latitude"></a>
</td>
</tr>
</tbo
> [!IMPORTANT]
> ✂ PR body was truncated to here.
</details>
---
### Configuration
📅 **Schedule**: (in timezone Asia/Shanghai)
- Branch creation
- Between 12:00 AM and 03:59 AM, on day 1 and 15 of the month (`* 0-3
1,15 * *`)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/rstackjs/rspack-binding-template).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTkuMiIsInVwZGF0ZWRJblZlciI6IjQ0LjE3MS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Cong-Cong Pan <dacongsama@live.com>1 parent 4df7e86 commit aa23cd5
4 files changed
Lines changed: 158 additions & 343 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
| 15 | + | |
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
34 | | - | |
| 34 | + | |
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
| 12 | + | |
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
39 | | - | |
40 | | - | |
| 39 | + | |
| 40 | + | |
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
| |||
0 commit comments