@@ -7,6 +7,7 @@ import {validateFlavorValue, validateTemplateValue} from '../../services/init/va
77import { MinimalOrganizationApp , Organization , OrganizationApp } from '../../models/organization.js'
88import { appNamePrompt , createAsNewAppPrompt , selectAppPrompt } from '../../prompts/dev.js'
99import { searchForAppsByNameFactory } from '../../services/dev/prompt-helpers.js'
10+ import { isValidName } from '../../models/app/validation/common.js'
1011import { Flags } from '@oclif/core'
1112import { globalFlags } from '@shopify/cli-kit/node/cli'
1213import { resolvePath , cwd } from '@shopify/cli-kit/node/path'
@@ -72,7 +73,7 @@ export default class Init extends AppCommand {
7273 validateFlavorValue ( flags . template , flags . flavor )
7374
7475 const inferredPackageManager = inferPackageManager ( flags [ 'package-manager' ] )
75- const name = flags . name ?? ( await generateRandomNameForSubdirectory ( { suffix : 'app' , directory : flags . path } ) )
76+ const name = flags . name ?? ( await getAppName ( flags . path ) )
7677
7778 // Force user authentication before prompting.
7879 let developerPlatformClient = selectDeveloperPlatformClient ( )
@@ -126,6 +127,15 @@ export default class Init extends AppCommand {
126127 }
127128}
128129
130+ async function getAppName ( directory : string ) : Promise < string > {
131+ for ( let i = 0 ; i < 3 ; i ++ ) {
132+ // eslint-disable-next-line no-await-in-loop
133+ const name = await generateRandomNameForSubdirectory ( { suffix : 'app' , directory} )
134+ if ( isValidName ( name ) ) return name
135+ }
136+ return ''
137+ }
138+
129139export type SelectAppOrNewAppNameResult =
130140 | {
131141 result : 'new'
0 commit comments