R/appDependencies.R

Defines functions appDependencies

Documented in appDependencies

#' Solve app dependencies
#'
#' @export
#' @note Updated 2023-10-17.
#'
#' @param appName `character(1)`.
#' Application name.
#'
#' @return `character`.
#' Application names.
#'
#' @examples
#' x <- appDependencies("python3.11")
#' print(x)
appDependencies <- function(appName) {
    json <- .importAppJson()
    sysDict <- .sysDict()
    assert(
        isString(appName),
        isSubset(appName, names(json))
    )
    deps <- .getAppDeps(
        name = appName,
        json = json[[appName]],
        sysDict = sysDict
    )
    if (is.null(deps)) {
        return(character())
    }
    i <- 1L
    lst <- list()
    lst[[i]] <- deps
    while (i <= length(deps)) {
        deps <- Map(
            name = lst[[i]],
            json[lst[[i]]],
            MoreArgs = list("sysDict" = sysDict),
            f = .getAppDeps
        )
        deps <- unlist(deps, recursive = TRUE, use.names = FALSE)
        if (is.null(deps)) {
            break
        }
        i <- i + 1L
        lst[[i]] <- deps
    }
    lst <- rev(lst)
    deps <- unlist(lst, recursive = TRUE, use.names = FALSE)
    deps <- unique(deps)
    sysDict <- .sysDict()
    lgl <- unlist(Map(
        name = deps,
        json = json[deps],
        MoreArgs = list(sysDict = sysDict),
        f = .isAppSupported
    ))
    if (!any(lgl)) {
        return(character())
    }
    out <- deps[lgl]
    out
}
acidgenomics/r-koopa documentation built on Oct. 31, 2023, 9:21 a.m.