@@ -41,7 +41,13 @@ object Bash extends Language {
4141
4242 useJq match {
4343 case Some (true ) =>
44- generateJqInjectionMods(argsMetaAndDeps)
44+ val parseCode = s """ | ${viashParseJsonCode}
45+ |
46+ |# Parse JSON parameters using jq
47+ |_viash_json_content= $$ (cat " $$ VIASH_WORK_PARAMS")
48+ |ViashParseJsonBash <<< " $$ _viash_json_content"
49+ | """ .stripMargin
50+ ScriptInjectionMods (params = parseCode)
4551 case Some (false ) =>
4652 generateCompatInjectionMods(argsMetaAndDeps)
4753 case None =>
@@ -88,21 +94,6 @@ ViashParseJsonBash <<< "$$_viash_json_content"
8894 ScriptInjectionMods (params = fullCode)
8995 }
9096
91- /**
92- * Generate injection mods for jq mode:
93- * Uses jq to parse JSON and populate bash variables directly.
94- * Multiple-value arguments are stored as bash arrays.
95- */
96- private def generateJqInjectionMods (argsMetaAndDeps : Map [String , List [Argument [_]]]): ScriptInjectionMods = {
97- val parseCode = s """ ${viashParseJsonCode}
98-
99- # Parse JSON parameters using jq
100- _viash_json_content= $$ (cat " $$ VIASH_WORK_PARAMS")
101- ViashParseJsonBash <<< " $$ _viash_json_content"
102- """
103- ScriptInjectionMods (params = parseCode)
104- }
105-
10697 def generateConfigInjectMods (argsMetaAndDeps : Map [String , List [Argument [_]]], config : Config ): ScriptInjectionMods = {
10798 // Determine use_jq setting from the BashScript resource
10899 val useJq = config.resources.collectFirst {
@@ -113,18 +104,11 @@ ViashParseJsonBash <<< "$$_viash_json_content"
113104 val parSet = argsMetaAndDeps.flatMap { case (_, params) =>
114105 params.map { par =>
115106 val value = getExampleValue(par, useArrays)
116- if (par.multiple) {
117- if (useArrays) {
118- // jq mode: bash array
119- val values = value match {
120- case v if v.isEmpty => " "
121- case v => v
122- }
123- s """ ${par.par}=( $values) """
124- } else {
125- // compat mode: IFS-separated string
126- s """ ${par.par}=' $value' """
127- }
107+ if (value.isEmpty) {
108+ return " "
109+ } else if (par.multiple && par.direction != ArgumentDirection .Output && useArrays) {
110+ // jq mode with arrays
111+ s """ ${par.par}=( $value) """
128112 } else {
129113 s """ ${par.par}=' $value' """
130114 }
@@ -138,7 +122,7 @@ ViashParseJsonBash <<< "$$_viash_json_content"
138122 private def getExampleValue (arg : Argument [_], useArrays : Boolean = true ): String = {
139123 val values = getArgumentValues(arg)
140124
141- if (arg.multiple) {
125+ if (arg.multiple && arg.direction != ArgumentDirection . Output ) {
142126 if (useArrays) {
143127 values.map(v => s " ' $v' " ).mkString(" " )
144128 } else {
0 commit comments