nx 21.3.0-canary.20250624-0ef8857 → 21.3.0-canary.20250626-8b6ad42

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.
@@ -9,6 +9,7 @@ const semver_1 = require("semver");
9
9
  const project_graph_1 = require("../../../config/project-graph");
10
10
  const file_hasher_1 = require("../../../hasher/file-hasher");
11
11
  const object_sort_1 = require("../../../utils/object-sort");
12
+ const get_workspace_packages_from_graph_1 = require("../utils/get-workspace-packages-from-graph");
12
13
  let currentLockFileHash;
13
14
  let cachedParsedLockFile;
14
15
  // we use key => node map to avoid duplicate work when parsing keys
@@ -244,7 +245,8 @@ function stringifyYarnLockfile(graph, rootLockFileContent, packageJson) {
244
245
  const { parseSyml, stringifySyml } = require('@yarnpkg/parsers');
245
246
  const { __metadata, ...dependencies } = parseSyml(rootLockFileContent);
246
247
  const isBerry = !!__metadata;
247
- const snapshots = mapSnapshots(dependencies, graph.externalNodes, packageJson, isBerry);
248
+ const workspaceModules = (0, get_workspace_packages_from_graph_1.getWorkspacePackagesFromGraph)(graph);
249
+ const snapshots = mapSnapshots(dependencies, graph.externalNodes, packageJson, workspaceModules, isBerry);
248
250
  if (isBerry) {
249
251
  // add root workspace package
250
252
  const workspacePackage = generateRootWorkspacePackage(packageJson);
@@ -293,7 +295,7 @@ function addPackageVersion(packageName, version, collection, isBerry) {
293
295
  collection.get(packageName).add(`${packageName}@npm:${version}`);
294
296
  }
295
297
  }
296
- function mapSnapshots(rootDependencies, nodes, packageJson, isBerry) {
298
+ function mapSnapshots(rootDependencies, nodes, packageJson, workspaceModules, isBerry) {
297
299
  // map snapshot to set of keys (e.g. `eslint@^7.0.0, eslint@npm:^7.0.0`)
298
300
  const snapshotMap = new Map();
299
301
  // track all existing dependencies's keys
@@ -311,7 +313,7 @@ function mapSnapshots(rootDependencies, nodes, packageJson, isBerry) {
311
313
  const groupedDependencies = groupDependencies(rootDependencies, isBerry);
312
314
  // collect snapshots and their matching keys
313
315
  Object.values(nodes).forEach((node) => {
314
- const foundOriginalKeys = findOriginalKeys(groupedDependencies, node);
316
+ const foundOriginalKeys = findOriginalKeys(groupedDependencies, node, workspaceModules);
315
317
  if (!foundOriginalKeys) {
316
318
  throw new Error(`Original key(s) not found for "${node.data.packageName}@${node.data.version}" while pruning yarn.lock.`);
317
319
  }
@@ -322,7 +324,7 @@ function mapSnapshots(rootDependencies, nodes, packageJson, isBerry) {
322
324
  Object.entries(section || {}).forEach(([name, versionSpec]) => addPackageVersion(name, versionSpec, existingKeys, isBerry));
323
325
  });
324
326
  // add package.json requested version to keys
325
- const requestedVersion = getPackageJsonVersion(combinedDependencies, node);
327
+ const requestedVersion = getPackageJsonVersion(combinedDependencies, node, workspaceModules);
326
328
  if (requestedVersion) {
327
329
  addPackageVersion(node.data.packageName, requestedVersion, existingKeys, isBerry);
328
330
  const requestedKey = isBerry
@@ -332,7 +334,7 @@ function mapSnapshots(rootDependencies, nodes, packageJson, isBerry) {
332
334
  snapshotMap.get(snapshot).add(requestedKey);
333
335
  }
334
336
  }
335
- const requestedResolutionsVersion = getPackageJsonVersion(resolutions, node);
337
+ const requestedResolutionsVersion = getPackageJsonVersion(resolutions, node, workspaceModules);
336
338
  if (requestedResolutionsVersion) {
337
339
  addPackageVersion(node.data.packageName, requestedResolutionsVersion, existingKeys, isBerry);
338
340
  const requestedKey = isBerry
@@ -394,8 +396,11 @@ function reverseMapBerryKey(node, version, snapshot) {
394
396
  }
395
397
  return `${node.data.packageName}@npm:${version}`;
396
398
  }
397
- function getPackageJsonVersion(dependencies, node) {
399
+ function getPackageJsonVersion(dependencies, node, workspaceModules) {
398
400
  const { packageName, version } = node.data;
401
+ if (workspaceModules.has(packageName)) {
402
+ return `file:./workspace_modules/${packageName}`;
403
+ }
399
404
  if (dependencies[packageName]) {
400
405
  const patchRegex = new RegExp(`^patch:${packageName}@(.*)|#.*$`);
401
406
  // extract the version from the patch or use the full version
@@ -416,13 +421,20 @@ function isClassicAlias(node, keys) {
416
421
  return (node.data.version.startsWith('npm:') &&
417
422
  keys.some((k) => k === `${node.data.packageName}@${node.data.version}`));
418
423
  }
419
- function findOriginalKeys(dependencies, node) {
424
+ function findOriginalKeys(dependencies, node, workspaceModules) {
420
425
  for (const keyExpr of Object.keys(dependencies)) {
421
426
  const snapshot = dependencies[keyExpr];
422
427
  const keys = keyExpr.split(', ');
423
428
  if (!keys.some((k) => k.startsWith(`${node.data.packageName}@`))) {
424
429
  continue;
425
430
  }
431
+ if (keys.some((k) => workspaceModules.has(k) || workspaceModules.has(k.split('@file:')[0]))) {
432
+ const packageName = keys[0].split('@file:')[0];
433
+ return [
434
+ [`${packageName}@file:./workspace_modules/${packageName}`],
435
+ snapshot,
436
+ ];
437
+ }
426
438
  if (isStandardPackage(snapshot, node.data.version) ||
427
439
  isBerryAlias(snapshot, node.data.version) ||
428
440
  isClassicAlias(node, keys)) {
@@ -0,0 +1,2 @@
1
+ import { type ProjectGraph, ProjectGraphProjectNode } from '../../../config/project-graph';
2
+ export declare function getWorkspacePackagesFromGraph(graph: ProjectGraph): Map<string, ProjectGraphProjectNode>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWorkspacePackagesFromGraph = getWorkspacePackagesFromGraph;
4
+ function getWorkspacePackagesFromGraph(graph) {
5
+ const workspacePackages = new Map();
6
+ for (const [projectName, project] of Object.entries(graph.nodes)) {
7
+ const pkgName = project.data?.metadata?.js?.packageName;
8
+ if (pkgName) {
9
+ workspacePackages.set(pkgName, project);
10
+ }
11
+ }
12
+ return workspacePackages;
13
+ }