From 8a9f43f07462fbd69a004dbf1ad8552e1f37c94d Mon Sep 17 00:00:00 2001 From: Jack Hsu Date: Tue, 7 Nov 2023 13:10:40 -0500 Subject: [PATCH] fix(react): component generator should work without sourceRoot (#20094) --- .../generators/component/component.spec.ts | 24 ++++++++++++++++++- .../component/lib/normalize-options.ts | 8 +++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/packages/react/src/generators/component/component.spec.ts b/packages/react/src/generators/component/component.spec.ts index 2f873fe48d..36293452af 100644 --- a/packages/react/src/generators/component/component.spec.ts +++ b/packages/react/src/generators/component/component.spec.ts @@ -1,5 +1,11 @@ import { installedCypressVersion } from '@nx/cypress/src/utils/cypress-version'; -import { logger, readJson, Tree } from '@nx/devkit'; +import { + logger, + readJson, + readProjectConfiguration, + Tree, + updateProjectConfiguration, +} from '@nx/devkit'; import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; import { createApp, createLib } from '../../utils/testing-generators'; import { componentGenerator } from './component'; @@ -140,6 +146,22 @@ describe('component', () => { expect(indexContent).not.toMatch(/lib\/hello/); }); + + it('should work for projects without sourceRoot', async () => { + const projectConfig = readProjectConfiguration(appTree, 'my-lib'); + delete projectConfig.sourceRoot; + updateProjectConfiguration(appTree, 'my-lib', projectConfig); + + await componentGenerator(appTree, { + name: 'my-lib/src/lib/hello', + style: 'css', + export: true, + }); + + const indexContent = appTree.read('my-lib/src/index.ts', 'utf-8'); + + expect(indexContent).not.toMatch(/lib\/hello/); + }); }); describe('--pascalCaseFiles', () => { diff --git a/packages/react/src/generators/component/lib/normalize-options.ts b/packages/react/src/generators/component/lib/normalize-options.ts index 21cfacf742..65be3fe3a6 100644 --- a/packages/react/src/generators/component/lib/normalize-options.ts +++ b/packages/react/src/generators/component/lib/normalize-options.ts @@ -36,7 +36,11 @@ export async function normalizeOptions( const { className } = names(name); - const { sourceRoot: projectSourceRoot, projectType } = project; + const { + sourceRoot: projectSourceRoot, + root: projectRoot, + projectType, + } = project; const styledModule = /^(css|scss|less|none)$/.test(options.style) ? null @@ -62,6 +66,6 @@ export async function normalizeOptions( className, fileName, filePath, - projectSourceRoot, + projectSourceRoot: projectSourceRoot ?? projectRoot, }; }