@pnpm/workspace.project-manifest-reader 1100.0.13 → 1100.0.14

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.
Files changed (2) hide show
  1. package/lib/index.js +42 -7
  2. package/package.json +8 -8
package/lib/index.js CHANGED
@@ -194,10 +194,11 @@ function convertManifestBeforeWrite(manifest) {
194
194
  return manifest;
195
195
  }
196
196
  function convertDependenciesToEnginesRuntime(manifest, dependenciesFieldName, enginesFieldName) {
197
+ const dependencies = readDependenciesField(manifest, dependenciesFieldName);
197
198
  for (const runtimeName of ['node', 'deno', 'bun']) {
198
- const dep = manifest[dependenciesFieldName]?.[runtimeName];
199
- if (typeof dep === 'string' && dep.startsWith('runtime:')) {
200
- const version = dep.replace(/^runtime:/, '');
199
+ const dep = dependencies?.[runtimeName];
200
+ if (dependencies != null && typeof dep === 'string' && dep.startsWith('runtime:')) {
201
+ const version = dep.slice('runtime:'.length).trim();
201
202
  manifest[enginesFieldName] ??= {};
202
203
  const runtimeEntry = {
203
204
  name: runtimeName,
@@ -226,11 +227,42 @@ function convertDependenciesToEnginesRuntime(manifest, dependenciesFieldName, en
226
227
  runtimeEntry,
227
228
  ];
228
229
  }
229
- if (manifest[dependenciesFieldName]) {
230
- delete manifest[dependenciesFieldName][runtimeName];
231
- }
230
+ delete dependencies[runtimeName];
231
+ }
232
+ else {
233
+ removeManagedRuntimeEntry(manifest[enginesFieldName], runtimeName);
234
+ }
235
+ }
236
+ }
237
+ function readDependenciesField(manifest, dependenciesFieldName) {
238
+ const dependencies = manifest[dependenciesFieldName];
239
+ if (dependencies === undefined)
240
+ return undefined;
241
+ if (dependencies === null || typeof dependencies !== 'object' || Array.isArray(dependencies)) {
242
+ throw new PnpmError('INVALID_DEPENDENCIES_FIELD', `The "${dependenciesFieldName}" field must be an object.`);
243
+ }
244
+ return dependencies;
245
+ }
246
+ function removeManagedRuntimeEntry(enginesField, runtimeName) {
247
+ if (!enginesField?.runtime)
248
+ return;
249
+ if (Array.isArray(enginesField.runtime)) {
250
+ const runtimes = enginesField.runtime.filter((runtime) => !isManagedRuntimeEntry(runtime, runtimeName));
251
+ if (runtimes.length === 0) {
252
+ delete enginesField.runtime;
253
+ }
254
+ else {
255
+ enginesField.runtime = runtimes;
232
256
  }
233
257
  }
258
+ else if (isManagedRuntimeEntry(enginesField.runtime, runtimeName)) {
259
+ delete enginesField.runtime;
260
+ }
261
+ }
262
+ function isManagedRuntimeEntry(runtime, runtimeName) {
263
+ return runtime.name === runtimeName &&
264
+ runtime.onFail === 'download' &&
265
+ typeof runtime.version === 'string';
234
266
  }
235
267
  const dependencyKeys = new Set([
236
268
  'dependencies',
@@ -243,7 +275,10 @@ function normalize(manifest) {
243
275
  for (const key in manifest) {
244
276
  if (Object.hasOwn(manifest, key)) {
245
277
  const value = manifest[key];
246
- if (typeof value !== 'object' || value === null || !dependencyKeys.has(key)) {
278
+ if (typeof value !== 'object' ||
279
+ value === null ||
280
+ !dependencyKeys.has(key) ||
281
+ Array.isArray(value)) {
247
282
  result[key] = structuredClone(value);
248
283
  }
249
284
  else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pnpm/workspace.project-manifest-reader",
3
- "version": "1100.0.13",
3
+ "version": "1100.0.14",
4
4
  "description": "Read a project manifest (called package.json in most cases)",
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/workspace/project-manifest-reader"
13
+ "url": "https://github.com/pnpm/pnpm/tree/main/pnpm11/workspace/project-manifest-reader"
14
14
  },
15
- "homepage": "https://github.com/pnpm/pnpm/tree/main/workspace/project-manifest-reader#readme",
15
+ "homepage": "https://github.com/pnpm/pnpm/tree/main/pnpm11/workspace/project-manifest-reader#readme",
16
16
  "bugs": {
17
17
  "url": "https://github.com/pnpm/pnpm/issues"
18
18
  },
@@ -35,12 +35,12 @@
35
35
  "parse-json": "^8.3.0",
36
36
  "read-yaml-file": "^3.0.0",
37
37
  "strip-bom": "^5.0.0",
38
- "@pnpm/error": "1100.0.0",
39
- "@pnpm/pkg-manifest.utils": "1100.2.5",
38
+ "@pnpm/error": "1100.0.1",
39
+ "@pnpm/fs.graceful-fs": "1100.1.0",
40
40
  "@pnpm/text.comments-parser": "1100.0.0",
41
41
  "@pnpm/types": "1101.3.2",
42
42
  "@pnpm/workspace.project-manifest-writer": "1100.0.8",
43
- "@pnpm/fs.graceful-fs": "1100.1.0"
43
+ "@pnpm/pkg-manifest.utils": "1100.2.6"
44
44
  },
45
45
  "peerDependencies": {
46
46
  "@pnpm/logger": "^1100.0.0"
@@ -50,8 +50,8 @@
50
50
  "@types/is-windows": "^1.0.2",
51
51
  "@types/parse-json": "^7.0.0",
52
52
  "tempy": "3.0.0",
53
- "@pnpm/workspace.project-manifest-reader": "1100.0.13",
54
- "@pnpm/test-fixtures": "1100.0.0"
53
+ "@pnpm/test-fixtures": "1100.0.0",
54
+ "@pnpm/workspace.project-manifest-reader": "1100.0.14"
55
55
  },
56
56
  "engines": {
57
57
  "node": ">=22.13"