From fdb55ae234679697a5c922edfe493f89fa501389 Mon Sep 17 00:00:00 2001
From: RahulGautamSingh <rahultesnik@gmail.com>
Date: Fri, 7 Jan 2022 02:51:35 +0545
Subject: [PATCH] refactor(hex): ensure strict null check (#13394)

* added hex to strictNullCheck files

* enabled strict null check in versioning/hex

* modified npm/range
---
 lib/versioning/hex/index.spec.ts |  2 +-
 lib/versioning/hex/index.ts      | 65 +++++++++++++++++++-------------
 tsconfig.strict.json             |  1 +
 3 files changed, 40 insertions(+), 28 deletions(-)

diff --git a/lib/versioning/hex/index.spec.ts b/lib/versioning/hex/index.spec.ts
index 05e6beadf4..4426bde971 100644
--- a/lib/versioning/hex/index.spec.ts
+++ b/lib/versioning/hex/index.spec.ts
@@ -47,7 +47,7 @@ describe('versioning/hex/index', () => {
   `(
     'isLessThanRange($version, $range) === $expected',
     ({ version, range, expected }) => {
-      expect(hexScheme.isLessThanRange(version, range)).toBe(expected);
+      expect(hexScheme.isLessThanRange?.(version, range)).toBe(expected);
     }
   );
 
diff --git a/lib/versioning/hex/index.ts b/lib/versioning/hex/index.ts
index 161c276bf3..08b195affb 100644
--- a/lib/versioning/hex/index.ts
+++ b/lib/versioning/hex/index.ts
@@ -42,52 +42,63 @@ function npm2hex(input: string): string {
   return output;
 }
 
-const isLessThanRange = (version: string, range: string): boolean =>
-  npm.isLessThanRange(hex2npm(version), hex2npm(range));
+function isLessThanRange(version: string, range: string): boolean {
+  return !!npm.isLessThanRange?.(hex2npm(version), hex2npm(range));
+}
 
-const isValid = (input: string): string | boolean =>
-  npm.isValid(hex2npm(input));
+const isValid = (input: string): boolean => !!npm.isValid(hex2npm(input));
 
 const matches = (version: string, range: string): boolean =>
   npm.matches(hex2npm(version), hex2npm(range));
 
-const getSatisfyingVersion = (versions: string[], range: string): string =>
-  npm.getSatisfyingVersion(versions.map(hex2npm), hex2npm(range));
+function getSatisfyingVersion(
+  versions: string[],
+  range: string
+): string | null {
+  return npm.getSatisfyingVersion(versions.map(hex2npm), hex2npm(range));
+}
 
-const minSatisfyingVersion = (versions: string[], range: string): string =>
-  npm.minSatisfyingVersion(versions.map(hex2npm), hex2npm(range));
+function minSatisfyingVersion(
+  versions: string[],
+  range: string
+): string | null {
+  return npm.minSatisfyingVersion(versions.map(hex2npm), hex2npm(range));
+}
 
-const getNewValue = ({
+function getNewValue({
   currentValue,
   rangeStrategy,
   currentVersion,
   newVersion,
-}: NewValueConfig): string => {
+}: NewValueConfig): string | null {
   let newSemver = npm.getNewValue({
     currentValue: hex2npm(currentValue),
     rangeStrategy,
     currentVersion,
     newVersion,
   });
-  newSemver = npm2hex(newSemver);
-  if (regEx(/~>\s*(\d+\.\d+\.\d+)$/).test(currentValue)) {
-    newSemver = newSemver.replace(
-      regEx(/[\^~]\s*(\d+\.\d+\.\d+)/),
-      (_str, p1: string) => `~> ${p1}`
-    );
-  } else if (regEx(/~>\s*(\d+\.\d+)$/).test(currentValue)) {
-    newSemver = newSemver.replace(
-      regEx(/\^\s*(\d+\.\d+)(\.\d+)?/),
-      (_str, p1: string) => `~> ${p1}`
-    );
-  } else {
-    newSemver = newSemver.replace(regEx(/~\s*(\d+\.\d+\.\d)/), '~> $1');
-  }
-  if (npm.isVersion(newSemver)) {
-    newSemver = `== ${newSemver}`;
+  if (newSemver) {
+    newSemver = npm2hex(newSemver);
+
+    if (regEx(/~>\s*(\d+\.\d+\.\d+)$/).test(currentValue)) {
+      newSemver = newSemver.replace(
+        regEx(/[\^~]\s*(\d+\.\d+\.\d+)/),
+        (_str, p1: string) => `~> ${p1}`
+      );
+    } else if (regEx(/~>\s*(\d+\.\d+)$/).test(currentValue)) {
+      newSemver = newSemver.replace(
+        regEx(/\^\s*(\d+\.\d+)(\.\d+)?/),
+        (_str, p1: string) => `~> ${p1}`
+      );
+    } else {
+      newSemver = newSemver.replace(regEx(/~\s*(\d+\.\d+\.\d)/), '~> $1');
+    }
+    if (npm.isVersion(newSemver)) {
+      newSemver = `== ${newSemver}`;
+    }
   }
   return newSemver;
-};
+}
 
 export { isValid };
 
diff --git a/tsconfig.strict.json b/tsconfig.strict.json
index 852d522237..2a9c713c0b 100644
--- a/tsconfig.strict.json
+++ b/tsconfig.strict.json
@@ -70,6 +70,7 @@
     "lib/util/url.ts",
     "lib/versioning/gradle/compare.ts",
     "lib/versioning/maven/**/*.ts",
+    "lib/versioning/hex/**/*.ts",
     "lib/versioning/node/**/*.ts",
     "lib/versioning/npm/**/*.ts",
     "lib/versioning/ruby/**/*.ts",
-- 
GitLab