Skip to content

Commit 501e22f

Browse files
committed
fix: handle scoped packages named v
1 parent 3186091 commit 501e22f

File tree

4 files changed

+24
-4
lines changed

4 files changed

+24
-4
lines changed

server/utils/parse-package-params.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ export function parsePackageParams(segments: string[]): {
66
rawPackageName: string
77
rawVersion: string | undefined
88
} {
9-
const vIndex = segments.indexOf('v')
9+
const packageSegmentCount = segments[0]?.startsWith('@') ? 2 : 1
10+
const vIndex = packageSegmentCount
1011

11-
if (vIndex !== -1 && vIndex < segments.length - 1) {
12+
if (segments[vIndex] === 'v' && vIndex < segments.length - 1) {
1213
return {
1314
rawPackageName: segments.slice(0, vIndex).join('/'),
1415
rawVersion: segments.slice(vIndex + 1).join('/'),

shared/utils/parse-package-param.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ export interface ParsedPackageParams {
3737
*/
3838
export function parsePackageParam(pkgParam: string): ParsedPackageParams {
3939
const segments = pkgParam.split('/')
40-
const vIndex = segments.indexOf('v')
40+
const packageSegmentCount = segments[0]?.startsWith('@') ? 2 : 1
41+
const vIndex = packageSegmentCount
4142

42-
if (vIndex !== -1 && vIndex < segments.length - 1) {
43+
if (segments[vIndex] === 'v' && vIndex < segments.length - 1) {
4344
return {
4445
packageName: segments.slice(0, vIndex).join('/'),
4546
version: segments[vIndex + 1],

test/unit/server/utils/parse-package-params.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,14 @@ describe('parsePackageParams', () => {
4949
rawVersion: '1.0.0',
5050
})
5151
})
52+
53+
it('parses scoped package names whose package segment is literally v', () => {
54+
const segments = ['@scope', 'v', 'v', '1.2.3']
55+
const result = parsePackageParams(segments)
56+
expect(result).toEqual({
57+
rawPackageName: '@scope/v',
58+
rawVersion: '1.2.3',
59+
})
60+
})
5261
})
5362
})

test/unit/shared/utils/parse-package-param.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,15 @@ describe('parsePackageParam', () => {
8585
rest: [],
8686
})
8787
})
88+
89+
it('parses scoped package names whose package segment is literally v', () => {
90+
const result = parsePackageParam('@scope/v/v/1.2.3/dist/index.js')
91+
expect(result).toEqual({
92+
packageName: '@scope/v',
93+
version: '1.2.3',
94+
rest: ['dist', 'index.js'],
95+
})
96+
})
8897
})
8998

9099
describe('edge cases', () => {

0 commit comments

Comments
 (0)