Skip to content

Commit 4a04aa9

Browse files
incorporate feedback
1 parent 2e57e55 commit 4a04aa9

File tree

4 files changed

+15
-87
lines changed

4 files changed

+15
-87
lines changed

packages/app/src/cli/commands/app/init.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,7 @@ export default class Init extends AppCommand {
7373
validateFlavorValue(flags.template, flags.flavor)
7474

7575
const inferredPackageManager = inferPackageManager(flags['package-manager'])
76-
const name =
77-
flags.name ?? (await generateRandomNameForSubdirectory({suffix: 'app', directory: flags.path, isValidName}))
76+
const name = flags.name ?? (await getAppName(flags.path))
7877

7978
// Force user authentication before prompting.
8079
let developerPlatformClient = selectDeveloperPlatformClient()
@@ -128,6 +127,15 @@ export default class Init extends AppCommand {
128127
}
129128
}
130129

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+
131139
export type SelectAppOrNewAppNameResult =
132140
| {
133141
result: 'new'

packages/cli-kit/src/public/common/string.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@ const SAFE_RANDOM_BUSINESS_NOUNS = [
110110
'franchise',
111111
'subsidiary',
112112
'logistics',
113-
'infrastructure',
114113
'sponsorship',
115114
'partnership',
116115
'tax',

packages/cli-kit/src/public/node/fs.test.ts

Lines changed: 0 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -218,73 +218,6 @@ describe('makeDirectoryWithRandomName', () => {
218218
expect(takeRandomFromArray).toHaveBeenCalledTimes(4)
219219
})
220220
})
221-
222-
test('returns an empty string if unable to generate an available name', async () => {
223-
await inTemporaryDirectory(async (tmpDir) => {
224-
// Given
225-
vi.mocked(takeRandomFromArray).mockReturnValueOnce('taken')
226-
vi.mocked(takeRandomFromArray).mockReturnValueOnce('directory')
227-
vi.mocked(takeRandomFromArray).mockReturnValueOnce('taken')
228-
vi.mocked(takeRandomFromArray).mockReturnValueOnce('directory')
229-
vi.mocked(takeRandomFromArray).mockReturnValueOnce('taken')
230-
vi.mocked(takeRandomFromArray).mockReturnValueOnce('directory')
231-
232-
const content = 'test'
233-
const filePath = joinPath(tmpDir, 'taken-directory-app')
234-
await writeFile(filePath, content)
235-
236-
// When
237-
const got = await generateRandomNameForSubdirectory({suffix: 'app', directory: tmpDir})
238-
239-
// Then
240-
expect(got).toEqual('')
241-
expect(takeRandomFromArray).toHaveBeenCalledTimes(6)
242-
})
243-
})
244-
245-
test('rerolls the name if an invalid name is produced', async () => {
246-
await inTemporaryDirectory(async (tmpDir) => {
247-
// Given
248-
vi.mocked(takeRandomFromArray).mockReturnValueOnce('invalid')
249-
vi.mocked(takeRandomFromArray).mockReturnValueOnce('name')
250-
vi.mocked(takeRandomFromArray).mockReturnValueOnce('valid')
251-
vi.mocked(takeRandomFromArray).mockReturnValueOnce('name')
252-
253-
// When
254-
const got = await generateRandomNameForSubdirectory({
255-
suffix: 'app',
256-
directory: tmpDir,
257-
isValidName: (name: string) => name !== 'invalid-name-app',
258-
})
259-
260-
// Then
261-
expect(got).toEqual('valid-name-app')
262-
expect(takeRandomFromArray).toHaveBeenCalledTimes(4)
263-
})
264-
})
265-
266-
test('returns an empty string if unable to generate a valid name', async () => {
267-
await inTemporaryDirectory(async (tmpDir) => {
268-
// Given
269-
vi.mocked(takeRandomFromArray).mockReturnValueOnce('invalid')
270-
vi.mocked(takeRandomFromArray).mockReturnValueOnce('name')
271-
vi.mocked(takeRandomFromArray).mockReturnValueOnce('invalid')
272-
vi.mocked(takeRandomFromArray).mockReturnValueOnce('name')
273-
vi.mocked(takeRandomFromArray).mockReturnValueOnce('invalid')
274-
vi.mocked(takeRandomFromArray).mockReturnValueOnce('name')
275-
276-
// When
277-
const got = await generateRandomNameForSubdirectory({
278-
suffix: 'app',
279-
directory: tmpDir,
280-
isValidName: (name: string) => name !== 'invalid-name-app',
281-
})
282-
283-
// Then
284-
expect(got).toEqual('')
285-
expect(takeRandomFromArray).toHaveBeenCalledTimes(6)
286-
})
287-
})
288221
})
289222

290223
describe('readFileSync', () => {

packages/cli-kit/src/public/node/fs.ts

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -468,16 +468,8 @@ interface GenerateRandomDirectoryOptions {
468468

469469
/** Type of word to use for random name. */
470470
family?: RandomNameFamily
471-
472-
/** Used to to track how many attempts have been made to generate the name. */
473-
attempts?: number
474-
475-
/** Predicate for validating the generated name. */
476-
isValidName?: (name: string) => boolean
477471
}
478472

479-
const defaultIsValidName = () => true
480-
481473
/**
482474
* It generates a random directory directory name for a sub-directory.
483475
* It ensures that the returned directory name doesn't exist.
@@ -486,19 +478,15 @@ const defaultIsValidName = () => true
486478
* @returns It returns the name of the directory.
487479
*/
488480
export async function generateRandomNameForSubdirectory(options: GenerateRandomDirectoryOptions): Promise<string> {
489-
options.attempts = (options.attempts || 0) + 1
490-
if (options.attempts > 3) return ''
491-
492481
const generated = `${getRandomName(options.family ?? 'business')}-${options.suffix}`
493-
494-
const validName = (options.isValidName ?? defaultIsValidName)(generated)
495-
if (!validName) return generateRandomNameForSubdirectory(options)
496-
497482
const randomDirectoryPath = joinPath(options.directory, generated)
498483
const isAppDirectoryTaken = await fileExists(randomDirectoryPath)
499-
if (isAppDirectoryTaken) return generateRandomNameForSubdirectory(options)
500484

501-
return generated
485+
if (isAppDirectoryTaken) {
486+
return generateRandomNameForSubdirectory(options)
487+
} else {
488+
return generated
489+
}
502490
}
503491

504492
/**

0 commit comments

Comments
 (0)