@pnpm/lockfile.preferred-versions 1100.0.32 → 1100.0.34

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,24 @@
1
1
  # @pnpm/lockfile.preferred-versions
2
2
 
3
+ ## 1100.0.34
4
+
5
+ ### Patch Changes
6
+
7
+ - Fixed `pnpm dedupe` requiring a second pass after bumping a direct dependency in `package.json` [pnpm/pnpm#14987](https://github.com/pnpm/pnpm/issues/14987).
8
+
9
+ - Updated dependencies:
10
+ - @pnpm/lockfile.utils@1102.1.3
11
+ - @pnpm/pkg-manifest.utils@1100.4.5
12
+ - @pnpm/resolving.resolver-base@1101.3.0
13
+
14
+ ## 1100.0.33
15
+
16
+ ### Patch Changes
17
+
18
+ - Updated dependencies:
19
+ - @pnpm/lockfile.utils@1102.1.2
20
+ - @pnpm/pkg-manifest.utils@1100.4.4
21
+
3
22
  ## 1100.0.32
4
23
 
5
24
  ### Patch Changes
package/lib/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import { type PackageSnapshots } from '@pnpm/lockfile.utils';
2
2
  import { type PreferredVersions } from '@pnpm/resolving.resolver-base';
3
3
  import type { DependencyManifest, ProjectManifest } from '@pnpm/types';
4
- export declare function getPreferredVersionsFromLockfileAndManifests(snapshots: PackageSnapshots | undefined, manifests: Array<DependencyManifest | ProjectManifest>): PreferredVersions;
4
+ export declare function getPreferredVersionsFromLockfileAndManifests(snapshots: PackageSnapshots | undefined, manifests: Array<DependencyManifest | ProjectManifest>, opts?: {
5
+ dedupe?: boolean;
6
+ }): PreferredVersions;
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@ import { nameVerFromPkgSnapshot } from '@pnpm/lockfile.utils';
2
2
  import { getAllDependenciesFromManifest } from '@pnpm/pkg-manifest.utils';
3
3
  import { DIRECT_DEP_SELECTOR_WEIGHT, EXISTING_VERSION_SELECTOR_WEIGHT, } from '@pnpm/resolving.resolver-base';
4
4
  import getVersionSelectorType from 'version-selector-type';
5
- export function getPreferredVersionsFromLockfileAndManifests(snapshots, manifests) {
5
+ export function getPreferredVersionsFromLockfileAndManifests(snapshots, manifests, opts = {}) {
6
6
  // All maps in here are keyed by package names and specifiers coming from
7
7
  // manifests and the lockfile — attacker-controlled inputs. Null-prototype
8
8
  // objects make a crafted key (e.g. `__proto__`) a plain own key instead of
@@ -23,10 +23,11 @@ export function getPreferredVersionsFromLockfileAndManifests(snapshots, manifest
23
23
  }
24
24
  if (!snapshots)
25
25
  return preferredVersions;
26
- addPreferredVersionsFromLockfile(snapshots, preferredVersions);
26
+ // Dedupe must let newly resolved dependencies compete with lockfile versions.
27
+ addPreferredVersionsFromLockfile(snapshots, preferredVersions, opts.dedupe ? 1 : EXISTING_VERSION_SELECTOR_WEIGHT);
27
28
  return preferredVersions;
28
29
  }
29
- function addPreferredVersionsFromLockfile(snapshots, preferredVersions) {
30
+ function addPreferredVersionsFromLockfile(snapshots, preferredVersions, weight) {
30
31
  // The snapshots object can contain multiple entries with the same package
31
32
  // name and version. This is because a dependency can appear multiple times
32
33
  // with the same version in the lockfile due to peer dependency resolution. To
@@ -43,7 +44,7 @@ function addPreferredVersionsFromLockfile(snapshots, preferredVersions) {
43
44
  preferredVersions[name] ??= Object.create(null);
44
45
  const existingSelector = preferredVersions[name][version];
45
46
  if (existingSelector == null) {
46
- preferredVersions[name][version] = { selectorType: 'version', weight: EXISTING_VERSION_SELECTOR_WEIGHT };
47
+ preferredVersions[name][version] = { selectorType: 'version', weight };
47
48
  continue;
48
49
  }
49
50
  // The lookup for this selector was for an exact version and not a range
@@ -60,7 +61,7 @@ function addPreferredVersionsFromLockfile(snapshots, preferredVersions) {
60
61
  // present in the lockfile that's also used by a direct dependency to be
61
62
  // considered at a higher priority than a package with only one of the two
62
63
  // criteria.
63
- preferredVersions[name][version] = addWeightToVersionSelector(existingSelector, EXISTING_VERSION_SELECTOR_WEIGHT);
64
+ preferredVersions[name][version] = addWeightToVersionSelector(existingSelector, weight);
64
65
  }
65
66
  }
66
67
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pnpm/lockfile.preferred-versions",
3
- "version": "1100.0.32",
3
+ "version": "1100.0.34",
4
4
  "description": "Get preferred version from lockfile",
5
5
  "keywords": [
6
6
  "pnpm",
@@ -29,15 +29,15 @@
29
29
  "!*.map"
30
30
  ],
31
31
  "dependencies": {
32
- "@pnpm/lockfile.utils": "1102.1.1",
33
- "@pnpm/pkg-manifest.utils": "1100.4.3",
34
- "@pnpm/resolving.resolver-base": "1101.2.0",
32
+ "@pnpm/lockfile.utils": "1102.1.3",
33
+ "@pnpm/pkg-manifest.utils": "1100.4.5",
34
+ "@pnpm/resolving.resolver-base": "1101.3.0",
35
35
  "@pnpm/types": "1102.1.0",
36
36
  "version-selector-type": "^3.0.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@jest/globals": "30.4.1",
40
- "@pnpm/lockfile.preferred-versions": "1100.0.32",
40
+ "@pnpm/lockfile.preferred-versions": "1100.0.34",
41
41
  "cross-env": "^10.1.0"
42
42
  },
43
43
  "engines": {