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.
- package/package.json +11 -11
- package/src/command-line/migrate/migrate-ui-api.d.ts +20 -3
- package/src/command-line/migrate/migrate-ui-api.js +115 -12
- package/src/command-line/migrate/run-migration-process.js +85 -0
- package/src/core/graph/main.js +1 -1
- package/src/core/graph/styles.css +1 -1
- package/src/native/nx.wasm32-wasi.wasm +0 -0
- package/src/plugins/js/lock-file/lock-file.d.ts +1 -0
- package/src/plugins/js/lock-file/lock-file.js +1 -0
- package/src/plugins/js/lock-file/npm-parser.js +42 -3
- package/src/plugins/js/lock-file/pnpm-parser.js +43 -16
- package/src/plugins/js/lock-file/project-graph-pruning.d.ts +4 -1
- package/src/plugins/js/lock-file/project-graph-pruning.js +32 -5
- package/src/plugins/js/lock-file/yarn-parser.js +19 -7
- package/src/plugins/js/utils/get-workspace-packages-from-graph.d.ts +2 -0
- package/src/plugins/js/utils/get-workspace-packages-from-graph.js +13 -0
@@ -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
|
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,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
|
+
}
|