All Downloads are FREE. Search and download functionalities are using the official Maven repository.

replpp.Dependencies.scala Maven / Gradle / Ivy

package replpp

import coursier.Dependency
import coursier.cache.FileCache
import coursier.cache.loggers.RefreshLogger
import coursier.core.Repository
import coursier.parse.{DependencyParser, RepositoryParser}

import java.io.File
import java.nio.file.Path
import scala.util.{Failure, Success, Try}

object Dependencies {

  def resolve(coordinates: Seq[String], additionalRepositories: Seq[String] = Nil): Try[Seq[File]] = {
    for {
      repositories <- parseRepositories(additionalRepositories)
      dependencies <- parseDependencies(coordinates)
    } yield {
      // the default cache throws away the credentials... see PlatformCacheCompanion.scala
      val cache = FileCache().withLogger(RefreshLogger.create())

      coursier.Fetch()
        .withCache(cache)
        .addRepositories(repositories: _*)
        .addDependencies(dependencies: _*)
        .run()
    }
  }

  private def parseRepositories(additionalRepositories: Seq[String]): Try[Seq[Repository]] = {
    Try {
      val parseResults = RepositoryParser.repositories(additionalRepositories)
      parseResults.either match {
        case Right(res) => res
        case Left(failures) =>
          throw new AssertionError(s"error while trying to parse given repository coordinates: ${failures.mkString(",")}")
      }
    }
  }


  private def parseDependencies(coordinates: Seq[String]): Try[Seq[Dependency]] =
    util.sequenceTry(coordinates.map(parseDependency))

  private def parseDependency(coordinate: String): Try[Dependency] = {
    lazy val errorGeneric = s"error while trying to parse the following dependency coordinate: `$coordinate`"
    Try {
      DependencyParser.dependency(coordinate, defaultScalaVersion = "3") match {
        // I'd expect coursier to return a `Left(errorMsg)` here in all error scenarios, but it only does it in certain scenarios...
        case Left(error) => throw new AssertionError(s"$errorGeneric: $error")
        case Right(value) => value
      }
    }.recover {
      case error => throw new AssertionError(errorGeneric, error)
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy