From 9f7d0243934e767fbd9d14414cc65edd1bc41b77 Mon Sep 17 00:00:00 2001 From: RahulGautamSingh <rahultesnik@gmail.com> Date: Mon, 17 Jan 2022 12:30:41 +0545 Subject: [PATCH] refactor(rez): ensure strict null check (#13334) --- lib/versioning/rez/index.spec.ts | 2 +- lib/versioning/rez/index.ts | 62 ++++++++++++++++++-------------- lib/versioning/rez/transform.ts | 32 ++++++++--------- tsconfig.strict.json | 1 + 4 files changed, 54 insertions(+), 43 deletions(-) diff --git a/lib/versioning/rez/index.spec.ts b/lib/versioning/rez/index.spec.ts index 69a6fd3bf0..c0d5120849 100644 --- a/lib/versioning/rez/index.spec.ts +++ b/lib/versioning/rez/index.spec.ts @@ -151,7 +151,7 @@ describe('versioning/rez/index', () => { `( 'isLessThanRange($version, "$range") === $expected', ({ version, range, expected }) => { - expect(versioning.isLessThanRange(version, range)).toBe(expected); + expect(versioning.isLessThanRange?.(version, range)).toBe(expected); } ); diff --git a/lib/versioning/rez/index.ts b/lib/versioning/rez/index.ts index 33712bb0b5..68347753c2 100644 --- a/lib/versioning/rez/index.ts +++ b/lib/versioning/rez/index.ts @@ -33,7 +33,7 @@ function equals(a: string, b: string): boolean { } } -function getMajor(version: string): number { +function getMajor(version: string): number | null { try { return npm.getMajor(padZeroes(version)); } catch (err) /* istanbul ignore next */ { @@ -41,7 +41,7 @@ function getMajor(version: string): number { } } -function getMinor(version: string): number { +function getMinor(version: string): number | null { try { return npm.getMinor(padZeroes(version)); } catch (err) /* istanbul ignore next */ { @@ -49,7 +49,7 @@ function getMinor(version: string): number { } } -function getPatch(version: string): number { +function getPatch(version: string): number | null { try { return npm.getPatch(padZeroes(version)); } catch (err) /* istanbul ignore next */ { @@ -68,7 +68,7 @@ function isGreaterThan(a: string, b: string): boolean { function isLessThanRange(version: string, range: string): boolean { return ( npm.isVersion(padZeroes(version)) && - npm.isLessThanRange(padZeroes(version), rez2npm(range)) + !!npm.isLessThanRange?.(padZeroes(version), rez2npm(range)) ); } @@ -91,11 +91,17 @@ function matches(version: string, range: string): boolean { ); } -function getSatisfyingVersion(versions: string[], range: string): string { +function getSatisfyingVersion( + versions: string[], + range: string +): string | null { return npm.getSatisfyingVersion(versions, rez2npm(range)); } -function minSatisfyingVersion(versions: string[], range: string): string { +function minSatisfyingVersion( + versions: string[], + range: string +): string | null { return npm.minSatisfyingVersion(versions, rez2npm(range)); } @@ -116,7 +122,7 @@ function getNewValue({ rangeStrategy, currentVersion, newVersion, -}: NewValueConfig): string { +}: NewValueConfig): string | null { const pep440Value = pep440.getNewValue({ currentValue: rez2pep440(currentValue), rangeStrategy, @@ -126,29 +132,31 @@ function getNewValue({ if (exactVersion.test(currentValue)) { return pep440Value; } - if (inclusiveBound.test(currentValue)) { + if (pep440Value && inclusiveBound.test(currentValue)) { return pep4402rezInclusiveBound(pep440Value); } - if (lowerBound.test(currentValue)) { + if (pep440Value && lowerBound.test(currentValue)) { if (currentValue.includes('+')) { return npm2rezplus(pep440Value); } return pep440Value; } - if (upperBound.test(currentValue)) { + if (pep440Value && upperBound.test(currentValue)) { return pep440Value; } - if (ascendingRange.test(currentValue)) { + const matchAscRange = ascendingRange.exec(currentValue); + if (pep440Value && matchAscRange?.groups) { // Replace version numbers but keep rez format, otherwise we just end up trying // to convert every single case separately. - const match = ascendingRange.exec(currentValue); - const lowerBoundAscCurrent = match.groups.range_lower_asc; - const upperBoundAscCurrent = match.groups.range_upper_asc; - const lowerAscVersionCurrent = match.groups.range_lower_asc_version; - const upperAscVersionCurrent = match.groups.range_upper_asc_version; + const lowerBoundAscCurrent = matchAscRange.groups.range_lower_asc; + const upperBoundAscCurrent = matchAscRange.groups.range_upper_asc; + const lowerAscVersionCurrent = matchAscRange.groups.range_lower_asc_version; + const upperAscVersionCurrent = matchAscRange.groups.range_upper_asc_version; const [lowerBoundAscPep440, upperBoundAscPep440] = pep440Value.split(', '); - const lowerAscVersionNew = regEx(versionGroup).exec(lowerBoundAscPep440)[0]; - const upperAscVersionNew = regEx(versionGroup).exec(upperBoundAscPep440)[0]; + const lowerAscVersionNew = + regEx(versionGroup).exec(lowerBoundAscPep440)?.[0] ?? ''; + const upperAscVersionNew = + regEx(versionGroup).exec(upperBoundAscPep440)?.[0] ?? ''; const lowerBoundAscNew = lowerBoundAscCurrent.replace( lowerAscVersionCurrent, lowerAscVersionNew @@ -161,21 +169,23 @@ function getNewValue({ return lowerBoundAscNew + separator + upperBoundAscNew; } - if (descendingRange.test(currentValue)) { + const matchDscRange = descendingRange.exec(currentValue); + if (pep440Value && matchDscRange?.groups) { // Replace version numbers but keep rez format, otherwise we just end up trying // to convert every single case separately. - const match = descendingRange.exec(currentValue); - const upperBoundDescCurrent = match.groups.range_upper_desc; - const lowerBoundDescCurrent = match.groups.range_lower_desc; - const upperDescVersionCurrent = match.groups.range_upper_desc_version; - const lowerDescVersionCurrent = match.groups.range_lower_desc_version; + const upperBoundDescCurrent = matchDscRange.groups.range_upper_desc; + const lowerBoundDescCurrent = matchDscRange.groups.range_lower_desc; + const upperDescVersionCurrent = + matchDscRange.groups.range_upper_desc_version; + const lowerDescVersionCurrent = + matchDscRange.groups.range_lower_desc_version; const [lowerBoundDescPep440, upperBoundDescPep440] = pep440Value.split(', '); const upperDescVersionNew = - regEx(versionGroup).exec(upperBoundDescPep440)[0]; + regEx(versionGroup).exec(upperBoundDescPep440)?.[0] ?? ''; const lowerDescVersionNew = - regEx(versionGroup).exec(lowerBoundDescPep440)[0]; + regEx(versionGroup).exec(lowerBoundDescPep440)?.[0] ?? ''; const upperBoundDescNew = upperBoundDescCurrent.replace( upperDescVersionCurrent, upperDescVersionNew diff --git a/lib/versioning/rez/transform.ts b/lib/versioning/rez/transform.ts index 10c2a3155a..11e1857b18 100644 --- a/lib/versioning/rez/transform.ts +++ b/lib/versioning/rez/transform.ts @@ -56,16 +56,16 @@ export function rez2npm(input: string): string { if (upperBound.test(input)) { return input; } - if (ascendingRange.test(input)) { - const match = ascendingRange.exec(input); - const lowerBoundAsc = match.groups.range_lower_asc; - const upperBoundAsc = match.groups.range_upper_asc; + const matchAscRange = ascendingRange.exec(input); + if (matchAscRange?.groups) { + const lowerBoundAsc = matchAscRange.groups.range_lower_asc; + const upperBoundAsc = matchAscRange.groups.range_upper_asc; return plus2npm(lowerBoundAsc) + ' ' + plus2npm(upperBoundAsc); } - if (descendingRange.test(input)) { - const match = descendingRange.exec(input); - const upperBoundDesc = match.groups.range_upper_desc; - const lowerBoundDesc = match.groups.range_lower_desc; + const matchDscRange = descendingRange.exec(input); + if (matchDscRange?.groups) { + const upperBoundDesc = matchDscRange.groups.range_upper_desc; + const lowerBoundDesc = matchDscRange.groups.range_lower_desc; return plus2npm(lowerBoundDesc) + ' ' + plus2npm(upperBoundDesc); } return input; @@ -87,16 +87,16 @@ export function rez2pep440(input: string): string { if (upperBound.test(input)) { return input; } - if (ascendingRange.test(input)) { - const match = ascendingRange.exec(input); - const lowerBoundAsc = match.groups.range_lower_asc; - const upperBoundAsc = match.groups.range_upper_asc; + const matchAscRange = ascendingRange.exec(input); + if (matchAscRange?.groups) { + const lowerBoundAsc = matchAscRange.groups.range_lower_asc; + const upperBoundAsc = matchAscRange.groups.range_upper_asc; return plus2npm(lowerBoundAsc) + ', ' + plus2npm(upperBoundAsc); } - if (descendingRange.test(input)) { - const match = descendingRange.exec(input); - const upperBoundDesc = match.groups.range_upper_desc; - const lowerBoundDesc = match.groups.range_lower_desc; + const matchDscRange = descendingRange.exec(input); + if (matchDscRange?.groups) { + const upperBoundDesc = matchDscRange.groups.range_upper_desc; + const lowerBoundDesc = matchDscRange.groups.range_lower_desc; return plus2npm(lowerBoundDesc) + ', ' + plus2npm(upperBoundDesc); } return input; diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 24880eb5bf..dd63af38d2 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -50,6 +50,7 @@ "lib/versioning/node/**/*.ts", "lib/versioning/npm/**/*.ts", "lib/versioning/pep440/**/*.ts", + "lib/versioning/rez/**/*.ts", "lib/versioning/ruby/**/*.ts", "lib/versioning/semver-coerced/**/*.ts", "lib/versioning/semver/**/*.ts", -- GitLab