From 4802477f8fe5270c1bacdb9c31f66566363a4967 Mon Sep 17 00:00:00 2001
From: Javier Hernandez <javihernant@gmail.com>
Date: Mon, 19 Feb 2024 11:46:39 +0100
Subject: [PATCH] refactor(semver): prepare for noUncheckedIndexedAccess

ref #4040
---
 semver/_parse_comparator.ts | 10 ++++++++--
 semver/parse.ts             |  6 +++---
 semver/parse_range.ts       |  6 +++---
 semver/range_intersects.ts  |  2 +-
 4 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/semver/_parse_comparator.ts b/semver/_parse_comparator.ts
index b174657547fb..c2361e90634c 100644
--- a/semver/_parse_comparator.ts
+++ b/semver/_parse_comparator.ts
@@ -33,8 +33,14 @@ export function parseComparator(comparator: string): Comparator {
   const semver = groups.major
     ? {
       major: parseNumber(groups.major, "Invalid major version"),
-      minor: parseNumber(groups.minor, "Invalid minor version"),
-      patch: parseNumber(groups.patch, "Invalid patch version"),
+      minor: parseNumber(
+        groups.minor!,
+        "Invalid minor version",
+      ),
+      patch: parseNumber(
+        groups.patch!,
+        "Invalid patch version",
+      ),
       prerelease: prerelease ? parsePrerelease(prerelease) : [],
       build: buildmetadata ? parseBuild(buildmetadata) : [],
     }
diff --git a/semver/parse.ts b/semver/parse.ts
index 470ce0690191..73d74ac1a837 100644
--- a/semver/parse.ts
+++ b/semver/parse.ts
@@ -27,9 +27,9 @@ export function parse(version: string): SemVer {
   const groups = version.match(FULL_REGEXP)?.groups;
   if (!groups) throw new TypeError(`Invalid Version: ${version}`);
 
-  const major = parseNumber(groups.major, "Invalid major version");
-  const minor = parseNumber(groups.minor, "Invalid minor version");
-  const patch = parseNumber(groups.patch, "Invalid patch version");
+  const major = parseNumber(groups.major!, "Invalid major version");
+  const minor = parseNumber(groups.minor!, "Invalid minor version");
+  const patch = parseNumber(groups.patch!, "Invalid patch version");
 
   const prerelease = groups.prerelease
     ? parsePrerelease(groups.prerelease)
diff --git a/semver/parse_range.ts b/semver/parse_range.ts
index 94c88d5c0c0b..c429d1a02760 100644
--- a/semver/parse_range.ts
+++ b/semver/parse_range.ts
@@ -5,7 +5,7 @@ import { OPERATOR_XRANGE_REGEXP, XRANGE } from "./_shared.ts";
 import { parseComparator } from "./_parse_comparator.ts";
 import { parseBuild, parsePrerelease } from "./_shared.ts";
 
-function isWildcard(id: string): boolean {
+function isWildcard(id?: string): boolean {
   return !id || id.toLowerCase() === "x" || id === "*";
 }
 
@@ -50,9 +50,9 @@ function parseHyphenRange(range: string) {
   if (isWildcard(rightGroups.major)) {
     to = "";
   } else if (isWildcard(rightGroups.minor)) {
-    to = `<${+rightGroups.major + 1}.0.0`;
+    to = `<${+rightGroups.major! + 1}.0.0`;
   } else if (isWildcard(rightGroups.patch)) {
-    to = `<${rightGroups.major}.${+rightGroups.minor + 1}.0`;
+    to = `<${rightGroups.major}.${+rightGroups.minor! + 1}.0`;
   } else if (rightGroups.prerelease) {
     to =
       `<=${rightGroups.major}.${rightGroups.minor}.${rightGroups.patch}-${rightGroups.prerelease}`;
diff --git a/semver/range_intersects.ts b/semver/range_intersects.ts
index 9dc802c40f70..471ef54d42b3 100644
--- a/semver/range_intersects.ts
+++ b/semver/range_intersects.ts
@@ -12,7 +12,7 @@ function rangesSatisfiable(ranges: Range[]): boolean {
 function comparatorsSatisfiable(comparators: Comparator[]): boolean {
   // Comparators are satisfiable if they all intersect with each other
   for (let i = 0; i < comparators.length - 1; i++) {
-    const c0 = comparators[i];
+    const c0 = comparators[i]!;
     for (const c1 of comparators.slice(i + 1)) {
       if (!comparatorIntersects(c0, c1)) {
         return false;