nx 20.8.0-canary.20250401-b8e4325 → 20.8.0-canary.20250402-2d210b8

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.
@@ -1 +1 @@
1
- "use strict";(self.webpackChunk=self.webpackChunk||[]).push([[532],{3968:()=>{}},s=>{var e;e=3968,s(s.s=e)}]);
1
+ "use strict";(self.webpackChunk=self.webpackChunk||[]).push([[532],{2341:()=>{}},s=>{var e;e=2341,s(s.s=e)}]);
@@ -111,7 +111,7 @@ export declare class WorkspaceContext {
111
111
 
112
112
  export interface CachedResult {
113
113
  code: number
114
- terminalOutput: string
114
+ terminalOutput?: string
115
115
  outputsPath: string
116
116
  size?: number
117
117
  }
Binary file
@@ -3,7 +3,7 @@ import { PackageJson } from '../../../../utils/package-json';
3
3
  * Get version of hoisted package if available
4
4
  */
5
5
  export declare function getHoistedPackageVersion(packageName: string): string;
6
- export type NormalizedPackageJson = Pick<PackageJson, 'name' | 'version' | 'license' | 'dependencies' | 'devDependencies' | 'peerDependencies' | 'peerDependenciesMeta' | 'optionalDependencies' | 'packageManager'>;
6
+ export type NormalizedPackageJson = Pick<PackageJson, 'name' | 'version' | 'license' | 'dependencies' | 'devDependencies' | 'peerDependencies' | 'peerDependenciesMeta' | 'optionalDependencies' | 'packageManager' | 'resolutions'>;
7
7
  /**
8
8
  * Strip off non-pruning related fields from package.json
9
9
  */
@@ -19,7 +19,7 @@ function getHoistedPackageVersion(packageName) {
19
19
  * Strip off non-pruning related fields from package.json
20
20
  */
21
21
  function normalizePackageJson(packageJson) {
22
- const { name, version, license, dependencies, devDependencies, peerDependencies, peerDependenciesMeta, optionalDependencies, packageManager, } = packageJson;
22
+ const { name, version, license, dependencies, devDependencies, peerDependencies, peerDependenciesMeta, optionalDependencies, packageManager, resolutions, } = packageJson;
23
23
  return {
24
24
  name,
25
25
  version,
@@ -30,5 +30,6 @@ function normalizePackageJson(packageJson) {
30
30
  peerDependenciesMeta,
31
31
  optionalDependencies,
32
32
  packageManager,
33
+ resolutions,
33
34
  };
34
35
  }
@@ -203,8 +203,26 @@ function getDependencies(dependencies, ctx) {
203
203
  [snapshot.dependencies, snapshot.optionalDependencies].forEach((section) => {
204
204
  if (section) {
205
205
  Object.entries(section).forEach(([name, versionRange]) => {
206
- const target = keyMap.get(`${name}@npm:${versionRange}`) ||
206
+ let target = keyMap.get(`${name}@npm:${versionRange}`) ||
207
207
  keyMap.get(`${name}@${versionRange}`);
208
+ if (!target) {
209
+ const shortRange = versionRange.replace(/^npm:/, '');
210
+ // for range like 'npm:*' the above will not be a match
211
+ if (shortRange === '*') {
212
+ const foundKey = Array.from(keyMap.keys()).find((k) => k.startsWith(`${name}@`));
213
+ if (foundKey) {
214
+ target = keyMap.get(foundKey);
215
+ }
216
+ }
217
+ else if (shortRange.includes('||')) {
218
+ // when range is a union of ranges, we need to treat it as an array
219
+ const ranges = shortRange.split('||').map((r) => r.trim());
220
+ target = Object.values(keyMap).find((n) => {
221
+ return (n.data.packageName === name &&
222
+ ranges.some((r) => (0, semver_1.satisfies)(n.data.version, r)));
223
+ })?.[1];
224
+ }
225
+ }
208
226
  if (target) {
209
227
  const dep = {
210
228
  source: node.name,
@@ -271,11 +289,11 @@ function addPackageVersion(packageName, version, collection, isBerry) {
271
289
  collection.set(packageName, new Set());
272
290
  }
273
291
  collection.get(packageName).add(`${packageName}@${version}`);
274
- if (isBerry && !version.startsWith('npm:')) {
292
+ if (isBerry && !version.startsWith('npm:') && !version.startsWith('patch:')) {
275
293
  collection.get(packageName).add(`${packageName}@npm:${version}`);
276
294
  }
277
295
  }
278
- function mapSnapshots(dependencies, nodes, packageJson, isBerry) {
296
+ function mapSnapshots(rootDependencies, nodes, packageJson, isBerry) {
279
297
  // map snapshot to set of keys (e.g. `eslint@^7.0.0, eslint@npm:^7.0.0`)
280
298
  const snapshotMap = new Map();
281
299
  // track all existing dependencies's keys
@@ -286,8 +304,11 @@ function mapSnapshots(dependencies, nodes, packageJson, isBerry) {
286
304
  ...packageJson.optionalDependencies,
287
305
  ...packageJson.peerDependencies,
288
306
  };
307
+ const resolutions = {
308
+ ...packageJson.resolutions,
309
+ };
289
310
  // yarn classic splits keys when parsing so we need to stich them back together
290
- const groupedDependencies = groupDependencies(dependencies, isBerry);
311
+ const groupedDependencies = groupDependencies(rootDependencies, isBerry);
291
312
  // collect snapshots and their matching keys
292
313
  Object.values(nodes).forEach((node) => {
293
314
  const foundOriginalKeys = findOriginalKeys(groupedDependencies, node);
@@ -311,9 +332,19 @@ function mapSnapshots(dependencies, nodes, packageJson, isBerry) {
311
332
  snapshotMap.get(snapshot).add(requestedKey);
312
333
  }
313
334
  }
335
+ const requestedResolutionsVersion = getPackageJsonVersion(resolutions, node);
336
+ if (requestedResolutionsVersion) {
337
+ addPackageVersion(node.data.packageName, requestedResolutionsVersion, existingKeys, isBerry);
338
+ const requestedKey = isBerry
339
+ ? reverseMapBerryKey(node, requestedResolutionsVersion, snapshot)
340
+ : `${node.data.packageName}@${requestedResolutionsVersion}`;
341
+ if (!snapshotMap.get(snapshot).has(requestedKey)) {
342
+ snapshotMap.get(snapshot).add(requestedKey);
343
+ }
344
+ }
314
345
  if (isBerry) {
315
346
  // look for patched versions
316
- const patch = findPatchedKeys(groupedDependencies, node);
347
+ const patch = findPatchedKeys(groupedDependencies, node, resolutions[node.data.packageName]);
317
348
  if (patch) {
318
349
  const [matchedKeys, snapshot] = patch;
319
350
  snapshotMap.set(snapshot, new Set(matchedKeys));
@@ -321,7 +352,7 @@ function mapSnapshots(dependencies, nodes, packageJson, isBerry) {
321
352
  }
322
353
  });
323
354
  // remove keys that match version ranges that have been pruned away
324
- snapshotMap.forEach((snapshotValue, snapshotKey) => {
355
+ snapshotMap.forEach((snapshotValue, snapshot) => {
325
356
  for (const key of snapshotValue.values()) {
326
357
  const packageName = key.slice(0, key.indexOf('@', 1));
327
358
  let normalizedKey = key;
@@ -353,8 +384,8 @@ function mapSnapshots(dependencies, nodes, packageJson, isBerry) {
353
384
  }
354
385
  function reverseMapBerryKey(node, version, snapshot) {
355
386
  // alias packages already have version
356
- if (version.startsWith('npm:')) {
357
- `${node.data.packageName}@${version}`;
387
+ if (version.startsWith('npm:') || version.startsWith('patch:')) {
388
+ return `${node.data.packageName}@${version}`;
358
389
  }
359
390
  // check for berry tarball packages
360
391
  if (snapshot.resolution &&
@@ -363,15 +394,28 @@ function reverseMapBerryKey(node, version, snapshot) {
363
394
  }
364
395
  return `${node.data.packageName}@npm:${version}`;
365
396
  }
366
- function getPackageJsonVersion(combinedDependencies, node) {
397
+ function getPackageJsonVersion(dependencies, node) {
367
398
  const { packageName, version } = node.data;
368
- if (combinedDependencies[packageName]) {
369
- if (combinedDependencies[packageName] === version ||
370
- (0, semver_1.satisfies)(version, combinedDependencies[packageName])) {
371
- return combinedDependencies[packageName];
399
+ if (dependencies[packageName]) {
400
+ const patchRegex = new RegExp(`^patch:${packageName}@(.*)|#.*$`);
401
+ // extract the version from the patch or use the full version
402
+ const versionRange = dependencies[packageName].match(patchRegex)?.[1] ||
403
+ dependencies[packageName];
404
+ if (versionRange === version || (0, semver_1.satisfies)(version, versionRange)) {
405
+ return dependencies[packageName];
372
406
  }
373
407
  }
374
408
  }
409
+ function isStandardPackage(snapshot, version) {
410
+ return snapshot.version === version;
411
+ }
412
+ function isBerryAlias(snapshot, version) {
413
+ return snapshot.resolution && `npm:${snapshot.resolution}` === version;
414
+ }
415
+ function isClassicAlias(node, keys) {
416
+ return (node.data.version.startsWith('npm:') &&
417
+ keys.some((k) => k === `${node.data.packageName}@${node.data.version}`));
418
+ }
375
419
  function findOriginalKeys(dependencies, node) {
376
420
  for (const keyExpr of Object.keys(dependencies)) {
377
421
  const snapshot = dependencies[keyExpr];
@@ -379,18 +423,9 @@ function findOriginalKeys(dependencies, node) {
379
423
  if (!keys.some((k) => k.startsWith(`${node.data.packageName}@`))) {
380
424
  continue;
381
425
  }
382
- // standard package
383
- if (snapshot.version === node.data.version) {
384
- return [keys, snapshot];
385
- }
386
- // berry alias package
387
- if (snapshot.resolution &&
388
- `npm:${snapshot.resolution}` === node.data.version) {
389
- return [keys, snapshot];
390
- }
391
- // classic alias
392
- if (node.data.version.startsWith('npm:') &&
393
- keys.some((k) => k === `${node.data.packageName}@${node.data.version}`)) {
426
+ if (isStandardPackage(snapshot, node.data.version) ||
427
+ isBerryAlias(snapshot, node.data.version) ||
428
+ isClassicAlias(node, keys)) {
394
429
  return [keys, snapshot];
395
430
  }
396
431
  // tarball package
@@ -400,16 +435,27 @@ function findOriginalKeys(dependencies, node) {
400
435
  }
401
436
  }
402
437
  }
403
- function findPatchedKeys(dependencies, node) {
438
+ function findPatchedKeys(dependencies, node, resolutionVersion) {
404
439
  for (const keyExpr of Object.keys(dependencies)) {
405
440
  const snapshot = dependencies[keyExpr];
406
441
  const keys = keyExpr.split(', ');
407
442
  if (!keys[0].startsWith(`${node.data.packageName}@patch:`)) {
408
443
  continue;
409
444
  }
410
- // local patches are currently not supported
411
- if (keys[0].includes('.yarn/patches')) {
412
- continue;
445
+ if (keyExpr.includes('.yarn/patches')) {
446
+ if (!resolutionVersion) {
447
+ continue;
448
+ }
449
+ const key = `${node.data.packageName}@${resolutionVersion}`;
450
+ // local patches can have different location from than the root lock file
451
+ // use the one from local package.json as the source of truth as long as the rest of the patch matches
452
+ // this obviously doesn't cover the case of patch over a patch, but that's a super rare case and one can argue one can just join those two patches
453
+ if (key.split('::locator')[0] !== keyExpr.split('::locator')[0]) {
454
+ continue;
455
+ }
456
+ else {
457
+ return [[key], { ...snapshot, resolution: key }];
458
+ }
413
459
  }
414
460
  if (snapshot.version === node.data.version) {
415
461
  return [keys, snapshot];
@@ -88,6 +88,7 @@ class DbCache {
88
88
  if (res) {
89
89
  return {
90
90
  ...res,
91
+ terminalOutput: res.terminalOutput ?? '',
91
92
  remote: false,
92
93
  };
93
94
  }
@@ -99,6 +100,7 @@ class DbCache {
99
100
  this.applyRemoteCacheResults(task.hash, res, task.outputs);
100
101
  return {
101
102
  ...res,
103
+ terminalOutput: res.terminalOutput ?? '',
102
104
  remote: true,
103
105
  };
104
106
  }