fix: overriding should work when the range selector contains >

This commit is contained in:
Zoltan Kochan
2021-07-16 02:31:59 +03:00
parent 386b7cb26f
commit caf453dd33
3 changed files with 42 additions and 3 deletions

View File

@@ -0,0 +1,5 @@
---
"supi": patch
---
Overriding should work, when the range selector contains the ">" symbol.

View File

@@ -16,8 +16,10 @@ export default function (
if (newPref.startsWith('link:')) {
linkTarget = path.join(rootDir, newPref.substring(5))
}
if (selector.includes('>')) {
const [parentSelector, childSelector] = selector.split('>')
if (selector.includes('>') && selector.indexOf('>') < selector.lastIndexOf('@')) {
const delimiterIndex = selector.indexOf('>')
const parentSelector = selector.substring(0, delimiterIndex)
const childSelector = selector.substring(delimiterIndex + 1)
versionOverrides.push({
linkTarget,
newPref,

View File

@@ -4,12 +4,17 @@ import createVersionsOverrider from 'supi/lib/install/createVersionsOverrider'
test('createVersionsOverrider() matches subranges', () => {
const overrider = createVersionsOverrider({
'foo@2': '2.12.0',
'qar@>2': '1.0.0',
}, process.cwd())
expect(
overrider({
dependencies: { foo: '^2.10.0' },
optionalDependencies: { qar: '^4.0.0' },
})
).toStrictEqual({ dependencies: { foo: '2.12.0' } })
).toStrictEqual({
dependencies: { foo: '2.12.0' },
optionalDependencies: { qar: '1.0.0' },
})
})
test('createVersionsOverrider() does not fail on non-range selectors', () => {
@@ -35,6 +40,7 @@ test('createVersionsOverrider() does not fail on non-range selectors', () => {
test('createVersionsOverrider() overrides dependencies of specified packages only', () => {
const overrider = createVersionsOverrider({
'foo@1>bar@^1.2.0': '3.0.0',
'qar@1>bar@>4': '3.0.0',
}, process.cwd())
expect(overrider({
name: 'foo',
@@ -62,6 +68,32 @@ test('createVersionsOverrider() overrides dependencies of specified packages onl
bar: '^1.2.0',
},
})
expect(overrider({
name: 'qar',
version: '1.0.0',
dependencies: {
bar: '^10.0.0',
},
})).toStrictEqual({
name: 'qar',
version: '1.0.0',
dependencies: {
bar: '3.0.0',
},
})
expect(overrider({
name: 'qar',
version: '1.0.0',
dependencies: {
bar: '^4.0.0',
},
})).toStrictEqual({
name: 'qar',
version: '1.0.0',
dependencies: {
bar: '^4.0.0',
},
})
})
test('createVersionsOverrider() overrides all types of dependencies', () => {