use crate::deno_runner::common_runner::run_deno_script_with_params;
use crate::model::{CodeScriptExecutionResult, LanguageScript, RunCode};
use anyhow::Result;
#[derive(Default)]
pub struct JsRunner;
impl RunCode for JsRunner {
async fn run_with_params(
&self,
code: &str,
params: Option<serde_json::Value>,
timeout_seconds: Option<u64>,
) -> Result<CodeScriptExecutionResult> {
run_deno_script_with_params(
code,
params,
timeout_seconds,
LanguageScript::Js,
|c, show_logs| self.prepare_js_code(c, show_logs),
)
.await
}
}
impl JsRunner {
fn prepare_js_code(&self, code: &str, show_logs: bool) -> String {
let is_esm = {
let has_import_export = code.contains("import ")
|| code.contains("export ")
|| code.contains("import{")
|| code.contains("export{");
let has_dynamic_import = code.contains("import(");
let has_require = code.contains("require(");
(has_import_export || has_dynamic_import) && !has_require
};
let template = if is_esm {
include_str!("../templates/js_template_es.js")
} else {
include_str!("../templates/js_template_normal.js")
};
template
.replace("{{USER_CODE}}", code)
.replace("{{SHOW_LOGS}}", &show_logs.to_string())
}
}