diff --git a/backend/parsers/windmill-parser-graphql/src/lib.rs b/backend/parsers/windmill-parser-graphql/src/lib.rs index 358246038c..2ab6872762 100644 --- a/backend/parsers/windmill-parser-graphql/src/lib.rs +++ b/backend/parsers/windmill-parser-graphql/src/lib.rs @@ -17,7 +17,7 @@ pub fn parse_graphql_sig(code: &str) -> anyhow::Result { } lazy_static::lazy_static! { - static ref RE_ARG_GRAPHQL: Regex = Regex::new(r#"\$(\w+)\s*:\s*(?:(\w+)!?|\[(\w+)!?\])!?\s*(?:=\s*(\w+)\s*)?"#).unwrap(); + static ref RE_ARG_GRAPHQL: Regex = Regex::new(r#"\$(\w+)\s*:\s*(?:(\w+)(!)?|\[(\w+)!?\])(!)?\s*(?:=\s*"?(\w+)"?\s*)?"#).unwrap(); } fn parse_graphql_file(code: &str) -> anyhow::Result>> { @@ -28,16 +28,17 @@ fn parse_graphql_file(code: &str) -> anyhow::Result>> { let mut typ = cap.get(2).map(|x| x.as_str().to_string()); let parsed_typ = if typ.is_none() { - let inner_typ = cap.get(3).map(|x| x.as_str().to_string()); + let inner_typ = cap.get(4).map(|x| x.as_str().to_string()); typ = inner_typ.clone().map(|x| format!("[{}]", x.to_string())); Typ::List(Box::new(parse_graphql_typ(inner_typ.unwrap().as_str()))) } else { parse_graphql_typ(typ.clone().unwrap().as_str()) }; - let default = cap.get(4).map(|x| x.as_str().to_string()); - - let has_default = default.is_some(); + let (has_default, default) = match cap.get(6).map(|x| x.as_str().to_string()) { + Some(x) => (true, Some(x)), // default value => optional + None => (cap.get(3).is_none() && cap.get(5).is_none(), None), // optional if no ! + }; let parsed_default = default.and_then(|x| match parsed_typ { Typ::Int => x.parse::().ok().map(|x| json!(x)), @@ -74,7 +75,7 @@ mod tests { #[test] fn test_parse_graphql_sig() -> anyhow::Result<()> { let code = r#" -query($s: String, $arr: [String]) { +query($i: Int, $arr: [String]!, $wahoo: String = "wahoo") { books { title } @@ -88,11 +89,11 @@ query($s: String, $arr: [String]) { star_kwargs: false, args: vec![ Arg { - otyp: Some("String".to_string()), - name: "s".to_string(), - typ: Typ::Str(None), + otyp: Some("Int".to_string()), + name: "i".to_string(), + typ: Typ::Int, default: None, - has_default: false + has_default: true }, Arg { otyp: Some("[String]".to_string()), @@ -101,6 +102,13 @@ query($s: String, $arr: [String]) { default: None, has_default: false }, + Arg { + otyp: Some("String".to_string()), + name: "wahoo".to_string(), + typ: Typ::Str(None), + default: Some(json!("wahoo")), + has_default: true + } ], no_main_func: None } diff --git a/backend/parsers/windmill-parser-wasm/pkg/package.json b/backend/parsers/windmill-parser-wasm/pkg/package.json index 33f582bc73..19fe08828b 100644 --- a/backend/parsers/windmill-parser-wasm/pkg/package.json +++ b/backend/parsers/windmill-parser-wasm/pkg/package.json @@ -3,7 +3,7 @@ "collaborators": [ "Ruben Fiszel " ], - "version": "1.353.0", + "version": "1.355.4", "files": [ "windmill_parser_wasm_bg.wasm", "windmill_parser_wasm.js", diff --git a/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.js b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.js index dadb877f16..4778f33186 100644 --- a/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.js +++ b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.js @@ -6,20 +6,6 @@ heap.push(undefined, null, true, false); function getObject(idx) { return heap[idx]; } -let heap_next = heap.length; - -function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; -} - -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} - let WASM_VECTOR_LEN = 0; let cachedUint8Memory0 = null; @@ -98,13 +84,27 @@ function getInt32Memory0() { return cachedInt32Memory0; } -let cachedFloat64Memory0 = null; +let heap_next = heap.length; -function getFloat64Memory0() { - if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) { - cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer); - } - return cachedFloat64Memory0; +function dropObject(idx) { + if (idx < 132) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + +if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); } function addHeapObject(obj) { @@ -116,13 +116,13 @@ function addHeapObject(obj) { return idx; } -const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); +let cachedFloat64Memory0 = null; -if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; - -function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); +function getFloat64Memory0() { + if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) { + cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer); + } + return cachedFloat64Memory0; } let cachedBigInt64Memory0 = null; @@ -585,13 +585,6 @@ async function __wbg_load(module, imports) { function __wbg_get_imports() { const imports = {}; imports.wbg = {}; - imports.wbg.__wbg_eval_42bb47208302a41e = function(arg0, arg1) { - const ret = eval(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_object_drop_ref = function(arg0) { - takeObject(arg0); - }; imports.wbg.__wbindgen_string_get = function(arg0, arg1) { const obj = getObject(arg1); const ret = typeof(obj) === 'string' ? obj : undefined; @@ -600,6 +593,13 @@ function __wbg_get_imports() { getInt32Memory0()[arg0 / 4 + 1] = len1; getInt32Memory0()[arg0 / 4 + 0] = ptr1; }; + imports.wbg.__wbindgen_object_drop_ref = function(arg0) { + takeObject(arg0); + }; + imports.wbg.__wbindgen_error_new = function(arg0, arg1) { + const ret = new Error(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }; imports.wbg.__wbindgen_boolean_get = function(arg0) { const v = getObject(arg0); const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2; @@ -636,8 +636,8 @@ function __wbg_get_imports() { const ret = BigInt.asUintN(64, arg0); return addHeapObject(ret); }; - imports.wbg.__wbindgen_error_new = function(arg0, arg1) { - const ret = new Error(getStringFromWasm0(arg0, arg1)); + imports.wbg.__wbg_eval_64ce1594989e82f8 = function(arg0, arg1) { + const ret = eval(getStringFromWasm0(arg0, arg1)); return addHeapObject(ret); }; imports.wbg.__wbindgen_jsval_loose_eq = function(arg0, arg1) { diff --git a/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm index 38075642c6..bfe332feeb 100644 Binary files a/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm and b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm differ diff --git a/backend/windmill-worker/src/graphql_executor.rs b/backend/windmill-worker/src/graphql_executor.rs index 4aae597a4b..db1d47920f 100644 --- a/backend/windmill-worker/src/graphql_executor.rs +++ b/backend/windmill-worker/src/graphql_executor.rs @@ -5,6 +5,7 @@ use futures::TryStreamExt; use serde_json::{json, value::RawValue}; use sqlx::types::Json; use windmill_common::jobs::QueuedJob; +use windmill_common::worker::to_raw_value; use windmill_common::{error::Error, worker::CLOUD_HOSTED}; use windmill_parser_graphql::parse_graphql_sig; use windmill_queue::{CanceledBy, HTTP_CLIENT}; @@ -64,13 +65,18 @@ pub async fn do_graphql( .args; if let Some(job_args) = job_args { for arg in &sig { - variables.insert( - arg.name.clone(), - job_args - .get(&arg.name) - .map(|x| x.to_owned()) - .unwrap_or_default(), - ); + match job_args.get(&arg.name) { + Some(x) => { + variables.insert(arg.name.clone(), x.to_owned()); + } + None if arg.default.is_some() => { + variables.insert( + arg.name.clone(), + to_raw_value(arg.default.as_ref().unwrap()), + ); + } + _ => {} + } } } diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 92ebced625..feebe236b9 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -52,7 +52,7 @@ "vscode-languageclient": "~9.0.1", "vscode-uri": "~3.0.8", "vscode-ws-jsonrpc": "~3.1.0", - "windmill-parser-wasm": "^1.353.0", + "windmill-parser-wasm": "^1.355.4", "windmill-sql-datatype-parser-wasm": "^1.318.0", "y-monaco": "^0.1.4", "y-websocket": "^1.5.0", @@ -10261,9 +10261,9 @@ } }, "node_modules/windmill-parser-wasm": { - "version": "1.353.0", - "resolved": "https://registry.npmjs.org/windmill-parser-wasm/-/windmill-parser-wasm-1.353.0.tgz", - "integrity": "sha512-WjsE9BLDmtX0CCC3JrwRFgnqMo6mxiko3DRUJecs3I1vWRyq6dvspk+rn4e3Kdr8Ba4wRfu4ZZw2HmCUOkH7tQ==" + "version": "1.355.4", + "resolved": "https://registry.npmjs.org/windmill-parser-wasm/-/windmill-parser-wasm-1.355.4.tgz", + "integrity": "sha512-7Usvb55qAULgGg5ULoMm4iWviAl0fQMNxoDQXx4lrPASpXSSV0BS9anP2jF/gse5HQ1usKj63TNtCFYedMThHg==" }, "node_modules/windmill-sql-datatype-parser-wasm": { "version": "1.318.0", diff --git a/frontend/package.json b/frontend/package.json index 220ebfa1bc..ff639b5948 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -132,7 +132,7 @@ "vscode-languageclient": "~9.0.1", "vscode-uri": "~3.0.8", "vscode-ws-jsonrpc": "~3.1.0", - "windmill-parser-wasm": "^1.353.0", + "windmill-parser-wasm": "^1.355.4", "windmill-sql-datatype-parser-wasm": "^1.318.0", "y-monaco": "^0.1.4", "y-websocket": "^1.5.0",