Skip to content

Commit db6411e

Browse files
authored
fix: handle scoped packages named v (#2280)
1 parent 7688cd7 commit db6411e

File tree

4 files changed

+30
-2
lines changed

4 files changed

+30
-2
lines changed

server/utils/parse-package-params.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ export function parsePackageParams(segments: string[]): {
66
rawPackageName: string
77
rawVersion: string | undefined
88
} {
9-
const vIndex = segments.indexOf('v')
9+
let vIndex = segments.indexOf('v')
10+
11+
// If we encounter ".../v/v/...", treat the second "v" as the version delimiter.
12+
if (segments[vIndex] === 'v' && segments[vIndex + 1] === 'v') {
13+
vIndex++
14+
}
1015

1116
if (vIndex !== -1 && vIndex < segments.length - 1) {
1217
return {

shared/utils/parse-package-param.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,12 @@ export interface ParsedPackageParams {
3737
*/
3838
export function parsePackageParam(pkgParam: string): ParsedPackageParams {
3939
const segments = pkgParam.split('/')
40-
const vIndex = segments.indexOf('v')
40+
let vIndex = segments.indexOf('v')
41+
42+
// If we encounter ".../v/v/...", treat the second "v" as the version delimiter.
43+
if (segments[vIndex] === 'v' && segments[vIndex + 1] === 'v') {
44+
vIndex++
45+
}
4146

4247
if (vIndex !== -1 && vIndex < segments.length - 1) {
4348
return {

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)