Skip to content

Commit f3465a9

Browse files
authored
fix(core): consult root package.json when resolving peer deps on package generation (#13949)
1 parent d3e2d61 commit f3465a9

File tree

1 file changed

+33
-16
lines changed

1 file changed

+33
-16
lines changed

packages/nx/src/utils/create-package-json.ts

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,28 @@ export function createPackageJson(
5656
});
5757
Object.entries(npmDeps.peerDependencies).forEach(([packageName, version]) => {
5858
if (!packageJson.peerDependencies?.[packageName]) {
59-
packageJson.dependencies ??= {};
60-
packageJson.dependencies[packageName] = version;
59+
if (rootPackageJson.dependencies?.[packageName]) {
60+
packageJson.dependencies ??= {};
61+
packageJson.dependencies[packageName] = version;
62+
return;
63+
}
64+
65+
const isOptionalPeer =
66+
npmDeps.peerDependenciesMeta[packageName]?.optional;
67+
if (!isOptionalPeer) {
68+
packageJson.peerDependencies ??= {};
69+
packageJson.peerDependencies[packageName] = version;
70+
} else if (!options.isProduction) {
71+
// add peer optional dependencies if not in production
72+
packageJson.peerDependencies ??= {};
73+
packageJson.peerDependencies[packageName] = version;
74+
packageJson.peerDependenciesMeta ??= {};
75+
packageJson.peerDependenciesMeta[packageName] = {
76+
optional: true,
77+
};
78+
}
6179
}
6280
});
63-
if (options.isProduction && packageJson.peerDependencies) {
64-
const mandatoryPeedDeps = filterOptionalPeerDependencies(packageJson);
65-
if (mandatoryPeedDeps) {
66-
packageJson.peerDependencies = mandatoryPeedDeps;
67-
} else {
68-
delete packageJson.peerDependencies;
69-
}
70-
}
7181

7282
packageJson.devDependencies &&= sortObjectByKeys(packageJson.devDependencies);
7383
packageJson.dependencies &&= sortObjectByKeys(packageJson.dependencies);
@@ -87,7 +97,8 @@ function findAllNpmDeps(
8797
list: {
8898
dependencies: Record<string, string>;
8999
peerDependencies: Record<string, string>;
90-
} = { dependencies: {}, peerDependencies: {} },
100+
peerDependenciesMeta: Record<string, { optional: boolean }>;
101+
} = { dependencies: {}, peerDependencies: {}, peerDependenciesMeta: {} },
91102
seen = new Set<string>()
92103
) {
93104
const node = graph.externalNodes[projectName];
@@ -125,6 +136,7 @@ function recursivelyCollectPeerDependencies(
125136
list: {
126137
dependencies: Record<string, string>;
127138
peerDependencies: Record<string, string>;
139+
peerDependenciesMeta: Record<string, { optional: boolean }>;
128140
},
129141
seen = new Set<string>()
130142
) {
@@ -145,13 +157,18 @@ function recursivelyCollectPeerDependencies(
145157
.map((dependency) => graph.externalNodes[dependency])
146158
.filter(Boolean)
147159
.forEach((node) => {
148-
if (
149-
!packageJson.peerDependenciesMeta?.[node.data.packageName]
150-
?.optional &&
151-
!seen.has(node.name)
152-
) {
160+
if (!seen.has(node.name)) {
153161
seen.add(node.name);
154162
list.peerDependencies[node.data.packageName] = node.data.version;
163+
if (
164+
packageJson.peerDependenciesMeta &&
165+
packageJson.peerDependenciesMeta[node.data.packageName] &&
166+
packageJson.peerDependenciesMeta[node.data.packageName].optional
167+
) {
168+
list.peerDependenciesMeta[node.data.packageName] = {
169+
optional: true,
170+
};
171+
}
155172
recursivelyCollectPeerDependencies(node.name, graph, list, seen);
156173
}
157174
});

0 commit comments

Comments
 (0)