@pnpm/lockfile.preferred-versions 1100.0.16 → 1100.0.18
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/index.js +8 -4
- package/package.json +12 -9
package/lib/index.js
CHANGED
|
@@ -3,14 +3,18 @@ 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
5
|
export function getPreferredVersionsFromLockfileAndManifests(snapshots, manifests) {
|
|
6
|
-
|
|
6
|
+
// All maps in here are keyed by package names and specifiers coming from
|
|
7
|
+
// manifests and the lockfile — attacker-controlled inputs. Null-prototype
|
|
8
|
+
// objects make a crafted key (e.g. `__proto__`) a plain own key instead of
|
|
9
|
+
// a write through Object.prototype.
|
|
10
|
+
const preferredVersions = Object.create(null);
|
|
7
11
|
for (const manifest of manifests) {
|
|
8
12
|
const specs = getAllDependenciesFromManifest(manifest);
|
|
9
13
|
for (const [name, spec] of Object.entries(specs)) {
|
|
10
14
|
const selector = getVersionSelectorType(spec);
|
|
11
15
|
if (!selector)
|
|
12
16
|
continue;
|
|
13
|
-
preferredVersions[name] = preferredVersions[name] ??
|
|
17
|
+
preferredVersions[name] = preferredVersions[name] ?? Object.create(null);
|
|
14
18
|
preferredVersions[name][spec] = {
|
|
15
19
|
selectorType: selector.type,
|
|
16
20
|
weight: DIRECT_DEP_SELECTOR_WEIGHT,
|
|
@@ -28,7 +32,7 @@ function addPreferredVersionsFromLockfile(snapshots, preferredVersions) {
|
|
|
28
32
|
// with the same version in the lockfile due to peer dependency resolution. To
|
|
29
33
|
// avoid inflating the weight of package versions that appear multiple times,
|
|
30
34
|
// generate a map with only the unique set to iterate over.
|
|
31
|
-
const uniqueNameVersions =
|
|
35
|
+
const uniqueNameVersions = Object.create(null);
|
|
32
36
|
for (const [depPath, snapshot] of Object.entries(snapshots)) {
|
|
33
37
|
const { name, version } = nameVerFromPkgSnapshot(depPath, snapshot);
|
|
34
38
|
uniqueNameVersions[name] ??= new Set();
|
|
@@ -36,7 +40,7 @@ function addPreferredVersionsFromLockfile(snapshots, preferredVersions) {
|
|
|
36
40
|
}
|
|
37
41
|
for (const [name, versions] of Object.entries(uniqueNameVersions)) {
|
|
38
42
|
for (const version of versions) {
|
|
39
|
-
preferredVersions[name] ??=
|
|
43
|
+
preferredVersions[name] ??= Object.create(null);
|
|
40
44
|
const existingSelector = preferredVersions[name][version];
|
|
41
45
|
if (existingSelector == null) {
|
|
42
46
|
preferredVersions[name][version] = { selectorType: 'version', weight: EXISTING_VERSION_SELECTOR_WEIGHT };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pnpm/lockfile.preferred-versions",
|
|
3
|
-
"version": "1100.0.
|
|
3
|
+
"version": "1100.0.18",
|
|
4
4
|
"description": "Get preferred version from lockfile",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pnpm",
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
"funding": "https://opencollective.com/pnpm",
|
|
13
13
|
"repository": {
|
|
14
14
|
"type": "git",
|
|
15
|
-
"url": "https://github.com/pnpm/pnpm/tree/main/lockfile/preferred-versions"
|
|
15
|
+
"url": "https://github.com/pnpm/pnpm/tree/main/pnpm11/lockfile/preferred-versions"
|
|
16
16
|
},
|
|
17
|
-
"homepage": "https://github.com/pnpm/pnpm/tree/main/lockfile/preferred-versions#readme",
|
|
17
|
+
"homepage": "https://github.com/pnpm/pnpm/tree/main/pnpm11/lockfile/preferred-versions#readme",
|
|
18
18
|
"bugs": {
|
|
19
19
|
"url": "https://github.com/pnpm/pnpm/issues"
|
|
20
20
|
},
|
|
@@ -30,13 +30,15 @@
|
|
|
30
30
|
],
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"version-selector-type": "^3.0.0",
|
|
33
|
-
"@pnpm/
|
|
33
|
+
"@pnpm/resolving.resolver-base": "1100.5.1",
|
|
34
|
+
"@pnpm/pkg-manifest.utils": "1100.2.6",
|
|
34
35
|
"@pnpm/types": "1101.3.2",
|
|
35
|
-
"@pnpm/
|
|
36
|
-
"@pnpm/pkg-manifest.utils": "1100.2.5"
|
|
36
|
+
"@pnpm/lockfile.utils": "1100.1.1"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@
|
|
39
|
+
"@jest/globals": "30.4.1",
|
|
40
|
+
"cross-env": "^10.1.0",
|
|
41
|
+
"@pnpm/lockfile.preferred-versions": "1100.0.18"
|
|
40
42
|
},
|
|
41
43
|
"engines": {
|
|
42
44
|
"node": ">=22.13"
|
|
@@ -45,8 +47,9 @@
|
|
|
45
47
|
"preset": "@pnpm/jest-config"
|
|
46
48
|
},
|
|
47
49
|
"scripts": {
|
|
48
|
-
"lint": "eslint \"src/**/*.ts\"",
|
|
49
|
-
"test": "pn compile",
|
|
50
|
+
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
51
|
+
"test": "pn compile && pn .test",
|
|
52
|
+
".test": "cross-env NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules --disable-warning=ExperimentalWarning --disable-warning=DEP0169\" jest",
|
|
50
53
|
"compile": "tsgo --build && pn lint --fix"
|
|
51
54
|
}
|
|
52
55
|
}
|