* fix(run): fail when no packages have script in filtered recursive run
Previously, `pnpm run -r <script>` and `pnpm run --filter <filter> <script>`
would silently succeed with exit code 0 when no packages had the specified
script, as long as a filter was used. This was inconsistent with the
documentation which states "If none of the packages have the command, the
command fails."
This change makes the command fail with ERR_PNPM_RECURSIVE_RUN_NO_SCRIPT in
all cases where no packages have the script, regardless of whether a filter
is used. The `--if-present` flag can be used to suppress this error.
close#6844
* feat: pass pkgSnapshot to shouldForceResolve
The shouldForceResolve hook now receives:
- depPath: The dependency path (e.g., 'lodash@4.17.21')
- pkgSnapshot: The lockfile entry with resolution, dependencies, etc.
This replaces the previous wantedDependency argument, which was inconsistent
with how wantedDependency is constructed for the resolve() method (where it
contains the user's alias and full specifier from package.json).
- Add currentPkg (with name/version) to custom resolver ResolveOptions
- Pass currentPkg through to custom resolvers in default-resolver
- Simplify checkCustomResolverForceResolve to use parseDepPath
* Revert "fix: try not to make network requests with prefer offline (#10334)"
This reverts commit 1bc6b5ac2c.
* Add changeset
---------
Co-authored-by: Zoltan Kochan <z@kochan.io>
* chore: create empty new `@pnpm/yaml.document-sync` package
* feat: implement @pnpm/yaml.document-sync
* feat: preserve comments when updating `pnpm-workspace.yaml`
* fix: add missing rootProjectManifestDir field to fix test
This was causing a test to fail due to the rootProjectManifestDir being
an empty string.
The main branch doesn't have this problem because `write-yaml-file`
internally does a `path.dirname(...)` call that ends up resolving the
empty string to `.`.
● logger warns about peer dependencies when linking
ENOENT: no such file or directory, mkdir ''
25 | singleQuote: true, // Prefer single quotes over double quotes
26 | })
> 27 | await fs.promises.mkdir(dir, { recursive: true })
| ^
28 | await writeFileAtomic(path.join(dir, fileName), manifestStr)
29 | }
30 |
at writeManifestFile (../../workspace/manifest-writer/src/index.ts:27:3)
at updateWorkspaceManifest (../../workspace/manifest-writer/src/index.ts:83:3)
at writeSettings (../../config/config-writer/src/index.ts:38:3)
at addLinkToManifest (src/link.ts:182:3)
at src/link.ts:161:7
at async Promise.all (index 0)
at Module.handler (src/link.ts:159:3)
at Object.<anonymous> (test/link.ts:300:3)%
* Update workspace/manifest-writer/src/index.ts