pnpm 12.0.0-rc.9 → 12.1.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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,270 @@
|
|
|
1
1
|
# pnpm
|
|
2
2
|
|
|
3
|
+
## 12.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- `pnpm login` and `pnpm adduser` now record the granted token in the global `config.yaml`, under the `_auth` setting, with `--scope`'s scope routed to that registry under `registries`. `pnpm logout` removes it from there, and still from an `auth.ini` an earlier version wrote. Tokens already in `auth.ini` keep working.
|
|
8
|
+
|
|
9
|
+
- A `scope` set in a project's `pnpm-workspace.yaml` is now ignored, with a warning naming where to set it instead. `pnpm login` records the scope as a `@scope:registry` route in the machine-global `auth.ini`, which outranks `~/.npmrc` in every project — so a repository-committed file could redirect a scope such as `@acme` for all of a user's other projects after one routine login. Use `--scope`, the `PNPM_CONFIG_SCOPE` environment variable, or the global config file instead [#13557](https://github.com/pnpm/pnpm/issues/13557).
|
|
10
|
+
|
|
11
|
+
- Verified remote build artifacts are persisted in the shared store with their signed origin metadata. Later installs reverify the artifact against current trust, policy, platform, and source before reuse, while invalid remote variants are quarantined per channel ([pnpm/pnpm#13771](https://github.com/pnpm/pnpm/issues/13771)).
|
|
12
|
+
|
|
13
|
+
- Persist completed recursive tasks so `--resume-from` skips exactly the work that passed during a matching interrupted or failed `pnpm -r run` / `pnpm -r exec` invocation. When no compatible state exists, pnpm retains its graph-based resume behavior.
|
|
14
|
+
|
|
15
|
+
- Workspace install, rebuild, pack, publish, stage, and lifecycle work now starts as soon as its dependencies finish instead of waiting for an unrelated topological group.
|
|
16
|
+
|
|
17
|
+
- Added per-task concurrency limits to workspace task orchestration. Set `tasks.<name>.concurrency` in `pnpm-workspace.yaml` to limit how many instances of that task may run across workspace projects at once:
|
|
18
|
+
|
|
19
|
+
```yaml
|
|
20
|
+
tasks:
|
|
21
|
+
build:
|
|
22
|
+
concurrency: 2
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
- `sideEffectsCache` now declares the whole of how a package's build output is reused — whether one is restored, whether one is saved, and the remote tier that shares it between machines:
|
|
26
|
+
|
|
27
|
+
```yaml
|
|
28
|
+
sideEffectsCache:
|
|
29
|
+
read: true
|
|
30
|
+
write: true
|
|
31
|
+
remote:
|
|
32
|
+
org: acme
|
|
33
|
+
packages: ['native-addon']
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`sideEffectsCache: true`, `sideEffectsCacheReadonly`, `remoteSideEffectsCache`, and its `organization` field all keep working. Where a field is set under both spellings the one above wins; where it is set under only one, it is kept.
|
|
37
|
+
|
|
38
|
+
Two behaviors change, both bringing this CLI in line with what the Rust one already did: `sideEffectsCacheReadonly: true` now blocks writing to the cache, and setting it alongside `sideEffectsCache: false` gives a read-only view rather than switching the cache off entirely. A cache can also be declared write-only now, to populate one the run does not read.
|
|
39
|
+
|
|
40
|
+
- Workspace task orchestration ([pnpm/rfcs#23](https://github.com/pnpm/rfcs/pull/23)). `pnpm -r run` and `pnpm -r exec` now schedule per task instead of in topological chunks: a task starts as soon as the tasks it depends on have finished, so a project no longer waits for unrelated projects that happen to share its chunk.
|
|
41
|
+
|
|
42
|
+
A new `tasks` section in `pnpm-workspace.yaml` declares what a task depends on, using the `^` convention:
|
|
43
|
+
|
|
44
|
+
```yaml
|
|
45
|
+
tasks:
|
|
46
|
+
build:
|
|
47
|
+
dependsOn: ['^build']
|
|
48
|
+
test:
|
|
49
|
+
dependsOn: ['build']
|
|
50
|
+
lint: {}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
`^name` means the named task in each of the project's workspace dependencies; a bare `name` means the task in the same project; an entry with no `dependsOn` declares an empty dependency list. A task with no entry behaves as `dependsOn: ['^<its own name>']`, which is exactly what the previous chunked ordering implied — an unconfigured workspace gets the scheduler improvement and nothing else changes meaning. A project without the script is reported skipped and passes its edges through to its own dependencies, so a scriptless package does not sever a chain.
|
|
54
|
+
|
|
55
|
+
Also part of this change:
|
|
56
|
+
|
|
57
|
+
- A dependency cycle among the tasks of a run is now an error naming the participating tasks (`ERR_PNPM_TASK_CYCLE`) instead of silently running in an arbitrary order. Setting `ignoreWorkspaceCycles: true` downgrades the error to a warning: the cycle's tasks run in an arbitrary order relative to each other.
|
|
58
|
+
- `--resume-from` now skips exactly the transitive dependencies of the anchor package; work unrelated to the anchor still runs.
|
|
59
|
+
- Under `--no-bail`, tasks whose dependencies failed are reported as skipped, not failed, and do not add to the exit code.
|
|
60
|
+
- With `--bail` (the default), the first failure still ends the run at once and nothing new is dispatched — including scripts already queued behind the concurrency limit.
|
|
61
|
+
- `pnpm -r run --dry-run <script>` prints the task graph that would execute without running anything (including skipping the `verifyDepsBeforeRun` check); `--json` emits the tasks and their resolved dependency edges.
|
|
62
|
+
- Output is inherited rather than piped only when at most one script can ever be in flight (`--workspace-concurrency=1`, or the graph forces the scripts to run one after another).
|
|
63
|
+
|
|
64
|
+
- Added macOS and Windows x64 and arm64 support to remote shared build artifacts [pnpm/pnpm#13771](https://github.com/pnpm/pnpm/issues/13771).
|
|
65
|
+
|
|
66
|
+
- Generalized the experimental shared-artifact protocol so candidates and signed payloads identify a discriminated subject. Dependency side effects use package and source-integrity subjects, while workspace tasks use project and task subjects.
|
|
67
|
+
|
|
68
|
+
This changes shared-artifact request bodies and signed payloads. A pnpr server and its clients have to be on matching versions.
|
|
69
|
+
|
|
70
|
+
### Patch Changes
|
|
71
|
+
|
|
72
|
+
- An `_auth` entry in the global config file no longer decides which registry packages come from when something else says. A `registry` or `registries` declared in `pnpm-workspace.yaml` or the global config now wins over the route inferred from a stored credential, which still applies where nothing else declares one. The `pnpm_config__auth` environment variable is unchanged: it stays the way to point a CI runner at a mandated proxy, and still overrides what a repository declares.
|
|
73
|
+
|
|
74
|
+
- Fixed `pnpm deploy --legacy` to exclude dependencies that are only reachable from unselected workspace projects after `pnpm fetch`.
|
|
75
|
+
|
|
76
|
+
- Fixed dependency-verification install logs corrupting `pnpm exec` output and ignoring `--silent` [pnpm/pnpm#14197](https://github.com/pnpm/pnpm/issues/14197).
|
|
77
|
+
|
|
78
|
+
- `pnpm clean` / `pnpm purge` run from a workspace subdirectory now remove each project's own `node_modules` instead of emptying the workspace root's for every project [#14239](https://github.com/pnpm/pnpm/issues/14239). A custom `modulesDir` is resolved against each project directory too.
|
|
79
|
+
|
|
80
|
+
- `pnpm dlx <pkg>@catalog:` now resolves the specifier through the calling workspace's catalogs instead of failing with `ERR_PNPM_CATALOG_ENTRY_NOT_FOUND_FOR_SPEC` [#14294](https://github.com/pnpm/pnpm/issues/14294).
|
|
81
|
+
|
|
82
|
+
- Fixed `pnpm doctor` reporting a version that does not match `pnpm --version` [pnpm/pnpm#14225](https://github.com/pnpm/pnpm/issues/14225).
|
|
83
|
+
|
|
84
|
+
- Pacquet now strips exactly one leading path component from `./`-prefixed tarball entries, matching pnpm and npm's tar extraction semantics and keeping shared store keys consistent.
|
|
85
|
+
|
|
86
|
+
- Installs whose lockfile carries platform or engine constraints are up to ~150 ms faster when resolution runs: the `node --version` probe behind the installability checks now starts before the lockfile is parsed and finishes while dependencies resolve, instead of running afterwards.
|
|
87
|
+
|
|
88
|
+
- Treat empty scripts selected by a regular expression as missing before running dependent tasks.
|
|
89
|
+
|
|
90
|
+
- Filter hidden scripts matched by a regular expression during recursive runs when a visible script also matches.
|
|
91
|
+
|
|
92
|
+
- Fixed `.mjs` pnpmfile hooks failing to load on Windows, including hooks supplied by config dependencies [pnpm/pnpm#14301](https://github.com/pnpm/pnpm/issues/14301).
|
|
93
|
+
|
|
94
|
+
- Fixed automatically switched pnpm versions forcing all descendant pnpm processes to use the same version [pnpm/pnpm#14309](https://github.com/pnpm/pnpm/issues/14309).
|
|
95
|
+
|
|
96
|
+
- Fixed `pnpm deploy --prod` failing when an excluded dev dependency was also declared as an optional peer dependency [pnpm/pnpm#14302](https://github.com/pnpm/pnpm/issues/14302).
|
|
97
|
+
|
|
98
|
+
- Fixed `pnpm pack` to respect the `files` field when deciding whether to include root-level changelog, history, and notice files.
|
|
99
|
+
|
|
100
|
+
- `pnpm update -g` no longer downgrades a global package. `--latest` resolves the `latest` dist-tag, which can point at an older release than the one installed — after `pnpm add -g <pkg>@next`, for instance [#14270](https://github.com/pnpm/pnpm/issues/14270).
|
|
101
|
+
|
|
102
|
+
`pnpm update -g` also no longer changes the pnpm version. pnpm's own global install belongs to `pnpm self-update` [#14270](https://github.com/pnpm/pnpm/issues/14270).
|
|
103
|
+
|
|
104
|
+
- When multiple versions of the same package expose the same binary, pnpm now links the binary from the highest version [#14249](https://github.com/pnpm/pnpm/issues/14249).
|
|
105
|
+
|
|
106
|
+
- `pnpm update` no longer replaces the specifier a project declares for a dependency that is also listed in `overrides`. A `catalog:` reference stays a `catalog:` reference, and a declared range stays as written, instead of being rewritten to the version the override resolved to [#12115](https://github.com/pnpm/pnpm/issues/12115).
|
|
107
|
+
|
|
108
|
+
- `pnpm update` no longer moves the range a project declares for a dependency that `overrides` also lists, even when the override repeats that range verbatim. Previously the updated `package.json` disagreed with the lockfile, so the next `pnpm install --frozen-lockfile` failed with a specifier mismatch [#14224](https://github.com/pnpm/pnpm/issues/14224).
|
|
109
|
+
|
|
110
|
+
- Allowed pnpm's shared-artifact client to connect to an artifact-only pnpr tier.
|
|
111
|
+
|
|
112
|
+
- Rebuilding `node_modules` from an up-to-date lockfile is up to ~200 ms faster: the `node --version` probe that installability checks and store keying need now runs concurrently with the store's warm-cache reads instead of before them.
|
|
113
|
+
|
|
114
|
+
- Remove the duplicate colon from the one-time password prompt.
|
|
115
|
+
|
|
116
|
+
- Print errors as JSON on stdout when `--json` is passed to `pnpm view` or its aliases (`info`, `show`, and `v`).
|
|
117
|
+
|
|
118
|
+
- Installs complete faster on workspaces with many projects: each project's `node_modules` is now linked concurrently.
|
|
119
|
+
|
|
120
|
+
- Fixed `patchedDependencies` matching for git-hosted dependencies during fresh and frozen installs [pnpm/pnpm#14273](https://github.com/pnpm/pnpm/issues/14273).
|
|
121
|
+
|
|
122
|
+
- `pnpm pm <command>` works again: the `pm` prefix, which forces pnpm's built-in command over a `package.json` script of the same name, is recognized instead of failing with `ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL` / `Command "pm" not found`. `pnpm pm clean` and `pnpm pm purge` now remove `node_modules` even when the project (or the workspace root) declares a `clean` / `purge` script [#14226](https://github.com/pnpm/pnpm/issues/14226).
|
|
123
|
+
|
|
124
|
+
- The settings that pnpm accepts as command-line flags are recognized again: `--package-import-method`, `--hoist-pattern`, `--public-hoist-pattern`, `--no-hoist`, `--global-dir`, `--virtual-store-dir`, `--modules-dir`, `--child-concurrency`, `--no-lockfile`, `--strict-peer-dependencies`, `--side-effects-cache`, `--side-effects-cache-readonly`, `--trust-policy`, `--trust-policy-exclude`, `--trust-policy-ignore-after`, and `--optimistic-repeat-install`. Each is accepted anywhere on the command line, spelled either `--setting=value` or `--setting value`, and overrides the same setting read from `pnpm-workspace.yaml` or `.npmrc` [#14281](https://github.com/pnpm/pnpm/issues/14281).
|
|
125
|
+
|
|
126
|
+
- `pnpm add`, `pnpm update`, and `pnpm remove` now save `package.json` before failing with `ERR_PNPM_IGNORED_BUILDS`. The dependency they were asked to change is already materialized by that point, so the manifest has to record it — otherwise the next install removes the packages again.
|
|
127
|
+
|
|
128
|
+
- The progress output no longer overwrites the lines above it once it grows taller than the terminal window [#14270](https://github.com/pnpm/pnpm/issues/14270).
|
|
129
|
+
|
|
130
|
+
- Restoring a dependency's build from the remote side-effects cache no longer downloads files the store already holds.
|
|
131
|
+
|
|
132
|
+
- Recognize `pnpm install --fix-lockfile`, including filtered installs, and regenerate broken lockfile metadata while preserving compatible locked versions [pnpm/pnpm#14250](https://github.com/pnpm/pnpm/issues/14250).
|
|
133
|
+
|
|
134
|
+
- Fixed intermittent `Access is denied` failures when concurrent global commands hand off the global bin lock on Windows.
|
|
135
|
+
|
|
136
|
+
- Fixed the `--shamefully-hoist` CLI option being rejected [pnpm/pnpm#14235](https://github.com/pnpm/pnpm/issues/14235).
|
|
137
|
+
|
|
138
|
+
- The environment variables for the remote side-effects cache are named for the setting they configure: `PNPM_SIDE_EFFECTS_CACHE_REMOTE_KEY_ID`, `..._BUILDER_ID`, `..._IMAGE_DIGEST`, `..._ARCHITECTURE_BASELINE`, `..._PRIVATE_KEY`, `..._BUILD_ENV`, `..._TRUSTED_KEYS` and `..._PUBLISH`. The `PNPM_REMOTE_SIDE_EFFECTS_CACHE_*` names keep working, and the new one wins when both are set.
|
|
139
|
+
|
|
140
|
+
- Installs that run no build scripts finish faster, especially in workspaces with many projects.
|
|
141
|
+
|
|
142
|
+
- A `devEngines.packageManager` range pin on pnpm is now recorded in `pnpm-lock.yaml`'s `packageManagerDependencies` when the running pnpm already satisfies it, using the running version and keeping the range as the recorded specifier. Previously only an exact pin — or a range resolved on the way through a version switch — reached the lockfile, so a range pin written by hand (or by any tool other than `pnpm add` / `pnpm self-update`) left the project without the shared resolution the pin exists to provide.
|
|
143
|
+
|
|
144
|
+
- Workspace installs are substantially faster (~0.7 s on a 60-project workspace): after hoisting, pnpm now shims only the bins of publicly hoisted workspace packages instead of re-walking every project's `node_modules` to rediscover bins that were already linked.
|
|
145
|
+
|
|
146
|
+
- Fixed a large install-time regression on macOS for installs that rebuild `node_modules` from a warm store [#14231](https://github.com/pnpm/pnpm/issues/14231). APFS serializes file-cloning and hard-linking syscalls volume-wide, so importing packages one file at a time from many threads was bounded by a per-volume ceiling and got slower the more CPU cores the machine had. On macOS, `pnpm install` now materializes each package once into the store's `links` directory (the same canonical slots `enableGlobalVirtualStore` uses) and copies it into `node_modules/.pnpm` with a single copy-on-write directory clone per package, replacing tens of thousands of per-file syscalls with one per package. Applies with the default `nodeLinker: isolated` when `enableGlobalVirtualStore` is off and `packageImportMethod` is `auto`, `clone`, or `clone-or-copy`; hoisted, global-virtual-store, and explicit `hardlink`/`copy` installs are unchanged.
|
|
147
|
+
|
|
148
|
+
- Stop in-flight recursive `run` and `exec` commands when bailing after the first failure.
|
|
149
|
+
|
|
150
|
+
- Warm installs that rebuild `node_modules` on macOS are about 10% faster: creating each package's virtual-store directory now issues fewer filesystem calls.
|
|
151
|
+
|
|
152
|
+
- An `_auth` credential in an `.npmrc` now authenticates even when its base64 is written without the trailing `=` padding (or with extra padding, or with whitespace inside it), instead of failing with a 401. An `_auth` that is not valid base64, or that carries no `:` between the username and the password, now fails with `ERR_PNPM_AUTH_INVALID_BASE64` / `ERR_PNPM_AUTH_MISSING_SEPARATOR` [#14257](https://github.com/pnpm/pnpm/issues/14257).
|
|
153
|
+
|
|
154
|
+
- Colored output is no longer printed as raw escape sequences in the Windows Command Prompt [#14292](https://github.com/pnpm/pnpm/issues/14292). Commands such as `pnpm list` now style their output there.
|
|
155
|
+
|
|
156
|
+
## 12.0.0
|
|
157
|
+
|
|
158
|
+
### Major Changes
|
|
159
|
+
|
|
160
|
+
- Git dependencies on known hosts (GitHub, GitLab, Bitbucket) are now treated as identities rather than transport choices. Every representation of the same repository — `github:owner/repo`, `owner/repo`, `git+https://…`, `git+ssh://git@…` — resolves through the host's canonical HTTPS URL, and the lockfile never records an SSH URL for them. Repositories whose archive endpoint is anonymously reachable resolve to the host's archive (fast tarball download); all others resolve to a `git` clone of the canonical HTTPS URL, which every machine with access to the repository can fetch.
|
|
161
|
+
|
|
162
|
+
To reach a private hosted repository over SSH, configure the machine (not the project) with git's own URL rewriting, for example:
|
|
163
|
+
|
|
164
|
+
```sh
|
|
165
|
+
git config --global url."git@github.com:".insteadOf https://github.com/
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
pnpm shells out to `git`, so the rewrite applies to all of pnpm's git operations automatically. URLs of unknown hosts (self-hosted servers) are unaffected and keep their exact URL, including SSH. URLs with embedded credentials are also kept verbatim and never resolve to a host archive.
|
|
169
|
+
|
|
170
|
+
This removes the network probing that previously decided between HTTPS and SSH at resolution time, which could record a transport that only worked on the machine that happened to run the resolution (e.g. an SSH URL that broke CI runners without SSH keys).
|
|
171
|
+
|
|
172
|
+
- A project's `pnpm-workspace.yaml` may no longer carry a setting pnpm does not recognize. Such a setting used to be ignored in silence — a misspelled `minimumReleaseAge` dropped the policy it was meant to set, and nothing said so. Now it is reported, suggesting the closest real setting name when the key looks like a typo, and it fails the command with `ERR_PNPM_UNRECOGNIZED_WORKSPACE_SETTINGS` when the project pins a pnpm version the running pnpm satisfies: with the pin honored, the setting cannot be meant for a different pnpm version, so it is a mistake to fix rather than a key to ignore. Everywhere else it is a warning, so a project that has yet to be cleaned up keeps working.
|
|
173
|
+
|
|
174
|
+
The `pnpm config` subcommands never fail on such a setting, so a broken file can still be inspected and repaired, and `pnpm config get <key>` prints the value with no warnings at all. Keys the global config file cannot set are likewise split between workspace-only settings (still directed to `pnpm-workspace.yaml`) and settings unknown to this version.
|
|
175
|
+
|
|
176
|
+
- Dependency cycles are now broken canonically during peer resolution: the members of each cycle are ordered by package id, and the edges that close a cycle are always cut at the same place, no matter where the installation walks into the cycle from. Previously the cut depended on the walk path, so installing the same dependencies could produce different lockfiles depending on importer order or resolution order [#13846](https://github.com/pnpm/pnpm/issues/13846), and a peer-resolution verdict computed for one occurrence of a cyclic package could be wrongly reused at another [#13865](https://github.com/pnpm/pnpm/issues/13865).
|
|
177
|
+
|
|
178
|
+
With canonical cycle breaking the lockfile is a pure function of the dependency graph: repeated installs, reordered importers, and reordered dependencies all produce byte-identical lockfiles. Peer dependencies of packages inside a cycle keep nearest-wins resolution along the canonical order, and a dependency edge that closes a cycle references an occurrence of its target resolved at the importer level. On large cycle-heavy workspaces peer resolution is 2–3× faster, uses about 25% less memory, and produces a substantially smaller lockfile (fewer redundant peer variants).
|
|
179
|
+
|
|
180
|
+
Existing lockfiles keep working: headless (`--frozen-lockfile`) installs consume them unchanged, and installs that skip resolution leave them untouched. The first install that actually re-resolves (for example after a dependency change) re-keys walk-order-dependent peer variants of cyclic packages once.
|
|
181
|
+
|
|
182
|
+
- `packageImportMethod: auto` now tries hardlinks before cloning on Linux. A reflink materializes a new inode and copies extent bookkeeping inside the filesystem's metadata trees, where a hardlink is one directory entry — on btrfs this roughly halves the time an install spends materializing `node_modules` from a warm store. ext4 installs are unchanged (cloning was never supported there, so `auto` already hardlinked), and macOS keeps clone-first, where APFS `clonefile` is the platform's cheap primitive. Cloning remains the fallback when the store refuses hardlinks, and remains available explicitly via `packageImportMethod: clone`.
|
|
183
|
+
|
|
184
|
+
- Under `engineStrict`, an install fails when an incompatible package is reached through a regular `dependencies` edge of an installable package, even when that whole subtree hangs off an `optionalDependencies` entry. pnpm v11 installs the package and emits an install-check warning instead. Packages reachable only through optional edges, or through a package that was itself skipped, are still skipped in both versions [#13286](https://github.com/pnpm/pnpm/issues/13286).
|
|
185
|
+
|
|
186
|
+
### Minor Changes
|
|
187
|
+
|
|
188
|
+
- Globally installed bins can now follow the project you run them in. The new `globalShims` setting is a record of package names to policies that selects which globally installed packages get project-aware shims; it defaults to `{ node: true, deno: true, bun: true }` and merges key-wise, so `globalShims: { bun: false }` switches one default off and `globalShims: { typescript: true }` adds another package. With the default, a project that pins Node.js through `devEngines.runtime` or `engines.runtime` gets the pinned stable release — authenticated against the Node.js release-team signatures — downloaded on first use and run whenever you type `node` inside the project, with no shell hooks. Candidates that are not signature-verified (Deno, Bun, Node.js prereleases, and ordinary package bins you enable) ask "Do you trust this project?" once per candidate and remember the answer machine-locally; the record values name the policy per package: `"auto"` (or its shorthand `true`) defers to artifact authentication, `"always"` switches without ever asking (useful in CI), and `"prompt"` always asks, even for authenticated candidates. Set `globalShims: false` to disable the feature, or `PNPM_SHIM_BYPASS=1` to bypass it for one invocation. On Windows, programs can keep spawning the global `node.exe` directly, without a shell.
|
|
189
|
+
|
|
190
|
+
- pnpm installs the other package managers now, not just itself: npm, Yarn Classic, Yarn Berry, Yarn 6 (`yarnpkg/zpm`), and Bun. Each is resolved and fetched through the trusted package-manager registries, and an npm-published one is verified against npm's signature for its exact version before it is executed.
|
|
191
|
+
|
|
192
|
+
Three things use it:
|
|
193
|
+
|
|
194
|
+
- A git-hosted dependency is prepared with the package manager it asks for. Its `packageManager` / `devEngines.packageManager` pin is honored, and a `yarn.lock` written by Yarn Classic no longer gets installed by Yarn Berry. pnpm provides that package manager when the dependency pinned a version, or when the host cannot satisfy what the dependency needs — so a repository built with Yarn now installs on a machine that has only pnpm, while a host that already has a suitable one keeps using its own.
|
|
195
|
+
- `pnpm dlx` (`pnx`) runs one of them for a single command: `pnx yarn@4 install`, `pnx npm@11 ci`, `pnx bun@1.3.0 install`. Naming a package manager, or a runtime (`node`, `deno`, `bun`), there now provisions the real thing instead of installing the npm package that shares its name — unless the specifier locates a package rather than asking for a released version (`pnx yarn@npm:yarn@1.22.22`, `pnx yarn@yarnpkg/berry`), which installs what it names — `pnx yarn@4` was previously a missing version, since Yarn 4 is published as `@yarnpkg/cli-dist`, and `pnx node@22` now runs that Node.js release rather than a wrapper that downloads one. `--package` naming a package manager picks which of its commands to run, so `pnx --package npm@11 npx create-something` runs that npm's `npx`.
|
|
196
|
+
- `pnpm shim add yarn` links a `yarn` command that runs whatever version the current project pins, and `pnpm shim rm` / `pnpm shim ls` manage those shims. It works for any package, not only package managers. Shims are never created as a side effect of `pnpm setup` or an install — a shim shadows the rest of your `PATH`, so pnpm only writes one when asked.
|
|
197
|
+
|
|
198
|
+
Installing a package manager globally (`pnpm add -g yarn`) now makes it follow a project's pin too, the way a globally installed Node.js already follows `devEngines.runtime`: the pinned version runs where a project pins one, and the globally installed copy is the fallback everywhere else. An explicit `globalShims` entry, including `false`, is left as you set it.
|
|
199
|
+
|
|
200
|
+
`pnpm add` follows the same rule about what a name means. `pnpm add -g yarn@4` installs Yarn Berry — it used to fail, because npm's `yarn` package stops at Classic — and `pnpm add -g node@22` / `pnpm add -g deno@2` install that Node.js or Deno release rather than a wrapper package that downloads one. In a project, naming a package manager records which one the project uses instead of installing it as a dependency, and naming a runtime records it under `engines.runtime` as `node@runtime:22` already did.
|
|
201
|
+
|
|
202
|
+
The declaration goes where the package manager reads it. Yarn is started from a project pin by corepack, which reads only `packageManager` and only accepts an exact version there, so `pnpm add yarn@4` resolves the line and writes `"packageManager": "yarn@4.18.0"` — the same thing `corepack use yarn@4` writes, down to the `+sha512.…` integrity for the Yarn Classic line that corepack pins its tarball with. Every other package manager is recorded in `devEngines.packageManager`, which holds a range. Only one of the two fields is ever left behind: they declare the same thing, and corepack refuses to run a project whose declarations disagree.
|
|
203
|
+
|
|
204
|
+
A JavaScript package manager on a machine without Node.js gets a managed LTS runtime to run on.
|
|
205
|
+
|
|
206
|
+
What changes for a project coming from v11: `pnpm add yarn` records the project's package manager instead of installing the npm package that shares the name (that package is still reachable as `pnpm add yarn@npm:yarn@1.22.22`), `pnpm add -g yarn` installs the current Yarn line rather than Classic, `pnpm add -g node` / `pnpm add -g deno` and `pnx node` / `pnx deno` install a Node.js or Deno release rather than a wrapper package, and a globally installed package manager defers to a project's pin where there is one.
|
|
207
|
+
|
|
208
|
+
- Added an opt-in proof of concept that lets installs reuse a dependency's build output across machines, by publishing and restoring signed, organization-scoped artifacts through pnpr instead of running the lifecycle scripts locally.
|
|
209
|
+
|
|
210
|
+
Configure it with the new `remoteSideEffectsCache` setting. A workspace names the eligible `organization` and `packages`; everything describing the act of signing — `publish`, `keyId`, `builderId`, `trustedKeys`, `privateKey` and the provenance fields — is refused in `pnpm-workspace.yaml` and read from the global config file or the environment instead.
|
|
211
|
+
|
|
212
|
+
- Added the `audit.ignorePrune` setting. When set to `true`, `pnpm audit --fix` removes ignored GHSA entries that no longer appear in the audit report.
|
|
213
|
+
|
|
214
|
+
- `pnpm init` now pins the latest pnpm version, instead of the version of pnpm that ran the command. A project scaffolded by an outdated pnpm therefore no longer inherits that staleness through its own `devEngines.packageManager` / `packageManager` pin [#7490](https://github.com/pnpm/pnpm/issues/7490).
|
|
215
|
+
|
|
216
|
+
The version is read from the `latest` tag on the package-manager registries. When that lookup cannot answer — no network, an unreachable or slow registry, `offline`, or a `latest` that the `minimumReleaseAge` / `trustPolicy` settings reject — `pnpm init` pins the running version as before, and never fails or hangs on the lookup. A `latest` that is older than the running pnpm is never pinned either.
|
|
217
|
+
|
|
218
|
+
- Allowed `pnpm update --patches` to refresh registry revisions through a configured pnpr server while retaining locked package versions.
|
|
219
|
+
|
|
220
|
+
- Added explicit registry revision selection with `<version>+rN` and `pnpm update --patches` for refreshing revision artifacts without changing package versions. Registry-backed lockfile policy checks recognize historical revisions, and pnpr now preserves safe revision histories from upstream registries.
|
|
221
|
+
|
|
222
|
+
- Added support for registry replacement tarballs using standard integrity values, explicit revision fields, registry routing from the `registries` setting, non-redirecting integrity-addressed URLs, canonical safe-integer revision numbers, and pnpr proxying for immutable upstream revision artifacts.
|
|
223
|
+
|
|
224
|
+
- Running `pnpm setup`, `pnpm self-update`, or a command that modifies the global installation (such as `pnpm add --global`) through `sudo` now fails with `ERR_PNPM_SUDO_NOT_SUPPORTED` instead of silently operating on the root user's home directory. pnpm keeps global packages and configuration in the invoking user's home directory, so these commands never need root permissions. Read-only global commands (such as `pnpm bin --global`) still work under sudo.
|
|
225
|
+
|
|
226
|
+
- `pnpm stage approve` now approves several staged packages at once. Run it without a stage id to pick from the staged versions interactively, or pass a list of stage ids. The whole batch is approved with a single one-time password, and pnpm asks for a new one only once the registry stops accepting it. Inside a workspace, the selected packages are approved in dependency order, and a package whose workspace dependency could not be approved is skipped instead of being published against a dependency that never reached the registry.
|
|
227
|
+
|
|
228
|
+
### Patch Changes
|
|
229
|
+
|
|
230
|
+
- Deprecated the pnpmfile `filterLog` hook in pnpm v12. The Rust CLI ignores it and emits a warning.
|
|
231
|
+
|
|
232
|
+
- The built-in compatibility database no longer adds dependencies that were detected by static analysis of published packages. Those entries named packages that are only imported for their types, so installing them was at best unnecessary and at worst broke the dependent: `@typescript-eslint/types` gained a `typescript` dependency resolved to the newest release, which put TypeScript 7 under older `@typescript-eslint` versions and made ESLint fail with "Cannot read properties of undefined (reading 'Intrinsic')". The database keeps its `@yarnpkg/extensions` entries and pnpm's own curated ones.
|
|
233
|
+
|
|
234
|
+
- When no directory above the project accepts a hard link — inside an AI agent sandbox that only grants write access to the project, or a container with just the project mounted writable — the default store is now created at `<project>/node_modules/.pnpm-store` instead of in the pnpm home directory. In those environments the home store is either read-only or on another volume, which forces every package to be copied instead of hard linked [#13525](https://github.com/pnpm/pnpm/issues/13525).
|
|
235
|
+
|
|
236
|
+
## 12.0.0-rc.11
|
|
237
|
+
|
|
238
|
+
### Minor Changes
|
|
239
|
+
|
|
240
|
+
- `pnpm stage approve` now approves several staged packages at once. Run it without a stage id to pick from the staged versions interactively, or pass a list of stage ids. The whole batch is approved with a single one-time password, and pnpm asks for a new one only once the registry stops accepting it. Inside a workspace, the selected packages are approved in dependency order, and a package whose workspace dependency could not be approved is skipped instead of being published against a dependency that never reached the registry.
|
|
241
|
+
|
|
242
|
+
### Patch Changes
|
|
243
|
+
|
|
244
|
+
- Under `nodeLinker: isolated`, a Bit root-component member whose materialized copy carries no `package.json` now receives sibling symlinks for the dependencies its own lockfile snapshot declares, instead of a symlink to every other member of the root. The all-member fallback remains only when no snapshot exists.
|
|
245
|
+
|
|
246
|
+
- The update notification now suggests `pnpm self-update` when `PNPM_HOME` manages the pnpm in use, and the [standalone install script](https://pnpm.io/installation) otherwise — under Corepack, or when another package manager installed pnpm. `pnpm self-update` under Corepack names the standalone install script too.
|
|
247
|
+
|
|
248
|
+
## 12.0.0-rc.10
|
|
249
|
+
|
|
250
|
+
### Patch Changes
|
|
251
|
+
|
|
252
|
+
- Fixed pnpm v11 incorrectly reporting `confirmModulesPurge` as unrecognized when set in `pnpm-workspace.yaml`. The Rust CLI now identifies the unsupported option as a pnpm v11 setting instead of suggesting an unrelated setting.
|
|
253
|
+
|
|
254
|
+
- A `+<algorithm>.<hash>` build in a `devEngines.packageManager` version no longer makes `pnpm install --frozen-lockfile` fail with `ERR_PNPM_FROZEN_LOCKFILE_WITH_OUTDATED_LOCKFILE` on a lockfile a plain install kept rewriting identically [#14124](https://github.com/pnpm/pnpm/issues/14124).
|
|
255
|
+
|
|
256
|
+
- The built-in compatibility database no longer adds dependencies that were detected by static analysis of published packages. Those entries named packages that are only imported for their types, so installing them was at best unnecessary and at worst broke the dependent: `@typescript-eslint/types` gained a `typescript` dependency resolved to the newest release, which put TypeScript 7 under older `@typescript-eslint` versions and made ESLint fail with "Cannot read properties of undefined (reading 'Intrinsic')". The database keeps its `@yarnpkg/extensions` entries and pnpm's own curated ones.
|
|
257
|
+
|
|
258
|
+
- `pnpm install --frozen-lockfile` no longer fails with `ERR_PNPM_FROZEN_LOCKFILE_WITH_OUTDATED_LOCKFILE` when the pinned pnpm version recorded in `pnpm-lock.yaml` has to be re-resolved before it can be installed. It runs the pnpm version the lockfile pins and leaves the lockfile unchanged [#14124](https://github.com/pnpm/pnpm/issues/14124).
|
|
259
|
+
|
|
260
|
+
- Under `nodeLinker: hoisted`, peer-resolution variants of an injected directory dependency (a `file:` snapshot) are materialized as separate copies again instead of collapsing onto the first-seen variant. Each copy keeps its own peer-resolved dependency set, so a project pinning one peer version no longer resolves another project's variant — Bit root components with conflicting peers across injected copies rely on this.
|
|
261
|
+
|
|
262
|
+
- Fixed `pnpm install --merge-git-branch-lockfiles --frozen-lockfile` failing with `ERR_PNPM_OUTDATED_LOCKFILE` when a branch lockfile predates the removal of a dependency, or its move to another dependency group [#13966](https://github.com/pnpm/pnpm/issues/13966). A dependency that no project declares anymore is no longer reinstated by the merge, and the packages it was the only path to are dropped with it.
|
|
263
|
+
|
|
264
|
+
- Record the pnpm version a project pins even when the install has nothing else to do. Adding a `devEngines.packageManager` (or `packageManager`) pin to a project whose dependencies are already installed left `packageManagerDependencies` unwritten, so `pnpm install --frozen-lockfile` failed with `ERR_PNPM_FROZEN_LOCKFILE_WITH_OUTDATED_LOCKFILE` while a plain `pnpm install` reported "Already up to date" without recording it [#14124](https://github.com/pnpm/pnpm/issues/14124).
|
|
265
|
+
|
|
266
|
+
- `pnpm install --frozen-lockfile` no longer fails when `pnpm-lock.yaml` records the pinned pnpm version alongside an engine package the running pnpm does not install it from. An entry pinning another version is still refused, and a plain install rewrites the block [#14124](https://github.com/pnpm/pnpm/issues/14124).
|
|
267
|
+
|
|
3
268
|
## 12.0.0-rc.9
|
|
4
269
|
|
|
5
270
|
### Major Changes
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"lastValidatedTimestamp":
|
|
2
|
+
"lastValidatedTimestamp": 1788011580280,
|
|
3
3
|
"projects": {
|
|
4
4
|
"/home/runner/_work/pnpm/pnpm/pnpm/npm/pnpm/temp-deploy": {
|
|
5
5
|
"name": "pacquet",
|
|
6
|
-
"version": "12.
|
|
6
|
+
"version": "12.1.0"
|
|
7
7
|
}
|
|
8
8
|
},
|
|
9
9
|
"pnpmfiles": [],
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"@commitlint/prompt-cli": "^21.2.2",
|
|
28
28
|
"@cyclonedx/cyclonedx-library": "10.2.0",
|
|
29
29
|
"@eslint/js": "^10.0.1",
|
|
30
|
-
"@inquirer/prompts": "^8.
|
|
30
|
+
"@inquirer/prompts": "^8.7.0",
|
|
31
31
|
"@jest/globals": "30.4.1",
|
|
32
32
|
"@npm/types": "^2.1.0",
|
|
33
33
|
"@openpgp/web-stream-tools": "0.3.1",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"@pnpm/logger": "^1100.0.0",
|
|
40
40
|
"@pnpm/meta-updater": "2.0.6",
|
|
41
41
|
"@pnpm/nopt": "^0.3.1",
|
|
42
|
-
"@pnpm/npm-lifecycle": "^1100.
|
|
42
|
+
"@pnpm/npm-lifecycle": "^1100.1.0",
|
|
43
43
|
"@pnpm/npm-package-arg": "^2.0.0",
|
|
44
44
|
"@pnpm/os.env.path-extender": "^3.0.1",
|
|
45
45
|
"@pnpm/patch-package": "0.0.1",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"@types/write-file-atomic": "^4.0.3",
|
|
87
87
|
"@types/yarnpkg__lockfile": "^1.1.9",
|
|
88
88
|
"@types/zkochan__table": "npm:@types/table@6.3.2",
|
|
89
|
-
"@typescript-eslint/utils": "^8.
|
|
89
|
+
"@typescript-eslint/utils": "^8.68.0",
|
|
90
90
|
"@typescript/native-preview": "7.0.0-dev.20260707.2",
|
|
91
91
|
"@yarnpkg/core": "4.9.1",
|
|
92
92
|
"@yarnpkg/extensions": "2.0.7",
|
|
@@ -129,9 +129,9 @@
|
|
|
129
129
|
"encode-registry": "^3.0.1",
|
|
130
130
|
"esbuild": "^0.28.2",
|
|
131
131
|
"escape-string-regexp": "^5.0.0",
|
|
132
|
-
"eslint": "^10.9.
|
|
132
|
+
"eslint": "^10.9.1",
|
|
133
133
|
"eslint-plugin-import-x": "^4.17.1",
|
|
134
|
-
"eslint-plugin-jest": "^29.16.
|
|
134
|
+
"eslint-plugin-jest": "^29.16.2",
|
|
135
135
|
"eslint-plugin-n": "^18.3.0",
|
|
136
136
|
"eslint-plugin-promise": "^7.3.0",
|
|
137
137
|
"eslint-plugin-regexp": "^3.1.1",
|
|
@@ -174,7 +174,7 @@
|
|
|
174
174
|
"mdast-util-to-string": "^4.0.0",
|
|
175
175
|
"memoize": "^11.0.0",
|
|
176
176
|
"micromatch": "^4.0.8",
|
|
177
|
-
"msgpackr": "2.0.
|
|
177
|
+
"msgpackr": "2.0.6",
|
|
178
178
|
"nm-prune": "^5.0.0",
|
|
179
179
|
"node-gyp": "^12.3.0",
|
|
180
180
|
"normalize-newline": "5.0.0",
|
|
@@ -216,7 +216,6 @@
|
|
|
216
216
|
"resolve-link-target": "^3.0.0",
|
|
217
217
|
"rimraf": "^6.1.3",
|
|
218
218
|
"root-link-target": "^4.0.0",
|
|
219
|
-
"run-groups": "^5.0.0",
|
|
220
219
|
"rxjs": "^7.8.2",
|
|
221
220
|
"safe-buffer": "5.2.1",
|
|
222
221
|
"safe-execa": "^0.3.0",
|
|
@@ -239,7 +238,7 @@
|
|
|
239
238
|
"strip-comments-strings": "1.2.0",
|
|
240
239
|
"symlink-dir": "^10.0.1",
|
|
241
240
|
"tar": "^7.5.22",
|
|
242
|
-
"tar-stream": "^3.2.
|
|
241
|
+
"tar-stream": "^3.2.1",
|
|
243
242
|
"tempy": "3.0.0",
|
|
244
243
|
"terminal-link": "^5.0.0",
|
|
245
244
|
"tinyglobby": "^0.2.17",
|
|
@@ -247,7 +246,7 @@
|
|
|
247
246
|
"tree-kill": "^1.2.2",
|
|
248
247
|
"ts-jest-resolver": "2.0.1",
|
|
249
248
|
"typescript": "6.0.3",
|
|
250
|
-
"typescript-eslint": "^8.
|
|
249
|
+
"typescript-eslint": "^8.68.0",
|
|
251
250
|
"undici": "^7.29.0",
|
|
252
251
|
"unified": "^11.0.5",
|
|
253
252
|
"validate-npm-package-name": "7.0.2",
|
|
@@ -305,7 +304,6 @@
|
|
|
305
304
|
"render-help",
|
|
306
305
|
"resolve-link-target",
|
|
307
306
|
"root-link-target",
|
|
308
|
-
"run-groups",
|
|
309
307
|
"safe-execa",
|
|
310
308
|
"safe-promise-defer",
|
|
311
309
|
"symlink-dir",
|
|
@@ -1175,6 +1175,15 @@ const parse = (input, options) => {
|
|
|
1175
1175
|
consume('/**', 3);
|
|
1176
1176
|
}
|
|
1177
1177
|
|
|
1178
|
+
// A globstar followed only by balanced closing parens is at the logical end of patterns like
|
|
1179
|
+
// `test(/utils/**)` and `test?(/utils/**)`. Treat it as EOS so the trailing `/**` can match its
|
|
1180
|
+
// parent path, except in negated extglobs where that would change the exclusion semantics.
|
|
1181
|
+
const isEnd = eos() || (
|
|
1182
|
+
state.parens > 0
|
|
1183
|
+
&& rest === ')'.repeat(state.parens)
|
|
1184
|
+
&& !extglobs.some(extglob => extglob.type === 'negate')
|
|
1185
|
+
);
|
|
1186
|
+
|
|
1178
1187
|
if (prior.type === 'bos' && eos()) {
|
|
1179
1188
|
prev.type = 'globstar';
|
|
1180
1189
|
prev.value += value;
|
|
@@ -1185,7 +1194,7 @@ const parse = (input, options) => {
|
|
|
1185
1194
|
continue;
|
|
1186
1195
|
}
|
|
1187
1196
|
|
|
1188
|
-
if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar &&
|
|
1197
|
+
if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && isEnd) {
|
|
1189
1198
|
state.output = state.output.slice(0, -(prior.output + prev.output).length);
|
|
1190
1199
|
prior.output = `(?:${prior.output}`;
|
|
1191
1200
|
|
|
@@ -50,7 +50,7 @@ const scan = (input, options) => {
|
|
|
50
50
|
const opts = options || {};
|
|
51
51
|
|
|
52
52
|
const length = input.length - 1;
|
|
53
|
-
const scanToEnd = opts.parts === true || opts.scanToEnd === true;
|
|
53
|
+
const scanToEnd = opts.parts === true || opts.tokens === true || opts.scanToEnd === true;
|
|
54
54
|
const slashes = [];
|
|
55
55
|
const tokens = [];
|
|
56
56
|
const parts = [];
|
|
@@ -184,15 +184,21 @@ const scan = (input, options) => {
|
|
|
184
184
|
}
|
|
185
185
|
|
|
186
186
|
if (scanToEnd === true) {
|
|
187
|
+
let parens = 0;
|
|
188
|
+
|
|
187
189
|
while (eos() !== true && (code = advance())) {
|
|
188
190
|
if (code === CHAR_BACKWARD_SLASH) {
|
|
189
191
|
backslashes = token.backslashes = true;
|
|
190
|
-
|
|
192
|
+
advance();
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (code === CHAR_LEFT_PARENTHESES) {
|
|
197
|
+
parens++;
|
|
191
198
|
continue;
|
|
192
199
|
}
|
|
193
200
|
|
|
194
|
-
if (code === CHAR_RIGHT_PARENTHESES) {
|
|
195
|
-
isGlob = token.isGlob = true;
|
|
201
|
+
if (code === CHAR_RIGHT_PARENTHESES && --parens === 0) {
|
|
196
202
|
finished = true;
|
|
197
203
|
break;
|
|
198
204
|
}
|
|
@@ -257,14 +263,21 @@ const scan = (input, options) => {
|
|
|
257
263
|
isGlob = token.isGlob = true;
|
|
258
264
|
|
|
259
265
|
if (scanToEnd === true) {
|
|
266
|
+
let parens = 1;
|
|
267
|
+
|
|
260
268
|
while (eos() !== true && (code = advance())) {
|
|
261
|
-
if (code ===
|
|
269
|
+
if (code === CHAR_BACKWARD_SLASH) {
|
|
262
270
|
backslashes = token.backslashes = true;
|
|
263
|
-
|
|
271
|
+
advance();
|
|
264
272
|
continue;
|
|
265
273
|
}
|
|
266
274
|
|
|
267
|
-
if (code ===
|
|
275
|
+
if (code === CHAR_LEFT_PARENTHESES) {
|
|
276
|
+
parens++;
|
|
277
|
+
continue;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
if (code === CHAR_RIGHT_PARENTHESES && --parens === 0) {
|
|
268
281
|
finished = true;
|
|
269
282
|
break;
|
|
270
283
|
}
|
|
@@ -351,7 +364,7 @@ const scan = (input, options) => {
|
|
|
351
364
|
let prevIndex;
|
|
352
365
|
|
|
353
366
|
for (let idx = 0; idx < slashes.length; idx++) {
|
|
354
|
-
const n = prevIndex ? prevIndex + 1 : start;
|
|
367
|
+
const n = prevIndex !== undefined ? prevIndex + 1 : start;
|
|
355
368
|
const i = slashes[idx];
|
|
356
369
|
const value = input.slice(n, i);
|
|
357
370
|
if (opts.tokens) {
|
|
@@ -364,21 +377,20 @@ const scan = (input, options) => {
|
|
|
364
377
|
depth(tokens[idx]);
|
|
365
378
|
state.maxDepth += tokens[idx].depth;
|
|
366
379
|
}
|
|
367
|
-
if (
|
|
380
|
+
if (i >= start) {
|
|
368
381
|
parts.push(value);
|
|
382
|
+
prevIndex = i;
|
|
369
383
|
}
|
|
370
|
-
prevIndex = i;
|
|
371
384
|
}
|
|
372
385
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
386
|
+
const n = prevIndex !== undefined ? prevIndex + 1 : start;
|
|
387
|
+
const value = input.slice(n);
|
|
388
|
+
parts.push(value);
|
|
376
389
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
}
|
|
390
|
+
if (opts.tokens && prevIndex && prevIndex + 1 < input.length) {
|
|
391
|
+
tokens[tokens.length - 1].value = value;
|
|
392
|
+
depth(tokens[tokens.length - 1]);
|
|
393
|
+
state.maxDepth += tokens[tokens.length - 1].depth;
|
|
382
394
|
}
|
|
383
395
|
|
|
384
396
|
state.slashes = slashes;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "picomatch",
|
|
3
3
|
"description": "Blazing fast and accurate glob matcher written in JavaScript, with no dependencies and full support for standard and extended Bash glob features, including braces, extglobs, POSIX brackets, and regular expressions.",
|
|
4
|
-
"version": "4.0.
|
|
4
|
+
"version": "4.0.7",
|
|
5
5
|
"homepage": "https://github.com/micromatch/picomatch",
|
|
6
6
|
"author": "Jon Schlinkert (https://github.com/jonschlinkert)",
|
|
7
7
|
"funding": "https://github.com/sponsors/jonschlinkert",
|
package/package.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"./dist/node_modules/node-gyp/gyp/gyp"
|
|
10
10
|
]
|
|
11
11
|
},
|
|
12
|
-
"version": "12.
|
|
12
|
+
"version": "12.1.0",
|
|
13
13
|
"description": "Fast, disk space efficient package manager",
|
|
14
14
|
"keywords": [
|
|
15
15
|
"pnpm",
|
|
@@ -46,14 +46,14 @@
|
|
|
46
46
|
"THIRD-PARTY-NOTICES.md"
|
|
47
47
|
],
|
|
48
48
|
"optionalDependencies": {
|
|
49
|
-
"@pnpm/exe.win32-x64": "12.
|
|
50
|
-
"@pnpm/exe.win32-arm64": "12.
|
|
51
|
-
"@pnpm/exe.darwin-x64": "12.
|
|
52
|
-
"@pnpm/exe.darwin-arm64": "12.
|
|
53
|
-
"@pnpm/exe.linux-x64": "12.
|
|
54
|
-
"@pnpm/exe.linux-arm64": "12.
|
|
55
|
-
"@pnpm/exe.linux-x64-musl": "12.
|
|
56
|
-
"@pnpm/exe.linux-arm64-musl": "12.
|
|
49
|
+
"@pnpm/exe.win32-x64": "12.1.0",
|
|
50
|
+
"@pnpm/exe.win32-arm64": "12.1.0",
|
|
51
|
+
"@pnpm/exe.darwin-x64": "12.1.0",
|
|
52
|
+
"@pnpm/exe.darwin-arm64": "12.1.0",
|
|
53
|
+
"@pnpm/exe.linux-x64": "12.1.0",
|
|
54
|
+
"@pnpm/exe.linux-arm64": "12.1.0",
|
|
55
|
+
"@pnpm/exe.linux-x64-musl": "12.1.0",
|
|
56
|
+
"@pnpm/exe.linux-arm64-musl": "12.1.0"
|
|
57
57
|
},
|
|
58
58
|
"scripts": {
|
|
59
59
|
"preinstall": "node install.js",
|