diff --git a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/CodegenUtils.java b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/CodegenUtils.java index 9beee0f2b18..bae6b92f89e 100644 --- a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/CodegenUtils.java +++ b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/CodegenUtils.java @@ -296,13 +296,26 @@ static List getFunctionParametersList(Map paramsMap) { } else if (value instanceof Boolean) { functionParametersList.add(String.format("%s: %s", key, value)); } else if (value instanceof List) { - if (!((List) value).isEmpty() && !(((List) value).get(0) instanceof String)) { - throw new CodegenException("Plugin function parameters not supported for type List<" - + ((List) value).get(0).getClass() + ">"); + List valueList = (List) value; + if (!valueList.isEmpty() && !(valueList.get(0) instanceof String)) { + throw new CodegenException("Plugin function parameters list must be List"); } - functionParametersList.add(String.format("%s: [%s]", - key, ((List) value).stream() - .collect(Collectors.joining("\", \"", "\"", "\"")))); + List valueStringList = valueList.stream() + .map(item -> String.format("'%s'", item)) + .collect(Collectors.toList()); + functionParametersList.add(String.format("'%s': [%s]", + key, valueStringList.stream().collect(Collectors.joining(", ")))); + } else if (value instanceof Map) { + Map valueMap = (Map) value; + if (!valueMap.isEmpty() && valueMap.keySet().stream().anyMatch(k -> !(k instanceof String)) + && valueMap.values().stream().anyMatch(v -> !(v instanceof String))) { + throw new CodegenException("Plugin function parameters map must be Map"); + } + List valueStringList = valueMap.entrySet().stream() + .map(entry -> String.format("'%s': '%s'", entry.getKey(), entry.getValue())) + .collect(Collectors.toList()); + functionParametersList.add(String.format("%s: {%s}", + key, valueStringList.stream().collect(Collectors.joining(", ")))); } else { // Future support for param type should be added in else if. throw new CodegenException("Plugin function parameters not supported for type "