From 0b6e181817815743168c4c378ac02e7f0a4e192a Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Mon, 16 Dec 2024 01:49:30 +0000 Subject: [PATCH 1/3] Process Map in function parameter list --- .../typescript/codegen/CodegenUtils.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) 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..df53e49fada 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"); } + List valueStringList = valueList.stream() + .map(item -> String.format("\"%s\"", item)) + .collect(Collectors.toList()); functionParametersList.add(String.format("%s: [%s]", - key, ((List) value).stream() - .collect(Collectors.joining("\", \"", "\"", "\"")))); + 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 " From 11f9e700581aff7eefc7fffd00328b940187a99e Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Mon, 16 Dec 2024 08:47:14 -0800 Subject: [PATCH 2/3] chore: put both key and value in quotes Co-authored-by: George Fu --- .../amazon/smithy/typescript/codegen/CodegenUtils.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 df53e49fada..df76791c97f 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 @@ -312,7 +312,9 @@ static List getFunctionParametersList(Map paramsMap) { 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())) + .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(", ")))); From 7d2b5a02caff23a21b355a6a7a9d9af646719b48 Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Mon, 16 Dec 2024 17:12:56 +0000 Subject: [PATCH 3/3] fix: use single quotes instead of double in function param list --- .../amazon/smithy/typescript/codegen/CodegenUtils.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) 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 df76791c97f..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 @@ -301,9 +301,9 @@ static List getFunctionParametersList(Map paramsMap) { throw new CodegenException("Plugin function parameters list must be List"); } List valueStringList = valueList.stream() - .map(item -> String.format("\"%s\"", item)) + .map(item -> String.format("'%s'", item)) .collect(Collectors.toList()); - functionParametersList.add(String.format("%s: [%s]", + functionParametersList.add(String.format("'%s': [%s]", key, valueStringList.stream().collect(Collectors.joining(", ")))); } else if (value instanceof Map) { Map valueMap = (Map) value; @@ -312,9 +312,7 @@ static List getFunctionParametersList(Map paramsMap) { 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())) + .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(", "))));