@pnpm/pkg-manifest.utils 1100.1.2 → 1100.1.3
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.
|
@@ -19,8 +19,17 @@ export function convertEnginesRuntimeToDependencies(manifest, enginesFieldName,
|
|
|
19
19
|
globalWarn(`Installation of ${runtimeName} versions is not supported in WebContainer`);
|
|
20
20
|
}
|
|
21
21
|
else {
|
|
22
|
-
manifest[dependenciesFieldName] ??= {};
|
|
23
|
-
|
|
22
|
+
const deps = (manifest[dependenciesFieldName] ??= {});
|
|
23
|
+
// Use Object.defineProperty so a future RUNTIME_NAMES entry that
|
|
24
|
+
// happens to match an inherited property name (`__proto__`,
|
|
25
|
+
// `constructor`, `prototype`) becomes a regular own data property
|
|
26
|
+
// instead of altering Object.prototype.
|
|
27
|
+
Object.defineProperty(deps, runtimeName, {
|
|
28
|
+
value: `runtime:${runtime.version}`,
|
|
29
|
+
enumerable: true,
|
|
30
|
+
writable: true,
|
|
31
|
+
configurable: true,
|
|
32
|
+
});
|
|
24
33
|
}
|
|
25
34
|
}
|
|
26
35
|
}
|
|
@@ -32,15 +32,15 @@ export async function updateProjectManifestObject(prefix, packageManifest, packa
|
|
|
32
32
|
const spec = packageSpec.bareSpecifier ?? findSpec(packageSpec.alias, packageManifest);
|
|
33
33
|
if (spec) {
|
|
34
34
|
packageManifest[packageSpec.saveType] = packageManifest[packageSpec.saveType] ?? {};
|
|
35
|
-
packageManifest[packageSpec.saveType]
|
|
35
|
+
defineDepEntry(packageManifest[packageSpec.saveType], packageSpec.alias, spec);
|
|
36
36
|
for (const deptype of DEPENDENCIES_FIELDS) {
|
|
37
37
|
if (deptype !== packageSpec.saveType) {
|
|
38
|
-
|
|
38
|
+
deleteDepEntry(packageManifest[deptype], packageSpec.alias);
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
if (packageSpec.peer === true) {
|
|
42
42
|
packageManifest.peerDependencies = packageManifest.peerDependencies ?? {};
|
|
43
|
-
packageManifest.peerDependencies
|
|
43
|
+
defineDepEntry(packageManifest.peerDependencies, packageSpec.alias, getPeerSpecifier(spec, packageSpec.resolvedVersion, packageSpec.pinnedVersion));
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
}
|
|
@@ -48,7 +48,7 @@ export async function updateProjectManifestObject(prefix, packageManifest, packa
|
|
|
48
48
|
const usedDepType = guessDependencyType(packageSpec.alias, packageManifest) ?? 'dependencies';
|
|
49
49
|
if (usedDepType !== 'peerDependencies') {
|
|
50
50
|
packageManifest[usedDepType] = packageManifest[usedDepType] ?? {};
|
|
51
|
-
packageManifest[usedDepType]
|
|
51
|
+
defineDepEntry(packageManifest[usedDepType], packageSpec.alias, packageSpec.bareSpecifier);
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
}
|
|
@@ -60,10 +60,40 @@ export async function updateProjectManifestObject(prefix, packageManifest, packa
|
|
|
60
60
|
}
|
|
61
61
|
function findSpec(alias, manifest) {
|
|
62
62
|
const foundDepType = guessDependencyType(alias, manifest);
|
|
63
|
-
|
|
63
|
+
if (foundDepType == null)
|
|
64
|
+
return undefined;
|
|
65
|
+
const deps = manifest[foundDepType];
|
|
66
|
+
return Object.hasOwn(deps, alias) ? deps[alias] : undefined;
|
|
64
67
|
}
|
|
65
68
|
export function guessDependencyType(alias, manifest) {
|
|
66
|
-
return DEPENDENCIES_OR_PEER_FIELDS
|
|
67
|
-
|
|
69
|
+
return DEPENDENCIES_OR_PEER_FIELDS.find((depField) => {
|
|
70
|
+
const deps = manifest[depField];
|
|
71
|
+
if (deps == null || !Object.hasOwn(deps, alias))
|
|
72
|
+
return false;
|
|
73
|
+
return deps[alias] === '' || Boolean(deps[alias]);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Write a dependency entry without risking prototype pollution: even when the
|
|
78
|
+
* alias matches a name like `__proto__`, `Object.defineProperty` creates a
|
|
79
|
+
* regular own data property rather than reaching through the setter.
|
|
80
|
+
*/
|
|
81
|
+
function defineDepEntry(target, alias, value) {
|
|
82
|
+
Object.defineProperty(target, alias, {
|
|
83
|
+
value,
|
|
84
|
+
enumerable: true,
|
|
85
|
+
writable: true,
|
|
86
|
+
configurable: true,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Mirror of `defineDepEntry` for deletes. The `Object.hasOwn` guard keeps the
|
|
91
|
+
* `delete` from reaching into the prototype chain when the alias matches an
|
|
92
|
+
* inherited property like `constructor`.
|
|
93
|
+
*/
|
|
94
|
+
function deleteDepEntry(target, alias) {
|
|
95
|
+
if (target != null && Object.hasOwn(target, alias)) {
|
|
96
|
+
delete target[alias];
|
|
97
|
+
}
|
|
68
98
|
}
|
|
69
99
|
//# sourceMappingURL=updateProjectManifestObject.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pnpm/pkg-manifest.utils",
|
|
3
|
-
"version": "1100.1.
|
|
3
|
+
"version": "1100.1.3",
|
|
4
4
|
"description": "Utils for dealing with package manifest",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pnpm",
|
|
@@ -25,10 +25,10 @@
|
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"semver": "^7.7.2",
|
|
28
|
-
"@pnpm/core-loggers": "1100.0.2",
|
|
29
|
-
"@pnpm/error": "1100.0.0",
|
|
30
28
|
"@pnpm/deps.peer-range": "1100.0.1",
|
|
31
|
-
"@pnpm/
|
|
29
|
+
"@pnpm/core-loggers": "1100.0.2",
|
|
30
|
+
"@pnpm/types": "1101.1.0",
|
|
31
|
+
"@pnpm/error": "1100.0.0"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"@pnpm/logger": ">=1001.0.0 <1002.0.0"
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@jest/globals": "30.3.0",
|
|
38
38
|
"@types/semver": "7.7.1",
|
|
39
|
-
"@pnpm/
|
|
40
|
-
"@pnpm/
|
|
39
|
+
"@pnpm/logger": "1100.0.0",
|
|
40
|
+
"@pnpm/pkg-manifest.utils": "1100.1.3"
|
|
41
41
|
},
|
|
42
42
|
"engines": {
|
|
43
43
|
"node": ">=22.13"
|