Skip to content

Commit b903f05

Browse files
committed
Fix create-tldraw directory naming edge cases
1 parent 07190c5 commit b903f05

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

packages/create-tldraw/src/main.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,20 @@ async function main() {
4343
const template = await templatePicker(args.template, args['no-telemetry'])
4444
const name = await namePicker(maybeTargetDir)
4545

46-
const targetDir = findAvailableDir(maybeTargetDir ?? resolve(process.cwd(), name))
46+
const requestedTargetDir = maybeTargetDir ?? resolve(process.cwd(), name)
47+
const targetDir = findAvailableDir(requestedTargetDir)
48+
if (targetDir !== requestedTargetDir) {
49+
nicelog(
50+
`${relative(process.cwd(), requestedTargetDir)} already exists, using ${relative(
51+
process.cwd(),
52+
targetDir
53+
)} instead.`
54+
)
55+
}
4756
mkdirSync(targetDir, { recursive: true })
4857

4958
await downloadTemplate(template, targetDir)
50-
await renameTemplate(pathToName(targetDir), targetDir)
59+
await renameTemplate(name, targetDir)
5160

5261
const manager = getPackageManager()
5362
const doneMessage = ['Done! Now run:', '']
@@ -142,10 +151,15 @@ async function namePicker(argOption?: string) {
142151
function findAvailableDir(targetDir: string): string {
143152
if (isDirEmpty(targetDir)) return targetDir
144153

145-
for (let i = 1; ; i++) {
154+
const maxAttempts = 1000
155+
for (let i = 1; i <= maxAttempts; i++) {
146156
const candidate = `${targetDir}-${i}`
147157
if (isDirEmpty(candidate)) return candidate
148158
}
159+
160+
throw new Error(
161+
`Could not find an available directory for ${targetDir} after ${maxAttempts} attempts.`
162+
)
149163
}
150164

151165
async function downloadTemplate(template: Template, targetDir: string) {

0 commit comments

Comments
 (0)