Skip to content

Commit c784a68

Browse files
authored
fix: create packages being broken for scoped packages (#2079)
1 parent b36778f commit c784a68

File tree

3 files changed

+27
-9
lines changed

3 files changed

+27
-9
lines changed

shared/utils/package-analysis.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,17 +200,21 @@ export function getCreatePackageName(packageName: string): string {
200200

201201
/**
202202
* Extract the short name from a create-* package for display.
203-
* e.g., "create-vite" -> "vite", "@scope/create-foo" -> "foo"
203+
* e.g., "create-vite" -> "vite", "@scope/create-foo" -> "@scope/foo", "@scope/create" -> "@scope"
204204
*/
205205
export function getCreateShortName(createPackageName: string): string {
206206
if (createPackageName.startsWith('@')) {
207-
// @scope/create-foo -> foo
207+
// @scope/create -> @scope, @scope/create-foo -> @scope/foo
208208
const slashIndex = createPackageName.indexOf('/')
209+
const scope = createPackageName.slice(0, slashIndex)
209210
const name = createPackageName.slice(slashIndex + 1)
211+
if (name === 'create') {
212+
return scope
213+
}
210214
if (name.startsWith('create-')) {
211-
return name.slice('create-'.length)
215+
return `${scope}/${name.slice('create-'.length)}`
212216
}
213-
return name
217+
return createPackageName
214218
}
215219
// create-vite -> vite
216220
if (createPackageName.startsWith('create-')) {

test/unit/app/utils/install-command.spec.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,17 @@ describe('install command generation', () => {
402402
packageManager: 'npm',
403403
isCreatePackage: true,
404404
}),
405-
).toEqual(['npm', 'create', 'app'])
405+
).toEqual(['npm', 'create', '@vue/app'])
406+
})
407+
408+
it('handles @scope/create pattern', () => {
409+
expect(
410+
getExecuteCommandParts({
411+
packageName: '@angular/create',
412+
packageManager: 'npm',
413+
isCreatePackage: true,
414+
}),
415+
).toEqual(['npm', 'create', '@angular'])
406416
})
407417
})
408418
})

test/unit/shared/utils/package-analysis.spec.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -429,19 +429,23 @@ describe('getCreateShortName', () => {
429429
expect(getCreateShortName('create-vite')).toBe('vite')
430430
})
431431

432-
it('extracts name from scoped create-* package', () => {
433-
expect(getCreateShortName('@vue/create-app')).toBe('app')
432+
it('extracts name from scoped create-* package preserving scope', () => {
433+
expect(getCreateShortName('@vue/create-app')).toBe('@vue/app')
434434
})
435435

436436
it('returns full name if not a create-* package', () => {
437437
expect(getCreateShortName('vite')).toBe('vite')
438438
})
439439

440-
it('handles scoped package without create- prefix', () => {
441-
expect(getCreateShortName('@scope/foo')).toBe('foo')
440+
it('returns full name for scoped package without create- prefix', () => {
441+
expect(getCreateShortName('@scope/foo')).toBe('@scope/foo')
442442
})
443443

444444
it('extracts name from create-next-app style packages', () => {
445445
expect(getCreateShortName('create-next-app')).toBe('next-app')
446446
})
447+
448+
it('returns scope only for @scope/create packages', () => {
449+
expect(getCreateShortName('@angular/create')).toBe('@angular')
450+
})
447451
})

0 commit comments

Comments
 (0)