From 7eb62750f84fb3902ac3df65e33a72896279c666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leosvel=20P=C3=A9rez=20Espinosa?= Date: Wed, 16 Mar 2022 10:59:33 +0000 Subject: [PATCH] fix(angular): update library package.json only with direct dependencies --- .../ng-packagr-lite.impl.spec.ts | 1 + .../executors/package/package.impl.spec.ts | 1 + .../src/executors/package/package.impl.ts | 19 +++++----- .../src/utilities/buildable-libs-utils.ts | 37 +++++++++++++------ 4 files changed, 37 insertions(+), 21 deletions(-) diff --git a/packages/angular/src/executors/ng-packagr-lite/ng-packagr-lite.impl.spec.ts b/packages/angular/src/executors/ng-packagr-lite/ng-packagr-lite.impl.spec.ts index 1da41aa47f374..258edc56cb039 100644 --- a/packages/angular/src/executors/ng-packagr-lite/ng-packagr-lite.impl.spec.ts +++ b/packages/angular/src/executors/ng-packagr-lite/ng-packagr-lite.impl.spec.ts @@ -31,6 +31,7 @@ describe('NgPackagrLite executor', () => { ).mockImplementation(() => ({ target: {}, dependencies: [], + topLevelDependencies: [], })); ngPackagrBuildMock = jest.fn(() => Promise.resolve()); diff --git a/packages/angular/src/executors/package/package.impl.spec.ts b/packages/angular/src/executors/package/package.impl.spec.ts index 31710978fc93b..71fa88759a3ad 100644 --- a/packages/angular/src/executors/package/package.impl.spec.ts +++ b/packages/angular/src/executors/package/package.impl.spec.ts @@ -31,6 +31,7 @@ describe('Package executor', () => { ).mockImplementation(() => ({ target: {}, dependencies: [], + topLevelDependencies: [], })); ngPackagrBuildMock = jest.fn(() => Promise.resolve()); ngPackagerWatchSubject = new BehaviorSubject(undefined); diff --git a/packages/angular/src/executors/package/package.impl.ts b/packages/angular/src/executors/package/package.impl.ts index c8b3cba34fbbc..4326c423ffe32 100644 --- a/packages/angular/src/executors/package/package.impl.ts +++ b/packages/angular/src/executors/package/package.impl.ts @@ -66,13 +66,14 @@ export function createLibraryExecutor( options: BuildAngularLibraryExecutorOptions, context: ExecutorContext ) { - const { target, dependencies } = calculateProjectDependencies( - readCachedProjectGraph(), - context.root, - context.projectName, - context.targetName, - context.configurationName - ); + const { target, dependencies, topLevelDependencies } = + calculateProjectDependencies( + readCachedProjectGraph(), + context.root, + context.projectName, + context.targetName, + context.configurationName + ); if ( !checkDependentProjectsHaveBeenBuilt( context.root, @@ -86,7 +87,7 @@ export function createLibraryExecutor( function updatePackageJson(): void { if ( - dependencies.length > 0 && + topLevelDependencies.length > 0 && options.updateBuildableProjectDepsInPackageJson ) { updateBuildableProjectPackageJsonDependencies( @@ -95,7 +96,7 @@ export function createLibraryExecutor( context.targetName, context.configurationName, target, - dependencies, + topLevelDependencies, options.buildableProjectDepsInPackageJsonType ); } diff --git a/packages/workspace/src/utilities/buildable-libs-utils.ts b/packages/workspace/src/utilities/buildable-libs-utils.ts index 6c01431bfa8f0..af0dac471c4fc 100644 --- a/packages/workspace/src/utilities/buildable-libs-utils.ts +++ b/packages/workspace/src/utilities/buildable-libs-utils.ts @@ -38,12 +38,15 @@ export function calculateProjectDependencies( target: ProjectGraphProjectNode; dependencies: DependentBuildableProjectNode[]; nonBuildableDependencies: string[]; + topLevelDependencies: DependentBuildableProjectNode[]; } { const target = projGraph.nodes[projectName]; // gather the library dependencies const nonBuildableDependencies = []; + const topLevelDependencies: DependentBuildableProjectNode[] = []; const dependencies = collectDependencies(projectName, projGraph, [], shallow) - .map((dep) => { + .map(({ name: dep, isTopLevel }) => { + let project: DependentBuildableProjectNode = null; const depNode = projGraph.nodes[dep] || projGraph.externalNodes[dep]; if (depNode.type === ProjectType.lib) { if (isBuildable(targetName, depNode)) { @@ -51,7 +54,7 @@ export function calculateProjectDependencies( join(root, depNode.data.root, 'package.json') ); - return { + project = { name: libPackageJson.name, // i.e. @workspace/mylib outputs: getOutputsForTargetAndConfiguration( { @@ -70,30 +73,40 @@ export function calculateProjectDependencies( nonBuildableDependencies.push(dep); } } else if (depNode.type === 'npm') { - return { + project = { name: depNode.data.packageName, outputs: [], node: depNode, }; - } else { - return null; } + + if (project && isTopLevel) { + topLevelDependencies.push(project); + } + + return project; }) .filter((x) => !!x); - return { target, dependencies, nonBuildableDependencies }; + return { + target, + dependencies, + nonBuildableDependencies, + topLevelDependencies, + }; } function collectDependencies( project: string, projGraph: ProjectGraph, - acc: string[], - shallow?: boolean -) { + acc: { name: string; isTopLevel: boolean }[], + shallow?: boolean, + areTopLevelDeps = true +): { name: string; isTopLevel: boolean }[] { (projGraph.dependencies[project] || []).forEach((dependency) => { - if (acc.indexOf(dependency.target) === -1) { - acc.push(dependency.target); + if (!acc.some((dep) => dep.name === dependency.target)) { + acc.push({ name: dependency.target, isTopLevel: areTopLevelDeps }); if (!shallow) { - collectDependencies(dependency.target, projGraph, acc); + collectDependencies(dependency.target, projGraph, acc, shallow, false); } } });