Adjust ts_compile to also call ts_deploy to make compilation easier
This commit is contained in:
parent
d70a70cbe1
commit
2e4e00c5d6
21
R/compile.R
21
R/compile.R
@ -1,12 +1,15 @@
|
|||||||
#' Compile R functions to TypeScript schemas
|
#' Compile R functions
|
||||||
|
#'
|
||||||
|
#' Generates TypeScript schema for the given R function or file path. If a path, the R app is also generated.
|
||||||
|
#'
|
||||||
#' @param f A function or file path
|
#' @param f A function or file path
|
||||||
#' @param name The name of the function
|
#' @param name The name of the function
|
||||||
#' @param ... Additional arguments
|
#' @param ... Additional arguments (passed to ts_deploy)
|
||||||
#' @param file The file path to write the TypeScript schema (optional). If `""`, the output is printed to the standard output console (see `cat`).
|
#' @param filename The base file path to write the TypeScript schema and R app to (optional, uses `[path of f].rserve` by default). `.R` and `.ts` file extensions are appended automatically. If `""`, the output is printed to the standard output console (see `cat`).
|
||||||
#' @return Character vector of TypeScript schema, or NULL if writing to file
|
#' @return Character vector of TypeScript schema, or NULL if writing to file
|
||||||
#' @md
|
#' @md
|
||||||
#' @export
|
#' @export
|
||||||
ts_compile <- function(f, ..., name, file) {
|
ts_compile <- function(f, ..., name, filename) {
|
||||||
o <- UseMethod("ts_compile")
|
o <- UseMethod("ts_compile")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,7 +30,8 @@ ts_compile.ts_function <- function(f, ..., name = deparse(substitute(f))) {
|
|||||||
#' @export
|
#' @export
|
||||||
ts_compile.character <- function(
|
ts_compile.character <- function(
|
||||||
f,
|
f,
|
||||||
file = sprintf("%s.rserve.ts", tools::file_path_sans_ext(f))) {
|
...,
|
||||||
|
filename = sprintf("%s.rserve", tools::file_path_sans_ext(f))) {
|
||||||
if (length(f) > 1) {
|
if (length(f) > 1) {
|
||||||
return(sapply(f, ts_compile))
|
return(sapply(f, ts_compile))
|
||||||
}
|
}
|
||||||
@ -39,7 +43,7 @@ ts_compile.character <- function(
|
|||||||
e <- new.env()
|
e <- new.env()
|
||||||
source(f, local = e)
|
source(f, local = e)
|
||||||
|
|
||||||
x <- sapply(ls(e), \(x) ts_compile(e[[x]], file = file, name = x))
|
x <- sapply(ls(e), \(x) ts_compile(e[[x]], filename = "", name = x))
|
||||||
|
|
||||||
src <- c(
|
src <- c(
|
||||||
"import { Robj } from 'rserve-ts';",
|
"import { Robj } from 'rserve-ts';",
|
||||||
@ -50,7 +54,10 @@ ts_compile.character <- function(
|
|||||||
sprintf("export default {\n %s\n};", paste(ls(e), collapse = ",\n "))
|
sprintf("export default {\n %s\n};", paste(ls(e), collapse = ",\n "))
|
||||||
)
|
)
|
||||||
|
|
||||||
cat(src, file = file, sep = "\n")
|
cat(src, file = sprintf("%s.ts", filename), sep = "\n")
|
||||||
|
|
||||||
|
# R file
|
||||||
|
ts_deploy(f, file = sprintf("%s.R", filename), silent = TRUE, ...)
|
||||||
|
|
||||||
invisible()
|
invisible()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
#' @param port The port to deploy the app on
|
#' @param port The port to deploy the app on
|
||||||
#' @param run Whether to run the deployment script,
|
#' @param run Whether to run the deployment script,
|
||||||
#' takes values "no", "here", "background"
|
#' takes values "no", "here", "background"
|
||||||
|
#' @param silent Whether to print the deployment script
|
||||||
#' @return NULL, called to open an Rserve instance
|
#' @return NULL, called to open an Rserve instance
|
||||||
#' @export
|
#' @export
|
||||||
#' @md
|
#' @md
|
||||||
@ -14,7 +15,8 @@ ts_deploy <- function(f,
|
|||||||
file = sprintf("%s.rserve.R", tools::file_path_sans_ext(f)),
|
file = sprintf("%s.rserve.R", tools::file_path_sans_ext(f)),
|
||||||
init = NULL,
|
init = NULL,
|
||||||
port = 6311,
|
port = 6311,
|
||||||
run = c("no", "here", "background")) {
|
run = c("no", "here", "background"),
|
||||||
|
silent = FALSE) {
|
||||||
if (length(f) != 1) stop("Expected a single path")
|
if (length(f) != 1) stop("Expected a single path")
|
||||||
if (!file.exists(f)) stop("File not found")
|
if (!file.exists(f)) stop("File not found")
|
||||||
|
|
||||||
@ -57,8 +59,10 @@ ts_deploy <- function(f,
|
|||||||
run <- match.arg(run)
|
run <- match.arg(run)
|
||||||
switch(run,
|
switch(run,
|
||||||
"no" = {
|
"no" = {
|
||||||
|
if (!silent) {
|
||||||
cat("Run the following command to deploy the app:\n")
|
cat("Run the following command to deploy the app:\n")
|
||||||
cat(sprintf("Rscript %s", file), "\n")
|
cat(sprintf("Rscript %s", file), "\n")
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"here" = source(file),
|
"here" = source(file),
|
||||||
"background" = system(sprintf("Rscript %s", file))
|
"background" = system(sprintf("Rscript %s", file))
|
||||||
|
|||||||
@ -8,39 +8,10 @@ test_that("anonomous functions", {
|
|||||||
expect_equal(add_c, "const add = Robj.ocap([z.number(), z.number()], Robj.numeric(1));")
|
expect_equal(add_c, "const add = Robj.ocap([z.number(), z.number()], Robj.numeric(1));")
|
||||||
})
|
})
|
||||||
|
|
||||||
# test_that("Complex functions", {
|
|
||||||
# get_sample <- ts_function(
|
|
||||||
# function(n = ts_numeric(1)) {
|
|
||||||
# sample(values, n)
|
|
||||||
# },
|
|
||||||
# result = ts_numeric()
|
|
||||||
# )
|
|
||||||
|
|
||||||
# sampler <- ts_function(
|
|
||||||
# function(values = ts_numeric()) {
|
|
||||||
# list(
|
|
||||||
# get = get_sample$copy(),
|
|
||||||
# set = ts_function(
|
|
||||||
# function(value = ts_numeric()) {
|
|
||||||
# values <<- value
|
|
||||||
# }
|
|
||||||
# )
|
|
||||||
# )
|
|
||||||
# },
|
|
||||||
# result = ts_list(
|
|
||||||
# get = get_sample,
|
|
||||||
# set = ts_function(NULL, value = ts_numeric())
|
|
||||||
# )
|
|
||||||
# )
|
|
||||||
|
|
||||||
# sampler_c <- ts_compile(sampler)
|
|
||||||
# s <- sampler_c(1:10)
|
|
||||||
# expect_equal()
|
|
||||||
# })
|
|
||||||
|
|
||||||
test_that("Compile files", {
|
test_that("Compile files", {
|
||||||
f <- tempfile(fileext = ".rserve.ts")
|
f <- tempfile(fileext = ".rserve.ts")
|
||||||
on.exit(unlink(f))
|
on.exit(unlink(f))
|
||||||
res <- ts_compile("sampler/app.R", file = f)
|
res <- ts_compile("sampler/app.R", filename = tools::file_path_sans_ext(f))
|
||||||
expect_true(file.exists(f))
|
expect_true(file.exists(f))
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user