From 4dc40f4e6471a1e25c21cba830db92affe530efa Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Fri, 12 May 2023 13:14:07 +0200 Subject: [PATCH] fix(backend): handle Date type --- backend/parsers/windmill-parser-ts/src/lib.rs | 1 + backend/windmill-api/src/lib.rs | 1 - backend/windmill-worker/src/worker.rs | 41 ++++++++++++------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/backend/parsers/windmill-parser-ts/src/lib.rs b/backend/parsers/windmill-parser-ts/src/lib.rs index 16bc131172..e643ab32d5 100644 --- a/backend/parsers/windmill-parser-ts/src/lib.rs +++ b/backend/parsers/windmill-parser-ts/src/lib.rs @@ -255,6 +255,7 @@ fn tstype_to_typ(ts_type: &TsType) -> (Typ, bool) { ), false, ), + "Date" => (Typ::Datetime, false), "Base64" => (Typ::Bytes, false), "Email" => (Typ::Email, false), "Sql" => (Typ::Sql, false), diff --git a/backend/windmill-api/src/lib.rs b/backend/windmill-api/src/lib.rs index 0f058b9ff7..0a91e21f9b 100644 --- a/backend/windmill-api/src/lib.rs +++ b/backend/windmill-api/src/lib.rs @@ -87,7 +87,6 @@ pub async fn run_server( addr: SocketAddr, mut rx: tokio::sync::broadcast::Receiver<()>, ) -> anyhow::Result<()> { - let x = &OAUTH_CLIENTS.logins; let user_db = UserDB::new(db.clone()); let auth_cache = Arc::new(users::AuthCache::new( diff --git a/backend/windmill-worker/src/worker.rs b/backend/windmill-worker/src/worker.rs index cf7552debf..3d40ae9cbe 100644 --- a/backend/windmill-worker/src/worker.rs +++ b/backend/windmill-worker/src/worker.rs @@ -12,6 +12,7 @@ use itertools::Itertools; use once_cell::sync::OnceCell; use sqlx::{Pool, Postgres}; use windmill_api_client::Client; +use windmill_parser::Typ; use std::{ borrow::Borrow, collections::HashMap, io, os::unix::process::ExitStatusExt, panic, process::Stdio, time::{Duration}, @@ -1415,26 +1416,36 @@ async fn handle_deno_job( let write_wrapper_f = async { // let mut start = Instant::now(); - let spread = windmill_parser_ts::parse_deno_signature(inner_content, true)?.args.into_iter().map(|x| x.name).join(","); + let args = windmill_parser_ts::parse_deno_signature(inner_content, true)?.args; + let dates = args.iter().enumerate().filter_map(|(i, x)| if matches!(x.typ, Typ::Datetime) { + Some(i) + } else { + None + }).map(|x| { + return format!("args[{x}] = new Date(args[{x}])") + }).join("\n"); + + let spread = args.into_iter().map(|x| x.name).join(","); // logs.push_str(format!("infer args: {:?}\n", start.elapsed().as_micros()).as_str()); let wrapper_content: String = format!( r#" - import {{ main }} from "./main.ts"; +import {{ main }} from "./main.ts"; - const args = await Deno.readTextFile("args.json") - .then(JSON.parse) - .then(({{ {spread} }}) => [ {spread} ]) +const args = await Deno.readTextFile("args.json") + .then(JSON.parse) + .then(({{ {spread} }}) => [ {spread} ]) - async function run() {{ - let res: any = await main(...args); - const res_json = JSON.stringify(res ?? null, (key, value) => typeof value === 'undefined' ? null : value); - await Deno.writeTextFile("result.json", res_json); - Deno.exit(0); - }} - run().catch(async (e) => {{ - await Deno.writeTextFile("result.json", JSON.stringify({{ message: e.message, name: e.name, stack: e.stack }})); - Deno.exit(1); - }}); +{dates} +async function run() {{ + let res: any = await main(...args); + const res_json = JSON.stringify(res ?? null, (key, value) => typeof value === 'undefined' ? null : value); + await Deno.writeTextFile("result.json", res_json); + Deno.exit(0); +}} +run().catch(async (e) => {{ + await Deno.writeTextFile("result.json", JSON.stringify({{ message: e.message, name: e.name, stack: e.stack }})); + Deno.exit(1); +}}); "#, ); write_file(job_dir, "wrapper.ts", &wrapper_content).await?;