in lib/src/request.dart [311:355]
Uri _computeUrl(Uri requestedUri, String? handlerPath, Uri? url) {
if (handlerPath != null &&
handlerPath != requestedUri.path &&
!handlerPath.endsWith('/')) {
handlerPath += '/';
}
if (url != null) {
if (url.scheme.isNotEmpty || url.hasAuthority || url.fragment.isNotEmpty) {
throw ArgumentError('url "$url" may contain only a path and query '
'parameters.');
}
if (!requestedUri.path.endsWith(url.path)) {
throw ArgumentError('url "$url" must be a suffix of requestedUri '
'"$requestedUri".');
}
if (requestedUri.query != url.query) {
throw ArgumentError('url "$url" must have the same query parameters '
'as requestedUri "$requestedUri".');
}
if (url.path.startsWith('/')) {
throw ArgumentError('url "$url" must be relative.');
}
var startOfUrl = requestedUri.path.length - url.path.length;
if (url.path.isNotEmpty &&
requestedUri.path.substring(startOfUrl - 1, startOfUrl) != '/') {
throw ArgumentError('url "$url" must be on a path boundary in '
'requestedUri "$requestedUri".');
}
return url;
} else if (handlerPath != null) {
return Uri(
path: requestedUri.path.substring(handlerPath.length),
query: requestedUri.query);
} else {
// Skip the initial "/".
var path = requestedUri.path.substring(1);
return Uri(path: path, query: requestedUri.query);
}
}