From d5f04ef4fba99185f4a42cc96731b193630a0c55 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov <zharinov@users.noreply.github.com> Date: Mon, 29 Nov 2021 10:33:36 +0300 Subject: [PATCH] refactor(swift): Enable strict null checks (#12850) --- lib/versioning/swift/index.spec.ts | 5 ++- lib/versioning/swift/index.ts | 43 +++++++++++++++-------- lib/versioning/swift/range.ts | 56 +++++++++++++++++++----------- tsconfig.strict.json | 2 ++ 4 files changed, 71 insertions(+), 35 deletions(-) diff --git a/lib/versioning/swift/index.spec.ts b/lib/versioning/swift/index.spec.ts index 9bc5a45d99..dd1b8c812c 100644 --- a/lib/versioning/swift/index.spec.ts +++ b/lib/versioning/swift/index.spec.ts @@ -23,16 +23,19 @@ describe('versioning/swift/index', () => { version | expected ${'from: "1.2.3"'} | ${true} ${'from : "1.2.3"'} | ${true} + ${'from : "1.2.3.4.5"'} | ${false} ${'from:"1.2.3"'} | ${true} ${' from:"1.2.3" '} | ${true} ${' from : "1.2.3" '} | ${true} ${'"1.2.3"..."1.2.4"'} | ${true} ${' "1.2.3" ... "1.2.4" '} | ${true} ${'"1.2.3"...'} | ${true} + ${'"1.2.3.4.5"...'} | ${false} ${' "1.2.3" ... '} | ${true} ${'..."1.2.4"'} | ${true} ${' ... "1.2.4" '} | ${true} ${'"1.2.3"..<"1.2.4"'} | ${true} + ${'"1.2.3.4.5"..<"1.2.4"'} | ${false} ${' "1.2.3" ..< "1.2.4" '} | ${true} ${'..<"1.2.4"'} | ${true} ${' ..< "1.2.4" '} | ${true} @@ -86,7 +89,7 @@ describe('versioning/swift/index', () => { `( 'isLessThanRange("$version", "$range") === "$expected"', ({ version, range, expected }) => { - expect(isLessThanRange(version, range)).toBe(expected); + expect(isLessThanRange?.(version, range)).toBe(expected); } ); diff --git a/lib/versioning/swift/index.ts b/lib/versioning/swift/index.ts index fa7ba22a6b..d3de422d77 100644 --- a/lib/versioning/swift/index.ts +++ b/lib/versioning/swift/index.ts @@ -29,21 +29,36 @@ const { export const isValid = (input: string): boolean => !!valid(input) || !!validRange(toSemverRange(input)); + export const isVersion = (input: string): boolean => !!valid(input); -const getSatisfyingVersion = (versions: string[], range: string): string => - maxSatisfying( - versions.map((v) => v.replace(regEx(/^v/), '')), // TODO #12071 - toSemverRange(range) - ); -const minSatisfyingVersion = (versions: string[], range: string): string => - minSatisfying( - versions.map((v) => v.replace(regEx(/^v/), '')), // TODO #12071 #12070 - toSemverRange(range) - ); -const isLessThanRange = (version: string, range: string): boolean => - ltr(version, toSemverRange(range)); -const matches = (version: string, range: string): boolean => - satisfies(version, toSemverRange(range)); + +function getSatisfyingVersion( + versions: string[], + range: string +): string | null { + const normalizedVersions = versions.map((v) => v.replace(regEx(/^v/), '')); + const semverRange = toSemverRange(range); + return semverRange ? maxSatisfying(normalizedVersions, semverRange) : null; +} + +function minSatisfyingVersion( + versions: string[], + range: string +): string | null { + const normalizedVersions = versions.map((v) => v.replace(regEx(/^v/), '')); + const semverRange = toSemverRange(range); + return semverRange ? minSatisfying(normalizedVersions, semverRange) : null; +} + +function isLessThanRange(version: string, range: string): boolean { + const semverRange = toSemverRange(range); + return semverRange ? ltr(version, semverRange) : false; +} + +function matches(version: string, range: string): boolean { + const semverRange = toSemverRange(range); + return semverRange ? satisfies(version, semverRange) : false; +} export const api: VersioningApi = { equals, diff --git a/lib/versioning/swift/range.ts b/lib/versioning/swift/range.ts index 18ce3d20e0..955db8b68c 100644 --- a/lib/versioning/swift/range.ts +++ b/lib/versioning/swift/range.ts @@ -7,27 +7,40 @@ const fromRange = regEx(/^\s*"([^"]+)"\s*\.\.\.\s*$/); const binaryRange = regEx(/^\s*"([^"]+)"\s*(\.\.[.<])\s*"([^"]+)"\s*$/); const toRange = regEx(/^\s*(\.\.[.<])\s*"([^"]+)"\s*$/); -function toSemverRange(range: string): string { - if (fromParam.test(range)) { - const [, version] = fromParam.exec(range); +function toSemverRange(range: string): string | null { + const fromParamMatch = fromParam.exec(range); + if (fromParamMatch) { + const [, version] = fromParamMatch; if (semver.valid(version)) { const nextMajor = `${semver.major(version) + 1}.0.0`; return `>=${version} <${nextMajor}`; } - } else if (fromRange.test(range)) { - const [, version] = fromRange.exec(range); + return null; + } + + const fromRangeMatch = fromRange.exec(range); + if (fromRangeMatch) { + const [, version] = fromRangeMatch; if (semver.valid(version)) { return `>=${version}`; } - } else if (binaryRange.test(range)) { - const [, currentVersion, op, newVersion] = binaryRange.exec(range); + return null; + } + + const binaryRangeMatch = binaryRange.exec(range); + if (binaryRangeMatch) { + const [, currentVersion, op, newVersion] = binaryRangeMatch; if (semver.valid(currentVersion) && semver.valid(newVersion)) { return op === '..<' ? `>=${currentVersion} <${newVersion}` : `>=${currentVersion} <=${newVersion}`; } - } else if (toRange.test(range)) { - const [, op, newVersion] = toRange.exec(range); + return null; + } + + const toRangeMatch = toRange.exec(range); + if (toRangeMatch) { + const [, op, newVersion] = toRangeMatch; if (semver.valid(newVersion)) { return op === '..<' ? `<${newVersion}` : `<=${newVersion}`; } @@ -35,26 +48,29 @@ function toSemverRange(range: string): string { return null; } -function getNewValue({ - currentValue, - currentVersion, - newVersion, -}: NewValueConfig): string { +function getNewValue({ currentValue, newVersion }: NewValueConfig): string { if (fromParam.test(currentValue)) { return currentValue.replace(regEx(/".*?"/), `"${newVersion}"`); } - if (fromRange.test(currentValue)) { - const [, version] = fromRange.exec(currentValue); + + const fromRangeMatch = fromRange.exec(currentValue); + if (fromRangeMatch) { + const [, version] = fromRangeMatch; return currentValue.replace(version, newVersion); } - if (binaryRange.test(currentValue)) { - const [, , , version] = binaryRange.exec(currentValue); + + const binaryRangeMatch = binaryRange.exec(currentValue); + if (binaryRangeMatch) { + const [, , , version] = binaryRangeMatch; return currentValue.replace(version, newVersion); } - if (toRange.test(currentValue)) { - const [, , version] = toRange.exec(currentValue); + + const toRangeMatch = toRange.exec(currentValue); + if (toRangeMatch) { + const [, , version] = toRangeMatch; return currentValue.replace(version, newVersion); } + return currentValue; } diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 7a93df971d..0d5f61d746 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -134,6 +134,8 @@ "./lib/util/sanitize.ts", "./lib/util/split.ts", "./lib/util/url.ts", + "./lib/versioning/swift/index.spec.ts", + "./lib/versioning/swift/index.ts", "./lib/versioning/ubuntu/index.spec.ts", "./lib/versioning/ubuntu/index.ts", "./lib/workers/pr/changelog/hbs-template.ts", -- GitLab