// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'relativize.dart';

Uri resolveInputUri(String path) {
  Uri uri;
  if (path.indexOf(":") == -1) {
    uri = new Uri.file(path, windows: isWindows);
  } else if (!isWindows) {
    uri = parseUri(path);
  } else {
    uri = resolveAmbiguousWindowsPath(path);
  }
  return Uri.base.resolveUri(uri);
}

Uri parseUri(String path) {
  if (path.startsWith("file:")) {
    if (Uri.base.scheme == "file") {
      // The Uri class doesn't handle relative file URIs correctly, the
      // following works around that issue.
      return new Uri(path: Uri.parse("x-$path").path);
    }
  }
  return Uri.parse(path);
}

Uri resolveAmbiguousWindowsPath(String path) {
  try {
    return new Uri.file(path, windows: isWindows);
  } on ArgumentError catch (_) {
    return parseUri(path);
  }
}
