@pnpm/installing.commands 1100.10.0 → 1100.10.2

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/lib/add.js CHANGED
@@ -5,6 +5,7 @@ import { writeSettings } from '@pnpm/config.writer';
5
5
  import { PnpmError } from '@pnpm/error';
6
6
  import { handleGlobalAdd } from '@pnpm/global.commands';
7
7
  import { resolveConfigDeps } from '@pnpm/installing.env-installer';
8
+ import { parseWantedDependency } from '@pnpm/resolving.parse-wanted-dependency';
8
9
  import { createStoreController } from '@pnpm/store.connection-manager';
9
10
  import { pick } from 'ramda';
10
11
  import { renderHelp } from 'render-help';
@@ -230,7 +231,12 @@ export async function handler(opts, params, commands) {
230
231
  hint: 'Run "pnpm setup" to create it automatically, or set the global-bin-dir setting, or the PNPM_HOME env variable. The global bin directory should be in the PATH.',
231
232
  });
232
233
  }
233
- if (params.includes('pnpm') || params.includes('@pnpm/exe')) {
234
+ // Normalize each selector to its package name first, so versioned
235
+ // forms like `pnpm@9` or `@pnpm/exe@1` can't bypass the guard.
236
+ if (params.some((param) => {
237
+ const { alias } = parseWantedDependency(param);
238
+ return alias === 'pnpm' || alias === '@pnpm/exe';
239
+ })) {
234
240
  throw new PnpmError('GLOBAL_PNPM_INSTALL', 'Use the "pnpm self-update" command to install or update pnpm');
235
241
  }
236
242
  return handleGlobalAdd({
@@ -1,6 +1,7 @@
1
1
  import type { IgnoredBuilds } from '@pnpm/types';
2
2
  export interface HandleIgnoredBuildsOpts {
3
3
  allowBuilds?: Record<string, boolean | string>;
4
+ ignoreWorkspace?: boolean;
4
5
  rootProjectManifestDir?: string;
5
6
  workspaceDir?: string;
6
7
  strictDepBuilds?: boolean;
@@ -5,7 +5,9 @@ import { lexCompare } from '@pnpm/util.lex-comparator';
5
5
  export async function handleIgnoredBuilds(opts, ignoredBuilds) {
6
6
  if (!ignoredBuilds?.size)
7
7
  return;
8
- await writeIgnoredBuildsToAllowBuilds(opts, ignoredBuilds);
8
+ if (!opts.ignoreWorkspace) {
9
+ await writeIgnoredBuildsToAllowBuilds(opts, ignoredBuilds);
10
+ }
9
11
  if (opts.strictDepBuilds) {
10
12
  throw new IgnoredBuildsError(ignoredBuilds);
11
13
  }
@@ -4,7 +4,7 @@ import { type DryRunInstallResult, type UpdateMatchingFunction } from '@pnpm/ins
4
4
  import type { LockfileObject } from '@pnpm/lockfile.types';
5
5
  import { type CreateStoreControllerOptions } from '@pnpm/store.connection-manager';
6
6
  import type { IncludedDependencies, PackageVulnerabilityAudit } from '@pnpm/types';
7
- export type InstallDepsOptions = Pick<Config, 'autoInstallPeers' | 'bail' | 'bin' | 'catalogs' | 'catalogMode' | 'cleanupUnusedCatalogs' | 'dedupePeerDependents' | 'dedupePeers' | 'depth' | 'dev' | 'enableGlobalVirtualStore' | 'virtualStoreOnly' | 'engineStrict' | 'excludeLinksFromLockfile' | 'global' | 'globalPnpmfile' | 'ignoreCurrentSpecifiers' | 'ignorePnpmfile' | 'ignoreScripts' | 'optimisticRepeatInstall' | 'linkWorkspacePackages' | 'lockfileDir' | 'lockfileOnly' | 'pnprServer' | 'production' | 'preferWorkspacePackages' | 'registries' | 'runtime' | 'runtimeOnFail' | 'save' | 'saveDev' | 'saveExact' | 'saveOptional' | 'savePeer' | 'savePrefix' | 'saveProd' | 'saveWorkspaceProtocol' | 'lockfileIncludeTarballUrl' | 'scriptsPrependNodePath' | 'scriptShell' | 'sideEffectsCache' | 'sideEffectsCacheReadonly' | 'sort' | 'sharedWorkspaceLockfile' | 'shellEmulator' | 'tag' | 'trustLockfile' | 'allowBuilds' | 'optional' | 'workspaceConcurrency' | 'workspaceDir' | 'workspacePackagePatterns' | 'extraEnv' | 'ignoreWorkspaceCycles' | 'disallowWorkspaceCycles' | 'configDependencies' | 'packageExtensions' | 'updateConfig' | 'virtualStoreDirMaxLength'> & Pick<ConfigContext, 'allProjects' | 'allProjectsGraph' | 'cliOptions' | 'hooks' | 'rootProjectManifestDir' | 'rootProjectManifest' | 'selectedProjectsGraph'> & Partial<Pick<Config, 'ci'>> & CreateStoreControllerOptions & {
7
+ export type InstallDepsOptions = Pick<Config, 'autoInstallPeers' | 'bail' | 'bin' | 'catalogs' | 'catalogMode' | 'cleanupUnusedCatalogs' | 'dedupePeerDependents' | 'dedupePeers' | 'depth' | 'dev' | 'enableGlobalVirtualStore' | 'virtualStoreOnly' | 'engineStrict' | 'excludeLinksFromLockfile' | 'global' | 'globalPnpmfile' | 'ignoreCurrentSpecifiers' | 'ignorePnpmfile' | 'ignoreScripts' | 'optimisticRepeatInstall' | 'linkWorkspacePackages' | 'lockfileDir' | 'lockfileOnly' | 'pnprServer' | 'production' | 'preferWorkspacePackages' | 'registries' | 'runtime' | 'runtimeOnFail' | 'save' | 'saveDev' | 'saveExact' | 'saveOptional' | 'savePeer' | 'savePrefix' | 'saveProd' | 'saveWorkspaceProtocol' | 'lockfileIncludeTarballUrl' | 'scriptsPrependNodePath' | 'scriptShell' | 'sideEffectsCache' | 'sideEffectsCacheReadonly' | 'sort' | 'sharedWorkspaceLockfile' | 'shellEmulator' | 'tag' | 'trustLockfile' | 'allowBuilds' | 'optional' | 'workspaceConcurrency' | 'workspaceDir' | 'workspacePackagePatterns' | 'extraEnv' | 'ignoreWorkspace' | 'ignoreWorkspaceCycles' | 'disallowWorkspaceCycles' | 'configDependencies' | 'packageExtensions' | 'updateConfig' | 'virtualStoreDirMaxLength'> & Pick<ConfigContext, 'allProjects' | 'allProjectsGraph' | 'cliOptions' | 'hooks' | 'rootProjectManifestDir' | 'rootProjectManifest' | 'selectedProjectsGraph'> & Partial<Pick<Config, 'ci'>> & CreateStoreControllerOptions & {
8
8
  argv: {
9
9
  cooked?: string[];
10
10
  original: string[];
@@ -50,3 +50,13 @@ export type InstallDepsOptions = Pick<Config, 'autoInstallPeers' | 'bail' | 'bin
50
50
  isInstallCommand?: boolean;
51
51
  } & Partial<Pick<Config, 'dryRun' | 'pnpmHomeDir' | 'strictDepBuilds' | 'useLockfile' | 'useGitBranchLockfile' | 'mergeGitBranchLockfiles'>>;
52
52
  export declare function installDeps(opts: InstallDepsOptions, params: string[]): Promise<DryRunInstallResult | undefined>;
53
+ /**
54
+ * The `updateMatching` predicate of `pnpm audit --fix`: a package is an
55
+ * update target when its resolved version is vulnerable. The resolver calls
56
+ * it without a version when the edge has no lockfile reference — e.g. after
57
+ * the vulnerable pin was widened, which forgets the reference — so a
58
+ * version-less call matches by name against the vulnerable set: such an
59
+ * edge belongs to a package under vulnerability management and must
60
+ * re-resolve without its seeded lockfile pins.
61
+ */
62
+ export declare function createVulnerabilityUpdateMatching(packageVulnerabilityAudit: PackageVulnerabilityAudit): UpdateMatchingFunction;
@@ -7,7 +7,7 @@ import { PnpmError } from '@pnpm/error';
7
7
  import { arrayOfWorkspacePackagesToMap } from '@pnpm/installing.context';
8
8
  import { install, mutateModulesInSingleProject, } from '@pnpm/installing.deps-installer';
9
9
  import { writeWantedLockfile } from '@pnpm/lockfile.fs';
10
- import { globalInfo, logger } from '@pnpm/logger';
10
+ import { globalInfo, globalWarn, logger } from '@pnpm/logger';
11
11
  import { applyRuntimeOnFailOverride, filterDependenciesByType } from '@pnpm/pkg-manifest.utils';
12
12
  import { createStoreController } from '@pnpm/store.connection-manager';
13
13
  import { filterProjectsBySelectorObjects } from '@pnpm/workspace.projects-filter';
@@ -20,7 +20,7 @@ import { getPinnedVersion } from './getPinnedVersion.js';
20
20
  import { getSaveType } from './getSaveType.js';
21
21
  import { handleIgnoredBuilds } from './handleIgnoredBuilds.js';
22
22
  import { setupPolicyHandlers } from './policyHandlers.js';
23
- import { createMatcher, makeIgnorePatterns, matchDependencies, recursive, } from './recursive.js';
23
+ import { createMatcher, makeIgnorePatterns, matchDependencies, parseUpdateParam, recursive, } from './recursive.js';
24
24
  import { makeRunPacquet } from './runPacquet.js';
25
25
  import { createWorkspaceSpecs, updateToWorkspacePackagesFromManifest } from './updateWorkspaceDependencies.js';
26
26
  import { verifyPacquetIdentity } from './verifyPacquetIdentity.js';
@@ -202,10 +202,10 @@ export async function installDeps(opts, params) {
202
202
  }
203
203
  if (opts.packageVulnerabilityAudit != null) {
204
204
  updateMatch = null;
205
- const { packageVulnerabilityAudit } = opts;
206
- updateMatching = (pkgName, version) => version != null && packageVulnerabilityAudit.isVulnerable(pkgName, version);
205
+ updateMatching = createVulnerabilityUpdateMatching(opts.packageVulnerabilityAudit);
207
206
  }
208
207
  if (updateMatch != null) {
208
+ const updateSpecs = params;
209
209
  params = matchDependencies(updateMatch, manifest, includeDirect);
210
210
  if (params.length === 0) {
211
211
  if (opts.latest)
@@ -217,6 +217,7 @@ export async function installDeps(opts, params) {
217
217
  // Don't update package.json in this case, and limit updates to only matching dependencies
218
218
  updatePackageManifest = false;
219
219
  updateMatching = (pkgName) => updateMatch(pkgName) != null;
220
+ warnAboutIgnoredVersionsOfIndirectUpdateSpecs(updateSpecs);
220
221
  }
221
222
  }
222
223
  if (opts.update && opts.latest && (!params || (params.length === 0))) {
@@ -402,6 +403,40 @@ function getVulnerabilityPenalty(severity) {
402
403
  default: return -1100;
403
404
  }
404
405
  }
406
+ /**
407
+ * `pnpm update <dep>@<version>` where `<dep>` matches only transitive
408
+ * dependencies has no manifest entry to write the version into, and an
409
+ * update resolves the target the same way a fresh install would — which a
410
+ * command-line version cannot influence. Tell the user the version part is
411
+ * ignored, and that an override is the mechanism that does pin a
412
+ * transitive dependency. The recommended override is scoped to the
413
+ * dependents' declared range so it cannot violate any consumer's range;
414
+ * the range itself is not known at this layer (it lives in the dependents'
415
+ * manifests), hence the placeholder.
416
+ */
417
+ function warnAboutIgnoredVersionsOfIndirectUpdateSpecs(updateSpecs) {
418
+ for (const spec of updateSpecs) {
419
+ const { pattern, versionSpec } = parseUpdateParam(spec);
420
+ if (versionSpec == null)
421
+ continue;
422
+ globalWarn(`"${pattern}" is not a direct dependency, so the requested version "${versionSpec}" is ignored — "${pattern}" is updated to what a fresh install would resolve. To force a version of a transitive dependency, add an override scoped to the range its dependents declare to pnpm-workspace.yaml, e.g.: overrides: { "${pattern}@<declared range>": "${versionSpec}" }`);
423
+ }
424
+ }
425
+ /**
426
+ * The `updateMatching` predicate of `pnpm audit --fix`: a package is an
427
+ * update target when its resolved version is vulnerable. The resolver calls
428
+ * it without a version when the edge has no lockfile reference — e.g. after
429
+ * the vulnerable pin was widened, which forgets the reference — so a
430
+ * version-less call matches by name against the vulnerable set: such an
431
+ * edge belongs to a package under vulnerability management and must
432
+ * re-resolve without its seeded lockfile pins.
433
+ */
434
+ export function createVulnerabilityUpdateMatching(packageVulnerabilityAudit) {
435
+ const vulnerablePackageNames = new Set(packageVulnerabilityAudit.getVulnerabilities().keys());
436
+ return (pkgName, version) => version != null
437
+ ? packageVulnerabilityAudit.isVulnerable(pkgName, version)
438
+ : vulnerablePackageNames.has(pkgName);
439
+ }
405
440
  function preferNonvulnerablePackageVersions(packageVulnerabilityAudit) {
406
441
  const preferredVersions = {};
407
442
  for (const [packageName, vulnerabilities] of packageVulnerabilityAudit.getVulnerabilities()) {
@@ -1,4 +1,5 @@
1
1
  import { confirm } from '@inquirer/prompts';
2
+ import { mergePackageVersionSpecs } from '@pnpm/config.version-policy';
2
3
  import { PnpmError } from '@pnpm/error';
3
4
  import { globalInfo } from '@pnpm/logger';
4
5
  import { MINIMUM_RELEASE_AGE_VIOLATION_CODE } from '@pnpm/resolving.npm-resolver';
@@ -120,7 +121,12 @@ function pickImmatureEntries(violations, promptRequired) {
120
121
  const immature = filterImmatureViolations(violations);
121
122
  if (immature.length === 0)
122
123
  return undefined;
123
- const sorted = [...new Set(immature.map((v) => `${v.name}@${v.version}`))].sort();
124
+ // Combine into the canonical per-package form the workspace writer
125
+ // persists (`name@v1 || v2`), so the logged count and list match the
126
+ // entries that actually land in pnpm-workspace.yaml even when multiple
127
+ // immature versions belong to the same package. The pre-sort keeps the
128
+ // cross-package order stable regardless of resolution order.
129
+ const entries = mergePackageVersionSpecs(immature.map((v) => `${v.name}@${v.version}`).sort());
124
130
  // Strict-mode picks already passed through the approval prompt, so
125
131
  // the log here only confirms what was persisted. Loose-mode picks
126
132
  // haven't been announced anywhere else, so the same log doubles as
@@ -128,9 +134,9 @@ function pickImmatureEntries(violations, promptRequired) {
128
134
  const reason = promptRequired
129
135
  ? '(approved at the prompt)'
130
136
  : '(set minimumReleaseAgeStrict to true to gate these updates with a prompt)';
131
- globalInfo(`Added ${sorted.length} ${sorted.length === 1 ? 'entry' : 'entries'} to minimumReleaseAgeExclude in pnpm-workspace.yaml ` +
132
- `${reason}:\n ${sorted.join('\n ')}`);
133
- return sorted;
137
+ globalInfo(`Added ${entries.length} ${entries.length === 1 ? 'entry' : 'entries'} to minimumReleaseAgeExclude in pnpm-workspace.yaml ` +
138
+ `${reason}:\n ${entries.join('\n ')}`);
139
+ return entries;
134
140
  }
135
141
  function failOnImmature(immature) {
136
142
  const sorted = [...immature].sort((a, b) => `${a.name}@${a.version}`.localeCompare(`${b.name}@${b.version}`));
package/lib/runPacquet.js CHANGED
@@ -126,13 +126,14 @@ function makePacquetEnv(opts) {
126
126
  }
127
127
  /**
128
128
  * Path of the platform-specific native pacquet binary for the host. The
129
- * pacquet npm package ships a Node wrapper at `bin/pacquet` that uses
130
- * `require.resolve('@pacquet/<platform>-<arch>/pacquet[.exe]')` to find
131
- * the binary so the platform package lands as a *sibling* of pacquet,
132
- * not inside its own `node_modules` (pacquet's own `node_modules` is
133
- * empty after configDependencies install). Use Node's resolver rooted
134
- * at pacquet's own `package.json` so we follow the same path the
135
- * wrapper would have.
129
+ * pacquet npm package declares the `@pacquet/<platform>-<arch>` binary as
130
+ * an `optionalDependency`, so it lands as a *sibling* of pacquet, not
131
+ * inside its own `node_modules` (pacquet's own `node_modules` is empty
132
+ * after configDependencies install). Resolve it directly here rather than
133
+ * through pacquet's `bin/pacquet`, which is only a placeholder until the
134
+ * package's preinstall relinks it to the native binary — a step that does
135
+ * not run for configDependencies. Use Node's resolver rooted at pacquet's
136
+ * own `package.json` so we find the same sibling package.
136
137
  *
137
138
  * The `realpathSync` is required: `.pnpm-config/pacquet` is a symlink
138
139
  * into the global virtual store, and Node's `createRequire` builds its
@@ -10,7 +10,7 @@ import { globalInfo } from '@pnpm/logger';
10
10
  import chalk from 'chalk';
11
11
  import { pick, unnest } from 'ramda';
12
12
  import { renderHelp } from 'render-help';
13
- import { installDeps } from '../installDeps.js';
13
+ import { createVulnerabilityUpdateMatching, installDeps } from '../installDeps.js';
14
14
  import { parseUpdateParam } from '../recursive.js';
15
15
  import { createGlobalPolicyCallbacks } from '../resolutionPolicyManifest.js';
16
16
  import { getUpdateChoices } from './getUpdateChoices.js';
@@ -276,8 +276,7 @@ async function update(dependencies, opts, rebuildHandler) {
276
276
  const depth = opts.depth ?? Infinity;
277
277
  let updateMatching;
278
278
  if (opts.packageVulnerabilityAudit != null) {
279
- const { packageVulnerabilityAudit } = opts;
280
- updateMatching = (pkgName, version) => version != null && packageVulnerabilityAudit.isVulnerable(pkgName, version);
279
+ updateMatching = createVulnerabilityUpdateMatching(opts.packageVulnerabilityAudit);
281
280
  }
282
281
  else if ((dependencies.length > 0) && dependencies.every(dep => !dep.substring(1).includes('@')) && depth > 0 && !opts.latest) {
283
282
  updateMatching = createMatcher(dependencies);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pnpm/installing.commands",
3
- "version": "1100.10.0",
3
+ "version": "1100.10.2",
4
4
  "description": "Commands for installation",
5
5
  "keywords": [
6
6
  "pnpm",
@@ -10,9 +10,9 @@
10
10
  "funding": "https://opencollective.com/pnpm",
11
11
  "repository": {
12
12
  "type": "git",
13
- "url": "https://github.com/pnpm/pnpm/tree/main/installing/commands"
13
+ "url": "https://github.com/pnpm/pnpm/tree/main/pnpm11/installing/commands"
14
14
  },
15
- "homepage": "https://github.com/pnpm/pnpm/tree/main/installing/commands#readme",
15
+ "homepage": "https://github.com/pnpm/pnpm/tree/main/pnpm11/installing/commands#readme",
16
16
  "bugs": {
17
17
  "url": "https://github.com/pnpm/pnpm/issues"
18
18
  },
@@ -38,7 +38,6 @@
38
38
  "chalk": "^5.6.2",
39
39
  "ci-info": "^4.4.0",
40
40
  "detect-libc": "^2.1.2",
41
- "get-npm-tarball-url": "^2.1.0",
42
41
  "is-subdir": "^2.0.0",
43
42
  "js-yaml": "npm:@zkochan/js-yaml@0.0.11",
44
43
  "load-json-file": "^7.0.1",
@@ -48,53 +47,54 @@
48
47
  "ramda": "npm:@pnpm/ramda@0.28.1",
49
48
  "render-help": "^2.0.0",
50
49
  "version-selector-type": "^3.0.0",
51
- "@pnpm/building.after-install": "1102.0.1",
52
- "@pnpm/building.policy": "1100.0.10",
53
- "@pnpm/catalogs.config": "1100.0.1",
50
+ "@pnpm/building.policy": "1100.0.11",
51
+ "@pnpm/catalogs.config": "1100.0.2",
54
52
  "@pnpm/cli.command": "1100.0.1",
53
+ "@pnpm/building.after-install": "1102.0.3",
54
+ "@pnpm/catalogs.types": "1100.0.0",
55
+ "@pnpm/cli.utils": "1101.0.13",
55
56
  "@pnpm/cli.common-cli-options-help": "1100.0.2",
56
- "@pnpm/cli.utils": "1101.0.12",
57
57
  "@pnpm/config.matcher": "1100.0.1",
58
58
  "@pnpm/config.pick-registry-for-package": "1100.0.9",
59
- "@pnpm/config.reader": "1101.10.0",
60
- "@pnpm/config.writer": "1100.0.13",
59
+ "@pnpm/config.reader": "1101.11.0",
60
+ "@pnpm/config.writer": "1100.0.15",
61
61
  "@pnpm/constants": "1100.0.0",
62
- "@pnpm/deps.inspection.outdated": "1100.1.9",
62
+ "@pnpm/deps.security.signatures": "1101.2.3",
63
+ "@pnpm/config.version-policy": "1100.1.6",
63
64
  "@pnpm/deps.path": "1100.0.8",
64
- "@pnpm/deps.status": "1100.1.2",
65
- "@pnpm/deps.security.signatures": "1101.2.2",
66
- "@pnpm/catalogs.types": "1100.0.0",
65
+ "@pnpm/error": "1100.0.1",
67
66
  "@pnpm/fs.read-modules-dir": "1100.0.1",
68
- "@pnpm/error": "1100.0.0",
69
- "@pnpm/global.commands": "1100.0.29",
67
+ "@pnpm/deps.status": "1100.1.4",
68
+ "@pnpm/deps.inspection.outdated": "1100.1.11",
70
69
  "@pnpm/fs.graceful-fs": "1100.1.0",
71
- "@pnpm/hooks.pnpmfile": "1100.0.15",
72
- "@pnpm/installing.dedupe.check": "1100.1.0",
70
+ "@pnpm/hooks.pnpmfile": "1100.0.17",
71
+ "@pnpm/global.commands": "1100.0.31",
72
+ "@pnpm/installing.dedupe.check": "1100.1.2",
73
73
  "@pnpm/installing.dedupe.issues-renderer": "1100.0.1",
74
- "@pnpm/installing.deps-installer": "1102.1.0",
75
- "@pnpm/installing.context": "1100.0.19",
76
- "@pnpm/lockfile.fs": "1100.1.6",
77
- "@pnpm/lockfile.types": "1100.0.11",
78
- "@pnpm/installing.env-installer": "1102.0.1",
79
- "@pnpm/network.fetch": "1100.1.3",
80
- "@pnpm/pkg-manifest.reader": "1100.0.8",
81
- "@pnpm/network.auth-header": "1101.1.2",
74
+ "@pnpm/installing.context": "1100.0.21",
75
+ "@pnpm/installing.deps-installer": "1102.2.0",
76
+ "@pnpm/lockfile.fs": "1100.1.8",
77
+ "@pnpm/network.auth-header": "1101.1.3",
78
+ "@pnpm/installing.env-installer": "1102.0.3",
79
+ "@pnpm/network.fetch": "1100.1.4",
80
+ "@pnpm/lockfile.types": "1100.0.13",
81
+ "@pnpm/pkg-manifest.reader": "1100.0.9",
82
+ "@pnpm/pkg-manifest.utils": "1100.2.6",
82
83
  "@pnpm/resolving.parse-wanted-dependency": "1100.0.1",
83
- "@pnpm/resolving.npm-resolver": "1102.0.1",
84
- "@pnpm/store.connection-manager": "1100.3.1",
85
- "@pnpm/resolving.resolver-base": "1100.4.2",
86
- "@pnpm/workspace.project-manifest-reader": "1100.0.13",
87
- "@pnpm/pkg-manifest.utils": "1100.2.5",
84
+ "@pnpm/store.connection-manager": "1100.3.3",
85
+ "@pnpm/resolving.npm-resolver": "1102.1.1",
86
+ "@pnpm/resolving.resolver-base": "1100.5.1",
87
+ "@pnpm/store.controller": "1102.0.3",
88
88
  "@pnpm/types": "1101.3.2",
89
+ "@pnpm/workspace.project-manifest-reader": "1100.0.14",
89
90
  "@pnpm/workspace.project-manifest-writer": "1100.0.8",
90
- "@pnpm/workspace.projects-sorter": "1100.0.7",
91
- "@pnpm/workspace.projects-graph": "1100.0.19",
92
- "@pnpm/workspace.projects-reader": "1101.0.12",
93
- "@pnpm/workspace.state": "1100.0.23",
94
- "@pnpm/workspace.projects-filter": "1100.0.22",
95
- "@pnpm/workspace.root-finder": "1100.0.2",
96
- "@pnpm/store.controller": "1102.0.1",
97
- "@pnpm/workspace.workspace-manifest-writer": "1100.0.13"
91
+ "@pnpm/workspace.projects-filter": "1100.0.24",
92
+ "@pnpm/workspace.projects-graph": "1100.0.21",
93
+ "@pnpm/workspace.projects-reader": "1101.0.13",
94
+ "@pnpm/workspace.root-finder": "1100.0.3",
95
+ "@pnpm/workspace.projects-sorter": "1100.0.8",
96
+ "@pnpm/workspace.state": "1100.0.25",
97
+ "@pnpm/workspace.workspace-manifest-writer": "1100.0.15"
98
98
  },
99
99
  "peerDependencies": {
100
100
  "@pnpm/logger": "^1100.0.0"
@@ -117,19 +117,19 @@
117
117
  "write-json-file": "^7.0.0",
118
118
  "write-package": "7.2.0",
119
119
  "write-yaml-file": "^6.0.0",
120
- "@pnpm/installing.commands": "1100.10.0",
121
- "@pnpm/installing.modules-yaml": "1100.0.9",
120
+ "@pnpm/assert-project": "1100.0.18",
122
121
  "@pnpm/logger": "1100.0.0",
123
- "@pnpm/assert-project": "1100.0.16",
124
- "@pnpm/store.index": "1100.2.0",
125
- "@pnpm/test-ipc-server": "1100.0.0",
126
- "@pnpm/prepare": "1100.0.16",
127
- "@pnpm/testing.registry-mock": "1100.0.6",
128
- "@pnpm/testing.command-defaults": "1100.0.6",
129
- "@pnpm/testing.mock-agent": "1101.0.3",
122
+ "@pnpm/installing.modules-yaml": "1100.0.9",
123
+ "@pnpm/installing.commands": "1100.10.2",
124
+ "@pnpm/store.index": "1100.2.1",
125
+ "@pnpm/prepare": "1100.0.18",
130
126
  "@pnpm/test-fixtures": "1100.0.0",
131
- "@pnpm/worker": "1100.2.1",
132
- "@pnpm/workspace.projects-filter": "1100.0.22"
127
+ "@pnpm/testing.command-defaults": "1100.0.8",
128
+ "@pnpm/testing.mock-agent": "1101.0.4",
129
+ "@pnpm/testing.registry-mock": "1100.0.8",
130
+ "@pnpm/test-ipc-server": "1100.0.0",
131
+ "@pnpm/worker": "1100.2.3",
132
+ "@pnpm/workspace.projects-filter": "1100.0.24"
133
133
  },
134
134
  "engines": {
135
135
  "node": ">=22.13"