// 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 'package:_fe_analyzer_shared/src/util/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);
  }
}
