resolveUri method

Uri resolveUri(
  1. String src, [
  2. String? baseDirSrc
])

Implementation

Uri resolveUri(String src, [String? baseDirSrc]) {
  final rawSrc = src.trim();
  final virtualUri = _lookupVirtualUri(rawSrc);
  if (virtualUri != null) return virtualUri;

  final srcUri = _parseUri(rawSrc);
  if (baseDirSrc == null || baseDirSrc.trim().isEmpty) {
    if (!_isWeb && !srcUri.hasScheme) {
      final decoded = Uri.decodeComponent(srcUri.path);
      return File(decoded).absolute.uri;
    }
    return srcUri;
  }

  Uri baseUri = _parseUri(baseDirSrc.trim());
  if (baseUri.isScheme('data')) {
    if (!_isWeb && !srcUri.hasScheme) {
      final decoded = Uri.decodeComponent(srcUri.path);
      return File(decoded).absolute.uri;
    }
    return srcUri;
  }

  if (!_isWeb && !baseUri.hasScheme) {
    final decodedBase = Uri.decodeComponent(baseUri.path);
    final isDir = decodedBase.endsWith('/') ||
        decodedBase.endsWith('\\') ||
        Directory(decodedBase).existsSync();
    if (isDir) {
      baseUri = Directory(decodedBase).absolute.uri;
    } else {
      baseUri = File(decodedBase).absolute.uri;
    }
  }

  final resolved = baseUri.resolveUri(srcUri);
  final virtualResolved = _lookupVirtualUri(resolved.toString());
  if (virtualResolved != null) return virtualResolved;

  if (!_isWeb && !resolved.hasScheme) {
    final decoded = Uri.decodeComponent(resolved.path);
    return File(decoded).absolute.uri;
  }
  return resolved;
}