docs: public static int compareVersions(Object[] left, Object[] right) {
          if (left == null || right == null) {
              throw new IllegalArgumentException("Invalid versions");
          }
  
          for (int i = 0; i < left.length; i++) {
              // right is shorter than left and share the same prefix => left must be larger
              if (right.length == i) {
                  return 1;
              }
  
              if (left[i] instanceof Integer) {
                  if (right[i] instanceof Integer) {
                      // compare two numbers
                      if (((Integer) left[i]) > ((Integer) right[i])) {
                          return 1;
                      } else if (((Integer) left[i]) < ((Integer) right[i])) {
                          return -1;
                      }
                      else {
                          continue;
                      }
                  }
                  else {
                      // numbers always greater than alphanumeric tags
                      return 1;
                  }
              }
              else if (right[i] instanceof Integer) {
                  // alphanumeric tags always less than numbers
                  return -1;
              }
              else {
                  // compare two alphanumeric tags lexicographically
                  int cmp = ((String) left[i]).compareTo((String) right[i]);
                  if (cmp != 0) {
                      return cmp;
                  }
                  else {
                      // two alphanumeric tags are the same... so keep comparing
                      continue;
                  }
              }
          }
  
          // left is shorter than right and share the same prefix, must be less
          if (left.length < right.length) {
              return -1;
          }
  
          // samesies
          return 0;
      }