From 3442a99b0ee7d6a4569e143189ddaba2ec615aa5 Mon Sep 17 00:00:00 2001 From: Jason Jean Date: Fri, 20 Aug 2021 22:19:02 -0400 Subject: [PATCH] fix(core): fix reading project config when nx.json doesn't have projects (#6802) --- .../generators/project-configuration.spec.ts | 58 ++++++++++++++++++- .../src/generators/project-configuration.ts | 2 +- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/packages/devkit/src/generators/project-configuration.spec.ts b/packages/devkit/src/generators/project-configuration.spec.ts index 5a60d34376bf0e..8b92c15e6b9c7b 100644 --- a/packages/devkit/src/generators/project-configuration.spec.ts +++ b/packages/devkit/src/generators/project-configuration.spec.ts @@ -2,7 +2,7 @@ import { Tree } from '@nrwl/tao/src/shared/tree'; import { ProjectConfiguration } from '@nrwl/tao/src/shared/workspace'; import { createTreeWithEmptyWorkspace } from '../tests/create-tree-with-empty-workspace'; -import { readJson } from '../utils/json'; +import { readJson, updateJson } from '../utils/json'; import { addProjectConfiguration, getProjects, @@ -13,6 +13,7 @@ import { updateWorkspaceConfiguration, WorkspaceConfiguration, } from './project-configuration'; +import { getWorkspacePath } from '../utils/get-workspace-layout'; const baseTestProjectConfig: ProjectConfiguration = { root: 'libs/test', @@ -27,6 +28,61 @@ describe('project configuration', () => { tree = createTreeWithEmptyWorkspace(); }); + describe('readProjectConfiguration', () => { + it('should get info from workspace.json', () => { + updateJson(tree, getWorkspacePath(tree), (json) => { + json.projects['proj1'] = { + root: 'proj1', + }; + return json; + }); + + const config = readProjectConfiguration(tree, 'proj1'); + expect(config).toEqual({ + root: 'proj1', + }); + }); + + it('should get info from nx.json', () => { + updateJson(tree, getWorkspacePath(tree), (json) => { + json.projects['proj1'] = { + root: 'proj1', + }; + return json; + }); + updateJson(tree, 'nx.json', (json) => { + json.projects['proj1'] = { + tags: ['tag1'], + }; + return json; + }); + + const config = readProjectConfiguration(tree, 'proj1'); + expect(config).toEqual({ + root: 'proj1', + tags: ['tag1'], + }); + }); + + it('should should not fail if projects is not defined in nx.json', () => { + updateJson(tree, getWorkspacePath(tree), (json) => { + json.projects['proj1'] = { + root: 'proj1', + }; + return json; + }); + updateJson(tree, 'nx.json', (json) => { + delete json.projects; + return json; + }); + + const config = readProjectConfiguration(tree, 'proj1'); + expect(config).toEqual({ + root: 'proj1', + }); + }); + }); + describe('addProjectConfiguration', () => { it('should create project.json file when adding a project if standalone is true', () => { addProjectConfiguration(tree, 'test', baseTestProjectConfig, true); diff --git a/packages/devkit/src/generators/project-configuration.ts b/packages/devkit/src/generators/project-configuration.ts index bb38dbdafde06b..fd24fdfb2be625 100644 --- a/packages/devkit/src/generators/project-configuration.ts +++ b/packages/devkit/src/generators/project-configuration.ts @@ -288,7 +288,7 @@ function readWorkspaceSection( } function readNxJsonSection(nxJson: NxJsonConfiguration, projectName: string) { - return nxJson.projects[projectName]; + return nxJson.projects?.[projectName]; } function setProjectConfiguration(