From fc2e6be5bd67506b53dcf1852a22c2cd3bd921ae Mon Sep 17 00:00:00 2001 From: Emily Xiong Date: Thu, 17 Nov 2022 11:25:08 -0500 Subject: [PATCH] fix(expo): use workspace layout apps dir for expo generate application (#13160) --- .../src/generators/application/application.ts | 2 +- .../application/lib/nomalize-options.spec.ts | 18 +++++++++++++----- .../application/lib/normalize-options.ts | 11 ++++++++--- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/packages/expo/src/generators/application/application.ts b/packages/expo/src/generators/application/application.ts index 046bb45cc4071..b0c60cc8dddda 100644 --- a/packages/expo/src/generators/application/application.ts +++ b/packages/expo/src/generators/application/application.ts @@ -22,7 +22,7 @@ export async function expoApplicationGenerator( host: Tree, schema: Schema ): Promise { - const options = normalizeOptions(schema); + const options = normalizeOptions(host, schema); createApplicationFiles(host, options); addProject(host, options); diff --git a/packages/expo/src/generators/application/lib/nomalize-options.spec.ts b/packages/expo/src/generators/application/lib/nomalize-options.spec.ts index 994b0fbb400cc..124dc678590ad 100644 --- a/packages/expo/src/generators/application/lib/nomalize-options.spec.ts +++ b/packages/expo/src/generators/application/lib/nomalize-options.spec.ts @@ -1,8 +1,16 @@ +import { Tree } from '@nrwl/devkit'; +import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing'; import { Linter } from '@nrwl/linter'; import { Schema } from '../schema'; import { normalizeOptions } from './normalize-options'; describe('Normalize Options', () => { + let appTree: Tree; + + beforeEach(() => { + appTree = createTreeWithEmptyWorkspace(); + }); + it('should normalize options with name in kebab case', () => { const schema: Schema = { name: 'my-app', @@ -12,7 +20,7 @@ describe('Normalize Options', () => { js: true, unitTestRunner: 'jest', }; - const options = normalizeOptions(schema); + const options = normalizeOptions(appTree, schema); expect(options).toEqual({ appProjectRoot: 'apps/my-app', className: 'MyApp', @@ -38,7 +46,7 @@ describe('Normalize Options', () => { js: true, unitTestRunner: 'jest', }; - const options = normalizeOptions(schema); + const options = normalizeOptions(appTree, schema); expect(options).toEqual({ appProjectRoot: 'apps/my-app', className: 'MyApp', @@ -65,7 +73,7 @@ describe('Normalize Options', () => { js: true, unitTestRunner: 'jest', }; - const options = normalizeOptions(schema); + const options = normalizeOptions(appTree, schema); expect(options).toEqual({ appProjectRoot: 'apps/directory/my-app', className: 'MyApp', @@ -92,7 +100,7 @@ describe('Normalize Options', () => { js: true, unitTestRunner: 'jest', }; - const options = normalizeOptions(schema); + const options = normalizeOptions(appTree, schema); expect(options).toEqual({ appProjectRoot: 'apps/directory/my-app', className: 'DirectoryMyApp', @@ -119,7 +127,7 @@ describe('Normalize Options', () => { js: true, unitTestRunner: 'jest', }; - const options = normalizeOptions(schema); + const options = normalizeOptions(appTree, schema); expect(options).toEqual({ appProjectRoot: 'apps/my-app', className: 'MyApp', diff --git a/packages/expo/src/generators/application/lib/normalize-options.ts b/packages/expo/src/generators/application/lib/normalize-options.ts index deacb9f41ea78..d7ce343aaeb1f 100644 --- a/packages/expo/src/generators/application/lib/normalize-options.ts +++ b/packages/expo/src/generators/application/lib/normalize-options.ts @@ -1,4 +1,5 @@ -import { names } from '@nrwl/devkit'; +import { getWorkspaceLayout, names, Tree } from '@nrwl/devkit'; +import { join } from 'path'; import { Schema } from '../schema'; export interface NormalizedSchema extends Schema { @@ -9,8 +10,12 @@ export interface NormalizedSchema extends Schema { parsedTags: string[]; } -export function normalizeOptions(options: Schema): NormalizedSchema { +export function normalizeOptions( + host: Tree, + options: Schema +): NormalizedSchema { const { fileName, className } = names(options.name); + const { appsDir } = getWorkspaceLayout(host); const directoryName = options.directory ? names(options.directory).fileName @@ -21,7 +26,7 @@ export function normalizeOptions(options: Schema): NormalizedSchema { const appProjectName = projectDirectory.replace(new RegExp('/', 'g'), '-'); - const appProjectRoot = `apps/${projectDirectory}`; + const appProjectRoot = join(appsDir, projectDirectory); const parsedTags = options.tags ? options.tags.split(',').map((s) => s.trim())