original_string: private static function resolveUrl(array $url, ?array $base, array $queryDefaults = []): array
      {
          if (null !== $base && '' === ($base['scheme'] ?? '').($base['authority'] ?? '')) {
              throw new InvalidArgumentException(sprintf('Invalid "base_uri" option: host or scheme is missing in "%s".', implode('', $base)));
          }
  
          if (null === $base && '' === $url['scheme'].$url['authority']) {
              throw new InvalidArgumentException(sprintf('Invalid URL: no "base_uri" option was provided and host or scheme is missing in "%s".', implode('', $url)));
          }
  
          if (null !== $url['scheme']) {
              $url['path'] = self::removeDotSegments($url['path'] ?? '');
          } else {
              if (null !== $url['authority']) {
                  $url['path'] = self::removeDotSegments($url['path'] ?? '');
              } else {
                  if (null === $url['path']) {
                      $url['path'] = $base['path'];
                      $url['query'] = $url['query'] ?? $base['query'];
                  } else {
                      if ('/' !== $url['path'][0]) {
                          if (null === $base['path']) {
                              $url['path'] = '/'.$url['path'];
                          } else {
                              $segments = explode('/', $base['path']);
                              array_splice($segments, -1, 1, [$url['path']]);
                              $url['path'] = implode('/', $segments);
                          }
                      }
  
                      $url['path'] = self::removeDotSegments($url['path']);
                  }
  
                  $url['authority'] = $base['authority'];
  
                  if ($queryDefaults) {
                      $url['query'] = '?'.self::mergeQueryString(substr($url['query'] ?? '', 1), $queryDefaults, false);
                  }
              }
  
              $url['scheme'] = $base['scheme'];
          }
  
          if ('' === ($url['path'] ?? '')) {
              $url['path'] = '/';
          }
  
          return $url;
      }
code: private static function resolveUrl(array $url, ?array $base, array $queryDefaults = []): array
      {
          if (null !== $base && '' === ($base['scheme'] ?? '').($base['authority'] ?? '')) {
              throw new InvalidArgumentException(sprintf('Invalid "base_uri" option: host or scheme is missing in "%s".', implode('', $base)));
          }
  
          if (null === $base && '' === $url['scheme'].$url['authority']) {
              throw new InvalidArgumentException(sprintf('Invalid URL: no "base_uri" option was provided and host or scheme is missing in "%s".', implode('', $url)));
          }
  
          if (null !== $url['scheme']) {
              $url['path'] = self::removeDotSegments($url['path'] ?? '');
          } else {
              if (null !== $url['authority']) {
                  $url['path'] = self::removeDotSegments($url['path'] ?? '');
              } else {
                  if (null === $url['path']) {
                      $url['path'] = $base['path'];
                      $url['query'] = $url['query'] ?? $base['query'];
                  } else {
                      if ('/' !== $url['path'][0]) {
                          if (null === $base['path']) {
                              $url['path'] = '/'.$url['path'];
                          } else {
                              $segments = explode('/', $base['path']);
                              array_splice($segments, -1, 1, [$url['path']]);
                              $url['path'] = implode('/', $segments);
                          }
                      }
  
                      $url['path'] = self::removeDotSegments($url['path']);
                  }
  
                  $url['authority'] = $base['authority'];
  
                  if ($queryDefaults) {
                      $url['query'] = '?'.self::mergeQueryString(substr($url['query'] ?? '', 1), $queryDefaults, false);
                  }
              }
  
              $url['scheme'] = $base['scheme'];
          }
  
          if ('' === ($url['path'] ?? '')) {
              $url['path'] = '/';
          }
  
          return $url;
      }
code_tokens: private static function resolveUrl ( array $ url , ? array $ base , array $ queryDefaults = [ ] ) : array { if ( null !== $ base && '' === ( $ base [ 'scheme' ] ?? '' ) . ( $ base [ 'authority' ] ?? '' ) ) { throw new InvalidArgumentException ( sprintf ( 'Invalid "base_uri" option: host or scheme is missing in "%s".' , implode ( '' , $ base ) ) ) ; } if ( null === $ base && '' === $ url [ 'scheme' ] . $ url [ 'authority' ] ) { throw new InvalidArgumentException ( sprintf ( 'Invalid URL: no "base_uri" option was provided and host or scheme is missing in "%s".' , implode ( '' , $ url ) ) ) ; } if ( null !== $ url [ 'scheme' ] ) { $ url [ 'path' ] = self :: removeDotSegments ( $ url [ 'path' ] ?? '' ) ; } else { if ( null !== $ url [ 'authority' ] ) { $ url [ 'path' ] = self :: removeDotSegments ( $ url [ 'path' ] ?? '' ) ; } else { if ( null === $ url [ 'path' ] ) { $ url [ 'path' ] = $ base [ 'path' ] ; $ url [ 'query' ] = $ url [ 'query' ] ?? $ base [ 'query' ] ; } else { if ( '/' !== $ url [ 'path' ] [ 0 ] ) { if ( null === $ base [ 'path' ] ) { $ url [ 'path' ] = '/' . $ url [ 'path' ] ; } else { $ segments = explode ( '/' , $ base [ 'path' ] ) ; array_splice ( $ segments , - 1 , 1 , [ $ url [ 'path' ] ] ) ; $ url [ 'path' ] = implode ( '/' , $ segments ) ; } } $ url [ 'path' ] = self :: removeDotSegments ( $ url [ 'path' ] ) ; } $ url [ 'authority' ] = $ base [ 'authority' ] ; if ( $ queryDefaults ) { $ url [ 'query' ] = '?' . self :: mergeQueryString ( substr ( $ url [ 'query' ] ?? '' , 1 ) , $ queryDefaults , false ) ; } } $ url [ 'scheme' ] = $ base [ 'scheme' ] ; } if ( '' === ( $ url [ 'path' ] ?? '' ) ) { $ url [ 'path' ] = '/' ; } return $ url ; }
docstring: Resolves a URL against a base URI.
  
  @see https://tools.ietf.org/html/rfc3986#section-5.2.2
  
  @throws InvalidArgumentException When an invalid URL is passed
docstring_tokens: Resolves a URL against a base URI .