From 96dd3b5aa635da7eaadf2c4b0d91fbce2a8e8ce5 Mon Sep 17 00:00:00 2001 From: Craigory Coppola Date: Fri, 3 Nov 2023 16:04:40 -0400 Subject: [PATCH] fix(core): shallow merge named inputs (#20040) --- .../utils/project-configuration-utils.spec.ts | 37 +++++++++++++++++++ .../utils/project-configuration-utils.ts | 7 ++++ 2 files changed, 44 insertions(+) diff --git a/packages/nx/src/project-graph/utils/project-configuration-utils.spec.ts b/packages/nx/src/project-graph/utils/project-configuration-utils.spec.ts index 00d0ea98b4..95a0511704 100644 --- a/packages/nx/src/project-graph/utils/project-configuration-utils.spec.ts +++ b/packages/nx/src/project-graph/utils/project-configuration-utils.spec.ts @@ -490,6 +490,43 @@ describe('project-configuration-utils', () => { } `); }); + + it('should merge namedInputs', () => { + const rootMap = new RootMapBuilder() + .addProject({ + root: 'libs/lib-a', + name: 'lib-a', + namedInputs: { + production: [ + '{projectRoot}/**/*.ts', + '!{projectRoot}/**/*.spec.ts', + ], + test: ['{projectRoot}/**/*.spec.ts'], + }, + }) + .getRootMap(); + mergeProjectConfigurationIntoRootMap(rootMap, { + root: 'libs/lib-a', + name: 'lib-a', + namedInputs: { + another: ['{projectRoot}/**/*.ts'], + production: ['{projectRoot}/**/*.prod.ts'], + }, + }); + expect(rootMap.get('libs/lib-a').namedInputs).toMatchInlineSnapshot(` + { + "another": [ + "{projectRoot}/**/*.ts", + ], + "production": [ + "{projectRoot}/**/*.prod.ts", + ], + "test": [ + "{projectRoot}/**/*.spec.ts", + ], + } + `); + }); }); describe('readProjectsConfigurationsFromRootMap', () => { diff --git a/packages/nx/src/project-graph/utils/project-configuration-utils.ts b/packages/nx/src/project-graph/utils/project-configuration-utils.ts index c98fe5f358..dc2919beba 100644 --- a/packages/nx/src/project-graph/utils/project-configuration-utils.ts +++ b/packages/nx/src/project-graph/utils/project-configuration-utils.ts @@ -57,6 +57,13 @@ export function mergeProjectConfigurationIntoRootMap( } } + if (project.namedInputs && matchingProject.namedInputs) { + updatedProjectConfiguration.namedInputs = { + ...matchingProject.namedInputs, + ...project.namedInputs, + }; + } + if (project.targets && matchingProject.targets) { updatedProjectConfiguration.targets = { ...matchingProject.targets,