├── .gitignore ├── renv ├── .gitignore ├── settings.dcf ├── settings.json └── activate.R ├── shiny-shell.Rproj ├── README.md ├── app.R ├── renv.lock └── manifest.json /.gitignore: -------------------------------------------------------------------------------- 1 | packrat/lib*/ 2 | .Rproj.user 3 | packrat/src/ 4 | .Rhistory 5 | rsconnect 6 | .Rprofile 7 | -------------------------------------------------------------------------------- /renv/.gitignore: -------------------------------------------------------------------------------- 1 | sandbox/ 2 | cellar/ 3 | local/ 4 | lock/ 5 | library/ 6 | python/ 7 | staging/ 8 | -------------------------------------------------------------------------------- /shiny-shell.Rproj: -------------------------------------------------------------------------------- 1 | Version: 1.0 2 | 3 | RestoreWorkspace: Default 4 | SaveWorkspace: Default 5 | AlwaysSaveHistory: Default 6 | 7 | EnableCodeIndexing: Yes 8 | UseSpacesForTab: Yes 9 | NumSpacesForTab: 2 10 | Encoding: UTF-8 11 | 12 | RnwWeave: Sweave 13 | LaTeX: pdfLaTeX 14 | -------------------------------------------------------------------------------- /renv/settings.dcf: -------------------------------------------------------------------------------- 1 | bioconductor.version: 2 | external.libraries: 3 | ignored.packages: 4 | package.dependency.fields: Imports, Depends, LinkingTo 5 | r.version: 6 | snapshot.type: packrat 7 | use.cache: TRUE 8 | vcs.ignore.cellar: TRUE 9 | vcs.ignore.library: TRUE 10 | vcs.ignore.local: TRUE 11 | -------------------------------------------------------------------------------- /renv/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "bioconductor.version": [], 3 | "external.libraries": [], 4 | "ignored.packages": [], 5 | "package.dependency.fields": [ 6 | "Imports", 7 | "Depends", 8 | "LinkingTo" 9 | ], 10 | "ppm.enabled": null, 11 | "ppm.ignored.urls": [], 12 | "r.version": [], 13 | "snapshot.type": "packrat", 14 | "use.cache": true, 15 | "vcs.ignore.cellar": true, 16 | "vcs.ignore.library": true, 17 | "vcs.ignore.local": true, 18 | "vcs.manage.ignores": true 19 | } 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Shiny Shell # 2 | 3 | A Shiny app that provides a simple shell into the underlying operating system by passing input to the `system2` command. 4 | 5 | # WARNING # 6 | 7 | _This is extremely unsecure_. Use at your own risk. By exposing this functionality to your users, you allow them the opportunity to execute arbitrary code on your operating system. It can be useful for education, exploration, or as a simple example, but is generally recommended against at other times. This functionality would make it much easier for a malicious user to fill up your server, crash your server, or hack your server. As such, the execution environment would ideally be contained and controlled with a non-privileged user. 8 | 9 | If you are going deeper into the realm of education, I recommend using the [`learnr`](https://rstudio.github.io/learnr/) package to build helpful tutorials with similar interactive functionality. 10 | 11 | Have fun and stay safe!! -------------------------------------------------------------------------------- /app.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | library(stringr) 3 | 4 | # packages for testing 5 | #library(odbc) 6 | 7 | # remove concerning env vars 8 | # (leave a trail) 9 | Sys.setenv("CONNECT_API_KEY"="removed-this-for-security") 10 | 11 | ui <- fluidPage( 12 | 13 | # Application title 14 | titlePanel("Shiny Shell!"), 15 | 16 | sidebarLayout( 17 | sidebarPanel = NULL, 18 | mainPanel = mainPanel( 19 | "Enjoy a shell where you ought not have one!" 20 | , textInput('command', label='Enter Command') 21 | , actionButton('execute', label='Run!') 22 | , textInput('envir', label='Enter name=value pairs to set environment variables (quoting is weird)') 23 | , verbatimTextOutput("text") 24 | ) 25 | ) 26 | ) 27 | 28 | server <- function(input, output) { 29 | 30 | output$text <- eventReactive( 31 | input$execute, { 32 | 33 | print('Running event reactive') 34 | first_space <- str_locate(input$command,' ')[[1,'start']] 35 | if (!is.na(first_space)) { 36 | command <- str_sub(input$command,1,first_space-1) 37 | args <- str_sub(input$command,first_space+1) 38 | } else { 39 | command <- input$command 40 | args <- character() 41 | } 42 | envir <- input$envir 43 | print(sprintf('Command: %s',command)) 44 | print(sprintf('Args: %s',args)) 45 | print(sprintf('Env: %s', envir)) 46 | returnval <- system2(command=command, args=args 47 | , stdout=TRUE 48 | , stderr=TRUE 49 | , env = envir) 50 | 51 | return(paste(returnval,collapse='\n')) 52 | } 53 | ) 54 | } 55 | 56 | # Run the application 57 | shinyApp(ui = ui, server = server) 58 | -------------------------------------------------------------------------------- /renv.lock: -------------------------------------------------------------------------------- 1 | { 2 | "R": { 3 | "Version": "4.2.0", 4 | "Repositories": [ 5 | { 6 | "Name": "CRAN", 7 | "URL": "https://p3m.dev/cran/latest" 8 | } 9 | ] 10 | }, 11 | "Packages": { 12 | "R6": { 13 | "Package": "R6", 14 | "Version": "2.5.1", 15 | "Source": "Repository", 16 | "Repository": "CRAN", 17 | "Requirements": [ 18 | "R" 19 | ], 20 | "Hash": "470851b6d5d0ac559e9d01bb352b4021" 21 | }, 22 | "Rcpp": { 23 | "Package": "Rcpp", 24 | "Version": "1.0.13", 25 | "Source": "Repository", 26 | "Repository": "RSPM", 27 | "Requirements": [ 28 | "methods", 29 | "utils" 30 | ], 31 | "Hash": "f27411eb6d9c3dada5edd444b8416675" 32 | }, 33 | "base64enc": { 34 | "Package": "base64enc", 35 | "Version": "0.1-3", 36 | "Source": "Repository", 37 | "Repository": "RSPM", 38 | "Requirements": [ 39 | "R" 40 | ], 41 | "Hash": "543776ae6848fde2f48ff3816d0628bc" 42 | }, 43 | "bslib": { 44 | "Package": "bslib", 45 | "Version": "0.8.0", 46 | "Source": "Repository", 47 | "Repository": "RSPM", 48 | "Requirements": [ 49 | "R", 50 | "base64enc", 51 | "cachem", 52 | "fastmap", 53 | "grDevices", 54 | "htmltools", 55 | "jquerylib", 56 | "jsonlite", 57 | "lifecycle", 58 | "memoise", 59 | "mime", 60 | "rlang", 61 | "sass" 62 | ], 63 | "Hash": "b299c6741ca9746fb227debcb0f9fb6c" 64 | }, 65 | "cachem": { 66 | "Package": "cachem", 67 | "Version": "1.1.0", 68 | "Source": "Repository", 69 | "Repository": "RSPM", 70 | "Requirements": [ 71 | "fastmap", 72 | "rlang" 73 | ], 74 | "Hash": "cd9a672193789068eb5a2aad65a0dedf" 75 | }, 76 | "cli": { 77 | "Package": "cli", 78 | "Version": "3.6.3", 79 | "Source": "Repository", 80 | "Repository": "RSPM", 81 | "Requirements": [ 82 | "R", 83 | "utils" 84 | ], 85 | "Hash": "b21916dd77a27642b447374a5d30ecf3" 86 | }, 87 | "commonmark": { 88 | "Package": "commonmark", 89 | "Version": "1.9.1", 90 | "Source": "Repository", 91 | "Repository": "RSPM", 92 | "Hash": "5d8225445acb167abf7797de48b2ee3c" 93 | }, 94 | "crayon": { 95 | "Package": "crayon", 96 | "Version": "1.5.3", 97 | "Source": "Repository", 98 | "Repository": "RSPM", 99 | "Requirements": [ 100 | "grDevices", 101 | "methods", 102 | "utils" 103 | ], 104 | "Hash": "859d96e65ef198fd43e82b9628d593ef" 105 | }, 106 | "digest": { 107 | "Package": "digest", 108 | "Version": "0.6.36", 109 | "Source": "Repository", 110 | "Repository": "RSPM", 111 | "Requirements": [ 112 | "R", 113 | "utils" 114 | ], 115 | "Hash": "fd6824ad91ede64151e93af67df6376b" 116 | }, 117 | "fastmap": { 118 | "Package": "fastmap", 119 | "Version": "1.2.0", 120 | "Source": "Repository", 121 | "Repository": "RSPM", 122 | "Hash": "aa5e1cd11c2d15497494c5292d7ffcc8" 123 | }, 124 | "fontawesome": { 125 | "Package": "fontawesome", 126 | "Version": "0.5.2", 127 | "Source": "Repository", 128 | "Repository": "RSPM", 129 | "Requirements": [ 130 | "R", 131 | "htmltools", 132 | "rlang" 133 | ], 134 | "Hash": "c2efdd5f0bcd1ea861c2d4e2a883a67d" 135 | }, 136 | "fs": { 137 | "Package": "fs", 138 | "Version": "1.6.4", 139 | "Source": "Repository", 140 | "Repository": "RSPM", 141 | "Requirements": [ 142 | "R", 143 | "methods" 144 | ], 145 | "Hash": "15aeb8c27f5ea5161f9f6a641fafd93a" 146 | }, 147 | "glue": { 148 | "Package": "glue", 149 | "Version": "1.7.0", 150 | "Source": "Repository", 151 | "Repository": "RSPM", 152 | "Requirements": [ 153 | "R", 154 | "methods" 155 | ], 156 | "Hash": "e0b3a53876554bd45879e596cdb10a52" 157 | }, 158 | "htmltools": { 159 | "Package": "htmltools", 160 | "Version": "0.5.8.1", 161 | "Source": "Repository", 162 | "Repository": "RSPM", 163 | "Requirements": [ 164 | "R", 165 | "base64enc", 166 | "digest", 167 | "fastmap", 168 | "grDevices", 169 | "rlang", 170 | "utils" 171 | ], 172 | "Hash": "81d371a9cc60640e74e4ab6ac46dcedc" 173 | }, 174 | "httpuv": { 175 | "Package": "httpuv", 176 | "Version": "1.6.15", 177 | "Source": "Repository", 178 | "Repository": "RSPM", 179 | "Requirements": [ 180 | "R", 181 | "R6", 182 | "Rcpp", 183 | "later", 184 | "promises", 185 | "utils" 186 | ], 187 | "Hash": "d55aa087c47a63ead0f6fc10f8fa1ee0" 188 | }, 189 | "jquerylib": { 190 | "Package": "jquerylib", 191 | "Version": "0.1.4", 192 | "Source": "Repository", 193 | "Repository": "CRAN", 194 | "Requirements": [ 195 | "htmltools" 196 | ], 197 | "Hash": "5aab57a3bd297eee1c1d862735972182" 198 | }, 199 | "jsonlite": { 200 | "Package": "jsonlite", 201 | "Version": "1.8.8", 202 | "Source": "Repository", 203 | "Repository": "RSPM", 204 | "Requirements": [ 205 | "methods" 206 | ], 207 | "Hash": "e1b9c55281c5adc4dd113652d9e26768" 208 | }, 209 | "later": { 210 | "Package": "later", 211 | "Version": "1.3.2", 212 | "Source": "Repository", 213 | "Repository": "https://colorado.rstudio.com/rspm/all/latest", 214 | "Requirements": [ 215 | "Rcpp", 216 | "rlang" 217 | ], 218 | "Hash": "a3e051d405326b8b0012377434c62b37" 219 | }, 220 | "lifecycle": { 221 | "Package": "lifecycle", 222 | "Version": "1.0.4", 223 | "Source": "Repository", 224 | "Repository": "RSPM", 225 | "Requirements": [ 226 | "R", 227 | "cli", 228 | "glue", 229 | "rlang" 230 | ], 231 | "Hash": "b8552d117e1b808b09a832f589b79035" 232 | }, 233 | "magrittr": { 234 | "Package": "magrittr", 235 | "Version": "2.0.3", 236 | "Source": "Repository", 237 | "Repository": "CRAN", 238 | "Requirements": [ 239 | "R" 240 | ], 241 | "Hash": "7ce2733a9826b3aeb1775d56fd305472" 242 | }, 243 | "memoise": { 244 | "Package": "memoise", 245 | "Version": "2.0.1", 246 | "Source": "Repository", 247 | "Repository": "CRAN", 248 | "Requirements": [ 249 | "cachem", 250 | "rlang" 251 | ], 252 | "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" 253 | }, 254 | "mime": { 255 | "Package": "mime", 256 | "Version": "0.12", 257 | "Source": "Repository", 258 | "Repository": "CRAN", 259 | "Requirements": [ 260 | "tools" 261 | ], 262 | "Hash": "18e9c28c1d3ca1560ce30658b22ce104" 263 | }, 264 | "promises": { 265 | "Package": "promises", 266 | "Version": "1.3.0", 267 | "Source": "Repository", 268 | "Repository": "RSPM", 269 | "Requirements": [ 270 | "R6", 271 | "Rcpp", 272 | "fastmap", 273 | "later", 274 | "magrittr", 275 | "rlang", 276 | "stats" 277 | ], 278 | "Hash": "434cd5388a3979e74be5c219bcd6e77d" 279 | }, 280 | "rappdirs": { 281 | "Package": "rappdirs", 282 | "Version": "0.3.3", 283 | "Source": "Repository", 284 | "Repository": "CRAN", 285 | "Requirements": [ 286 | "R" 287 | ], 288 | "Hash": "5e3c5dc0b071b21fa128676560dbe94d" 289 | }, 290 | "renv": { 291 | "Package": "renv", 292 | "Version": "1.0.7", 293 | "Source": "Repository", 294 | "Repository": "RSPM", 295 | "Requirements": [ 296 | "utils" 297 | ], 298 | "Hash": "397b7b2a265bc5a7a06852524dabae20" 299 | }, 300 | "rlang": { 301 | "Package": "rlang", 302 | "Version": "1.1.4", 303 | "Source": "Repository", 304 | "Repository": "RSPM", 305 | "Requirements": [ 306 | "R", 307 | "utils" 308 | ], 309 | "Hash": "3eec01f8b1dee337674b2e34ab1f9bc1" 310 | }, 311 | "sass": { 312 | "Package": "sass", 313 | "Version": "0.4.9", 314 | "Source": "Repository", 315 | "Repository": "RSPM", 316 | "Requirements": [ 317 | "R6", 318 | "fs", 319 | "htmltools", 320 | "rappdirs", 321 | "rlang" 322 | ], 323 | "Hash": "d53dbfddf695303ea4ad66f86e99b95d" 324 | }, 325 | "shiny": { 326 | "Package": "shiny", 327 | "Version": "1.9.1", 328 | "Source": "Repository", 329 | "Repository": "RSPM", 330 | "Requirements": [ 331 | "R", 332 | "R6", 333 | "bslib", 334 | "cachem", 335 | "commonmark", 336 | "crayon", 337 | "fastmap", 338 | "fontawesome", 339 | "glue", 340 | "grDevices", 341 | "htmltools", 342 | "httpuv", 343 | "jsonlite", 344 | "later", 345 | "lifecycle", 346 | "methods", 347 | "mime", 348 | "promises", 349 | "rlang", 350 | "sourcetools", 351 | "tools", 352 | "utils", 353 | "withr", 354 | "xtable" 355 | ], 356 | "Hash": "6a293995a66e12c48d13aa1f957d09c7" 357 | }, 358 | "sourcetools": { 359 | "Package": "sourcetools", 360 | "Version": "0.1.7-1", 361 | "Source": "Repository", 362 | "Repository": "RSPM", 363 | "Requirements": [ 364 | "R" 365 | ], 366 | "Hash": "5f5a7629f956619d519205ec475fe647" 367 | }, 368 | "stringi": { 369 | "Package": "stringi", 370 | "Version": "1.7.8", 371 | "Source": "Repository", 372 | "Repository": "CRAN", 373 | "Requirements": [ 374 | "R", 375 | "stats", 376 | "tools", 377 | "utils" 378 | ], 379 | "Hash": "a68b980681bcbc84c7a67003fa796bfb" 380 | }, 381 | "stringr": { 382 | "Package": "stringr", 383 | "Version": "1.4.0", 384 | "Source": "Repository", 385 | "Repository": "CRAN", 386 | "Requirements": [ 387 | "R", 388 | "glue", 389 | "magrittr", 390 | "stringi" 391 | ], 392 | "Hash": "0759e6b6c0957edb1311028a49a35e76" 393 | }, 394 | "withr": { 395 | "Package": "withr", 396 | "Version": "3.0.1", 397 | "Source": "Repository", 398 | "Repository": "RSPM", 399 | "Requirements": [ 400 | "R", 401 | "grDevices", 402 | "graphics" 403 | ], 404 | "Hash": "07909200e8bbe90426fbfeb73e1e27aa" 405 | }, 406 | "xtable": { 407 | "Package": "xtable", 408 | "Version": "1.8-4", 409 | "Source": "Repository", 410 | "Repository": "CRAN", 411 | "Requirements": [ 412 | "R", 413 | "stats", 414 | "utils" 415 | ], 416 | "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2" 417 | } 418 | } 419 | } 420 | -------------------------------------------------------------------------------- /renv/activate.R: -------------------------------------------------------------------------------- 1 | 2 | local({ 3 | 4 | # the requested version of renv 5 | version <- "1.0.7" 6 | attr(version, "sha") <- NULL 7 | 8 | # the project directory 9 | project <- Sys.getenv("RENV_PROJECT") 10 | if (!nzchar(project)) 11 | project <- getwd() 12 | 13 | # use start-up diagnostics if enabled 14 | diagnostics <- Sys.getenv("RENV_STARTUP_DIAGNOSTICS", unset = "FALSE") 15 | if (diagnostics) { 16 | start <- Sys.time() 17 | profile <- tempfile("renv-startup-", fileext = ".Rprof") 18 | utils::Rprof(profile) 19 | on.exit({ 20 | utils::Rprof(NULL) 21 | elapsed <- signif(difftime(Sys.time(), start, units = "auto"), digits = 2L) 22 | writeLines(sprintf("- renv took %s to run the autoloader.", format(elapsed))) 23 | writeLines(sprintf("- Profile: %s", profile)) 24 | print(utils::summaryRprof(profile)) 25 | }, add = TRUE) 26 | } 27 | 28 | # figure out whether the autoloader is enabled 29 | enabled <- local({ 30 | 31 | # first, check config option 32 | override <- getOption("renv.config.autoloader.enabled") 33 | if (!is.null(override)) 34 | return(override) 35 | 36 | # if we're being run in a context where R_LIBS is already set, 37 | # don't load -- presumably we're being run as a sub-process and 38 | # the parent process has already set up library paths for us 39 | rcmd <- Sys.getenv("R_CMD", unset = NA) 40 | rlibs <- Sys.getenv("R_LIBS", unset = NA) 41 | if (!is.na(rlibs) && !is.na(rcmd)) 42 | return(FALSE) 43 | 44 | # next, check environment variables 45 | # TODO: prefer using the configuration one in the future 46 | envvars <- c( 47 | "RENV_CONFIG_AUTOLOADER_ENABLED", 48 | "RENV_AUTOLOADER_ENABLED", 49 | "RENV_ACTIVATE_PROJECT" 50 | ) 51 | 52 | for (envvar in envvars) { 53 | envval <- Sys.getenv(envvar, unset = NA) 54 | if (!is.na(envval)) 55 | return(tolower(envval) %in% c("true", "t", "1")) 56 | } 57 | 58 | # enable by default 59 | TRUE 60 | 61 | }) 62 | 63 | # bail if we're not enabled 64 | if (!enabled) { 65 | 66 | # if we're not enabled, we might still need to manually load 67 | # the user profile here 68 | profile <- Sys.getenv("R_PROFILE_USER", unset = "~/.Rprofile") 69 | if (file.exists(profile)) { 70 | cfg <- Sys.getenv("RENV_CONFIG_USER_PROFILE", unset = "TRUE") 71 | if (tolower(cfg) %in% c("true", "t", "1")) 72 | sys.source(profile, envir = globalenv()) 73 | } 74 | 75 | return(FALSE) 76 | 77 | } 78 | 79 | # avoid recursion 80 | if (identical(getOption("renv.autoloader.running"), TRUE)) { 81 | warning("ignoring recursive attempt to run renv autoloader") 82 | return(invisible(TRUE)) 83 | } 84 | 85 | # signal that we're loading renv during R startup 86 | options(renv.autoloader.running = TRUE) 87 | on.exit(options(renv.autoloader.running = NULL), add = TRUE) 88 | 89 | # signal that we've consented to use renv 90 | options(renv.consent = TRUE) 91 | 92 | # load the 'utils' package eagerly -- this ensures that renv shims, which 93 | # mask 'utils' packages, will come first on the search path 94 | library(utils, lib.loc = .Library) 95 | 96 | # unload renv if it's already been loaded 97 | if ("renv" %in% loadedNamespaces()) 98 | unloadNamespace("renv") 99 | 100 | # load bootstrap tools 101 | `%||%` <- function(x, y) { 102 | if (is.null(x)) y else x 103 | } 104 | 105 | catf <- function(fmt, ..., appendLF = TRUE) { 106 | 107 | quiet <- getOption("renv.bootstrap.quiet", default = FALSE) 108 | if (quiet) 109 | return(invisible()) 110 | 111 | msg <- sprintf(fmt, ...) 112 | cat(msg, file = stdout(), sep = if (appendLF) "\n" else "") 113 | 114 | invisible(msg) 115 | 116 | } 117 | 118 | header <- function(label, 119 | ..., 120 | prefix = "#", 121 | suffix = "-", 122 | n = min(getOption("width"), 78)) 123 | { 124 | label <- sprintf(label, ...) 125 | n <- max(n - nchar(label) - nchar(prefix) - 2L, 8L) 126 | if (n <= 0) 127 | return(paste(prefix, label)) 128 | 129 | tail <- paste(rep.int(suffix, n), collapse = "") 130 | paste0(prefix, " ", label, " ", tail) 131 | 132 | } 133 | 134 | heredoc <- function(text, leave = 0) { 135 | 136 | # remove leading, trailing whitespace 137 | trimmed <- gsub("^\\s*\\n|\\n\\s*$", "", text) 138 | 139 | # split into lines 140 | lines <- strsplit(trimmed, "\n", fixed = TRUE)[[1L]] 141 | 142 | # compute common indent 143 | indent <- regexpr("[^[:space:]]", lines) 144 | common <- min(setdiff(indent, -1L)) - leave 145 | paste(substring(lines, common), collapse = "\n") 146 | 147 | } 148 | 149 | startswith <- function(string, prefix) { 150 | substring(string, 1, nchar(prefix)) == prefix 151 | } 152 | 153 | bootstrap <- function(version, library) { 154 | 155 | friendly <- renv_bootstrap_version_friendly(version) 156 | section <- header(sprintf("Bootstrapping renv %s", friendly)) 157 | catf(section) 158 | 159 | # attempt to download renv 160 | catf("- Downloading renv ... ", appendLF = FALSE) 161 | withCallingHandlers( 162 | tarball <- renv_bootstrap_download(version), 163 | error = function(err) { 164 | catf("FAILED") 165 | stop("failed to download:\n", conditionMessage(err)) 166 | } 167 | ) 168 | catf("OK") 169 | on.exit(unlink(tarball), add = TRUE) 170 | 171 | # now attempt to install 172 | catf("- Installing renv ... ", appendLF = FALSE) 173 | withCallingHandlers( 174 | status <- renv_bootstrap_install(version, tarball, library), 175 | error = function(err) { 176 | catf("FAILED") 177 | stop("failed to install:\n", conditionMessage(err)) 178 | } 179 | ) 180 | catf("OK") 181 | 182 | # add empty line to break up bootstrapping from normal output 183 | catf("") 184 | 185 | return(invisible()) 186 | } 187 | 188 | renv_bootstrap_tests_running <- function() { 189 | getOption("renv.tests.running", default = FALSE) 190 | } 191 | 192 | renv_bootstrap_repos <- function() { 193 | 194 | # get CRAN repository 195 | cran <- getOption("renv.repos.cran", "https://cloud.r-project.org") 196 | 197 | # check for repos override 198 | repos <- Sys.getenv("RENV_CONFIG_REPOS_OVERRIDE", unset = NA) 199 | if (!is.na(repos)) { 200 | 201 | # check for RSPM; if set, use a fallback repository for renv 202 | rspm <- Sys.getenv("RSPM", unset = NA) 203 | if (identical(rspm, repos)) 204 | repos <- c(RSPM = rspm, CRAN = cran) 205 | 206 | return(repos) 207 | 208 | } 209 | 210 | # check for lockfile repositories 211 | repos <- tryCatch(renv_bootstrap_repos_lockfile(), error = identity) 212 | if (!inherits(repos, "error") && length(repos)) 213 | return(repos) 214 | 215 | # retrieve current repos 216 | repos <- getOption("repos") 217 | 218 | # ensure @CRAN@ entries are resolved 219 | repos[repos == "@CRAN@"] <- cran 220 | 221 | # add in renv.bootstrap.repos if set 222 | default <- c(FALLBACK = "https://cloud.r-project.org") 223 | extra <- getOption("renv.bootstrap.repos", default = default) 224 | repos <- c(repos, extra) 225 | 226 | # remove duplicates that might've snuck in 227 | dupes <- duplicated(repos) | duplicated(names(repos)) 228 | repos[!dupes] 229 | 230 | } 231 | 232 | renv_bootstrap_repos_lockfile <- function() { 233 | 234 | lockpath <- Sys.getenv("RENV_PATHS_LOCKFILE", unset = "renv.lock") 235 | if (!file.exists(lockpath)) 236 | return(NULL) 237 | 238 | lockfile <- tryCatch(renv_json_read(lockpath), error = identity) 239 | if (inherits(lockfile, "error")) { 240 | warning(lockfile) 241 | return(NULL) 242 | } 243 | 244 | repos <- lockfile$R$Repositories 245 | if (length(repos) == 0) 246 | return(NULL) 247 | 248 | keys <- vapply(repos, `[[`, "Name", FUN.VALUE = character(1)) 249 | vals <- vapply(repos, `[[`, "URL", FUN.VALUE = character(1)) 250 | names(vals) <- keys 251 | 252 | return(vals) 253 | 254 | } 255 | 256 | renv_bootstrap_download <- function(version) { 257 | 258 | sha <- attr(version, "sha", exact = TRUE) 259 | 260 | methods <- if (!is.null(sha)) { 261 | 262 | # attempting to bootstrap a development version of renv 263 | c( 264 | function() renv_bootstrap_download_tarball(sha), 265 | function() renv_bootstrap_download_github(sha) 266 | ) 267 | 268 | } else { 269 | 270 | # attempting to bootstrap a release version of renv 271 | c( 272 | function() renv_bootstrap_download_tarball(version), 273 | function() renv_bootstrap_download_cran_latest(version), 274 | function() renv_bootstrap_download_cran_archive(version) 275 | ) 276 | 277 | } 278 | 279 | for (method in methods) { 280 | path <- tryCatch(method(), error = identity) 281 | if (is.character(path) && file.exists(path)) 282 | return(path) 283 | } 284 | 285 | stop("All download methods failed") 286 | 287 | } 288 | 289 | renv_bootstrap_download_impl <- function(url, destfile) { 290 | 291 | mode <- "wb" 292 | 293 | # https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17715 294 | fixup <- 295 | Sys.info()[["sysname"]] == "Windows" && 296 | substring(url, 1L, 5L) == "file:" 297 | 298 | if (fixup) 299 | mode <- "w+b" 300 | 301 | args <- list( 302 | url = url, 303 | destfile = destfile, 304 | mode = mode, 305 | quiet = TRUE 306 | ) 307 | 308 | if ("headers" %in% names(formals(utils::download.file))) 309 | args$headers <- renv_bootstrap_download_custom_headers(url) 310 | 311 | do.call(utils::download.file, args) 312 | 313 | } 314 | 315 | renv_bootstrap_download_custom_headers <- function(url) { 316 | 317 | headers <- getOption("renv.download.headers") 318 | if (is.null(headers)) 319 | return(character()) 320 | 321 | if (!is.function(headers)) 322 | stopf("'renv.download.headers' is not a function") 323 | 324 | headers <- headers(url) 325 | if (length(headers) == 0L) 326 | return(character()) 327 | 328 | if (is.list(headers)) 329 | headers <- unlist(headers, recursive = FALSE, use.names = TRUE) 330 | 331 | ok <- 332 | is.character(headers) && 333 | is.character(names(headers)) && 334 | all(nzchar(names(headers))) 335 | 336 | if (!ok) 337 | stop("invocation of 'renv.download.headers' did not return a named character vector") 338 | 339 | headers 340 | 341 | } 342 | 343 | renv_bootstrap_download_cran_latest <- function(version) { 344 | 345 | spec <- renv_bootstrap_download_cran_latest_find(version) 346 | type <- spec$type 347 | repos <- spec$repos 348 | 349 | baseurl <- utils::contrib.url(repos = repos, type = type) 350 | ext <- if (identical(type, "source")) 351 | ".tar.gz" 352 | else if (Sys.info()[["sysname"]] == "Windows") 353 | ".zip" 354 | else 355 | ".tgz" 356 | name <- sprintf("renv_%s%s", version, ext) 357 | url <- paste(baseurl, name, sep = "/") 358 | 359 | destfile <- file.path(tempdir(), name) 360 | status <- tryCatch( 361 | renv_bootstrap_download_impl(url, destfile), 362 | condition = identity 363 | ) 364 | 365 | if (inherits(status, "condition")) 366 | return(FALSE) 367 | 368 | # report success and return 369 | destfile 370 | 371 | } 372 | 373 | renv_bootstrap_download_cran_latest_find <- function(version) { 374 | 375 | # check whether binaries are supported on this system 376 | binary <- 377 | getOption("renv.bootstrap.binary", default = TRUE) && 378 | !identical(.Platform$pkgType, "source") && 379 | !identical(getOption("pkgType"), "source") && 380 | Sys.info()[["sysname"]] %in% c("Darwin", "Windows") 381 | 382 | types <- c(if (binary) "binary", "source") 383 | 384 | # iterate over types + repositories 385 | for (type in types) { 386 | for (repos in renv_bootstrap_repos()) { 387 | 388 | # retrieve package database 389 | db <- tryCatch( 390 | as.data.frame( 391 | utils::available.packages(type = type, repos = repos), 392 | stringsAsFactors = FALSE 393 | ), 394 | error = identity 395 | ) 396 | 397 | if (inherits(db, "error")) 398 | next 399 | 400 | # check for compatible entry 401 | entry <- db[db$Package %in% "renv" & db$Version %in% version, ] 402 | if (nrow(entry) == 0) 403 | next 404 | 405 | # found it; return spec to caller 406 | spec <- list(entry = entry, type = type, repos = repos) 407 | return(spec) 408 | 409 | } 410 | } 411 | 412 | # if we got here, we failed to find renv 413 | fmt <- "renv %s is not available from your declared package repositories" 414 | stop(sprintf(fmt, version)) 415 | 416 | } 417 | 418 | renv_bootstrap_download_cran_archive <- function(version) { 419 | 420 | name <- sprintf("renv_%s.tar.gz", version) 421 | repos <- renv_bootstrap_repos() 422 | urls <- file.path(repos, "src/contrib/Archive/renv", name) 423 | destfile <- file.path(tempdir(), name) 424 | 425 | for (url in urls) { 426 | 427 | status <- tryCatch( 428 | renv_bootstrap_download_impl(url, destfile), 429 | condition = identity 430 | ) 431 | 432 | if (identical(status, 0L)) 433 | return(destfile) 434 | 435 | } 436 | 437 | return(FALSE) 438 | 439 | } 440 | 441 | renv_bootstrap_download_tarball <- function(version) { 442 | 443 | # if the user has provided the path to a tarball via 444 | # an environment variable, then use it 445 | tarball <- Sys.getenv("RENV_BOOTSTRAP_TARBALL", unset = NA) 446 | if (is.na(tarball)) 447 | return() 448 | 449 | # allow directories 450 | if (dir.exists(tarball)) { 451 | name <- sprintf("renv_%s.tar.gz", version) 452 | tarball <- file.path(tarball, name) 453 | } 454 | 455 | # bail if it doesn't exist 456 | if (!file.exists(tarball)) { 457 | 458 | # let the user know we weren't able to honour their request 459 | fmt <- "- RENV_BOOTSTRAP_TARBALL is set (%s) but does not exist." 460 | msg <- sprintf(fmt, tarball) 461 | warning(msg) 462 | 463 | # bail 464 | return() 465 | 466 | } 467 | 468 | catf("- Using local tarball '%s'.", tarball) 469 | tarball 470 | 471 | } 472 | 473 | renv_bootstrap_download_github <- function(version) { 474 | 475 | enabled <- Sys.getenv("RENV_BOOTSTRAP_FROM_GITHUB", unset = "TRUE") 476 | if (!identical(enabled, "TRUE")) 477 | return(FALSE) 478 | 479 | # prepare download options 480 | pat <- Sys.getenv("GITHUB_PAT") 481 | if (nzchar(Sys.which("curl")) && nzchar(pat)) { 482 | fmt <- "--location --fail --header \"Authorization: token %s\"" 483 | extra <- sprintf(fmt, pat) 484 | saved <- options("download.file.method", "download.file.extra") 485 | options(download.file.method = "curl", download.file.extra = extra) 486 | on.exit(do.call(base::options, saved), add = TRUE) 487 | } else if (nzchar(Sys.which("wget")) && nzchar(pat)) { 488 | fmt <- "--header=\"Authorization: token %s\"" 489 | extra <- sprintf(fmt, pat) 490 | saved <- options("download.file.method", "download.file.extra") 491 | options(download.file.method = "wget", download.file.extra = extra) 492 | on.exit(do.call(base::options, saved), add = TRUE) 493 | } 494 | 495 | url <- file.path("https://api.github.com/repos/rstudio/renv/tarball", version) 496 | name <- sprintf("renv_%s.tar.gz", version) 497 | destfile <- file.path(tempdir(), name) 498 | 499 | status <- tryCatch( 500 | renv_bootstrap_download_impl(url, destfile), 501 | condition = identity 502 | ) 503 | 504 | if (!identical(status, 0L)) 505 | return(FALSE) 506 | 507 | renv_bootstrap_download_augment(destfile) 508 | 509 | return(destfile) 510 | 511 | } 512 | 513 | # Add Sha to DESCRIPTION. This is stop gap until #890, after which we 514 | # can use renv::install() to fully capture metadata. 515 | renv_bootstrap_download_augment <- function(destfile) { 516 | sha <- renv_bootstrap_git_extract_sha1_tar(destfile) 517 | if (is.null(sha)) { 518 | return() 519 | } 520 | 521 | # Untar 522 | tempdir <- tempfile("renv-github-") 523 | on.exit(unlink(tempdir, recursive = TRUE), add = TRUE) 524 | untar(destfile, exdir = tempdir) 525 | pkgdir <- dir(tempdir, full.names = TRUE)[[1]] 526 | 527 | # Modify description 528 | desc_path <- file.path(pkgdir, "DESCRIPTION") 529 | desc_lines <- readLines(desc_path) 530 | remotes_fields <- c( 531 | "RemoteType: github", 532 | "RemoteHost: api.github.com", 533 | "RemoteRepo: renv", 534 | "RemoteUsername: rstudio", 535 | "RemotePkgRef: rstudio/renv", 536 | paste("RemoteRef: ", sha), 537 | paste("RemoteSha: ", sha) 538 | ) 539 | writeLines(c(desc_lines[desc_lines != ""], remotes_fields), con = desc_path) 540 | 541 | # Re-tar 542 | local({ 543 | old <- setwd(tempdir) 544 | on.exit(setwd(old), add = TRUE) 545 | 546 | tar(destfile, compression = "gzip") 547 | }) 548 | invisible() 549 | } 550 | 551 | # Extract the commit hash from a git archive. Git archives include the SHA1 552 | # hash as the comment field of the tarball pax extended header 553 | # (see https://www.kernel.org/pub/software/scm/git/docs/git-archive.html) 554 | # For GitHub archives this should be the first header after the default one 555 | # (512 byte) header. 556 | renv_bootstrap_git_extract_sha1_tar <- function(bundle) { 557 | 558 | # open the bundle for reading 559 | # We use gzcon for everything because (from ?gzcon) 560 | # > Reading from a connection which does not supply a 'gzip' magic 561 | # > header is equivalent to reading from the original connection 562 | conn <- gzcon(file(bundle, open = "rb", raw = TRUE)) 563 | on.exit(close(conn)) 564 | 565 | # The default pax header is 512 bytes long and the first pax extended header 566 | # with the comment should be 51 bytes long 567 | # `52 comment=` (11 chars) + 40 byte SHA1 hash 568 | len <- 0x200 + 0x33 569 | res <- rawToChar(readBin(conn, "raw", n = len)[0x201:len]) 570 | 571 | if (grepl("^52 comment=", res)) { 572 | sub("52 comment=", "", res) 573 | } else { 574 | NULL 575 | } 576 | } 577 | 578 | renv_bootstrap_install <- function(version, tarball, library) { 579 | 580 | # attempt to install it into project library 581 | dir.create(library, showWarnings = FALSE, recursive = TRUE) 582 | output <- renv_bootstrap_install_impl(library, tarball) 583 | 584 | # check for successful install 585 | status <- attr(output, "status") 586 | if (is.null(status) || identical(status, 0L)) 587 | return(status) 588 | 589 | # an error occurred; report it 590 | header <- "installation of renv failed" 591 | lines <- paste(rep.int("=", nchar(header)), collapse = "") 592 | text <- paste(c(header, lines, output), collapse = "\n") 593 | stop(text) 594 | 595 | } 596 | 597 | renv_bootstrap_install_impl <- function(library, tarball) { 598 | 599 | # invoke using system2 so we can capture and report output 600 | bin <- R.home("bin") 601 | exe <- if (Sys.info()[["sysname"]] == "Windows") "R.exe" else "R" 602 | R <- file.path(bin, exe) 603 | 604 | args <- c( 605 | "--vanilla", "CMD", "INSTALL", "--no-multiarch", 606 | "-l", shQuote(path.expand(library)), 607 | shQuote(path.expand(tarball)) 608 | ) 609 | 610 | system2(R, args, stdout = TRUE, stderr = TRUE) 611 | 612 | } 613 | 614 | renv_bootstrap_platform_prefix <- function() { 615 | 616 | # construct version prefix 617 | version <- paste(R.version$major, R.version$minor, sep = ".") 618 | prefix <- paste("R", numeric_version(version)[1, 1:2], sep = "-") 619 | 620 | # include SVN revision for development versions of R 621 | # (to avoid sharing platform-specific artefacts with released versions of R) 622 | devel <- 623 | identical(R.version[["status"]], "Under development (unstable)") || 624 | identical(R.version[["nickname"]], "Unsuffered Consequences") 625 | 626 | if (devel) 627 | prefix <- paste(prefix, R.version[["svn rev"]], sep = "-r") 628 | 629 | # build list of path components 630 | components <- c(prefix, R.version$platform) 631 | 632 | # include prefix if provided by user 633 | prefix <- renv_bootstrap_platform_prefix_impl() 634 | if (!is.na(prefix) && nzchar(prefix)) 635 | components <- c(prefix, components) 636 | 637 | # build prefix 638 | paste(components, collapse = "/") 639 | 640 | } 641 | 642 | renv_bootstrap_platform_prefix_impl <- function() { 643 | 644 | # if an explicit prefix has been supplied, use it 645 | prefix <- Sys.getenv("RENV_PATHS_PREFIX", unset = NA) 646 | if (!is.na(prefix)) 647 | return(prefix) 648 | 649 | # if the user has requested an automatic prefix, generate it 650 | auto <- Sys.getenv("RENV_PATHS_PREFIX_AUTO", unset = NA) 651 | if (is.na(auto) && getRversion() >= "4.4.0") 652 | auto <- "TRUE" 653 | 654 | if (auto %in% c("TRUE", "True", "true", "1")) 655 | return(renv_bootstrap_platform_prefix_auto()) 656 | 657 | # empty string on failure 658 | "" 659 | 660 | } 661 | 662 | renv_bootstrap_platform_prefix_auto <- function() { 663 | 664 | prefix <- tryCatch(renv_bootstrap_platform_os(), error = identity) 665 | if (inherits(prefix, "error") || prefix %in% "unknown") { 666 | 667 | msg <- paste( 668 | "failed to infer current operating system", 669 | "please file a bug report at https://github.com/rstudio/renv/issues", 670 | sep = "; " 671 | ) 672 | 673 | warning(msg) 674 | 675 | } 676 | 677 | prefix 678 | 679 | } 680 | 681 | renv_bootstrap_platform_os <- function() { 682 | 683 | sysinfo <- Sys.info() 684 | sysname <- sysinfo[["sysname"]] 685 | 686 | # handle Windows + macOS up front 687 | if (sysname == "Windows") 688 | return("windows") 689 | else if (sysname == "Darwin") 690 | return("macos") 691 | 692 | # check for os-release files 693 | for (file in c("/etc/os-release", "/usr/lib/os-release")) 694 | if (file.exists(file)) 695 | return(renv_bootstrap_platform_os_via_os_release(file, sysinfo)) 696 | 697 | # check for redhat-release files 698 | if (file.exists("/etc/redhat-release")) 699 | return(renv_bootstrap_platform_os_via_redhat_release()) 700 | 701 | "unknown" 702 | 703 | } 704 | 705 | renv_bootstrap_platform_os_via_os_release <- function(file, sysinfo) { 706 | 707 | # read /etc/os-release 708 | release <- utils::read.table( 709 | file = file, 710 | sep = "=", 711 | quote = c("\"", "'"), 712 | col.names = c("Key", "Value"), 713 | comment.char = "#", 714 | stringsAsFactors = FALSE 715 | ) 716 | 717 | vars <- as.list(release$Value) 718 | names(vars) <- release$Key 719 | 720 | # get os name 721 | os <- tolower(sysinfo[["sysname"]]) 722 | 723 | # read id 724 | id <- "unknown" 725 | for (field in c("ID", "ID_LIKE")) { 726 | if (field %in% names(vars) && nzchar(vars[[field]])) { 727 | id <- vars[[field]] 728 | break 729 | } 730 | } 731 | 732 | # read version 733 | version <- "unknown" 734 | for (field in c("UBUNTU_CODENAME", "VERSION_CODENAME", "VERSION_ID", "BUILD_ID")) { 735 | if (field %in% names(vars) && nzchar(vars[[field]])) { 736 | version <- vars[[field]] 737 | break 738 | } 739 | } 740 | 741 | # join together 742 | paste(c(os, id, version), collapse = "-") 743 | 744 | } 745 | 746 | renv_bootstrap_platform_os_via_redhat_release <- function() { 747 | 748 | # read /etc/redhat-release 749 | contents <- readLines("/etc/redhat-release", warn = FALSE) 750 | 751 | # infer id 752 | id <- if (grepl("centos", contents, ignore.case = TRUE)) 753 | "centos" 754 | else if (grepl("redhat", contents, ignore.case = TRUE)) 755 | "redhat" 756 | else 757 | "unknown" 758 | 759 | # try to find a version component (very hacky) 760 | version <- "unknown" 761 | 762 | parts <- strsplit(contents, "[[:space:]]")[[1L]] 763 | for (part in parts) { 764 | 765 | nv <- tryCatch(numeric_version(part), error = identity) 766 | if (inherits(nv, "error")) 767 | next 768 | 769 | version <- nv[1, 1] 770 | break 771 | 772 | } 773 | 774 | paste(c("linux", id, version), collapse = "-") 775 | 776 | } 777 | 778 | renv_bootstrap_library_root_name <- function(project) { 779 | 780 | # use project name as-is if requested 781 | asis <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT_ASIS", unset = "FALSE") 782 | if (asis) 783 | return(basename(project)) 784 | 785 | # otherwise, disambiguate based on project's path 786 | id <- substring(renv_bootstrap_hash_text(project), 1L, 8L) 787 | paste(basename(project), id, sep = "-") 788 | 789 | } 790 | 791 | renv_bootstrap_library_root <- function(project) { 792 | 793 | prefix <- renv_bootstrap_profile_prefix() 794 | 795 | path <- Sys.getenv("RENV_PATHS_LIBRARY", unset = NA) 796 | if (!is.na(path)) 797 | return(paste(c(path, prefix), collapse = "/")) 798 | 799 | path <- renv_bootstrap_library_root_impl(project) 800 | if (!is.null(path)) { 801 | name <- renv_bootstrap_library_root_name(project) 802 | return(paste(c(path, prefix, name), collapse = "/")) 803 | } 804 | 805 | renv_bootstrap_paths_renv("library", project = project) 806 | 807 | } 808 | 809 | renv_bootstrap_library_root_impl <- function(project) { 810 | 811 | root <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT", unset = NA) 812 | if (!is.na(root)) 813 | return(root) 814 | 815 | type <- renv_bootstrap_project_type(project) 816 | if (identical(type, "package")) { 817 | userdir <- renv_bootstrap_user_dir() 818 | return(file.path(userdir, "library")) 819 | } 820 | 821 | } 822 | 823 | renv_bootstrap_validate_version <- function(version, description = NULL) { 824 | 825 | # resolve description file 826 | # 827 | # avoid passing lib.loc to `packageDescription()` below, since R will 828 | # use the loaded version of the package by default anyhow. note that 829 | # this function should only be called after 'renv' is loaded 830 | # https://github.com/rstudio/renv/issues/1625 831 | description <- description %||% packageDescription("renv") 832 | 833 | # check whether requested version 'version' matches loaded version of renv 834 | sha <- attr(version, "sha", exact = TRUE) 835 | valid <- if (!is.null(sha)) 836 | renv_bootstrap_validate_version_dev(sha, description) 837 | else 838 | renv_bootstrap_validate_version_release(version, description) 839 | 840 | if (valid) 841 | return(TRUE) 842 | 843 | # the loaded version of renv doesn't match the requested version; 844 | # give the user instructions on how to proceed 845 | dev <- identical(description[["RemoteType"]], "github") 846 | remote <- if (dev) 847 | paste("rstudio/renv", description[["RemoteSha"]], sep = "@") 848 | else 849 | paste("renv", description[["Version"]], sep = "@") 850 | 851 | # display both loaded version + sha if available 852 | friendly <- renv_bootstrap_version_friendly( 853 | version = description[["Version"]], 854 | sha = if (dev) description[["RemoteSha"]] 855 | ) 856 | 857 | fmt <- heredoc(" 858 | renv %1$s was loaded from project library, but this project is configured to use renv %2$s. 859 | - Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile. 860 | - Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library. 861 | ") 862 | catf(fmt, friendly, renv_bootstrap_version_friendly(version), remote) 863 | 864 | FALSE 865 | 866 | } 867 | 868 | renv_bootstrap_validate_version_dev <- function(version, description) { 869 | expected <- description[["RemoteSha"]] 870 | is.character(expected) && startswith(expected, version) 871 | } 872 | 873 | renv_bootstrap_validate_version_release <- function(version, description) { 874 | expected <- description[["Version"]] 875 | is.character(expected) && identical(expected, version) 876 | } 877 | 878 | renv_bootstrap_hash_text <- function(text) { 879 | 880 | hashfile <- tempfile("renv-hash-") 881 | on.exit(unlink(hashfile), add = TRUE) 882 | 883 | writeLines(text, con = hashfile) 884 | tools::md5sum(hashfile) 885 | 886 | } 887 | 888 | renv_bootstrap_load <- function(project, libpath, version) { 889 | 890 | # try to load renv from the project library 891 | if (!requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) 892 | return(FALSE) 893 | 894 | # warn if the version of renv loaded does not match 895 | renv_bootstrap_validate_version(version) 896 | 897 | # execute renv load hooks, if any 898 | hooks <- getHook("renv::autoload") 899 | for (hook in hooks) 900 | if (is.function(hook)) 901 | tryCatch(hook(), error = warnify) 902 | 903 | # load the project 904 | renv::load(project) 905 | 906 | TRUE 907 | 908 | } 909 | 910 | renv_bootstrap_profile_load <- function(project) { 911 | 912 | # if RENV_PROFILE is already set, just use that 913 | profile <- Sys.getenv("RENV_PROFILE", unset = NA) 914 | if (!is.na(profile) && nzchar(profile)) 915 | return(profile) 916 | 917 | # check for a profile file (nothing to do if it doesn't exist) 918 | path <- renv_bootstrap_paths_renv("profile", profile = FALSE, project = project) 919 | if (!file.exists(path)) 920 | return(NULL) 921 | 922 | # read the profile, and set it if it exists 923 | contents <- readLines(path, warn = FALSE) 924 | if (length(contents) == 0L) 925 | return(NULL) 926 | 927 | # set RENV_PROFILE 928 | profile <- contents[[1L]] 929 | if (!profile %in% c("", "default")) 930 | Sys.setenv(RENV_PROFILE = profile) 931 | 932 | profile 933 | 934 | } 935 | 936 | renv_bootstrap_profile_prefix <- function() { 937 | profile <- renv_bootstrap_profile_get() 938 | if (!is.null(profile)) 939 | return(file.path("profiles", profile, "renv")) 940 | } 941 | 942 | renv_bootstrap_profile_get <- function() { 943 | profile <- Sys.getenv("RENV_PROFILE", unset = "") 944 | renv_bootstrap_profile_normalize(profile) 945 | } 946 | 947 | renv_bootstrap_profile_set <- function(profile) { 948 | profile <- renv_bootstrap_profile_normalize(profile) 949 | if (is.null(profile)) 950 | Sys.unsetenv("RENV_PROFILE") 951 | else 952 | Sys.setenv(RENV_PROFILE = profile) 953 | } 954 | 955 | renv_bootstrap_profile_normalize <- function(profile) { 956 | 957 | if (is.null(profile) || profile %in% c("", "default")) 958 | return(NULL) 959 | 960 | profile 961 | 962 | } 963 | 964 | renv_bootstrap_path_absolute <- function(path) { 965 | 966 | substr(path, 1L, 1L) %in% c("~", "/", "\\") || ( 967 | substr(path, 1L, 1L) %in% c(letters, LETTERS) && 968 | substr(path, 2L, 3L) %in% c(":/", ":\\") 969 | ) 970 | 971 | } 972 | 973 | renv_bootstrap_paths_renv <- function(..., profile = TRUE, project = NULL) { 974 | renv <- Sys.getenv("RENV_PATHS_RENV", unset = "renv") 975 | root <- if (renv_bootstrap_path_absolute(renv)) NULL else project 976 | prefix <- if (profile) renv_bootstrap_profile_prefix() 977 | components <- c(root, renv, prefix, ...) 978 | paste(components, collapse = "/") 979 | } 980 | 981 | renv_bootstrap_project_type <- function(path) { 982 | 983 | descpath <- file.path(path, "DESCRIPTION") 984 | if (!file.exists(descpath)) 985 | return("unknown") 986 | 987 | desc <- tryCatch( 988 | read.dcf(descpath, all = TRUE), 989 | error = identity 990 | ) 991 | 992 | if (inherits(desc, "error")) 993 | return("unknown") 994 | 995 | type <- desc$Type 996 | if (!is.null(type)) 997 | return(tolower(type)) 998 | 999 | package <- desc$Package 1000 | if (!is.null(package)) 1001 | return("package") 1002 | 1003 | "unknown" 1004 | 1005 | } 1006 | 1007 | renv_bootstrap_user_dir <- function() { 1008 | dir <- renv_bootstrap_user_dir_impl() 1009 | path.expand(chartr("\\", "/", dir)) 1010 | } 1011 | 1012 | renv_bootstrap_user_dir_impl <- function() { 1013 | 1014 | # use local override if set 1015 | override <- getOption("renv.userdir.override") 1016 | if (!is.null(override)) 1017 | return(override) 1018 | 1019 | # use R_user_dir if available 1020 | tools <- asNamespace("tools") 1021 | if (is.function(tools$R_user_dir)) 1022 | return(tools$R_user_dir("renv", "cache")) 1023 | 1024 | # try using our own backfill for older versions of R 1025 | envvars <- c("R_USER_CACHE_DIR", "XDG_CACHE_HOME") 1026 | for (envvar in envvars) { 1027 | root <- Sys.getenv(envvar, unset = NA) 1028 | if (!is.na(root)) 1029 | return(file.path(root, "R/renv")) 1030 | } 1031 | 1032 | # use platform-specific default fallbacks 1033 | if (Sys.info()[["sysname"]] == "Windows") 1034 | file.path(Sys.getenv("LOCALAPPDATA"), "R/cache/R/renv") 1035 | else if (Sys.info()[["sysname"]] == "Darwin") 1036 | "~/Library/Caches/org.R-project.R/R/renv" 1037 | else 1038 | "~/.cache/R/renv" 1039 | 1040 | } 1041 | 1042 | renv_bootstrap_version_friendly <- function(version, shafmt = NULL, sha = NULL) { 1043 | sha <- sha %||% attr(version, "sha", exact = TRUE) 1044 | parts <- c(version, sprintf(shafmt %||% " [sha: %s]", substring(sha, 1L, 7L))) 1045 | paste(parts, collapse = "") 1046 | } 1047 | 1048 | renv_bootstrap_exec <- function(project, libpath, version) { 1049 | if (!renv_bootstrap_load(project, libpath, version)) 1050 | renv_bootstrap_run(version, libpath) 1051 | } 1052 | 1053 | renv_bootstrap_run <- function(version, libpath) { 1054 | 1055 | # perform bootstrap 1056 | bootstrap(version, libpath) 1057 | 1058 | # exit early if we're just testing bootstrap 1059 | if (!is.na(Sys.getenv("RENV_BOOTSTRAP_INSTALL_ONLY", unset = NA))) 1060 | return(TRUE) 1061 | 1062 | # try again to load 1063 | if (requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) { 1064 | return(renv::load(project = getwd())) 1065 | } 1066 | 1067 | # failed to download or load renv; warn the user 1068 | msg <- c( 1069 | "Failed to find an renv installation: the project will not be loaded.", 1070 | "Use `renv::activate()` to re-initialize the project." 1071 | ) 1072 | 1073 | warning(paste(msg, collapse = "\n"), call. = FALSE) 1074 | 1075 | } 1076 | 1077 | renv_json_read <- function(file = NULL, text = NULL) { 1078 | 1079 | jlerr <- NULL 1080 | 1081 | # if jsonlite is loaded, use that instead 1082 | if ("jsonlite" %in% loadedNamespaces()) { 1083 | 1084 | json <- tryCatch(renv_json_read_jsonlite(file, text), error = identity) 1085 | if (!inherits(json, "error")) 1086 | return(json) 1087 | 1088 | jlerr <- json 1089 | 1090 | } 1091 | 1092 | # otherwise, fall back to the default JSON reader 1093 | json <- tryCatch(renv_json_read_default(file, text), error = identity) 1094 | if (!inherits(json, "error")) 1095 | return(json) 1096 | 1097 | # report an error 1098 | if (!is.null(jlerr)) 1099 | stop(jlerr) 1100 | else 1101 | stop(json) 1102 | 1103 | } 1104 | 1105 | renv_json_read_jsonlite <- function(file = NULL, text = NULL) { 1106 | text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") 1107 | jsonlite::fromJSON(txt = text, simplifyVector = FALSE) 1108 | } 1109 | 1110 | renv_json_read_default <- function(file = NULL, text = NULL) { 1111 | 1112 | # find strings in the JSON 1113 | text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") 1114 | pattern <- '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' 1115 | locs <- gregexpr(pattern, text, perl = TRUE)[[1]] 1116 | 1117 | # if any are found, replace them with placeholders 1118 | replaced <- text 1119 | strings <- character() 1120 | replacements <- character() 1121 | 1122 | if (!identical(c(locs), -1L)) { 1123 | 1124 | # get the string values 1125 | starts <- locs 1126 | ends <- locs + attr(locs, "match.length") - 1L 1127 | strings <- substring(text, starts, ends) 1128 | 1129 | # only keep those requiring escaping 1130 | strings <- grep("[[\\]{}:]", strings, perl = TRUE, value = TRUE) 1131 | 1132 | # compute replacements 1133 | replacements <- sprintf('"\032%i\032"', seq_along(strings)) 1134 | 1135 | # replace the strings 1136 | mapply(function(string, replacement) { 1137 | replaced <<- sub(string, replacement, replaced, fixed = TRUE) 1138 | }, strings, replacements) 1139 | 1140 | } 1141 | 1142 | # transform the JSON into something the R parser understands 1143 | transformed <- replaced 1144 | transformed <- gsub("{}", "`names<-`(list(), character())", transformed, fixed = TRUE) 1145 | transformed <- gsub("[[{]", "list(", transformed, perl = TRUE) 1146 | transformed <- gsub("[]}]", ")", transformed, perl = TRUE) 1147 | transformed <- gsub(":", "=", transformed, fixed = TRUE) 1148 | text <- paste(transformed, collapse = "\n") 1149 | 1150 | # parse it 1151 | json <- parse(text = text, keep.source = FALSE, srcfile = NULL)[[1L]] 1152 | 1153 | # construct map between source strings, replaced strings 1154 | map <- as.character(parse(text = strings)) 1155 | names(map) <- as.character(parse(text = replacements)) 1156 | 1157 | # convert to list 1158 | map <- as.list(map) 1159 | 1160 | # remap strings in object 1161 | remapped <- renv_json_read_remap(json, map) 1162 | 1163 | # evaluate 1164 | eval(remapped, envir = baseenv()) 1165 | 1166 | } 1167 | 1168 | renv_json_read_remap <- function(json, map) { 1169 | 1170 | # fix names 1171 | if (!is.null(names(json))) { 1172 | lhs <- match(names(json), names(map), nomatch = 0L) 1173 | rhs <- match(names(map), names(json), nomatch = 0L) 1174 | names(json)[rhs] <- map[lhs] 1175 | } 1176 | 1177 | # fix values 1178 | if (is.character(json)) 1179 | return(map[[json]] %||% json) 1180 | 1181 | # handle true, false, null 1182 | if (is.name(json)) { 1183 | text <- as.character(json) 1184 | if (text == "true") 1185 | return(TRUE) 1186 | else if (text == "false") 1187 | return(FALSE) 1188 | else if (text == "null") 1189 | return(NULL) 1190 | } 1191 | 1192 | # recurse 1193 | if (is.recursive(json)) { 1194 | for (i in seq_along(json)) { 1195 | json[i] <- list(renv_json_read_remap(json[[i]], map)) 1196 | } 1197 | } 1198 | 1199 | json 1200 | 1201 | } 1202 | 1203 | # load the renv profile, if any 1204 | renv_bootstrap_profile_load(project) 1205 | 1206 | # construct path to library root 1207 | root <- renv_bootstrap_library_root(project) 1208 | 1209 | # construct library prefix for platform 1210 | prefix <- renv_bootstrap_platform_prefix() 1211 | 1212 | # construct full libpath 1213 | libpath <- file.path(root, prefix) 1214 | 1215 | # run bootstrap code 1216 | renv_bootstrap_exec(project, libpath, version) 1217 | 1218 | invisible() 1219 | 1220 | }) 1221 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 1, 3 | "locale": "en_US", 4 | "platform": "4.2.0", 5 | "metadata": { 6 | "appmode": "shiny", 7 | "primary_rmd": null, 8 | "primary_html": null, 9 | "content_category": null, 10 | "has_parameters": false 11 | }, 12 | "packages": { 13 | "R6": { 14 | "Source": "CRAN", 15 | "Repository": "https://p3m.dev/cran/latest", 16 | "description": { 17 | "Package": "R6", 18 | "Title": "Encapsulated Classes with Reference Semantics", 19 | "Version": "2.5.1", 20 | "Authors@R": "person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@stdout.org\")", 21 | "Description": "Creates classes with reference semantics, similar to R's built-in\n reference classes. Compared to reference classes, R6 classes are simpler\n and lighter-weight, and they are not built on S4 classes so they do not\n require the methods package. These classes allow public and private\n members, and they support inheritance, even when the classes are defined in\n different packages.", 22 | "Depends": "R (>= 3.0)", 23 | "Suggests": "testthat, pryr", 24 | "License": "MIT + file LICENSE", 25 | "URL": "https://r6.r-lib.org, https://github.com/r-lib/R6/", 26 | "BugReports": "https://github.com/r-lib/R6/issues", 27 | "RoxygenNote": "7.1.1", 28 | "NeedsCompilation": "no", 29 | "Packaged": "2021-08-06 20:18:46 UTC; winston", 30 | "Author": "Winston Chang [aut, cre]", 31 | "Maintainer": "Winston Chang ", 32 | "Repository": "CRAN", 33 | "Date/Publication": "2021-08-19 14:00:05 UTC", 34 | "Built": "R 4.2.0; ; 2022-04-25 03:04:56 UTC; unix" 35 | } 36 | }, 37 | "Rcpp": { 38 | "Source": "CRAN", 39 | "Repository": "https://p3m.dev/cran/latest", 40 | "description": { 41 | "Package": "Rcpp", 42 | "Title": "Seamless R and C++ Integration", 43 | "Version": "1.0.13", 44 | "Date": "2024-07-11", 45 | "Author": "Dirk Eddelbuettel, Romain Francois, JJ Allaire, Kevin Ushey, Qiang Kou,\n Nathan Russell, Inaki Ucar, Douglas Bates and John Chambers", 46 | "Maintainer": "Dirk Eddelbuettel ", 47 | "Description": "The 'Rcpp' package provides R functions as well as C++ classes which\n offer a seamless integration of R and C++. Many R data types and objects can be\n mapped back and forth to C++ equivalents which facilitates both writing of new\n code as well as easier integration of third-party libraries. Documentation\n about 'Rcpp' is provided by several vignettes included in this package, via the\n 'Rcpp Gallery' site at , the paper by Eddelbuettel and\n Francois (2011, ), the book by Eddelbuettel (2013,\n ) and the paper by Eddelbuettel and Balamuta (2018,\n ); see 'citation(\"Rcpp\")' for details.", 48 | "Imports": "methods, utils", 49 | "Suggests": "tinytest, inline, rbenchmark, pkgKitten (>= 0.1.2)", 50 | "URL": "https://www.rcpp.org,\nhttps://dirk.eddelbuettel.com/code/rcpp.html,\nhttps://github.com/RcppCore/Rcpp", 51 | "License": "GPL (>= 2)", 52 | "BugReports": "https://github.com/RcppCore/Rcpp/issues", 53 | "MailingList": "rcpp-devel@lists.r-forge.r-project.org", 54 | "RoxygenNote": "6.1.1", 55 | "Encoding": "UTF-8", 56 | "NeedsCompilation": "yes", 57 | "Packaged": "2024-07-11 13:00:10 UTC; edd", 58 | "Repository": "RSPM", 59 | "Date/Publication": "2024-07-17 15:50:06 UTC", 60 | "Built": "R 4.2.0; x86_64-pc-linux-gnu; 2024-07-18 09:11:59 UTC; unix" 61 | } 62 | }, 63 | "base64enc": { 64 | "Source": "CRAN", 65 | "Repository": "https://p3m.dev/cran/latest", 66 | "description": { 67 | "Package": "base64enc", 68 | "Version": "0.1-3", 69 | "Title": "Tools for base64 encoding", 70 | "Author": "Simon Urbanek ", 71 | "Maintainer": "Simon Urbanek ", 72 | "Depends": "R (>= 2.9.0)", 73 | "Enhances": "png", 74 | "Description": "This package provides tools for handling base64 encoding. It is more flexible than the orphaned base64 package.", 75 | "License": "GPL-2 | GPL-3", 76 | "URL": "http://www.rforge.net/base64enc", 77 | "NeedsCompilation": "yes", 78 | "Packaged": "2015-02-04 20:31:00 UTC; svnuser", 79 | "Repository": "RSPM", 80 | "Date/Publication": "2015-07-28 08:03:37", 81 | "Encoding": "UTF-8", 82 | "Built": "R 4.2.0; x86_64-apple-darwin17.0; 2022-06-03 15:59:23 UTC; unix" 83 | } 84 | }, 85 | "bslib": { 86 | "Source": "CRAN", 87 | "Repository": "https://p3m.dev/cran/latest", 88 | "description": { 89 | "Package": "bslib", 90 | "Title": "Custom 'Bootstrap' 'Sass' Themes for 'shiny' and 'rmarkdown'", 91 | "Version": "0.8.0", 92 | "Authors@R": "c(\n person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"),\n person(\"Garrick\", \"Aden-Buie\", , \"garrick@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-7111-0077\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")),\n person(, \"Bootstrap contributors\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(, \"Twitter, Inc\", role = \"cph\",\n comment = \"Bootstrap library\"),\n person(\"Javi\", \"Aguilar\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootstrap colorpicker library\"),\n person(\"Thomas\", \"Park\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootswatch library\"),\n person(, \"PayPal\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootstrap accessibility plugin\")\n )", 93 | "Description": "Simplifies custom 'CSS' styling of both 'shiny' and\n 'rmarkdown' via 'Bootstrap' 'Sass'. Supports 'Bootstrap' 3, 4 and 5 as\n well as their various 'Bootswatch' themes. An interactive widget is\n also provided for previewing themes in real time.", 94 | "License": "MIT + file LICENSE", 95 | "URL": "https://rstudio.github.io/bslib/, https://github.com/rstudio/bslib", 96 | "BugReports": "https://github.com/rstudio/bslib/issues", 97 | "Depends": "R (>= 2.10)", 98 | "Imports": "base64enc, cachem, fastmap (>= 1.1.1), grDevices, htmltools\n(>= 0.5.8), jquerylib (>= 0.1.3), jsonlite, lifecycle, memoise\n(>= 2.0.1), mime, rlang, sass (>= 0.4.9)", 99 | "Suggests": "bsicons, curl, fontawesome, future, ggplot2, knitr, magrittr,\nrappdirs, rmarkdown (>= 2.7), shiny (> 1.8.1), testthat,\nthematic, withr", 100 | "Config/Needs/deploy": "BH, chiflights22, colourpicker, commonmark, cpp11,\ncpsievert/chiflights22, cpsievert/histoslider, dplyr, DT,\nggplot2, ggridges, gt, hexbin, histoslider, htmlwidgets,\nlattice, leaflet, lubridate, modelr, plotly, reactable,\nreshape2, rprojroot, rsconnect, rstudio/shiny, scales, styler,\ntibble", 101 | "Config/Needs/routine": "chromote, desc, renv", 102 | "Config/Needs/website": "brio, crosstalk, dplyr, DT, ggplot2, glue,\nhtmlwidgets, leaflet, lorem, palmerpenguins, plotly, purrr,\nrprojroot, rstudio/htmltools, scales, stringr, tidyr, webshot2", 103 | "Config/testthat/edition": "3", 104 | "Config/testthat/parallel": "true", 105 | "Config/testthat/start-first": "zzzz-bs-sass, fonts, zzz-precompile,\ntheme-*, rmd-*", 106 | "Encoding": "UTF-8", 107 | "RoxygenNote": "7.3.2", 108 | "Collate": "'accordion.R' 'breakpoints.R' 'bs-current-theme.R'\n'bs-dependencies.R' 'bs-global.R' 'bs-remove.R'\n'bs-theme-layers.R' 'bs-theme-preset-bootswatch.R'\n'bs-theme-preset-builtin.R' 'bs-theme-preset.R' 'utils.R'\n'bs-theme-preview.R' 'bs-theme-update.R' 'bs-theme.R'\n'bslib-package.R' 'buttons.R' 'card.R' 'deprecated.R' 'files.R'\n'fill.R' 'imports.R' 'input-dark-mode.R' 'input-switch.R'\n'layout.R' 'nav-items.R' 'nav-update.R' 'navs-legacy.R'\n'navs.R' 'onLoad.R' 'page.R' 'popover.R' 'precompiled.R'\n'print.R' 'shiny-devmode.R' 'sidebar.R' 'staticimports.R'\n'tooltip.R' 'utils-deps.R' 'utils-shiny.R' 'utils-tags.R'\n'value-box.R' 'version-default.R' 'versions.R'", 109 | "NeedsCompilation": "no", 110 | "Packaged": "2024-07-29 18:49:12 UTC; cpsievert", 111 | "Author": "Carson Sievert [aut, cre] (),\n Joe Cheng [aut],\n Garrick Aden-Buie [aut] (),\n Posit Software, PBC [cph, fnd],\n Bootstrap contributors [ctb] (Bootstrap library),\n Twitter, Inc [cph] (Bootstrap library),\n Javi Aguilar [ctb, cph] (Bootstrap colorpicker library),\n Thomas Park [ctb, cph] (Bootswatch library),\n PayPal [ctb, cph] (Bootstrap accessibility plugin)", 112 | "Maintainer": "Carson Sievert ", 113 | "Repository": "RSPM", 114 | "Date/Publication": "2024-07-29 19:20:02 UTC", 115 | "Built": "R 4.2.0; ; 2024-07-30 04:34:05 UTC; unix" 116 | } 117 | }, 118 | "cachem": { 119 | "Source": "CRAN", 120 | "Repository": "https://p3m.dev/cran/latest", 121 | "description": { 122 | "Package": "cachem", 123 | "Version": "1.1.0", 124 | "Title": "Cache R Objects with Automatic Pruning", 125 | "Description": "Key-value stores with automatic pruning. Caches can limit\n either their total size or the age of the oldest object (or both),\n automatically pruning objects to maintain the constraints.", 126 | "Authors@R": "c(\n person(\"Winston\", \"Chang\", , \"winston@posit.co\", c(\"aut\", \"cre\")),\n person(family = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")))", 127 | "License": "MIT + file LICENSE", 128 | "Encoding": "UTF-8", 129 | "ByteCompile": "true", 130 | "URL": "https://cachem.r-lib.org/, https://github.com/r-lib/cachem", 131 | "Imports": "rlang, fastmap (>= 1.2.0)", 132 | "Suggests": "testthat", 133 | "RoxygenNote": "7.2.3", 134 | "Config/Needs/routine": "lobstr", 135 | "Config/Needs/website": "pkgdown", 136 | "NeedsCompilation": "yes", 137 | "Packaged": "2024-05-15 15:54:22 UTC; winston", 138 | "Author": "Winston Chang [aut, cre],\n Posit Software, PBC [cph, fnd]", 139 | "Maintainer": "Winston Chang ", 140 | "Repository": "RSPM", 141 | "Date/Publication": "2024-05-16 09:50:11 UTC", 142 | "Built": "R 4.2.0; x86_64-pc-linux-gnu; 2024-05-17 04:37:19 UTC; unix" 143 | } 144 | }, 145 | "cli": { 146 | "Source": "CRAN", 147 | "Repository": "https://p3m.dev/cran/latest", 148 | "description": { 149 | "Package": "cli", 150 | "Title": "Helpers for Developing Command Line Interfaces", 151 | "Version": "3.6.3", 152 | "Authors@R": "c(\n person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")),\n person(\"Hadley\", \"Wickham\", role = \"ctb\"),\n person(\"Kirill\", \"Müller\", role = \"ctb\"),\n person(\"Salim\", \"Brüggemann\", , \"salim-b@pm.me\", role = \"ctb\",\n comment = c(ORCID = \"0000-0002-5329-5987\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", 153 | "Description": "A suite of tools to build attractive command line interfaces\n ('CLIs'), from semantic elements: headings, lists, alerts, paragraphs,\n etc. Supports custom themes via a 'CSS'-like language. It also\n contains a number of lower level 'CLI' elements: rules, boxes, trees,\n and 'Unicode' symbols with 'ASCII' alternatives. It support ANSI\n colors and text styles as well.", 154 | "License": "MIT + file LICENSE", 155 | "URL": "https://cli.r-lib.org, https://github.com/r-lib/cli", 156 | "BugReports": "https://github.com/r-lib/cli/issues", 157 | "Depends": "R (>= 3.4)", 158 | "Imports": "utils", 159 | "Suggests": "callr, covr, crayon, digest, glue (>= 1.6.0), grDevices,\nhtmltools, htmlwidgets, knitr, methods, mockery, processx, ps\n(>= 1.3.4.9000), rlang (>= 1.0.2.9003), rmarkdown, rprojroot,\nrstudioapi, testthat, tibble, whoami, withr", 160 | "Config/Needs/website": "r-lib/asciicast, bench, brio, cpp11, decor, desc,\nfansi, prettyunits, sessioninfo, tidyverse/tidytemplate,\nusethis, vctrs", 161 | "Config/testthat/edition": "3", 162 | "Encoding": "UTF-8", 163 | "RoxygenNote": "7.2.3", 164 | "NeedsCompilation": "yes", 165 | "Packaged": "2024-06-21 17:24:00 UTC; gaborcsardi", 166 | "Author": "Gábor Csárdi [aut, cre],\n Hadley Wickham [ctb],\n Kirill Müller [ctb],\n Salim Brüggemann [ctb] (),\n Posit Software, PBC [cph, fnd]", 167 | "Maintainer": "Gábor Csárdi ", 168 | "Repository": "RSPM", 169 | "Date/Publication": "2024-06-21 21:00:07 UTC", 170 | "Built": "R 4.2.0; x86_64-pc-linux-gnu; 2024-06-22 04:44:08 UTC; unix" 171 | } 172 | }, 173 | "commonmark": { 174 | "Source": "CRAN", 175 | "Repository": "https://p3m.dev/cran/latest", 176 | "description": { 177 | "Package": "commonmark", 178 | "Type": "Package", 179 | "Title": "High Performance CommonMark and Github Markdown Rendering in R", 180 | "Version": "1.9.1", 181 | "Authors@R": "c(\n person(\"Jeroen\", \"Ooms\", ,\"jeroen@berkeley.edu\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4035-0289\")),\n person(\"John MacFarlane\", role = \"cph\", comment = \"Author of cmark\"))", 182 | "URL": "https://docs.ropensci.org/commonmark/\nhttps://r-lib.r-universe.dev/commonmark\nhttps://github.github.com/gfm/ (spec)", 183 | "BugReports": "https://github.com/r-lib/commonmark/issues", 184 | "Description": "The CommonMark specification defines a rationalized version of markdown\n syntax. This package uses the 'cmark' reference implementation for converting\n markdown text into various formats including html, latex and groff man. In\n addition it exposes the markdown parse tree in xml format. Also includes opt-in\n support for GFM extensions including tables, autolinks, and strikethrough text.", 185 | "License": "BSD_2_clause + file LICENSE", 186 | "Suggests": "curl, testthat, xml2", 187 | "RoxygenNote": "7.2.3", 188 | "Language": "en-US", 189 | "Encoding": "UTF-8", 190 | "NeedsCompilation": "yes", 191 | "Packaged": "2024-01-30 11:29:56 UTC; jeroen", 192 | "Author": "Jeroen Ooms [aut, cre] (),\n John MacFarlane [cph] (Author of cmark)", 193 | "Maintainer": "Jeroen Ooms ", 194 | "Repository": "RSPM", 195 | "Date/Publication": "2024-01-30 12:40:02 UTC", 196 | "Built": "R 4.2.0; x86_64-pc-linux-gnu; 2024-01-31 11:40:28 UTC; unix" 197 | } 198 | }, 199 | "crayon": { 200 | "Source": "CRAN", 201 | "Repository": "https://p3m.dev/cran/latest", 202 | "description": { 203 | "Package": "crayon", 204 | "Title": "Colored Terminal Output", 205 | "Version": "1.5.3", 206 | "Authors@R": "c(\n person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")),\n person(\"Brodie\", \"Gaslam\", , \"brodie.gaslam@yahoo.com\", role = \"ctb\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", 207 | "Description": "The crayon package is now superseded. Please use the 'cli'\n package for new projects. Colored terminal output on terminals that\n support 'ANSI' color and highlight codes. It also works in 'Emacs'\n 'ESS'. 'ANSI' color support is automatically detected. Colors and\n highlighting can be combined and nested. New styles can also be\n created easily. This package was inspired by the 'chalk' 'JavaScript'\n project.", 208 | "License": "MIT + file LICENSE", 209 | "URL": "https://r-lib.github.io/crayon/, https://github.com/r-lib/crayon", 210 | "BugReports": "https://github.com/r-lib/crayon/issues", 211 | "Imports": "grDevices, methods, utils", 212 | "Suggests": "mockery, rstudioapi, testthat, withr", 213 | "Config/Needs/website": "tidyverse/tidytemplate", 214 | "Encoding": "UTF-8", 215 | "RoxygenNote": "7.3.1", 216 | "Collate": "'aaa-rstudio-detect.R' 'aaaa-rematch2.R'\n'aab-num-ansi-colors.R' 'aac-num-ansi-colors.R' 'ansi-256.R'\n'ansi-palette.R' 'combine.R' 'string.R' 'utils.R'\n'crayon-package.R' 'disposable.R' 'enc-utils.R' 'has_ansi.R'\n'has_color.R' 'link.R' 'styles.R' 'machinery.R' 'parts.R'\n'print.R' 'style-var.R' 'show.R' 'string_operations.R'", 217 | "NeedsCompilation": "no", 218 | "Packaged": "2024-06-20 11:49:08 UTC; gaborcsardi", 219 | "Author": "Gábor Csárdi [aut, cre],\n Brodie Gaslam [ctb],\n Posit Software, PBC [cph, fnd]", 220 | "Maintainer": "Gábor Csárdi ", 221 | "Repository": "RSPM", 222 | "Date/Publication": "2024-06-20 13:00:02 UTC", 223 | "Built": "R 4.2.0; ; 2024-06-21 04:20:03 UTC; unix" 224 | } 225 | }, 226 | "digest": { 227 | "Source": "CRAN", 228 | "Repository": "https://p3m.dev/cran/latest", 229 | "description": { 230 | "Package": "digest", 231 | "Author": "Dirk Eddelbuettel with contributions\n by Antoine Lucas, Jarek Tuszynski, Henrik Bengtsson, Simon Urbanek,\n Mario Frasca, Bryan Lewis, Murray Stokely, Hannes Muehleisen,\n Duncan Murdoch, Jim Hester, Wush Wu, Qiang Kou, Thierry Onkelinx,\n Michel Lang, Viliam Simko, Kurt Hornik, Radford Neal, Kendon Bell,\n Matthew de Queljoe, Ion Suruceanu, Bill Denney, Dirk Schumacher,\n Winston Chang, Dean Attali, and Michael Chirico.", 232 | "Version": "0.6.36", 233 | "Date": "2024-06-23", 234 | "Maintainer": "Dirk Eddelbuettel ", 235 | "Title": "Create Compact Hash Digests of R Objects", 236 | "Description": "Implementation of a function 'digest()' for the creation of hash\n digests of arbitrary R objects (using the 'md5', 'sha-1', 'sha-256', 'crc32',\n 'xxhash', 'murmurhash', 'spookyhash', 'blake3', 'crc32c', 'xxh3_64', and 'xxh3_128'\n algorithms) permitting easy comparison of R language objects, as well as functions\n such as'hmac()' to create hash-based message authentication code. Please note that\n this package is not meant to be deployed for cryptographic purposes for which more\n comprehensive (and widely tested) libraries such as 'OpenSSL' should be used.", 237 | "URL": "https://github.com/eddelbuettel/digest,\nhttps://dirk.eddelbuettel.com/code/digest.html", 238 | "BugReports": "https://github.com/eddelbuettel/digest/issues", 239 | "Depends": "R (>= 3.3.0)", 240 | "Imports": "utils", 241 | "License": "GPL (>= 2)", 242 | "Suggests": "tinytest, simplermarkdown", 243 | "VignetteBuilder": "simplermarkdown", 244 | "NeedsCompilation": "yes", 245 | "Packaged": "2024-06-23 14:31:46 UTC; edd", 246 | "Repository": "RSPM", 247 | "Date/Publication": "2024-06-23 16:40:02 UTC", 248 | "Encoding": "UTF-8", 249 | "Built": "R 4.2.0; x86_64-pc-linux-gnu; 2024-06-24 04:34:05 UTC; unix" 250 | } 251 | }, 252 | "fastmap": { 253 | "Source": "CRAN", 254 | "Repository": "https://p3m.dev/cran/latest", 255 | "description": { 256 | "Package": "fastmap", 257 | "Title": "Fast Data Structures", 258 | "Version": "1.2.0", 259 | "Authors@R": "c(\n person(\"Winston\", \"Chang\", email = \"winston@posit.co\", role = c(\"aut\", \"cre\")),\n person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")),\n person(given = \"Tessil\", role = \"cph\", comment = \"hopscotch_map library\")\n )", 260 | "Description": "Fast implementation of data structures, including a key-value\n store, stack, and queue. Environments are commonly used as key-value stores\n in R, but every time a new key is used, it is added to R's global symbol\n table, causing a small amount of memory leakage. This can be problematic in\n cases where many different keys are used. Fastmap avoids this memory leak\n issue by implementing the map using data structures in C++.", 261 | "License": "MIT + file LICENSE", 262 | "Encoding": "UTF-8", 263 | "RoxygenNote": "7.2.3", 264 | "Suggests": "testthat (>= 2.1.1)", 265 | "URL": "https://r-lib.github.io/fastmap/, https://github.com/r-lib/fastmap", 266 | "BugReports": "https://github.com/r-lib/fastmap/issues", 267 | "NeedsCompilation": "yes", 268 | "Packaged": "2024-05-14 17:54:13 UTC; winston", 269 | "Author": "Winston Chang [aut, cre],\n Posit Software, PBC [cph, fnd],\n Tessil [cph] (hopscotch_map library)", 270 | "Maintainer": "Winston Chang ", 271 | "Repository": "RSPM", 272 | "Date/Publication": "2024-05-15 09:00:07 UTC", 273 | "Built": "R 4.2.0; x86_64-pc-linux-gnu; 2024-05-16 04:26:35 UTC; unix" 274 | } 275 | }, 276 | "fontawesome": { 277 | "Source": "CRAN", 278 | "Repository": "https://p3m.dev/cran/latest", 279 | "description": { 280 | "Type": "Package", 281 | "Package": "fontawesome", 282 | "Version": "0.5.2", 283 | "Title": "Easily Work with 'Font Awesome' Icons", 284 | "Description": "Easily and flexibly insert 'Font Awesome' icons into 'R Markdown'\n documents and 'Shiny' apps. These icons can be inserted into HTML content\n through inline 'SVG' tags or 'i' tags. There is also a utility function for\n exporting 'Font Awesome' icons as 'PNG' images for those situations where\n raster graphics are needed.", 285 | "Authors@R": "c(\n person(\"Richard\", \"Iannone\", , \"rich@posit.co\", c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0003-3925-190X\")),\n person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"ctb\",\n comment = c(ORCID = \"0000-0003-4474-2498\")),\n person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"ctb\"),\n person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"),\n comment = \"Font-Awesome font\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", 286 | "License": "MIT + file LICENSE", 287 | "URL": "https://github.com/rstudio/fontawesome,\nhttps://rstudio.github.io/fontawesome/", 288 | "BugReports": "https://github.com/rstudio/fontawesome/issues", 289 | "Encoding": "UTF-8", 290 | "ByteCompile": "true", 291 | "RoxygenNote": "7.2.3", 292 | "Depends": "R (>= 3.3.0)", 293 | "Imports": "rlang (>= 1.0.6), htmltools (>= 0.5.1.1)", 294 | "Suggests": "covr, dplyr (>= 1.0.8), knitr (>= 1.31), testthat (>= 3.0.0),\nrsvg", 295 | "Config/testthat/edition": "3", 296 | "NeedsCompilation": "no", 297 | "Packaged": "2023-08-19 02:32:12 UTC; rich", 298 | "Author": "Richard Iannone [aut, cre] (),\n Christophe Dervieux [ctb] (),\n Winston Chang [ctb],\n Dave Gandy [ctb, cph] (Font-Awesome font),\n Posit Software, PBC [cph, fnd]", 299 | "Maintainer": "Richard Iannone ", 300 | "Repository": "RSPM", 301 | "Date/Publication": "2023-08-19 04:52:40 UTC", 302 | "Built": "R 4.2.0; ; 2023-08-21 12:34:12 UTC; unix" 303 | } 304 | }, 305 | "fs": { 306 | "Source": "CRAN", 307 | "Repository": "https://p3m.dev/cran/latest", 308 | "description": { 309 | "Package": "fs", 310 | "Title": "Cross-Platform File System Operations Based on 'libuv'", 311 | "Version": "1.6.4", 312 | "Authors@R": "c(\n person(\"Jim\", \"Hester\", role = \"aut\"),\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"),\n person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")),\n person(\"libuv project contributors\", role = \"cph\",\n comment = \"libuv library\"),\n person(\"Joyent, Inc. and other Node contributors\", role = \"cph\",\n comment = \"libuv library\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", 313 | "Description": "A cross-platform interface to file system operations, built\n on top of the 'libuv' C library.", 314 | "License": "MIT + file LICENSE", 315 | "URL": "https://fs.r-lib.org, https://github.com/r-lib/fs", 316 | "BugReports": "https://github.com/r-lib/fs/issues", 317 | "Depends": "R (>= 3.6)", 318 | "Imports": "methods", 319 | "Suggests": "covr, crayon, knitr, pillar (>= 1.0.0), rmarkdown, spelling,\ntestthat (>= 3.0.0), tibble (>= 1.1.0), vctrs (>= 0.3.0), withr", 320 | "VignetteBuilder": "knitr", 321 | "ByteCompile": "true", 322 | "Config/Needs/website": "tidyverse/tidytemplate", 323 | "Config/testthat/edition": "3", 324 | "Copyright": "file COPYRIGHTS", 325 | "Encoding": "UTF-8", 326 | "Language": "en-US", 327 | "RoxygenNote": "7.2.3", 328 | "SystemRequirements": "GNU make", 329 | "NeedsCompilation": "yes", 330 | "Packaged": "2024-04-25 11:57:22 UTC; gaborcsardi", 331 | "Author": "Jim Hester [aut],\n Hadley Wickham [aut],\n Gábor Csárdi [aut, cre],\n libuv project contributors [cph] (libuv library),\n Joyent, Inc. and other Node contributors [cph] (libuv library),\n Posit Software, PBC [cph, fnd]", 332 | "Maintainer": "Gábor Csárdi ", 333 | "Repository": "RSPM", 334 | "Date/Publication": "2024-04-25 12:50:02 UTC", 335 | "Built": "R 4.2.0; x86_64-pc-linux-gnu; 2024-04-26 05:09:24 UTC; unix" 336 | } 337 | }, 338 | "glue": { 339 | "Source": "CRAN", 340 | "Repository": "https://p3m.dev/cran/latest", 341 | "description": { 342 | "Package": "glue", 343 | "Title": "Interpreted String Literals", 344 | "Version": "1.7.0", 345 | "Authors@R": "c(\n person(\"Jim\", \"Hester\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-2739-7082\")),\n person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-6983-2759\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", 346 | "Description": "An implementation of interpreted string literals, inspired by\n Python's Literal String Interpolation\n and Docstrings\n and Julia's Triple-Quoted\n String Literals\n .", 347 | "License": "MIT + file LICENSE", 348 | "URL": "https://glue.tidyverse.org/, https://github.com/tidyverse/glue", 349 | "BugReports": "https://github.com/tidyverse/glue/issues", 350 | "Depends": "R (>= 3.6)", 351 | "Imports": "methods", 352 | "Suggests": "crayon, DBI (>= 1.2.0), dplyr, knitr, magrittr, rlang,\nrmarkdown, RSQLite, testthat (>= 3.2.0), vctrs (>= 0.3.0),\nwaldo (>= 0.3.0), withr", 353 | "VignetteBuilder": "knitr", 354 | "ByteCompile": "true", 355 | "Config/Needs/website": "bench, forcats, ggbeeswarm, ggplot2, R.utils,\nrprintf, tidyr, tidyverse/tidytemplate", 356 | "Config/testthat/edition": "3", 357 | "Encoding": "UTF-8", 358 | "RoxygenNote": "7.2.3.9000", 359 | "NeedsCompilation": "yes", 360 | "Packaged": "2024-01-08 16:10:57 UTC; jenny", 361 | "Author": "Jim Hester [aut] (),\n Jennifer Bryan [aut, cre] (),\n Posit Software, PBC [cph, fnd]", 362 | "Maintainer": "Jennifer Bryan ", 363 | "Repository": "RSPM", 364 | "Date/Publication": "2024-01-09 23:13:08 UTC", 365 | "Built": "R 4.2.0; x86_64-pc-linux-gnu; 2024-01-11 05:43:23 UTC; unix" 366 | } 367 | }, 368 | "htmltools": { 369 | "Source": "CRAN", 370 | "Repository": "https://p3m.dev/cran/latest", 371 | "description": { 372 | "Type": "Package", 373 | "Package": "htmltools", 374 | "Title": "Tools for HTML", 375 | "Version": "0.5.8.1", 376 | "Authors@R": "c(\n person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"),\n person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0001-9986-114X\")),\n person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-1576-2126\")),\n person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"),\n person(\"Jeff\", \"Allen\", role = \"aut\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", 377 | "Description": "Tools for HTML generation and output.", 378 | "License": "GPL (>= 2)", 379 | "URL": "https://github.com/rstudio/htmltools,\nhttps://rstudio.github.io/htmltools/", 380 | "BugReports": "https://github.com/rstudio/htmltools/issues", 381 | "Depends": "R (>= 2.14.1)", 382 | "Imports": "base64enc, digest, fastmap (>= 1.1.0), grDevices, rlang (>=\n1.0.0), utils", 383 | "Suggests": "Cairo, markdown, ragg, shiny, testthat, withr", 384 | "Enhances": "knitr", 385 | "Config/Needs/check": "knitr", 386 | "Config/Needs/website": "rstudio/quillt, bench", 387 | "Encoding": "UTF-8", 388 | "RoxygenNote": "7.3.1", 389 | "Collate": "'colors.R' 'fill.R' 'html_dependency.R' 'html_escape.R'\n'html_print.R' 'htmltools-package.R' 'images.R' 'known_tags.R'\n'selector.R' 'staticimports.R' 'tag_query.R' 'utils.R' 'tags.R'\n'template.R'", 390 | "NeedsCompilation": "yes", 391 | "Packaged": "2024-04-02 14:26:15 UTC; cpsievert", 392 | "Author": "Joe Cheng [aut],\n Carson Sievert [aut, cre] (),\n Barret Schloerke [aut] (),\n Winston Chang [aut] (),\n Yihui Xie [aut],\n Jeff Allen [aut],\n Posit Software, PBC [cph, fnd]", 393 | "Maintainer": "Carson Sievert ", 394 | "Repository": "RSPM", 395 | "Date/Publication": "2024-04-04 05:03:00 UTC", 396 | "Built": "R 4.2.0; x86_64-pc-linux-gnu; 2024-04-05 04:44:05 UTC; unix" 397 | } 398 | }, 399 | "httpuv": { 400 | "Source": "CRAN", 401 | "Repository": "https://p3m.dev/cran/latest", 402 | "description": { 403 | "Type": "Package", 404 | "Package": "httpuv", 405 | "Title": "HTTP and WebSocket Server Library", 406 | "Version": "1.6.15", 407 | "Authors@R": "c(\n person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"),\n person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Posit, PBC\", \"fnd\", role = \"cph\"),\n person(\"Hector\", \"Corrada Bravo\", role = \"ctb\"),\n person(\"Jeroen\", \"Ooms\", role = \"ctb\"),\n person(\"Andrzej\", \"Krzemienski\", role = \"cph\",\n comment = \"optional.hpp\"),\n person(\"libuv project contributors\", role = \"cph\",\n comment = \"libuv library, see src/libuv/AUTHORS file\"),\n person(\"Joyent, Inc. and other Node contributors\", role = \"cph\",\n comment = \"libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file\"),\n person(\"Niels\", \"Provos\", role = \"cph\",\n comment = \"libuv subcomponent: tree.h\"),\n person(\"Internet Systems Consortium, Inc.\", role = \"cph\",\n comment = \"libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c\"),\n person(\"Alexander\", \"Chemeris\", role = \"cph\",\n comment = \"libuv subcomponent: stdint-msvc2008.h (from msinttypes)\"),\n person(\"Google, Inc.\", role = \"cph\",\n comment = \"libuv subcomponent: pthread-fixes.c\"),\n person(\"Sony Mobile Communcations AB\", role = \"cph\",\n comment = \"libuv subcomponent: pthread-fixes.c\"),\n person(\"Berkeley Software Design Inc.\", role = \"cph\",\n comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"),\n person(\"Kenneth\", \"MacKay\", role = \"cph\",\n comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"),\n person(\"Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016)\", role = \"cph\",\n comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"),\n person(\"Steve\", \"Reid\", role = \"aut\",\n comment = \"SHA-1 implementation\"),\n person(\"James\", \"Brown\", role = \"aut\",\n comment = \"SHA-1 implementation\"),\n person(\"Bob\", \"Trower\", role = \"aut\",\n comment = \"base64 implementation\"),\n person(\"Alexander\", \"Peslyak\", role = \"aut\",\n comment = \"MD5 implementation\"),\n person(\"Trantor Standard Systems\", role = \"cph\",\n comment = \"base64 implementation\"),\n person(\"Igor\", \"Sysoev\", role = \"cph\",\n comment = \"http-parser\")\n )", 408 | "Description": "Provides low-level socket and protocol support for handling\n HTTP and WebSocket requests directly from within R. It is primarily\n intended as a building block for other packages, rather than making it\n particularly easy to create complete web applications using httpuv\n alone. httpuv is built on top of the libuv and http-parser C\n libraries, both of which were developed by Joyent, Inc. (See LICENSE\n file for libuv and http-parser license information.)", 409 | "License": "GPL (>= 2) | file LICENSE", 410 | "URL": "https://github.com/rstudio/httpuv", 411 | "BugReports": "https://github.com/rstudio/httpuv/issues", 412 | "Depends": "R (>= 2.15.1)", 413 | "Imports": "later (>= 0.8.0), promises, R6, Rcpp (>= 1.0.7), utils", 414 | "Suggests": "callr, curl, testthat, websocket", 415 | "LinkingTo": "later, Rcpp", 416 | "Encoding": "UTF-8", 417 | "RoxygenNote": "7.3.1", 418 | "SystemRequirements": "GNU make, zlib", 419 | "Collate": "'RcppExports.R' 'httpuv.R' 'random_port.R' 'server.R'\n'staticServer.R' 'static_paths.R' 'utils.R'", 420 | "NeedsCompilation": "yes", 421 | "Packaged": "2024-03-25 21:06:08 UTC; cpsievert", 422 | "Author": "Joe Cheng [aut],\n Winston Chang [aut, cre],\n Posit, PBC fnd [cph],\n Hector Corrada Bravo [ctb],\n Jeroen Ooms [ctb],\n Andrzej Krzemienski [cph] (optional.hpp),\n libuv project contributors [cph] (libuv library, see src/libuv/AUTHORS\n file),\n Joyent, Inc. and other Node contributors [cph] (libuv library, see\n src/libuv/AUTHORS file; and http-parser library, see\n src/http-parser/AUTHORS file),\n Niels Provos [cph] (libuv subcomponent: tree.h),\n Internet Systems Consortium, Inc. [cph] (libuv subcomponent: inet_pton\n and inet_ntop, contained in src/libuv/src/inet.c),\n Alexander Chemeris [cph] (libuv subcomponent: stdint-msvc2008.h (from\n msinttypes)),\n Google, Inc. [cph] (libuv subcomponent: pthread-fixes.c),\n Sony Mobile Communcations AB [cph] (libuv subcomponent:\n pthread-fixes.c),\n Berkeley Software Design Inc. [cph] (libuv subcomponent:\n android-ifaddrs.h, android-ifaddrs.c),\n Kenneth MacKay [cph] (libuv subcomponent: android-ifaddrs.h,\n android-ifaddrs.c),\n Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016) [cph]\n (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c),\n Steve Reid [aut] (SHA-1 implementation),\n James Brown [aut] (SHA-1 implementation),\n Bob Trower [aut] (base64 implementation),\n Alexander Peslyak [aut] (MD5 implementation),\n Trantor Standard Systems [cph] (base64 implementation),\n Igor Sysoev [cph] (http-parser)", 423 | "Maintainer": "Winston Chang ", 424 | "Repository": "RSPM", 425 | "Date/Publication": "2024-03-26 05:50:06 UTC", 426 | "Built": "R 4.2.0; x86_64-pc-linux-gnu; 2024-07-18 09:23:14 UTC; unix" 427 | } 428 | }, 429 | "jquerylib": { 430 | "Source": "CRAN", 431 | "Repository": "https://p3m.dev/cran/latest", 432 | "description": { 433 | "Package": "jquerylib", 434 | "Title": "Obtain 'jQuery' as an HTML Dependency Object", 435 | "Version": "0.1.4", 436 | "Authors@R": "c(\n person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"carson@rstudio.com\", comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@rstudio.com\"),\n person(family = \"RStudio\", role = \"cph\"),\n person(family = \"jQuery Foundation\", role = \"cph\",\n comment = \"jQuery library and jQuery UI library\"),\n person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"),\n comment = \"jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt\")\n )", 437 | "Description": "Obtain any major version of 'jQuery' () and use it in any webpage generated by 'htmltools' (e.g. 'shiny', 'htmlwidgets', and 'rmarkdown').\n Most R users don't need to use this package directly, but other R packages (e.g. 'shiny', 'rmarkdown', etc.) depend on this package to avoid bundling redundant copies of 'jQuery'.", 438 | "License": "MIT + file LICENSE", 439 | "Encoding": "UTF-8", 440 | "Config/testthat/edition": "3", 441 | "RoxygenNote": "7.0.2", 442 | "Imports": "htmltools", 443 | "Suggests": "testthat", 444 | "NeedsCompilation": "no", 445 | "Packaged": "2021-04-26 16:40:21 UTC; cpsievert", 446 | "Author": "Carson Sievert [aut, cre] (),\n Joe Cheng [aut],\n RStudio [cph],\n jQuery Foundation [cph] (jQuery library and jQuery UI library),\n jQuery contributors [ctb, cph] (jQuery library; authors listed in\n inst/lib/jquery-AUTHORS.txt)", 447 | "Maintainer": "Carson Sievert ", 448 | "Repository": "CRAN", 449 | "Date/Publication": "2021-04-26 17:10:02 UTC", 450 | "Built": "R 4.2.0; ; 2022-04-26 22:34:33 UTC; unix" 451 | } 452 | }, 453 | "jsonlite": { 454 | "Source": "CRAN", 455 | "Repository": "https://p3m.dev/cran/latest", 456 | "description": { 457 | "Package": "jsonlite", 458 | "Version": "1.8.8", 459 | "Title": "A Simple and Robust JSON Parser and Generator for R", 460 | "License": "MIT + file LICENSE", 461 | "Depends": "methods", 462 | "Authors@R": "c(\n person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroen@berkeley.edu\",\n comment = c(ORCID = \"0000-0002-4035-0289\")),\n person(\"Duncan\", \"Temple Lang\", role = \"ctb\"),\n person(\"Lloyd\", \"Hilaiel\", role = \"cph\", comment=\"author of bundled libyajl\"))", 463 | "URL": "https://jeroen.r-universe.dev/jsonlite\nhttps://arxiv.org/abs/1403.2805", 464 | "BugReports": "https://github.com/jeroen/jsonlite/issues", 465 | "Maintainer": "Jeroen Ooms ", 466 | "VignetteBuilder": "knitr, R.rsp", 467 | "Description": "A reasonably fast JSON parser and generator, optimized for statistical \n data and the web. Offers simple, flexible tools for working with JSON in R, and\n is particularly powerful for building pipelines and interacting with a web API. \n The implementation is based on the mapping described in the vignette (Ooms, 2014).\n In addition to converting JSON data from/to R objects, 'jsonlite' contains \n functions to stream, validate, and prettify JSON data. The unit tests included \n with the package verify that all edge cases are encoded and decoded consistently \n for use with dynamic data in systems and applications.", 468 | "Suggests": "httr, vctrs, testthat, knitr, rmarkdown, R.rsp, sf", 469 | "RoxygenNote": "7.2.3", 470 | "Encoding": "UTF-8", 471 | "NeedsCompilation": "yes", 472 | "Packaged": "2023-12-04 12:57:12 UTC; jeroen", 473 | "Author": "Jeroen Ooms [aut, cre] (),\n Duncan Temple Lang [ctb],\n Lloyd Hilaiel [cph] (author of bundled libyajl)", 474 | "Repository": "RSPM", 475 | "Date/Publication": "2023-12-04 15:20:02 UTC", 476 | "Built": "R 4.2.0; x86_64-pc-linux-gnu; 2023-12-05 18:29:04 UTC; unix" 477 | } 478 | }, 479 | "later": { 480 | "Source": "CRAN", 481 | "Repository": "https://p3m.dev/cran/latest", 482 | "description": { 483 | "Package": "later", 484 | "Type": "Package", 485 | "Title": "Utilities for Scheduling Functions to Execute Later with Event\nLoops", 486 | "Version": "1.3.2", 487 | "Authors@R": "c(\n person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@posit.co\"),\n person(\"Joe\", \"Cheng\", role = c(\"aut\"), email = \"joe@posit.co\"),\n person(family = \"Posit Software, PBC\", role = \"cph\"),\n person(\"Marcus\", \"Geelnard\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\"),\n person(\"Evan\", \"Nemerson\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\")\n )", 488 | "Description": "Executes arbitrary R or C functions some time after the current\n time, after the R execution stack has emptied. The functions are scheduled\n in an event loop.", 489 | "URL": "https://r-lib.github.io/later/, https://github.com/r-lib/later", 490 | "BugReports": "https://github.com/r-lib/later/issues", 491 | "License": "MIT + file LICENSE", 492 | "Imports": "Rcpp (>= 0.12.9), rlang", 493 | "LinkingTo": "Rcpp", 494 | "RoxygenNote": "7.2.3", 495 | "Suggests": "knitr, rmarkdown, testthat (>= 2.1.0)", 496 | "VignetteBuilder": "knitr", 497 | "Encoding": "UTF-8", 498 | "NeedsCompilation": "yes", 499 | "Packaged": "2023-12-06 00:38:14 UTC; cpsievert", 500 | "Author": "Winston Chang [aut, cre],\n Joe Cheng [aut],\n Posit Software, PBC [cph],\n Marcus Geelnard [ctb, cph] (TinyCThread library,\n https://tinycthread.github.io/),\n Evan Nemerson [ctb, cph] (TinyCThread library,\n https://tinycthread.github.io/)", 501 | "Maintainer": "Winston Chang ", 502 | "Repository": "RSPM", 503 | "Date/Publication": "2023-12-06 09:10:05 UTC", 504 | "Built": "R 4.2.0; x86_64-pc-linux-gnu; 2024-01-12 01:24:57 UTC; unix", 505 | "RemoteType": "standard", 506 | "RemotePkgRef": "later", 507 | "RemoteRef": "later", 508 | "RemoteRepos": "https://colorado.rstudio.com/rspm/all/latest", 509 | "RemoteReposName": "RSPM", 510 | "RemotePkgPlatform": "x86_64-apple-darwin17.0", 511 | "RemoteSha": "1.3.2" 512 | } 513 | }, 514 | "lifecycle": { 515 | "Source": "CRAN", 516 | "Repository": "https://p3m.dev/cran/latest", 517 | "description": { 518 | "Package": "lifecycle", 519 | "Title": "Manage the Life Cycle of your Package Functions", 520 | "Version": "1.0.4", 521 | "Authors@R": "c(\n person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0003-4757-117X\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", 522 | "Description": "Manage the life cycle of your exported functions with shared\n conventions, documentation badges, and user-friendly deprecation\n warnings.", 523 | "License": "MIT + file LICENSE", 524 | "URL": "https://lifecycle.r-lib.org/, https://github.com/r-lib/lifecycle", 525 | "BugReports": "https://github.com/r-lib/lifecycle/issues", 526 | "Depends": "R (>= 3.6)", 527 | "Imports": "cli (>= 3.4.0), glue, rlang (>= 1.1.0)", 528 | "Suggests": "covr, crayon, knitr, lintr, rmarkdown, testthat (>= 3.0.1),\ntibble, tidyverse, tools, vctrs, withr", 529 | "VignetteBuilder": "knitr", 530 | "Config/Needs/website": "tidyverse/tidytemplate, usethis", 531 | "Config/testthat/edition": "3", 532 | "Encoding": "UTF-8", 533 | "RoxygenNote": "7.2.1", 534 | "NeedsCompilation": "no", 535 | "Packaged": "2023-11-06 16:07:36 UTC; lionel", 536 | "Author": "Lionel Henry [aut, cre],\n Hadley Wickham [aut] (),\n Posit Software, PBC [cph, fnd]", 537 | "Maintainer": "Lionel Henry ", 538 | "Repository": "RSPM", 539 | "Date/Publication": "2023-11-07 10:10:10 UTC", 540 | "Built": "R 4.2.0; ; 2024-01-31 22:33:05 UTC; unix" 541 | } 542 | }, 543 | "magrittr": { 544 | "Source": "CRAN", 545 | "Repository": "https://p3m.dev/cran/latest", 546 | "description": { 547 | "Type": "Package", 548 | "Package": "magrittr", 549 | "Title": "A Forward-Pipe Operator for R", 550 | "Version": "2.0.3", 551 | "Authors@R": "c(\n person(\"Stefan Milton\", \"Bache\", , \"stefan@stefanbache.dk\", role = c(\"aut\", \"cph\"),\n comment = \"Original author and creator of magrittr\"),\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"),\n person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", role = \"cre\"),\n person(\"RStudio\", role = c(\"cph\", \"fnd\"))\n )", 552 | "Description": "Provides a mechanism for chaining commands with a new\n forward-pipe operator, %>%. This operator will forward a value, or the\n result of an expression, into the next function call/expression.\n There is flexible support for the type of right-hand side expressions.\n For more information, see package vignette. To quote Rene Magritte,\n \"Ceci n'est pas un pipe.\"", 553 | "License": "MIT + file LICENSE", 554 | "URL": "https://magrittr.tidyverse.org,\nhttps://github.com/tidyverse/magrittr", 555 | "BugReports": "https://github.com/tidyverse/magrittr/issues", 556 | "Depends": "R (>= 3.4.0)", 557 | "Suggests": "covr, knitr, rlang, rmarkdown, testthat", 558 | "VignetteBuilder": "knitr", 559 | "ByteCompile": "Yes", 560 | "Config/Needs/website": "tidyverse/tidytemplate", 561 | "Encoding": "UTF-8", 562 | "RoxygenNote": "7.1.2", 563 | "NeedsCompilation": "yes", 564 | "Packaged": "2022-03-29 09:34:37 UTC; lionel", 565 | "Author": "Stefan Milton Bache [aut, cph] (Original author and creator of\n magrittr),\n Hadley Wickham [aut],\n Lionel Henry [cre],\n RStudio [cph, fnd]", 566 | "Maintainer": "Lionel Henry ", 567 | "Repository": "CRAN", 568 | "Date/Publication": "2022-03-30 07:30:09 UTC", 569 | "Built": "R 4.2.0; x86_64-apple-darwin17.0; 2022-04-25 03:04:24 UTC; unix", 570 | "Archs": "magrittr.so.dSYM" 571 | } 572 | }, 573 | "memoise": { 574 | "Source": "CRAN", 575 | "Repository": "https://p3m.dev/cran/latest", 576 | "description": { 577 | "Package": "memoise", 578 | "Title": "'Memoisation' of Functions", 579 | "Version": "2.0.1", 580 | "Authors@R": "\n c(person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\",\n email = \"hadley@rstudio.com\"),\n person(given = \"Jim\",\n family = \"Hester\",\n role = \"aut\"),\n person(given = \"Winston\",\n family = \"Chang\",\n role = c(\"aut\", \"cre\"),\n email = \"winston@rstudio.com\"),\n person(given = \"Kirill\",\n family = \"Müller\",\n role = \"aut\",\n email = \"krlmlr+r@mailbox.org\"),\n person(given = \"Daniel\",\n family = \"Cook\",\n role = \"aut\",\n email = \"danielecook@gmail.com\"),\n person(given = \"Mark\",\n family = \"Edmondson\",\n role = \"ctb\",\n email = \"r@sunholo.com\"))", 581 | "Description": "Cache the results of a function so that when you\n call it again with the same arguments it returns the previously computed\n value.", 582 | "License": "MIT + file LICENSE", 583 | "URL": "https://memoise.r-lib.org, https://github.com/r-lib/memoise", 584 | "BugReports": "https://github.com/r-lib/memoise/issues", 585 | "Imports": "rlang (>= 0.4.10), cachem", 586 | "Suggests": "digest, aws.s3, covr, googleAuthR, googleCloudStorageR, httr,\ntestthat", 587 | "Encoding": "UTF-8", 588 | "RoxygenNote": "7.1.2", 589 | "NeedsCompilation": "no", 590 | "Packaged": "2021-11-24 21:24:50 UTC; jhester", 591 | "Author": "Hadley Wickham [aut],\n Jim Hester [aut],\n Winston Chang [aut, cre],\n Kirill Müller [aut],\n Daniel Cook [aut],\n Mark Edmondson [ctb]", 592 | "Maintainer": "Winston Chang ", 593 | "Repository": "CRAN", 594 | "Date/Publication": "2021-11-26 16:11:10 UTC", 595 | "Built": "R 4.2.0; ; 2022-04-25 03:43:41 UTC; unix" 596 | } 597 | }, 598 | "mime": { 599 | "Source": "CRAN", 600 | "Repository": "https://p3m.dev/cran/latest", 601 | "description": { 602 | "Package": "mime", 603 | "Type": "Package", 604 | "Title": "Map Filenames to MIME Types", 605 | "Version": "0.12", 606 | "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Jeffrey\", \"Horner\", role = \"ctb\"),\n person(\"Beilei\", \"Bian\", role = \"ctb\")\n )", 607 | "Description": "Guesses the MIME type from a filename extension using the data\n derived from /etc/mime.types in UNIX-type systems.", 608 | "Imports": "tools", 609 | "License": "GPL", 610 | "URL": "https://github.com/yihui/mime", 611 | "BugReports": "https://github.com/yihui/mime/issues", 612 | "RoxygenNote": "7.1.1", 613 | "Encoding": "UTF-8", 614 | "NeedsCompilation": "yes", 615 | "Packaged": "2021-09-28 02:06:04 UTC; yihui", 616 | "Author": "Yihui Xie [aut, cre] (),\n Jeffrey Horner [ctb],\n Beilei Bian [ctb]", 617 | "Maintainer": "Yihui Xie ", 618 | "Repository": "CRAN", 619 | "Date/Publication": "2021-09-28 05:00:05 UTC", 620 | "Built": "R 4.2.0; x86_64-apple-darwin17.0; 2022-04-25 03:05:47 UTC; unix", 621 | "Archs": "mime.so.dSYM" 622 | } 623 | }, 624 | "promises": { 625 | "Source": "CRAN", 626 | "Repository": "https://p3m.dev/cran/latest", 627 | "description": { 628 | "Type": "Package", 629 | "Package": "promises", 630 | "Title": "Abstractions for Promise-Based Asynchronous Programming", 631 | "Version": "1.3.0", 632 | "Authors@R": "c(\n person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", 633 | "Description": "Provides fundamental abstractions for doing asynchronous\n programming in R using promises. Asynchronous programming is useful\n for allowing a single R process to orchestrate multiple tasks in the\n background while also attending to something else. Semantics are\n similar to 'JavaScript' promises, but with a syntax that is idiomatic\n R.", 634 | "License": "MIT + file LICENSE", 635 | "URL": "https://rstudio.github.io/promises/,\nhttps://github.com/rstudio/promises", 636 | "BugReports": "https://github.com/rstudio/promises/issues", 637 | "Imports": "fastmap (>= 1.1.0), later, magrittr (>= 1.5), R6, Rcpp, rlang,\nstats", 638 | "Suggests": "future (>= 1.21.0), knitr, purrr, rmarkdown, spelling,\ntestthat, vembedr", 639 | "LinkingTo": "later, Rcpp", 640 | "VignetteBuilder": "knitr", 641 | "Config/Needs/website": "rsconnect", 642 | "Encoding": "UTF-8", 643 | "Language": "en-US", 644 | "RoxygenNote": "7.3.1", 645 | "NeedsCompilation": "yes", 646 | "Packaged": "2024-04-04 20:02:05 UTC; jcheng", 647 | "Author": "Joe Cheng [aut, cre],\n Posit Software, PBC [cph, fnd]", 648 | "Maintainer": "Joe Cheng ", 649 | "Repository": "RSPM", 650 | "Date/Publication": "2024-04-05 15:00:06 UTC", 651 | "Built": "R 4.2.0; x86_64-pc-linux-gnu; 2024-07-18 09:19:57 UTC; unix" 652 | } 653 | }, 654 | "rappdirs": { 655 | "Source": "CRAN", 656 | "Repository": "https://p3m.dev/cran/latest", 657 | "description": { 658 | "Type": "Package", 659 | "Package": "rappdirs", 660 | "Title": "Application Directories: Determine Where to Save Data, Caches,\nand Logs", 661 | "Version": "0.3.3", 662 | "Authors@R": "\n c(person(given = \"Hadley\",\n family = \"Wickham\",\n role = c(\"trl\", \"cre\", \"cph\"),\n email = \"hadley@rstudio.com\"),\n person(given = \"RStudio\",\n role = \"cph\"),\n person(given = \"Sridhar\",\n family = \"Ratnakumar\",\n role = \"aut\"),\n person(given = \"Trent\",\n family = \"Mick\",\n role = \"aut\"),\n person(given = \"ActiveState\",\n role = \"cph\",\n comment = \"R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs\"),\n person(given = \"Eddy\",\n family = \"Petrisor\",\n role = \"ctb\"),\n person(given = \"Trevor\",\n family = \"Davis\",\n role = c(\"trl\", \"aut\")),\n person(given = \"Gabor\",\n family = \"Csardi\",\n role = \"ctb\"),\n person(given = \"Gregory\",\n family = \"Jefferis\",\n role = \"ctb\"))", 663 | "Description": "An easy way to determine which directories on the\n users computer you should use to save data, caches and logs. A port of\n Python's 'Appdirs' () to\n R.", 664 | "License": "MIT + file LICENSE", 665 | "URL": "https://rappdirs.r-lib.org, https://github.com/r-lib/rappdirs", 666 | "BugReports": "https://github.com/r-lib/rappdirs/issues", 667 | "Depends": "R (>= 3.2)", 668 | "Suggests": "roxygen2, testthat (>= 3.0.0), covr, withr", 669 | "Copyright": "Original python appdirs module copyright (c) 2010\nActiveState Software Inc. R port copyright Hadley Wickham,\nRStudio. See file LICENSE for details.", 670 | "Encoding": "UTF-8", 671 | "RoxygenNote": "7.1.1", 672 | "Config/testthat/edition": "3", 673 | "NeedsCompilation": "yes", 674 | "Packaged": "2021-01-28 22:29:57 UTC; hadley", 675 | "Author": "Hadley Wickham [trl, cre, cph],\n RStudio [cph],\n Sridhar Ratnakumar [aut],\n Trent Mick [aut],\n ActiveState [cph] (R/appdir.r, R/cache.r, R/data.r, R/log.r translated\n from appdirs),\n Eddy Petrisor [ctb],\n Trevor Davis [trl, aut],\n Gabor Csardi [ctb],\n Gregory Jefferis [ctb]", 676 | "Maintainer": "Hadley Wickham ", 677 | "Repository": "CRAN", 678 | "Date/Publication": "2021-01-31 05:40:02 UTC", 679 | "Built": "R 4.2.0; x86_64-apple-darwin17.0; 2022-04-25 03:07:40 UTC; unix", 680 | "Archs": "rappdirs.so.dSYM" 681 | } 682 | }, 683 | "renv": { 684 | "Source": "CRAN", 685 | "Repository": "https://p3m.dev/cran/latest", 686 | "description": { 687 | "Package": "renv", 688 | "Type": "Package", 689 | "Title": "Project Environments", 690 | "Version": "1.0.7", 691 | "Authors@R": "c(\n person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevin@rstudio.com\",\n comment = c(ORCID = \"0000-0003-2880-7407\")),\n person(\"Hadley\", \"Wickham\", role = c(\"aut\"), email = \"hadley@rstudio.com\",\n comment = c(ORCID = \"0000-0003-4757-117X\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", 692 | "Description": "A dependency management toolkit for R. Using 'renv', you can create\n and manage project-local R libraries, save the state of these libraries to\n a 'lockfile', and later restore your library as required. Together, these\n tools can help make your projects more isolated, portable, and reproducible.", 693 | "License": "MIT + file LICENSE", 694 | "URL": "https://rstudio.github.io/renv/, https://github.com/rstudio/renv", 695 | "BugReports": "https://github.com/rstudio/renv/issues", 696 | "Imports": "utils", 697 | "Suggests": "BiocManager, cli, covr, cpp11, devtools, gitcreds, jsonlite,\nknitr, miniUI, packrat, pak, R6, remotes, reticulate,\nrmarkdown, rstudioapi, shiny, testthat, uuid, waldo, yaml,\nwebfakes", 698 | "Encoding": "UTF-8", 699 | "RoxygenNote": "7.3.1", 700 | "VignetteBuilder": "knitr", 701 | "Config/Needs/website": "tidyverse/tidytemplate", 702 | "Config/testthat/edition": "3", 703 | "Config/testthat/parallel": "true", 704 | "Config/testthat/start-first": "bioconductor,python,install,restore,snapshot,retrieve,remotes", 705 | "NeedsCompilation": "no", 706 | "Packaged": "2024-04-11 16:26:24 UTC; kevin", 707 | "Author": "Kevin Ushey [aut, cre] (),\n Hadley Wickham [aut] (),\n Posit Software, PBC [cph, fnd]", 708 | "Maintainer": "Kevin Ushey ", 709 | "Repository": "RSPM", 710 | "Date/Publication": "2024-04-11 22:20:02 UTC", 711 | "Built": "R 4.2.0; ; 2024-04-12 04:29:13 UTC; unix" 712 | } 713 | }, 714 | "rlang": { 715 | "Source": "CRAN", 716 | "Repository": "https://p3m.dev/cran/latest", 717 | "description": { 718 | "Package": "rlang", 719 | "Version": "1.1.4", 720 | "Title": "Functions for Base Types and Core R and 'Tidyverse' Features", 721 | "Description": "A toolbox for working with base types, core R features\n like the condition system, and core 'Tidyverse' features like tidy\n evaluation.", 722 | "Authors@R": "c(\n person(\"Lionel\", \"Henry\", ,\"lionel@posit.co\", c(\"aut\", \"cre\")),\n person(\"Hadley\", \"Wickham\", ,\"hadley@posit.co\", \"aut\"),\n person(given = \"mikefc\",\n email = \"mikefc@coolbutuseless.com\", \n role = \"cph\", \n comment = \"Hash implementation based on Mike's xxhashlite\"),\n person(given = \"Yann\",\n family = \"Collet\",\n role = \"cph\", \n comment = \"Author of the embedded xxHash library\"),\n person(given = \"Posit, PBC\", role = c(\"cph\", \"fnd\"))\n )", 723 | "License": "MIT + file LICENSE", 724 | "ByteCompile": "true", 725 | "Biarch": "true", 726 | "Depends": "R (>= 3.5.0)", 727 | "Imports": "utils", 728 | "Suggests": "cli (>= 3.1.0), covr, crayon, fs, glue, knitr, magrittr,\nmethods, pillar, rmarkdown, stats, testthat (>= 3.0.0), tibble,\nusethis, vctrs (>= 0.2.3), withr", 729 | "Enhances": "winch", 730 | "Encoding": "UTF-8", 731 | "RoxygenNote": "7.3.1", 732 | "URL": "https://rlang.r-lib.org, https://github.com/r-lib/rlang", 733 | "BugReports": "https://github.com/r-lib/rlang/issues", 734 | "Config/testthat/edition": "3", 735 | "Config/Needs/website": "dplyr, tidyverse/tidytemplate", 736 | "NeedsCompilation": "yes", 737 | "Packaged": "2024-05-31 12:46:04 UTC; lionel", 738 | "Author": "Lionel Henry [aut, cre],\n Hadley Wickham [aut],\n mikefc [cph] (Hash implementation based on Mike's xxhashlite),\n Yann Collet [cph] (Author of the embedded xxHash library),\n Posit, PBC [cph, fnd]", 739 | "Maintainer": "Lionel Henry ", 740 | "Repository": "RSPM", 741 | "Date/Publication": "2024-06-04 09:45:03 UTC", 742 | "Built": "R 4.2.0; x86_64-pc-linux-gnu; 2024-06-05 12:18:39 UTC; unix" 743 | } 744 | }, 745 | "sass": { 746 | "Source": "CRAN", 747 | "Repository": "https://p3m.dev/cran/latest", 748 | "description": { 749 | "Type": "Package", 750 | "Package": "sass", 751 | "Version": "0.4.9", 752 | "Title": "Syntactically Awesome Style Sheets ('Sass')", 753 | "Description": "An 'SCSS' compiler, powered by the 'LibSass' library. With this,\n R developers can use variables, inheritance, and functions to generate\n dynamic style sheets. The package uses the 'Sass CSS' extension language,\n which is stable, powerful, and CSS compatible.", 754 | "Authors@R": "c(\n person(\"Joe\", \"Cheng\", , \"joe@rstudio.com\", \"aut\"),\n person(\"Timothy\", \"Mastny\", , \"tim.mastny@gmail.com\", \"aut\"),\n person(\"Richard\", \"Iannone\", , \"rich@rstudio.com\", \"aut\",\n comment = c(ORCID = \"0000-0003-3925-190X\")),\n person(\"Barret\", \"Schloerke\", , \"barret@rstudio.com\", \"aut\",\n comment = c(ORCID = \"0000-0001-9986-114X\")),\n person(\"Carson\", \"Sievert\", , \"carson@rstudio.com\", c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Christophe\", \"Dervieux\", , \"cderv@rstudio.com\", c(\"ctb\"),\n comment = c(ORCID = \"0000-0003-4474-2498\")),\n person(family = \"RStudio\", role = c(\"cph\", \"fnd\")),\n person(family = \"Sass Open Source Foundation\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Greter\", \"Marcel\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Mifsud\", \"Michael\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Hampton\", \"Catlin\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Natalie\", \"Weizenbaum\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Chris\", \"Eppstein\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Adams\", \"Joseph\", role = c(\"ctb\", \"cph\"),\n comment = \"json.cpp\"),\n person(\"Trifunovic\", \"Nemanja\", role = c(\"ctb\", \"cph\"),\n comment = \"utf8.h\")\n )", 755 | "License": "MIT + file LICENSE", 756 | "URL": "https://rstudio.github.io/sass/, https://github.com/rstudio/sass", 757 | "BugReports": "https://github.com/rstudio/sass/issues", 758 | "Encoding": "UTF-8", 759 | "RoxygenNote": "7.3.1", 760 | "SystemRequirements": "GNU make", 761 | "Imports": "fs (>= 1.2.4), rlang (>= 0.4.10), htmltools (>= 0.5.1), R6,\nrappdirs", 762 | "Suggests": "testthat, knitr, rmarkdown, withr, shiny, curl", 763 | "VignetteBuilder": "knitr", 764 | "Config/testthat/edition": "3", 765 | "NeedsCompilation": "yes", 766 | "Packaged": "2024-03-15 21:58:01 UTC; cpsievert", 767 | "Author": "Joe Cheng [aut],\n Timothy Mastny [aut],\n Richard Iannone [aut] (),\n Barret Schloerke [aut] (),\n Carson Sievert [aut, cre] (),\n Christophe Dervieux [ctb] (),\n RStudio [cph, fnd],\n Sass Open Source Foundation [ctb, cph] (LibSass library),\n Greter Marcel [ctb, cph] (LibSass library),\n Mifsud Michael [ctb, cph] (LibSass library),\n Hampton Catlin [ctb, cph] (LibSass library),\n Natalie Weizenbaum [ctb, cph] (LibSass library),\n Chris Eppstein [ctb, cph] (LibSass library),\n Adams Joseph [ctb, cph] (json.cpp),\n Trifunovic Nemanja [ctb, cph] (utf8.h)", 768 | "Maintainer": "Carson Sievert ", 769 | "Repository": "RSPM", 770 | "Date/Publication": "2024-03-15 22:30:02 UTC", 771 | "Built": "R 4.2.0; x86_64-pc-linux-gnu; 2024-03-17 04:23:57 UTC; unix" 772 | } 773 | }, 774 | "shiny": { 775 | "Source": "CRAN", 776 | "Repository": "https://p3m.dev/cran/latest", 777 | "description": { 778 | "Package": "shiny", 779 | "Type": "Package", 780 | "Title": "Web Application Framework for R", 781 | "Version": "1.9.1", 782 | "Authors@R": "c(\n person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@posit.co\", comment = c(ORCID = \"0000-0002-1576-2126\")),\n person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@posit.co\"),\n person(\"JJ\", \"Allaire\", role = \"aut\", email = \"jj@posit.co\"),\n person(\"Carson\", \"Sievert\", role = \"aut\", email = \"carson@posit.co\", comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Barret\", \"Schloerke\", role = \"aut\", email = \"barret@posit.co\", comment = c(ORCID = \"0000-0001-9986-114X\")),\n person(\"Yihui\", \"Xie\", role = \"aut\", email = \"yihui@posit.co\"),\n person(\"Jeff\", \"Allen\", role = \"aut\"),\n person(\"Jonathan\", \"McPherson\", role = \"aut\", email = \"jonathan@posit.co\"),\n person(\"Alan\", \"Dipert\", role = \"aut\"),\n person(\"Barbara\", \"Borges\", role = \"aut\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")),\n person(family = \"jQuery Foundation\", role = \"cph\",\n comment = \"jQuery library and jQuery UI library\"),\n person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"),\n comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"),\n person(family = \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"),\n comment = \"jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt\"),\n person(\"Mark\", \"Otto\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(\"Jacob\", \"Thornton\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(family = \"Bootstrap contributors\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(family = \"Twitter, Inc\", role = \"cph\",\n comment = \"Bootstrap library\"),\n person(\"Prem Nawaz\", \"Khan\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Victor\", \"Tsaran\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Dennis\", \"Lembree\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Srinivasu\", \"Chakravarthula\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Cathy\", \"O'Connor\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(family = \"PayPal, Inc\", role = \"cph\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Stefan\", \"Petre\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootstrap-datepicker library\"),\n person(\"Andrew\", \"Rowls\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootstrap-datepicker library\"),\n person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"),\n comment = \"selectize.js library\"),\n person(\"Salmen\", \"Bejaoui\", role = c(\"ctb\", \"cph\"),\n comment = \"selectize-plugin-a11y library\"),\n person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"),\n comment = \"ion.rangeSlider library\"),\n person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"),\n comment = \"Javascript strftime library\"),\n person(family = \"SpryMedia Limited\", role = c(\"ctb\", \"cph\"),\n comment = \"DataTables library\"),\n person(\"John\", \"Fraser\", role = c(\"ctb\", \"cph\"),\n comment = \"showdown.js library\"),\n person(\"John\", \"Gruber\", role = c(\"ctb\", \"cph\"),\n comment = \"showdown.js library\"),\n person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"),\n comment = \"highlight.js library\"),\n person(family = \"R Core Team\", role = c(\"ctb\", \"cph\"),\n comment = \"tar implementation from R\")\n )", 783 | "Description": "Makes it incredibly easy to build interactive web\n applications with R. Automatic \"reactive\" binding between inputs and\n outputs and extensive prebuilt widgets make it possible to build\n beautiful, responsive, and powerful applications with minimal effort.", 784 | "License": "GPL-3 | file LICENSE", 785 | "Depends": "R (>= 3.0.2), methods", 786 | "Imports": "utils, grDevices, httpuv (>= 1.5.2), mime (>= 0.3), jsonlite\n(>= 0.9.16), xtable, fontawesome (>= 0.4.0), htmltools (>=\n0.5.4), R6 (>= 2.0), sourcetools, later (>= 1.0.0), promises\n(>= 1.1.0), tools, crayon, rlang (>= 0.4.10), fastmap (>=\n1.1.1), withr, commonmark (>= 1.7), glue (>= 1.3.2), bslib (>=\n0.6.0), cachem (>= 1.1.0), lifecycle (>= 0.2.0)", 787 | "Suggests": "datasets, DT, Cairo (>= 1.5-5), testthat (>= 3.0.0), knitr\n(>= 1.6), markdown, rmarkdown, ggplot2, reactlog (>= 1.0.0),\nmagrittr, yaml, future, dygraphs, ragg, showtext, sass", 788 | "URL": "https://shiny.posit.co/, https://github.com/rstudio/shiny", 789 | "BugReports": "https://github.com/rstudio/shiny/issues", 790 | "Collate": "'globals.R' 'app-state.R' 'app_template.R' 'bind-cache.R'\n'bind-event.R' 'bookmark-state-local.R' 'bookmark-state.R'\n'bootstrap-deprecated.R' 'bootstrap-layout.R' 'conditions.R'\n'map.R' 'utils.R' 'bootstrap.R' 'busy-indicators-spinners.R'\n'busy-indicators.R' 'cache-utils.R' 'deprecated.R' 'devmode.R'\n'diagnose.R' 'extended-task.R' 'fileupload.R' 'graph.R'\n'reactives.R' 'reactive-domains.R' 'history.R' 'hooks.R'\n'html-deps.R' 'image-interact-opts.R' 'image-interact.R'\n'imageutils.R' 'input-action.R' 'input-checkbox.R'\n'input-checkboxgroup.R' 'input-date.R' 'input-daterange.R'\n'input-file.R' 'input-numeric.R' 'input-password.R'\n'input-radiobuttons.R' 'input-select.R' 'input-slider.R'\n'input-submit.R' 'input-text.R' 'input-textarea.R'\n'input-utils.R' 'insert-tab.R' 'insert-ui.R' 'jqueryui.R'\n'knitr.R' 'middleware-shiny.R' 'middleware.R' 'timer.R'\n'shiny.R' 'mock-session.R' 'modal.R' 'modules.R'\n'notifications.R' 'priorityqueue.R' 'progress.R' 'react.R'\n'reexports.R' 'render-cached-plot.R' 'render-plot.R'\n'render-table.R' 'run-url.R' 'runapp.R' 'serializers.R'\n'server-input-handlers.R' 'server-resource-paths.R' 'server.R'\n'shiny-options.R' 'shiny-package.R' 'shinyapp.R' 'shinyui.R'\n'shinywrappers.R' 'showcase.R' 'snapshot.R' 'staticimports.R'\n'tar.R' 'test-export.R' 'test-server.R' 'test.R'\n'update-input.R' 'utils-lang.R' 'version_bs_date_picker.R'\n'version_ion_range_slider.R' 'version_jquery.R'\n'version_jqueryui.R' 'version_selectize.R' 'version_strftime.R'\n'viewer.R'", 791 | "RoxygenNote": "7.3.2", 792 | "Encoding": "UTF-8", 793 | "RdMacros": "lifecycle", 794 | "Config/testthat/edition": "3", 795 | "Config/Needs/check": "shinytest2", 796 | "NeedsCompilation": "no", 797 | "Packaged": "2024-07-31 17:44:44 UTC; cpsievert", 798 | "Author": "Winston Chang [aut, cre] (),\n Joe Cheng [aut],\n JJ Allaire [aut],\n Carson Sievert [aut] (),\n Barret Schloerke [aut] (),\n Yihui Xie [aut],\n Jeff Allen [aut],\n Jonathan McPherson [aut],\n Alan Dipert [aut],\n Barbara Borges [aut],\n Posit Software, PBC [cph, fnd],\n jQuery Foundation [cph] (jQuery library and jQuery UI library),\n jQuery contributors [ctb, cph] (jQuery library; authors listed in\n inst/www/shared/jquery-AUTHORS.txt),\n jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in\n inst/www/shared/jqueryui/AUTHORS.txt),\n Mark Otto [ctb] (Bootstrap library),\n Jacob Thornton [ctb] (Bootstrap library),\n Bootstrap contributors [ctb] (Bootstrap library),\n Twitter, Inc [cph] (Bootstrap library),\n Prem Nawaz Khan [ctb] (Bootstrap accessibility plugin),\n Victor Tsaran [ctb] (Bootstrap accessibility plugin),\n Dennis Lembree [ctb] (Bootstrap accessibility plugin),\n Srinivasu Chakravarthula [ctb] (Bootstrap accessibility plugin),\n Cathy O'Connor [ctb] (Bootstrap accessibility plugin),\n PayPal, Inc [cph] (Bootstrap accessibility plugin),\n Stefan Petre [ctb, cph] (Bootstrap-datepicker library),\n Andrew Rowls [ctb, cph] (Bootstrap-datepicker library),\n Brian Reavis [ctb, cph] (selectize.js library),\n Salmen Bejaoui [ctb, cph] (selectize-plugin-a11y library),\n Denis Ineshin [ctb, cph] (ion.rangeSlider library),\n Sami Samhuri [ctb, cph] (Javascript strftime library),\n SpryMedia Limited [ctb, cph] (DataTables library),\n John Fraser [ctb, cph] (showdown.js library),\n John Gruber [ctb, cph] (showdown.js library),\n Ivan Sagalaev [ctb, cph] (highlight.js library),\n R Core Team [ctb, cph] (tar implementation from R)", 799 | "Maintainer": "Winston Chang ", 800 | "Repository": "RSPM", 801 | "Date/Publication": "2024-08-01 10:50:02 UTC", 802 | "Built": "R 4.2.0; ; 2024-08-02 04:59:20 UTC; unix" 803 | } 804 | }, 805 | "sourcetools": { 806 | "Source": "CRAN", 807 | "Repository": "https://p3m.dev/cran/latest", 808 | "description": { 809 | "Package": "sourcetools", 810 | "Type": "Package", 811 | "Title": "Tools for Reading, Tokenizing and Parsing R Code", 812 | "Version": "0.1.7-1", 813 | "Author": "Kevin Ushey", 814 | "Maintainer": "Kevin Ushey ", 815 | "Description": "Tools for the reading and tokenization of R code. The\n 'sourcetools' package provides both an R and C++ interface for the tokenization\n of R code, and helpers for interacting with the tokenized representation of R\n code.", 816 | "License": "MIT + file LICENSE", 817 | "Depends": "R (>= 3.0.2)", 818 | "Suggests": "testthat", 819 | "RoxygenNote": "5.0.1", 820 | "BugReports": "https://github.com/kevinushey/sourcetools/issues", 821 | "Encoding": "UTF-8", 822 | "NeedsCompilation": "yes", 823 | "Packaged": "2023-01-31 18:03:04 UTC; kevin", 824 | "Repository": "RSPM", 825 | "Date/Publication": "2023-02-01 10:10:02 UTC", 826 | "Built": "R 4.2.0; x86_64-pc-linux-gnu; 2023-08-18 21:46:44 UTC; unix" 827 | } 828 | }, 829 | "stringi": { 830 | "Source": "CRAN", 831 | "Repository": "https://p3m.dev/cran/latest", 832 | "description": { 833 | "Package": "stringi", 834 | "Version": "1.7.8", 835 | "Date": "2022-07-11", 836 | "Title": "Fast and Portable Character String Processing Facilities", 837 | "Description": "A collection of character string/text/natural language\n processing tools for pattern searching (e.g., with 'Java'-like regular\n expressions or the 'Unicode' collation algorithm), random string generation,\n case mapping, string transliteration, concatenation, sorting, padding,\n wrapping, Unicode normalisation, date-time formatting and parsing,\n and many more. They are fast, consistent, convenient, and -\n thanks to 'ICU' (International Components for Unicode) -\n portable across all locales and platforms.\n Documentation about 'stringi' is provided\n via its website at and\n the paper by Gagolewski (2022, ).", 838 | "URL": "https://stringi.gagolewski.com/,\nhttps://github.com/gagolews/stringi, https://icu.unicode.org/", 839 | "BugReports": "https://github.com/gagolews/stringi/issues", 840 | "SystemRequirements": "C++11, ICU4C (>= 55, optional)", 841 | "Type": "Package", 842 | "Depends": "R (>= 3.1)", 843 | "Imports": "tools, utils, stats", 844 | "Biarch": "TRUE", 845 | "License": "file LICENSE", 846 | "Author": "Marek Gagolewski [aut, cre, cph] (),\n Bartek Tartanus [ctb], and others (stringi source code);\n Unicode, Inc. and others (ICU4C source code, Unicode Character Database)", 847 | "Maintainer": "Marek Gagolewski ", 848 | "RoxygenNote": "7.1.2", 849 | "Encoding": "UTF-8", 850 | "NeedsCompilation": "yes", 851 | "Packaged": "2022-07-11 01:59:34 UTC; gagolews", 852 | "Repository": "CRAN", 853 | "Date/Publication": "2022-07-11 08:10:02 UTC", 854 | "Built": "R 4.2.0; x86_64-apple-darwin17.0; 2022-07-12 11:38:55 UTC; unix" 855 | } 856 | }, 857 | "stringr": { 858 | "Source": "CRAN", 859 | "Repository": "https://p3m.dev/cran/latest", 860 | "description": { 861 | "Package": "stringr", 862 | "Title": "Simple, Consistent Wrappers for Common String Operations", 863 | "Version": "1.4.0", 864 | "Authors@R": "\n c(person(given = \"Hadley\",\n family = \"Wickham\",\n role = c(\"aut\", \"cre\", \"cph\"),\n email = \"hadley@rstudio.com\"),\n person(given = \"RStudio\",\n role = c(\"cph\", \"fnd\")))", 865 | "Description": "A consistent, simple and easy to use set of\n wrappers around the fantastic 'stringi' package. All function and\n argument names (and positions) are consistent, all functions deal with\n \"NA\"'s and zero length vectors in the same way, and the output from\n one function is easy to feed into the input of another.", 866 | "License": "GPL-2 | file LICENSE", 867 | "URL": "http://stringr.tidyverse.org, https://github.com/tidyverse/stringr", 868 | "BugReports": "https://github.com/tidyverse/stringr/issues", 869 | "Depends": "R (>= 3.1)", 870 | "Imports": "glue (>= 1.2.0), magrittr, stringi (>= 1.1.7)", 871 | "Suggests": "covr, htmltools, htmlwidgets, knitr, rmarkdown, testthat", 872 | "VignetteBuilder": "knitr", 873 | "Encoding": "UTF-8", 874 | "LazyData": "true", 875 | "RoxygenNote": "6.1.1", 876 | "NeedsCompilation": "no", 877 | "Packaged": "2019-02-09 16:03:19 UTC; hadley", 878 | "Author": "Hadley Wickham [aut, cre, cph],\n RStudio [cph, fnd]", 879 | "Maintainer": "Hadley Wickham ", 880 | "Repository": "CRAN", 881 | "Date/Publication": "2019-02-10 03:40:03 UTC", 882 | "Built": "R 4.2.0; ; 2022-04-26 08:55:35 UTC; unix" 883 | } 884 | }, 885 | "withr": { 886 | "Source": "CRAN", 887 | "Repository": "https://p3m.dev/cran/latest", 888 | "description": { 889 | "Package": "withr", 890 | "Title": "Run Code 'With' Temporarily Modified Global State", 891 | "Version": "3.0.1", 892 | "Authors@R": "c(\n person(\"Jim\", \"Hester\", role = \"aut\"),\n person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Kirill\", \"Müller\", , \"krlmlr+r@mailbox.org\", role = \"aut\"),\n person(\"Kevin\", \"Ushey\", , \"kevinushey@gmail.com\", role = \"aut\"),\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"),\n person(\"Winston\", \"Chang\", role = \"aut\"),\n person(\"Jennifer\", \"Bryan\", role = \"ctb\"),\n person(\"Richard\", \"Cotton\", role = \"ctb\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", 893 | "Description": "A set of functions to run code 'with' safely and temporarily\n modified global state. Many of these functions were originally a part\n of the 'devtools' package, this provides a simple package with limited\n dependencies to provide access to these functions.", 894 | "License": "MIT + file LICENSE", 895 | "URL": "https://withr.r-lib.org, https://github.com/r-lib/withr#readme", 896 | "BugReports": "https://github.com/r-lib/withr/issues", 897 | "Depends": "R (>= 3.6.0)", 898 | "Imports": "graphics, grDevices", 899 | "Suggests": "callr, DBI, knitr, methods, rlang, rmarkdown (>= 2.12),\nRSQLite, testthat (>= 3.0.0)", 900 | "VignetteBuilder": "knitr", 901 | "Config/Needs/website": "tidyverse/tidytemplate", 902 | "Config/testthat/edition": "3", 903 | "Encoding": "UTF-8", 904 | "RoxygenNote": "7.3.2", 905 | "Collate": "'aaa.R' 'collate.R' 'connection.R' 'db.R' 'defer-exit.R'\n'standalone-defer.R' 'defer.R' 'devices.R' 'local_.R' 'with_.R'\n'dir.R' 'env.R' 'file.R' 'language.R' 'libpaths.R' 'locale.R'\n'makevars.R' 'namespace.R' 'options.R' 'par.R' 'path.R' 'rng.R'\n'seed.R' 'wrap.R' 'sink.R' 'tempfile.R' 'timezone.R'\n'torture.R' 'utils.R' 'with.R'", 906 | "NeedsCompilation": "no", 907 | "Packaged": "2024-07-31 08:24:58 UTC; lionel", 908 | "Author": "Jim Hester [aut],\n Lionel Henry [aut, cre],\n Kirill Müller [aut],\n Kevin Ushey [aut],\n Hadley Wickham [aut],\n Winston Chang [aut],\n Jennifer Bryan [ctb],\n Richard Cotton [ctb],\n Posit Software, PBC [cph, fnd]", 909 | "Maintainer": "Lionel Henry ", 910 | "Repository": "RSPM", 911 | "Date/Publication": "2024-07-31 11:30:02 UTC", 912 | "Built": "R 4.2.0; ; 2024-08-01 04:31:37 UTC; unix" 913 | } 914 | }, 915 | "xtable": { 916 | "Source": "CRAN", 917 | "Repository": "https://p3m.dev/cran/latest", 918 | "description": { 919 | "Package": "xtable", 920 | "Version": "1.8-4", 921 | "Date": "2019-04-08", 922 | "Title": "Export Tables to LaTeX or HTML", 923 | "Authors@R": "c(person(\"David B.\", \"Dahl\", role=\"aut\"),\n person(\"David\", \"Scott\", role=c(\"aut\",\"cre\"),\n email=\"d.scott@auckland.ac.nz\"),\n person(\"Charles\", \"Roosen\", role=\"aut\"),\n person(\"Arni\", \"Magnusson\", role=\"aut\"),\n person(\"Jonathan\", \"Swinton\", role=\"aut\"),\n person(\"Ajay\", \"Shah\", role=\"ctb\"),\n person(\"Arne\", \"Henningsen\", role=\"ctb\"),\n person(\"Benno\", \"Puetz\", role=\"ctb\"),\n person(\"Bernhard\", \"Pfaff\", role=\"ctb\"),\n person(\"Claudio\", \"Agostinelli\", role=\"ctb\"),\n person(\"Claudius\", \"Loehnert\", role=\"ctb\"),\n person(\"David\", \"Mitchell\", role=\"ctb\"),\n person(\"David\", \"Whiting\", role=\"ctb\"),\n person(\"Fernando da\", \"Rosa\", role=\"ctb\"),\n person(\"Guido\", \"Gay\", role=\"ctb\"),\n person(\"Guido\", \"Schulz\", role=\"ctb\"),\n person(\"Ian\", \"Fellows\", role=\"ctb\"),\n person(\"Jeff\", \"Laake\", role=\"ctb\"),\n person(\"John\", \"Walker\", role=\"ctb\"),\n person(\"Jun\", \"Yan\", role=\"ctb\"),\n person(\"Liviu\", \"Andronic\", role=\"ctb\"),\n person(\"Markus\", \"Loecher\", role=\"ctb\"),\n person(\"Martin\", \"Gubri\", role=\"ctb\"),\n person(\"Matthieu\", \"Stigler\", role=\"ctb\"),\n person(\"Robert\", \"Castelo\", role=\"ctb\"),\n person(\"Seth\", \"Falcon\", role=\"ctb\"),\n person(\"Stefan\", \"Edwards\", role=\"ctb\"),\n person(\"Sven\", \"Garbade\", role=\"ctb\"),\n person(\"Uwe\", \"Ligges\", role=\"ctb\"))", 924 | "Maintainer": "David Scott ", 925 | "Imports": "stats, utils", 926 | "Suggests": "knitr, plm, zoo, survival", 927 | "VignetteBuilder": "knitr", 928 | "Description": "Coerce data to LaTeX and HTML tables.", 929 | "URL": "http://xtable.r-forge.r-project.org/", 930 | "Depends": "R (>= 2.10.0)", 931 | "License": "GPL (>= 2)", 932 | "Repository": "CRAN", 933 | "NeedsCompilation": "no", 934 | "Packaged": "2019-04-21 10:56:51 UTC; dsco036", 935 | "Author": "David B. Dahl [aut],\n David Scott [aut, cre],\n Charles Roosen [aut],\n Arni Magnusson [aut],\n Jonathan Swinton [aut],\n Ajay Shah [ctb],\n Arne Henningsen [ctb],\n Benno Puetz [ctb],\n Bernhard Pfaff [ctb],\n Claudio Agostinelli [ctb],\n Claudius Loehnert [ctb],\n David Mitchell [ctb],\n David Whiting [ctb],\n Fernando da Rosa [ctb],\n Guido Gay [ctb],\n Guido Schulz [ctb],\n Ian Fellows [ctb],\n Jeff Laake [ctb],\n John Walker [ctb],\n Jun Yan [ctb],\n Liviu Andronic [ctb],\n Markus Loecher [ctb],\n Martin Gubri [ctb],\n Matthieu Stigler [ctb],\n Robert Castelo [ctb],\n Seth Falcon [ctb],\n Stefan Edwards [ctb],\n Sven Garbade [ctb],\n Uwe Ligges [ctb]", 936 | "Date/Publication": "2019-04-21 12:20:03 UTC", 937 | "Built": "R 4.2.0; ; 2022-04-25 03:02:14 UTC; unix" 938 | } 939 | } 940 | }, 941 | "files": { 942 | ".Rprofile": { 943 | "checksum": "47f3f4c78616e7d1c2a42533e3fdb089" 944 | }, 945 | "app.R": { 946 | "checksum": "2c779d88737df127522829c575e20329" 947 | }, 948 | "README.md": { 949 | "checksum": "b56a940efcf4d0c88da8f2fe4fa1a913" 950 | }, 951 | "renv.lock": { 952 | "checksum": "dc18f0fb747128a153af4efafe692650" 953 | } 954 | }, 955 | "users": null 956 | } 957 | --------------------------------------------------------------------------------