From 9adfc2f9d7408d076ac2d37673c85f728a97eda8 Mon Sep 17 00:00:00 2001 From: hugocasa Date: Fri, 14 Nov 2025 18:28:54 +0100 Subject: [PATCH] feat: add support for switch and attributes in pwsh params (#7143) --- .../parsers/windmill-parser-bash/src/lib.rs | 621 +++++++++++++++--- backend/windmill-worker/src/pwsh_executor.rs | 44 +- cli/wasm/regex/windmill_parser_wasm.d.ts | 16 +- cli/wasm/regex/windmill_parser_wasm.js | 162 ++--- cli/wasm/regex/windmill_parser_wasm_bg.wasm | Bin 351019 -> 355438 bytes frontend/package-lock.json | 8 +- frontend/package.json | 2 +- 7 files changed, 645 insertions(+), 208 deletions(-) diff --git a/backend/parsers/windmill-parser-bash/src/lib.rs b/backend/parsers/windmill-parser-bash/src/lib.rs index 5bfe6b20c5..f1652ed5d6 100644 --- a/backend/parsers/windmill-parser-bash/src/lib.rs +++ b/backend/parsers/windmill-parser-bash/src/lib.rs @@ -46,8 +46,6 @@ pub fn parse_powershell_sig(code: &str) -> anyhow::Result { lazy_static::lazy_static! { static ref RE_BASH: Regex = Regex::new(r#"(?m)^(\w+)="\$(?:(\d+)|\{(\d+)\}|\{(\d+):-(.*)\})"(?:[\t ]*)?(?:#.*)?\r?$"#).unwrap(); - - static ref RE_POWERSHELL_ARGS: Regex = Regex::new(r#"(?:\[([\w\[\]]+)\])?\$(\w+)[\t ]*(?:=[\t ]*(?:(?:(?:"|')([^"\n\r\$]*)(?:"|'))|([\d.]+)))?\r?"#).unwrap(); } fn parse_bash_file(code: &str) -> anyhow::Result>> { @@ -98,10 +96,12 @@ pub fn extract_powershell_param_block(code: &str, include_keyword: bool) -> Opti let lower_code = code.to_lowercase(); let param_start = lower_code.find("param")?; - // Verify that only comments and whitespace appear before "param" + // Verify that only comments, whitespace, and [CmdletBinding()] appear before "param" let before_param = &code[..param_start]; let mut chars = before_param.chars().peekable(); let mut in_block_comment = false; + let mut in_attribute_bracket = false; + let mut bracket_depth = 0; while let Some(ch) = chars.next() { if in_block_comment { @@ -110,6 +110,19 @@ pub fn extract_powershell_param_block(code: &str, include_keyword: bool) -> Opti chars.next(); // consume '>' in_block_comment = false; } + } else if in_attribute_bracket { + // Track bracket depth to handle nested brackets/parens in attributes + match ch { + '[' => bracket_depth += 1, + ']' => { + bracket_depth -= 1; + if bracket_depth == 0 { + in_attribute_bracket = false; + } + } + // Allow parentheses inside attributes (e.g., [CmdletBinding()]) + _ => {} + } } else { match ch { // Start of block comment: <# @@ -126,6 +139,11 @@ pub fn extract_powershell_param_block(code: &str, include_keyword: bool) -> Opti chars.next(); } } + // Start of attribute bracket (e.g., [CmdletBinding()]) + '[' => { + in_attribute_bracket = true; + bracket_depth = 1; + } // Whitespace is allowed c if c.is_whitespace() => {} // Any other character means there's code before param @@ -134,8 +152,8 @@ pub fn extract_powershell_param_block(code: &str, include_keyword: bool) -> Opti } } - // If we're still in a block comment at the end, it's unclosed - invalid - if in_block_comment { + // If we're still in a block comment or unclosed attribute bracket, it's invalid + if in_block_comment || in_attribute_bracket { return None; } @@ -214,108 +232,269 @@ pub fn extract_powershell_param_block(code: &str, include_keyword: bool) -> Opti None } -enum ParserState { - Normal, - InSingleQuote, - InDoubleQuote, -} -fn split_pwsh_args(code: &str) -> Vec<&str> { - let mut chars = code.char_indices().peekable(); - let mut state = ParserState::Normal; - let mut splits = vec![]; - let mut last_idx = 0; - while let Some((idx, char)) = chars.next() { - match (&state, char) { - (ParserState::Normal, '\'') => { - state = ParserState::InSingleQuote; - } - (ParserState::Normal, '"') => { - state = ParserState::InDoubleQuote; - } - (ParserState::InSingleQuote, '\'') => { - state = ParserState::Normal; - } - (ParserState::InDoubleQuote, '"') => { - state = ParserState::Normal; - } - (ParserState::Normal, ',') => { - splits.push(&code[last_idx..idx]); - last_idx = idx + 1; // skip the comma - } - _ => {} - } - } - - if last_idx < code.len() { - splits.push(&code[last_idx..]); - } - - splits -} - fn parse_powershell_single_typ(typ: &str) -> Typ { match typ.to_lowercase().as_str() { "string" => Typ::Str(None), "int" | "long" => Typ::Int, "decimal" | "double" | "single" => Typ::Float, "datetime" => Typ::Datetime, - "bool" => Typ::Bool, + "bool" | "switch" => Typ::Bool, "pscustomobject" => Typ::Object(ObjectType::new(None, None)), _ => Typ::Str(None), } } -fn parse_powershell_file(code: &str) -> anyhow::Result>> { - let param_wrapper = extract_powershell_param_block(code, false); - let mut args = vec![]; - if let Some(param_wrapper) = param_wrapper { - let params = split_pwsh_args(param_wrapper); - for param in params { - if let Some(cap) = RE_POWERSHELL_ARGS.captures(param) { - let typ = cap.get(1).map(|x| x.as_str().to_string()); - let name = cap.get(2).unwrap().as_str().to_string(); +/// Single-pass PowerShell parameter parser. +/// Parses the content of a param() block and extracts all parameter information. +/// +/// This function processes PowerShell parameter declarations in a single pass, handling: +/// - Parameter attributes: [Parameter(Mandatory)], [Parameter(Mandatory=$true)], [ValidateSet(...)], etc. +/// - Type annotations: [string], [int[]], [PSCustomObject], etc. +/// - Variable names: $Name, $Value, etc. +/// - Default values: = 'text', = 25, = $env:VAR, etc. +/// - Mandatory detection: Parameters with Mandatory attribute are marked as required +fn parse_powershell_parameters(content: &str) -> anyhow::Result> { + #[derive(Debug, PartialEq)] + enum State { + Normal, + InSingleQuote, + InDoubleQuote, + InBracket, + } - let mut parsed_typ = if let Some(typ) = typ { - if typ.as_str().ends_with("[]") { - Some(Typ::List(Box::new(parse_powershell_single_typ( - typ.as_str().strip_suffix("[]").unwrap(), - )))) - } else { - Some(parse_powershell_single_typ(typ.as_str())) + let mut args = Vec::new(); + let mut chars = content.char_indices().peekable(); + let mut state = State::Normal; + let mut bracket_depth: i32 = 0; + let mut paren_depth: i32 = 0; + + // Current parameter being built + let mut type_annotation: Option = None; + let mut var_name: Option = None; + let mut default_value: Option = None; + let mut is_mandatory = false; + + // Track position for extracting text + let mut last_bracket_start = None; + let mut found_dollar = false; + + while let Some((idx, ch)) = chars.next() { + match state { + State::InSingleQuote => { + if ch == '\'' { + state = State::Normal; + } + } + State::InDoubleQuote => { + if ch == '"' { + // Check for escape character + if idx > 0 && content.chars().nth(idx - 1) != Some('`') { + state = State::Normal; } - } else { - None - }; + } + } + State::InBracket => { + match ch { + '[' => bracket_depth += 1, + ']' => { + bracket_depth -= 1; + if bracket_depth == 0 { + // Extract the bracket content + if let Some(start) = last_bracket_start { + let bracket_content = &content[start + 1..idx]; - let default = if let Some(x) = cap.get(3) { - Some(json!(x.as_str().to_string())) - } else if let Some(x) = cap.get(4) { - if parsed_typ.is_none() { - if x.as_str().parse::().is_ok() { - parsed_typ = Some(Typ::Int); - } else if x.as_str().parse::().is_ok() { - parsed_typ = Some(Typ::Float); + // Check if this is a Parameter attribute with Mandatory (case-insensitive) + let lower = bracket_content.to_lowercase(); + if lower.starts_with("parameter(") || lower.starts_with("parameter ") { + // Check for Mandatory (case-insensitive) + if lower.contains("mandatory") { + // Check if it's explicitly set to false + if !lower.contains("mandatory=$false") && !lower.contains("mandatory = $false") { + is_mandatory = true; + } + } + } + + // Check if this looks like a type (simple word, possibly with []) + let is_type = !bracket_content.contains('(') + && !bracket_content.contains('=') + && (bracket_content.chars().next().unwrap_or(' ').is_alphabetic() + || bracket_content.starts_with('[')); + + if is_type && !found_dollar { + type_annotation = Some(bracket_content.to_string()); + } + } + state = State::Normal; + last_bracket_start = None; } } - serde_json::Number::from_str(x.as_str()) - .ok() - .map(serde_json::Value::Number) - } else { - None - }; + '(' => paren_depth += 1, + ')' => paren_depth = paren_depth.saturating_sub(1), + _ => {} + } + } + State::Normal => { + match ch { + '\'' => state = State::InSingleQuote, + '"' => state = State::InDoubleQuote, + '[' => { + state = State::InBracket; + bracket_depth = 1; + last_bracket_start = Some(idx); + } + '$' => { + found_dollar = true; + // Extract variable name + let name_start = idx + 1; + let mut name_end = name_start; + while let Some(&(_, next_ch)) = chars.peek() { + if next_ch.is_alphanumeric() || next_ch == '_' { + name_end += 1; + chars.next(); + } else { + break; + } + } + var_name = Some(content[name_start..name_end].to_string()); + } + '=' if found_dollar => { + // Extract default value + // Skip whitespace after = + while let Some(&(_, next_ch)) = chars.peek() { + if next_ch.is_whitespace() { + chars.next(); + } else { + break; + } + } - args.push(Arg { - name: name, - typ: parsed_typ.unwrap_or(Typ::Str(None)), - default: default.clone(), - otyp: None, - has_default: default.is_some(), - oidx: None, - }); + let default_start = chars.peek().map(|(i, _)| *i).unwrap_or(content.len()); + let mut default_end = default_start; + let mut in_string = false; + let mut string_char = ' '; + + while let Some((i, ch)) = chars.peek().copied() { + if in_string { + if ch == string_char && content.chars().nth(i.saturating_sub(1)) != Some('`') { + in_string = false; + default_end = i + 1; + chars.next(); + } else { + default_end = i + 1; + chars.next(); + } + } else if ch == '\'' || ch == '"' { + in_string = true; + string_char = ch; + default_end = i + 1; + chars.next(); + } else if ch == ',' { + break; + } else if ch.is_whitespace() && chars.clone().skip(1).next().map(|(_, c)| c) == Some(',') { + break; + } else { + default_end = i + 1; + chars.next(); + } + } + + default_value = Some(content[default_start..default_end].trim().to_string()); + } + ',' => { + // End of parameter, finalize it + if let Some(name) = var_name.take() { + args.push(finalize_parameter(name, type_annotation.take(), default_value.take(), is_mandatory)?); + } + + // Reset for next parameter + type_annotation = None; + var_name = None; + default_value = None; + is_mandatory = false; + found_dollar = false; + } + _ => {} + } } } } - Ok(Some(args)) + + // Finalize last parameter + if let Some(name) = var_name { + args.push(finalize_parameter(name, type_annotation, default_value, is_mandatory)?); + } + + Ok(args) +} + +fn finalize_parameter( + name: String, + type_annotation: Option, + default_value: Option, + is_mandatory: bool, +) -> anyhow::Result { + // Store the original PowerShell type for use in the executor + let otyp = type_annotation.clone(); + + let mut parsed_typ = if let Some(typ) = type_annotation { + if typ.ends_with("[]") { + Some(Typ::List(Box::new(parse_powershell_single_typ( + typ.strip_suffix("[]").unwrap(), + )))) + } else { + Some(parse_powershell_single_typ(&typ)) + } + } else { + None + }; + + let default = if let Some(default_str) = default_value { + // Try to parse as string (quoted) + if (default_str.starts_with('"') && default_str.ends_with('"')) + || (default_str.starts_with('\'') && default_str.ends_with('\'')) + { + Some(json!(default_str[1..default_str.len() - 1].to_string())) + } else { + // Try to parse as number + if parsed_typ.is_none() { + if default_str.parse::().is_ok() { + parsed_typ = Some(Typ::Int); + } else if default_str.parse::().is_ok() { + parsed_typ = Some(Typ::Float); + } + } + serde_json::Number::from_str(&default_str) + .ok() + .map(serde_json::Value::Number) + } + } else { + None + }; + + // has_default semantics: + // - true: parameter is optional (has a default value OR is not mandatory) + // - false: parameter is required (marked as Mandatory AND no default value) + // Simplified: A parameter is optional unless it's mandatory without a default + let has_default = default.is_some() || !is_mandatory; + + Ok(Arg { + name, + typ: parsed_typ.unwrap_or(Typ::Str(None)), + default: default.clone(), + otyp, + has_default, + oidx: None, + }) +} + +fn parse_powershell_file(code: &str) -> anyhow::Result>> { + let param_wrapper = extract_powershell_param_block(code, false); + if let Some(param_wrapper) = param_wrapper { + Ok(Some(parse_powershell_parameters(param_wrapper)?)) + } else { + Ok(Some(vec![])) + } } #[cfg(test)] @@ -402,23 +581,23 @@ non_required="${5:-}" star_kwargs: false, args: vec![ Arg { - otyp: None, + otyp: None, // No type annotation name: "Msg".to_string(), typ: Typ::Str(None), default: None, - has_default: false, + has_default: true, // Optional (not mandatory) oidx: None }, Arg { - otyp: None, + otyp: Some("string".to_string()), // [string] name: "Msg2".to_string(), typ: Typ::Str(None), default: None, - has_default: false, + has_default: true, // Optional (not mandatory) oidx: None }, Arg { - otyp: None, + otyp: None, // No type annotation name: "Dflt".to_string(), typ: Typ::Str(None), default: Some(json!("default value, with comma")), @@ -426,7 +605,7 @@ non_required="${5:-}" oidx: None }, Arg { - otyp: None, + otyp: Some("int".to_string()), // [int] name: "Nb".to_string(), typ: Typ::Int, default: Some(json!(3)), @@ -434,7 +613,7 @@ non_required="${5:-}" oidx: None }, Arg { - otyp: None, + otyp: None, // Type inferred from default value name: "Nb2".to_string(), typ: Typ::Float, default: Some(json!(5.0)), @@ -442,7 +621,7 @@ non_required="${5:-}" oidx: None }, Arg { - otyp: None, + otyp: None, // Type inferred from default value name: "Nb3".to_string(), typ: Typ::Int, default: Some(json!(5)), @@ -450,35 +629,35 @@ non_required="${5:-}" oidx: None }, Arg { - otyp: None, + otyp: None, // No type annotation name: "Wahoo".to_string(), typ: Typ::Str(None), default: None, - has_default: false, + has_default: true, // Optional (not mandatory) oidx: None }, Arg { - otyp: None, + otyp: Some("PSCustomObject".to_string()), // [PSCustomObject] name: "Obj".to_string(), typ: Typ::Object(ObjectType::new(None, None)), default: None, - has_default: false, + has_default: true, // Optional (not mandatory) oidx: None }, Arg { - otyp: None, + otyp: Some("string[]".to_string()), // [string[]] name: "Arr".to_string(), typ: Typ::List(Box::new(Typ::Str(None))), default: None, - has_default: false, + has_default: true, // Optional (not mandatory) oidx: None }, Arg { - otyp: None, + otyp: Some("string".to_string()), // [string] (last type bracket with Mandatory) name: "Message".to_string(), typ: Typ::Str(None), default: None, - has_default: false, + has_default: false, // Required (Mandatory attribute) oidx: None } ], @@ -602,6 +781,242 @@ non_required="${5:-}" extract_powershell_param_block("function test-x{ param($Name)\n}", false), None ); + + // Valid: [CmdletBinding()] before param + assert_eq!( + extract_powershell_param_block("[CmdletBinding()]\nparam($Name)", false), + Some("$Name") + ); + assert_eq!( + extract_powershell_param_block("[CmdletBinding()]\nparam($Name, $Age)", true), + Some("param($Name, $Age)") + ); + + // Valid: [CmdletBinding()] with options before param + assert_eq!( + extract_powershell_param_block( + "[CmdletBinding(SupportsShouldProcess=$true)]\nparam($Path)", + false + ), + Some("$Path") + ); + + // Valid: Multiple attributes before param + assert_eq!( + extract_powershell_param_block( + "[CmdletBinding()]\n[OutputType([string])]\nparam($Value)", + false + ), + Some("$Value") + ); + + // Valid: CmdletBinding with comments + assert_eq!( + extract_powershell_param_block( + "# My function\n[CmdletBinding()]\nparam($Name)", + false + ), + Some("$Name") + ); + + // Valid: CmdletBinding with whitespace variations + assert_eq!( + extract_powershell_param_block( + "[CmdletBinding()] \n param($Name)", + false + ), + Some("$Name") + ); + + // Invalid: Unclosed attribute bracket + assert_eq!( + extract_powershell_param_block("[CmdletBinding(\nparam($Name)", false), + None + ); + } + + #[test] + fn test_parse_powershell_sig_with_parameter_attributes() -> anyhow::Result<()> { + // Test with [Parameter(Mandatory=$true)] attribute + let code = r#"[CmdletBinding()] +param( + [Parameter(Mandatory=$true)] + [string]$Name, + [Parameter(Mandatory=$false)] + [int]$Age = 25 +)"#; + let result = parse_powershell_sig(code)?; + assert_eq!(result.args.len(), 2); + assert_eq!(result.args[0].name, "Name"); + assert_eq!(result.args[0].typ, Typ::Str(None)); + assert_eq!(result.args[0].has_default, false); + assert_eq!(result.args[1].name, "Age"); + assert_eq!(result.args[1].typ, Typ::Int); + assert_eq!(result.args[1].has_default, true); + assert_eq!(result.args[1].default, Some(json!(25))); + + // Test with complex attributes + let code2 = r#"param( + [Parameter(Mandatory=$true, Position=0)] + [ValidateSet('Red', 'Green', 'Blue')] + [string]$Color, + [Parameter(ValueFromPipeline=$true)] + [string[]]$Items +)"#; + let result2 = parse_powershell_sig(code2)?; + assert_eq!(result2.args.len(), 2); + assert_eq!(result2.args[0].name, "Color"); + assert_eq!(result2.args[0].typ, Typ::Str(None)); + assert_eq!(result2.args[1].name, "Items"); + assert_eq!(result2.args[1].typ, Typ::List(Box::new(Typ::Str(None)))); + + Ok(()) + } + + #[test] + fn test_powershell_single_pass_parser() -> anyhow::Result<()> { + // Test the single-pass parser with a complex real-world example + let code = r#"[CmdletBinding()] +param( + [Parameter(Mandatory=$true, Position=0, HelpMessage="Enter the server name")] + [ValidateNotNullOrEmpty()] + [string]$ServerName, + + [Parameter(Mandatory=$false)] + [ValidateRange(1, 65535)] + [int]$Port = 8080, + + [Parameter(ValueFromPipeline=$true)] + [string[]]$LogFiles, + + [ValidateSet('Debug', 'Info', 'Warning', 'Error')] + [string]$LogLevel = 'Info', + + [PSCustomObject]$Config +)"#; + let result = parse_powershell_sig(code)?; + + assert_eq!(result.args.len(), 5); + + // ServerName: mandatory string with no default + assert_eq!(result.args[0].name, "ServerName"); + assert_eq!(result.args[0].typ, Typ::Str(None)); + assert_eq!(result.args[0].has_default, false); + + // Port: optional int with default + assert_eq!(result.args[1].name, "Port"); + assert_eq!(result.args[1].typ, Typ::Int); + assert_eq!(result.args[1].default, Some(json!(8080))); + assert_eq!(result.args[1].has_default, true); + + // LogFiles: string array (no mandatory, so optional) + assert_eq!(result.args[2].name, "LogFiles"); + assert_eq!(result.args[2].typ, Typ::List(Box::new(Typ::Str(None)))); + assert_eq!(result.args[2].has_default, true); // Optional (not mandatory) + + // LogLevel: string with default (ValidateSet is ignored but doesn't break parsing) + assert_eq!(result.args[3].name, "LogLevel"); + assert_eq!(result.args[3].typ, Typ::Str(None)); + assert_eq!(result.args[3].default, Some(json!("Info"))); + assert_eq!(result.args[3].has_default, true); + + // Config: PSCustomObject (no mandatory, so optional) + assert_eq!(result.args[4].name, "Config"); + assert_eq!(result.args[4].typ, Typ::Object(ObjectType::new(None, None))); + assert_eq!(result.args[4].has_default, true); // Optional (not mandatory) + + Ok(()) + } + + #[test] + fn test_powershell_mandatory_attribute() -> anyhow::Result<()> { + // Test various forms of the Mandatory attribute + let code = r#"param( + [Parameter(Mandatory)] + [string]$RequiredNoEquals, + + [Parameter(Mandatory=$true)] + [string]$RequiredWithTrue, + + [Parameter(Mandatory = $true)] + [string]$RequiredWithSpaces, + + [Parameter(Mandatory=$false)] + [string]$NotRequired, + + [Parameter(Position=0)] + [string]$NoMandatory, + + [string]$PlainRequired = "default", + + [Parameter(Mandatory=$true)] + [int]$RequiredInt +)"#; + let result = parse_powershell_sig(code)?; + + assert_eq!(result.args.len(), 7); + + // RequiredNoEquals: mandatory without =$true + assert_eq!(result.args[0].name, "RequiredNoEquals"); + assert_eq!(result.args[0].has_default, false); // Required (mandatory, no default) + + // RequiredWithTrue: mandatory with =$true + assert_eq!(result.args[1].name, "RequiredWithTrue"); + assert_eq!(result.args[1].has_default, false); // Required + + // RequiredWithSpaces: mandatory with spaces + assert_eq!(result.args[2].name, "RequiredWithSpaces"); + assert_eq!(result.args[2].has_default, false); // Required + + // NotRequired: explicitly Mandatory=$false + assert_eq!(result.args[3].name, "NotRequired"); + assert_eq!(result.args[3].has_default, true); // Optional (not mandatory) + + // NoMandatory: no Mandatory attribute + assert_eq!(result.args[4].name, "NoMandatory"); + assert_eq!(result.args[4].has_default, true); // Optional (not mandatory) + + // PlainRequired: has default value (always optional) + assert_eq!(result.args[5].name, "PlainRequired"); + assert_eq!(result.args[5].has_default, true); // Optional (has default) + assert_eq!(result.args[5].default, Some(json!("default"))); + + // RequiredInt: mandatory int + assert_eq!(result.args[6].name, "RequiredInt"); + assert_eq!(result.args[6].typ, Typ::Int); + assert_eq!(result.args[6].has_default, false); // Required + + Ok(()) + } + + #[test] + fn test_powershell_case_insensitive_parameter() -> anyhow::Result<()> { + // Test that [parameter(...)] is case-insensitive + let code = r#"param( + [parameter(Mandatory)] + [string]$LowerCase, + + [PARAMETER(MANDATORY=$TRUE)] + [string]$UpperCase, + + [Parameter(mandatory=$true)] + [string]$MixedCase +)"#; + let result = parse_powershell_sig(code)?; + + assert_eq!(result.args.len(), 3); + + // All should be detected as mandatory + assert_eq!(result.args[0].name, "LowerCase"); + assert_eq!(result.args[0].has_default, false); + + assert_eq!(result.args[1].name, "UpperCase"); + assert_eq!(result.args[1].has_default, false); + + assert_eq!(result.args[2].name, "MixedCase"); + assert_eq!(result.args[2].has_default, false); + + Ok(()) } #[test] diff --git a/backend/windmill-worker/src/pwsh_executor.rs b/backend/windmill-worker/src/pwsh_executor.rs index 4a4b85f8ac..cda448dc31 100644 --- a/backend/windmill-worker/src/pwsh_executor.rs +++ b/backend/windmill-worker/src/pwsh_executor.rs @@ -255,20 +255,42 @@ pub async fn handle_powershell_job( job.args.as_ref() }; - let args_owned = windmill_parser_bash::parse_powershell_sig(&content)? + let parsed_sig = windmill_parser_bash::parse_powershell_sig(&content)?; + + parsed_sig .args .iter() - .map(|arg| { - ( - arg.name.clone(), - job_args.and_then(|x| x.get(&arg.name).map(|x| raw_to_pwsh_param(x.get()))), - ) - }) - .collect::)>>(); + .filter_map(|arg| { + let value_opt = job_args.and_then(|x| x.get(&arg.name)); - args_owned - .into_iter() - .filter_map(|(n, v)| v.map(|v| format!("-{n} {v}"))) + // Check if this is a switch parameter (only [switch], not [bool]) + let is_switch = arg.otyp.as_ref().map(|t| { + t.to_lowercase() == "switch" + }).unwrap_or(false); + + if is_switch { + // Handle switch parameters: -SwitchName or omit + if let Some(value) = value_opt { + match serde_json::from_str::(value.get()) { + Ok(serde_json::Value::Bool(true)) => { + // Switch is enabled: just pass -SwitchName + Some(format!("-{}", arg.name)) + } + Ok(serde_json::Value::Bool(false)) | _ => { + // Switch is disabled or invalid: omit the parameter + None + } + } + } else { + // No value provided, omit the switch (defaults to false) + None + } + } else { + // Regular parameter (including [bool]): format as -ParamName Value + // For [bool] parameters, this will be -ParamName $true or -ParamName $false + value_opt.map(|v| format!("-{} {}", arg.name, raw_to_pwsh_param(v.get()))) + } + }) .collect::>() .join(" ") }; diff --git a/cli/wasm/regex/windmill_parser_wasm.d.ts b/cli/wasm/regex/windmill_parser_wasm.d.ts index 59f34f2b18..7886800b20 100644 --- a/cli/wasm/regex/windmill_parser_wasm.d.ts +++ b/cli/wasm/regex/windmill_parser_wasm.d.ts @@ -1,14 +1,14 @@ /* tslint:disable */ /* eslint-disable */ -export function parse_assets_sql(code: string): string; -export function parse_db_resource(code: string): string | undefined; -export function parse_bash(code: string): string; export function parse_mssql(code: string): string; -export function parse_oracledb(code: string): string; export function parse_powershell(code: string): string; -export function parse_bigquery(code: string): string; +export function parse_oracledb(code: string): string; export function parse_graphql(code: string): string; -export function parse_snowflake(code: string): string; -export function parse_duckdb(code: string): string; -export function parse_sql(code: string): string; +export function parse_assets_sql(code: string): string; export function parse_mysql(code: string): string; +export function parse_bash(code: string): string; +export function parse_duckdb(code: string): string; +export function parse_db_resource(code: string): string | undefined; +export function parse_bigquery(code: string): string; +export function parse_snowflake(code: string): string; +export function parse_sql(code: string): string; diff --git a/cli/wasm/regex/windmill_parser_wasm.js b/cli/wasm/regex/windmill_parser_wasm.js index 25a60a9b8e..b3b62ebd32 100644 --- a/cli/wasm/regex/windmill_parser_wasm.js +++ b/cli/wasm/regex/windmill_parser_wasm.js @@ -68,60 +68,6 @@ function getStringFromWasm0(ptr, len) { ptr = ptr >>> 0; return decodeText(ptr, len); } -/** - * @param {string} code - * @returns {string} - */ -export function parse_assets_sql(code) { - let deferred2_0; - let deferred2_1; - try { - const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.parse_assets_sql(ptr0, len0); - deferred2_0 = ret[0]; - deferred2_1 = ret[1]; - return getStringFromWasm0(ret[0], ret[1]); - } finally { - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -/** - * @param {string} code - * @returns {string | undefined} - */ -export function parse_db_resource(code) { - const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.parse_db_resource(ptr0, len0); - let v2; - if (ret[0] !== 0) { - v2 = getStringFromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - } - return v2; -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_bash(code) { - let deferred2_0; - let deferred2_1; - try { - const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.parse_bash(ptr0, len0); - deferred2_0 = ret[0]; - deferred2_1 = ret[1]; - return getStringFromWasm0(ret[0], ret[1]); - } finally { - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - /** * @param {string} code * @returns {string} @@ -141,25 +87,6 @@ export function parse_mssql(code) { } } -/** - * @param {string} code - * @returns {string} - */ -export function parse_oracledb(code) { - let deferred2_0; - let deferred2_1; - try { - const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.parse_oracledb(ptr0, len0); - deferred2_0 = ret[0]; - deferred2_1 = ret[1]; - return getStringFromWasm0(ret[0], ret[1]); - } finally { - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - /** * @param {string} code * @returns {string} @@ -183,13 +110,13 @@ export function parse_powershell(code) { * @param {string} code * @returns {string} */ -export function parse_bigquery(code) { +export function parse_oracledb(code) { let deferred2_0; let deferred2_1; try { const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); const len0 = WASM_VECTOR_LEN; - const ret = wasm.parse_bigquery(ptr0, len0); + const ret = wasm.parse_oracledb(ptr0, len0); deferred2_0 = ret[0]; deferred2_1 = ret[1]; return getStringFromWasm0(ret[0], ret[1]); @@ -221,13 +148,51 @@ export function parse_graphql(code) { * @param {string} code * @returns {string} */ -export function parse_snowflake(code) { +export function parse_assets_sql(code) { let deferred2_0; let deferred2_1; try { const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); const len0 = WASM_VECTOR_LEN; - const ret = wasm.parse_snowflake(ptr0, len0); + const ret = wasm.parse_assets_sql(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_mysql(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_mysql(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_bash(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_bash(ptr0, len0); deferred2_0 = ret[0]; deferred2_1 = ret[1]; return getStringFromWasm0(ret[0], ret[1]); @@ -255,17 +220,33 @@ export function parse_duckdb(code) { } } +/** + * @param {string} code + * @returns {string | undefined} + */ +export function parse_db_resource(code) { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_db_resource(ptr0, len0); + let v2; + if (ret[0] !== 0) { + v2 = getStringFromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + } + return v2; +} + /** * @param {string} code * @returns {string} */ -export function parse_sql(code) { +export function parse_bigquery(code) { let deferred2_0; let deferred2_1; try { const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); const len0 = WASM_VECTOR_LEN; - const ret = wasm.parse_sql(ptr0, len0); + const ret = wasm.parse_bigquery(ptr0, len0); deferred2_0 = ret[0]; deferred2_1 = ret[1]; return getStringFromWasm0(ret[0], ret[1]); @@ -278,13 +259,32 @@ export function parse_sql(code) { * @param {string} code * @returns {string} */ -export function parse_mysql(code) { +export function parse_snowflake(code) { let deferred2_0; let deferred2_1; try { const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); const len0 = WASM_VECTOR_LEN; - const ret = wasm.parse_mysql(ptr0, len0); + const ret = wasm.parse_snowflake(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_sql(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_sql(ptr0, len0); deferred2_0 = ret[0]; deferred2_1 = ret[1]; return getStringFromWasm0(ret[0], ret[1]); diff --git a/cli/wasm/regex/windmill_parser_wasm_bg.wasm b/cli/wasm/regex/windmill_parser_wasm_bg.wasm index 45a144132db83055b45b7a905509a3bce50c05a5..34d6284a98f4a78b2f801adbd5ba6b71f666dd54 100644 GIT binary patch delta 74047 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 delta 74393 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