Skip to content

Commit 3c98a1c

Browse files
authored
fix(core): update yarn-parser to handle yarn v4 syntax for root workspace package (#29452)
<!-- Please make sure you have read the submission guidelines before posting an PR --> <!-- https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr --> <!-- Please make sure that your commit message follows our format --> <!-- Example: `fix(nx): must begin with lowercase` --> <!-- If this is a particularly complex change or feature addition, you can request a dedicated Nx release for this pull request branch. Mention someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they will confirm if the PR warrants its own release for testing purposes, and generate it for you if appropriate. --> ## Current Behavior The root workspace package is not generated correctly when using Yarn v4 ## Expected Behavior yarn.lock should be created correctly ## Related Issue(s) Fixes #29451
1 parent cf206c3 commit 3c98a1c

File tree

3 files changed

+34
-5
lines changed

3 files changed

+34
-5
lines changed

packages/nx/src/plugins/js/lock-file/utils/package-json.ts

+3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export type NormalizedPackageJson = Pick<
2525
| 'peerDependencies'
2626
| 'peerDependenciesMeta'
2727
| 'optionalDependencies'
28+
| 'packageManager'
2829
>;
2930

3031
/**
@@ -42,6 +43,7 @@ export function normalizePackageJson(
4243
peerDependencies,
4344
peerDependenciesMeta,
4445
optionalDependencies,
46+
packageManager,
4547
} = packageJson;
4648

4749
return {
@@ -53,5 +55,6 @@ export function normalizePackageJson(
5355
peerDependencies,
5456
peerDependenciesMeta,
5557
optionalDependencies,
58+
packageManager,
5659
};
5760
}

packages/nx/src/plugins/js/lock-file/yarn-parser.spec.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -2596,6 +2596,7 @@ __metadata:
25962596
dependencies: {
25972597
resolve: '^1.12.0',
25982598
},
2599+
packageManager: '[email protected]',
25992600
};
26002601

26012602
const hash = uniq('mock-hash');
@@ -2721,6 +2722,7 @@ __metadata:
27212722
dependencies: {
27222723
resolve: '^1.12.0',
27232724
},
2725+
packageManager: '[email protected]',
27242726
};
27252727

27262728
const hash = uniq('mock-hash');
@@ -2771,7 +2773,7 @@ __metadata:
27712773
version: 0.0.0-use.local
27722774
resolution: "@my-ns/example@workspace:."
27732775
dependencies:
2774-
resolve: ^1.12.0
2776+
resolve: "npm:^1.12.0"
27752777
languageName: unknown
27762778
linkType: soft
27772779

packages/nx/src/plugins/js/lock-file/yarn-parser.ts

+28-4
Original file line numberDiff line numberDiff line change
@@ -602,18 +602,42 @@ const BERRY_LOCK_FILE_DISCLAIMER = `# This file is generated by running "yarn in
602602
function generateRootWorkspacePackage(
603603
packageJson: NormalizedPackageJson
604604
): YarnDependency {
605+
let isVersion4 = false;
606+
if (!!packageJson.packageManager) {
607+
const [_, version] = packageJson.packageManager.split('@');
608+
isVersion4 = !!version && satisfies(version, '>=4.0.0');
609+
}
610+
611+
const reducer = (acc, [name, version]) => {
612+
acc[name] = isVersion4 ? `npm:${version}` : version;
613+
return acc;
614+
};
615+
605616
return {
606617
version: '0.0.0-use.local',
607618
resolution: `${packageJson.name}@workspace:.`,
608-
...(packageJson.dependencies && { dependencies: packageJson.dependencies }),
619+
...(packageJson.dependencies && {
620+
dependencies: Object.entries(packageJson.dependencies).reduce(
621+
reducer,
622+
{}
623+
),
624+
}),
609625
...(packageJson.peerDependencies && {
610-
peerDependencies: packageJson.peerDependencies,
626+
peerDependencies: Object.entries(packageJson.peerDependencies).reduce(
627+
reducer,
628+
{}
629+
),
611630
}),
612631
...(packageJson.devDependencies && {
613-
devDependencies: packageJson.devDependencies,
632+
devDependencies: Object.entries(packageJson.devDependencies).reduce(
633+
reducer,
634+
{}
635+
),
614636
}),
615637
...(packageJson.optionalDependencies && {
616-
optionalDependencies: packageJson.optionalDependencies,
638+
optionalDependencies: Object.entries(
639+
packageJson.optionalDependencies
640+
).reduce(reducer, {}),
617641
}),
618642
languageName: 'unknown',
619643
linkType: 'soft',

0 commit comments

Comments
 (0)