Skip to content

Commit bdfc76b

Browse files
authored
fix: ensure correct dependency graph extraction order and yarn berry _dependencies support (#9439)
1 parent 8d3c7de commit bdfc76b

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

.changeset/public-shirts-listen.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"app-builder-lib": patch
3+
---
4+
5+
fix: ensure correct dependency graph extraction order and yarn berry \_dependencies support

packages/app-builder-lib/src/node-module-collector/npmNodeModulesCollector.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,17 +45,18 @@ export class NpmNodeModulesCollector extends NodeModulesCollector<NpmDependency,
4545
// After initialization, if there are libraries with the same name+version later, they will not be searched recursively again
4646
// This will prevents infinite loops when circular dependencies are encountered.
4747
this.productionGraph[dependencyId] = { dependencies: [] }
48-
const productionDeps = Object.entries(resolvedDeps || {})
49-
.filter(([packageName]) => this.isProdDependency(packageName, tree))
50-
.map(async ([, dependency]) => {
51-
const childDependencyId = this.packageVersionString(dependency)
52-
await this.extractProductionDependencyGraph(dependency, childDependencyId)
53-
return childDependencyId
54-
})
5548

5649
const collectedDependencies: string[] = []
57-
for (const dep of productionDeps) {
58-
collectedDependencies.push(await dep)
50+
if (resolvedDeps && Object.keys(resolvedDeps).length > 0) {
51+
for (const packageName in resolvedDeps) {
52+
if (!this.isProdDependency(packageName, tree)) {
53+
continue
54+
}
55+
const dependency = resolvedDeps[packageName]
56+
const childDependencyId = this.packageVersionString(dependency)
57+
await this.extractProductionDependencyGraph(dependency, childDependencyId)
58+
collectedDependencies.push(childDependencyId)
59+
}
5960
}
6061
this.productionGraph[dependencyId] = { dependencies: collectedDependencies }
6162
}

packages/app-builder-lib/src/node-module-collector/yarnBerryNodeModulesCollector.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export class YarnBerryNodeModulesCollector extends NpmNodeModulesCollector {
3636
}
3737

3838
protected isProdDependency(packageName: string, tree: NpmDependency): boolean {
39-
return tree.dependencies?.[packageName] != null || tree.optionalDependencies?.[packageName] != null
39+
return tree._dependencies?.[packageName] != null || tree.dependencies?.[packageName] != null || tree.optionalDependencies?.[packageName] != null
4040
}
4141

4242
private async detectYarnSetup(rootDir: string): Promise<YarnSetupInfo> {

0 commit comments

Comments
 (0)