From c0337f4d650942fc3de3954f7879b0f89b6b30f4 Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Mon, 9 Aug 2021 15:58:22 +0000 Subject: [PATCH 1/8] fix(codegen): do not trim values while parsing XML --- .../amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java index 72b49430d6502..3e471aeced1fa 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java @@ -135,7 +135,7 @@ static void generateXmlParseBody(GenerationContext context) { writer.openBlock("if (encoded.length) {", "}", () -> { writer.write("const parsedObj = xmlParse(encoded, { attributeNamePrefix: '', " + "ignoreAttributes: false, parseNodeValue: false, trimValues: false, " - + "tagValueProcessor: (val, tagName) => val.trim() === '' ? '': decodeHTML(val) });"); + + "tagValueProcessor: (val, tagName) => decodeHTML(val) });"); writer.write("const textNodeName = '#text';"); writer.write("const key = Object.keys(parsedObj)[0];"); writer.write("const parsedObjToReturn = parsedObj[key];"); From 5eccf0082680eee5952ca691f8213919fff77e62 Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Mon, 9 Aug 2021 16:02:20 +0000 Subject: [PATCH 2/8] fix(clients): do not trim values while parsing XML --- clients/client-auto-scaling/protocols/Aws_query.ts | 2 +- clients/client-cloudformation/protocols/Aws_query.ts | 2 +- clients/client-cloudfront/protocols/Aws_restXml.ts | 2 +- clients/client-cloudsearch/protocols/Aws_query.ts | 2 +- clients/client-cloudwatch/protocols/Aws_query.ts | 2 +- clients/client-docdb/protocols/Aws_query.ts | 2 +- clients/client-ec2/protocols/Aws_ec2.ts | 2 +- clients/client-elastic-beanstalk/protocols/Aws_query.ts | 2 +- clients/client-elastic-load-balancing-v2/protocols/Aws_query.ts | 2 +- clients/client-elastic-load-balancing/protocols/Aws_query.ts | 2 +- clients/client-elasticache/protocols/Aws_query.ts | 2 +- clients/client-iam/protocols/Aws_query.ts | 2 +- clients/client-neptune/protocols/Aws_query.ts | 2 +- clients/client-rds/protocols/Aws_query.ts | 2 +- clients/client-redshift/protocols/Aws_query.ts | 2 +- clients/client-route-53/protocols/Aws_restXml.ts | 2 +- clients/client-s3-control/protocols/Aws_restXml.ts | 2 +- clients/client-s3/protocols/Aws_restXml.ts | 2 +- clients/client-ses/protocols/Aws_query.ts | 2 +- clients/client-sns/protocols/Aws_query.ts | 2 +- clients/client-sqs/protocols/Aws_query.ts | 2 +- clients/client-sts/protocols/Aws_query.ts | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/clients/client-auto-scaling/protocols/Aws_query.ts b/clients/client-auto-scaling/protocols/Aws_query.ts index e7b6ffaa6e500..0044c272b05bb 100644 --- a/clients/client-auto-scaling/protocols/Aws_query.ts +++ b/clients/client-auto-scaling/protocols/Aws_query.ts @@ -10008,7 +10008,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-cloudformation/protocols/Aws_query.ts b/clients/client-cloudformation/protocols/Aws_query.ts index 4bcbe8b76803f..3f0cef40e4d42 100644 --- a/clients/client-cloudformation/protocols/Aws_query.ts +++ b/clients/client-cloudformation/protocols/Aws_query.ts @@ -11149,7 +11149,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-cloudfront/protocols/Aws_restXml.ts b/clients/client-cloudfront/protocols/Aws_restXml.ts index 37479a2ff0cdd..5d391d1464add 100644 --- a/clients/client-cloudfront/protocols/Aws_restXml.ts +++ b/clients/client-cloudfront/protocols/Aws_restXml.ts @@ -19025,7 +19025,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-cloudsearch/protocols/Aws_query.ts b/clients/client-cloudsearch/protocols/Aws_query.ts index 88dea54b31fec..a10c461de3d87 100644 --- a/clients/client-cloudsearch/protocols/Aws_query.ts +++ b/clients/client-cloudsearch/protocols/Aws_query.ts @@ -4921,7 +4921,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-cloudwatch/protocols/Aws_query.ts b/clients/client-cloudwatch/protocols/Aws_query.ts index 00f2c2728a91d..3cf08d3270a21 100644 --- a/clients/client-cloudwatch/protocols/Aws_query.ts +++ b/clients/client-cloudwatch/protocols/Aws_query.ts @@ -6370,7 +6370,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-docdb/protocols/Aws_query.ts b/clients/client-docdb/protocols/Aws_query.ts index 494cf98a708e4..b0605f012bc3d 100644 --- a/clients/client-docdb/protocols/Aws_query.ts +++ b/clients/client-docdb/protocols/Aws_query.ts @@ -10727,7 +10727,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-ec2/protocols/Aws_ec2.ts b/clients/client-ec2/protocols/Aws_ec2.ts index 20dbdcafdb651..5986490194cb2 100644 --- a/clients/client-ec2/protocols/Aws_ec2.ts +++ b/clients/client-ec2/protocols/Aws_ec2.ts @@ -74754,7 +74754,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-elastic-beanstalk/protocols/Aws_query.ts b/clients/client-elastic-beanstalk/protocols/Aws_query.ts index b320819a40e23..358f8afc514d0 100644 --- a/clients/client-elastic-beanstalk/protocols/Aws_query.ts +++ b/clients/client-elastic-beanstalk/protocols/Aws_query.ts @@ -8205,7 +8205,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-elastic-load-balancing-v2/protocols/Aws_query.ts b/clients/client-elastic-load-balancing-v2/protocols/Aws_query.ts index 2bd4a8af5550d..a7886ce6b6d29 100644 --- a/clients/client-elastic-load-balancing-v2/protocols/Aws_query.ts +++ b/clients/client-elastic-load-balancing-v2/protocols/Aws_query.ts @@ -7863,7 +7863,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-elastic-load-balancing/protocols/Aws_query.ts b/clients/client-elastic-load-balancing/protocols/Aws_query.ts index 54b7fc0c5c0d9..d8f92c948c6f5 100644 --- a/clients/client-elastic-load-balancing/protocols/Aws_query.ts +++ b/clients/client-elastic-load-balancing/protocols/Aws_query.ts @@ -5410,7 +5410,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-elasticache/protocols/Aws_query.ts b/clients/client-elasticache/protocols/Aws_query.ts index a465d9e8bb063..109f60ffafb58 100644 --- a/clients/client-elasticache/protocols/Aws_query.ts +++ b/clients/client-elasticache/protocols/Aws_query.ts @@ -15016,7 +15016,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-iam/protocols/Aws_query.ts b/clients/client-iam/protocols/Aws_query.ts index 7208998f167c6..ce5f4d08e415d 100644 --- a/clients/client-iam/protocols/Aws_query.ts +++ b/clients/client-iam/protocols/Aws_query.ts @@ -21436,7 +21436,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-neptune/protocols/Aws_query.ts b/clients/client-neptune/protocols/Aws_query.ts index 84b8276d9fbae..d05110270bd51 100644 --- a/clients/client-neptune/protocols/Aws_query.ts +++ b/clients/client-neptune/protocols/Aws_query.ts @@ -13195,7 +13195,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-rds/protocols/Aws_query.ts b/clients/client-rds/protocols/Aws_query.ts index 17bff2ce056d4..0cc2863fb6aa0 100644 --- a/clients/client-rds/protocols/Aws_query.ts +++ b/clients/client-rds/protocols/Aws_query.ts @@ -28153,7 +28153,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-redshift/protocols/Aws_query.ts b/clients/client-redshift/protocols/Aws_query.ts index 8e772559ce5aa..3c14ac4aefa5e 100644 --- a/clients/client-redshift/protocols/Aws_query.ts +++ b/clients/client-redshift/protocols/Aws_query.ts @@ -22294,7 +22294,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-route-53/protocols/Aws_restXml.ts b/clients/client-route-53/protocols/Aws_restXml.ts index 16afda7f9aa71..b14de6506f9c4 100644 --- a/clients/client-route-53/protocols/Aws_restXml.ts +++ b/clients/client-route-53/protocols/Aws_restXml.ts @@ -10422,7 +10422,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-s3-control/protocols/Aws_restXml.ts b/clients/client-s3-control/protocols/Aws_restXml.ts index 6690fb4352b2a..899c6149b53c1 100644 --- a/clients/client-s3-control/protocols/Aws_restXml.ts +++ b/clients/client-s3-control/protocols/Aws_restXml.ts @@ -8182,7 +8182,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-s3/protocols/Aws_restXml.ts b/clients/client-s3/protocols/Aws_restXml.ts index fc6681828c4b0..8d399b4720f88 100644 --- a/clients/client-s3/protocols/Aws_restXml.ts +++ b/clients/client-s3/protocols/Aws_restXml.ts @@ -14724,7 +14724,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-ses/protocols/Aws_query.ts b/clients/client-ses/protocols/Aws_query.ts index 2150a7055bfd5..c25d45a86e934 100644 --- a/clients/client-ses/protocols/Aws_query.ts +++ b/clients/client-ses/protocols/Aws_query.ts @@ -10320,7 +10320,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-sns/protocols/Aws_query.ts b/clients/client-sns/protocols/Aws_query.ts index f3abf346f942a..01b8303f2f8d9 100644 --- a/clients/client-sns/protocols/Aws_query.ts +++ b/clients/client-sns/protocols/Aws_query.ts @@ -6347,7 +6347,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-sqs/protocols/Aws_query.ts b/clients/client-sqs/protocols/Aws_query.ts index f05e637b8e596..ae13750d59cb0 100644 --- a/clients/client-sqs/protocols/Aws_query.ts +++ b/clients/client-sqs/protocols/Aws_query.ts @@ -3141,7 +3141,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-sts/protocols/Aws_query.ts b/clients/client-sts/protocols/Aws_query.ts index 1a33629217120..b1b9f2343060b 100644 --- a/clients/client-sts/protocols/Aws_query.ts +++ b/clients/client-sts/protocols/Aws_query.ts @@ -1480,7 +1480,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; From 61ffa5aa1a10f091d2f10f8bd607aa1c0e5c021e Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Mon, 9 Aug 2021 16:03:19 +0000 Subject: [PATCH 3/8] fix(protocol_tests): do not trim values while parsing XML --- protocol_tests/aws-ec2/protocols/Aws_ec2.ts | 2 +- protocol_tests/aws-query/protocols/Aws_query.ts | 2 +- protocol_tests/aws-restxml/protocols/Aws_restXml.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/protocol_tests/aws-ec2/protocols/Aws_ec2.ts b/protocol_tests/aws-ec2/protocols/Aws_ec2.ts index 130270f4482be..a619c1d068220 100644 --- a/protocol_tests/aws-ec2/protocols/Aws_ec2.ts +++ b/protocol_tests/aws-ec2/protocols/Aws_ec2.ts @@ -2172,7 +2172,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/protocol_tests/aws-query/protocols/Aws_query.ts b/protocol_tests/aws-query/protocols/Aws_query.ts index fe465866fa64f..db625f9a4e59e 100644 --- a/protocol_tests/aws-query/protocols/Aws_query.ts +++ b/protocol_tests/aws-query/protocols/Aws_query.ts @@ -3002,7 +3002,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/protocol_tests/aws-restxml/protocols/Aws_restXml.ts b/protocol_tests/aws-restxml/protocols/Aws_restXml.ts index 21c15b3abd9db..c10fa817434c9 100644 --- a/protocol_tests/aws-restxml/protocols/Aws_restXml.ts +++ b/protocol_tests/aws-restxml/protocols/Aws_restXml.ts @@ -6173,7 +6173,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val, tagName) => decodeHTML(val), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; From 99b843ac5cfc27ee4ecff219268e18639446a5c5 Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Mon, 9 Aug 2021 16:04:15 +0000 Subject: [PATCH 4/8] chore(codegen): enable SimpleScalarPropertiesPureWhiteSpace test --- .../smithy/aws/typescript/codegen/AwsProtocolUtils.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java index 3e471aeced1fa..251bb0a6a08a1 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java @@ -299,10 +299,6 @@ private static boolean filterProtocolTests( && settings.generateServerSdk()) { return true; } - // TODO: follow-up with smithy on whether whitespace strings should be trimmed. - if (testCase.getId().equals("SimpleScalarPropertiesPureWhiteSpace")) { - return true; - } return false; } } From 8a5344fd85cd65b2a4dc0b9bdf993ac3d710db2b Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Mon, 9 Aug 2021 16:05:06 +0000 Subject: [PATCH 5/8] chore(protocol_tests): enable SimpleScalarPropertiesPureWhiteSpace --- protocol_tests/aws-restxml/tests/functional/restxml.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/protocol_tests/aws-restxml/tests/functional/restxml.spec.ts b/protocol_tests/aws-restxml/tests/functional/restxml.spec.ts index b5befa7e80bf5..6ac2e91586e4f 100644 --- a/protocol_tests/aws-restxml/tests/functional/restxml.spec.ts +++ b/protocol_tests/aws-restxml/tests/functional/restxml.spec.ts @@ -3780,7 +3780,7 @@ it("SimpleScalarPropertiesWithWhiteSpace:Request", async () => { /** * Serializes string containing exclusively whitespace */ -it.skip("SimpleScalarPropertiesPureWhiteSpace:Request", async () => { +it("SimpleScalarPropertiesPureWhiteSpace:Request", async () => { const client = new RestXmlProtocolClient({ ...clientParams, requestHandler: new RequestSerializationTestHandler(), @@ -4203,7 +4203,7 @@ it("SimpleScalarPropertiesWithWhiteSpace:Response", async () => { /** * Serializes string containing white space */ -it.skip("SimpleScalarPropertiesPureWhiteSpace:Response", async () => { +it("SimpleScalarPropertiesPureWhiteSpace:Response", async () => { const client = new RestXmlProtocolClient({ ...clientParams, requestHandler: new ResponseDeserializationTestHandler( From 2124123115d77d25cc620f8ea216c351aa2979da Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Tue, 10 Aug 2021 16:05:32 +0000 Subject: [PATCH 6/8] fix(codegen): only trim xml tag values which contain newline --- .../amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java index 251bb0a6a08a1..27fc277330d30 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java @@ -135,7 +135,8 @@ static void generateXmlParseBody(GenerationContext context) { writer.openBlock("if (encoded.length) {", "}", () -> { writer.write("const parsedObj = xmlParse(encoded, { attributeNamePrefix: '', " + "ignoreAttributes: false, parseNodeValue: false, trimValues: false, " - + "tagValueProcessor: (val, tagName) => decodeHTML(val) });"); + + "tagValueProcessor: (val) => (val.trim() === '' && val.includes('\\n'))" + + " ? '': decodeHTML(val) });"); writer.write("const textNodeName = '#text';"); writer.write("const key = Object.keys(parsedObj)[0];"); writer.write("const parsedObjToReturn = parsedObj[key];"); From 6f52cbcb3521cb51c2e07d2cd0a5c3396ee8dad6 Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Tue, 10 Aug 2021 16:08:14 +0000 Subject: [PATCH 7/8] fix(clients): only trim xml tag values which contain newline --- clients/client-auto-scaling/protocols/Aws_query.ts | 2 +- clients/client-cloudformation/protocols/Aws_query.ts | 2 +- clients/client-cloudfront/protocols/Aws_restXml.ts | 2 +- clients/client-cloudsearch/protocols/Aws_query.ts | 2 +- clients/client-cloudwatch/protocols/Aws_query.ts | 2 +- clients/client-docdb/protocols/Aws_query.ts | 2 +- clients/client-ec2/protocols/Aws_ec2.ts | 2 +- clients/client-elastic-beanstalk/protocols/Aws_query.ts | 2 +- clients/client-elastic-load-balancing-v2/protocols/Aws_query.ts | 2 +- clients/client-elastic-load-balancing/protocols/Aws_query.ts | 2 +- clients/client-elasticache/protocols/Aws_query.ts | 2 +- clients/client-iam/protocols/Aws_query.ts | 2 +- clients/client-neptune/protocols/Aws_query.ts | 2 +- clients/client-rds/protocols/Aws_query.ts | 2 +- clients/client-redshift/protocols/Aws_query.ts | 2 +- clients/client-route-53/protocols/Aws_restXml.ts | 2 +- clients/client-s3-control/protocols/Aws_restXml.ts | 2 +- clients/client-s3/protocols/Aws_restXml.ts | 2 +- clients/client-ses/protocols/Aws_query.ts | 2 +- clients/client-sns/protocols/Aws_query.ts | 2 +- clients/client-sqs/protocols/Aws_query.ts | 2 +- clients/client-sts/protocols/Aws_query.ts | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/clients/client-auto-scaling/protocols/Aws_query.ts b/clients/client-auto-scaling/protocols/Aws_query.ts index 0044c272b05bb..7e8a49d9fd2fe 100644 --- a/clients/client-auto-scaling/protocols/Aws_query.ts +++ b/clients/client-auto-scaling/protocols/Aws_query.ts @@ -10008,7 +10008,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-cloudformation/protocols/Aws_query.ts b/clients/client-cloudformation/protocols/Aws_query.ts index 3f0cef40e4d42..415813a7e32c2 100644 --- a/clients/client-cloudformation/protocols/Aws_query.ts +++ b/clients/client-cloudformation/protocols/Aws_query.ts @@ -11149,7 +11149,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-cloudfront/protocols/Aws_restXml.ts b/clients/client-cloudfront/protocols/Aws_restXml.ts index 5d391d1464add..af7bd556b6a1e 100644 --- a/clients/client-cloudfront/protocols/Aws_restXml.ts +++ b/clients/client-cloudfront/protocols/Aws_restXml.ts @@ -19025,7 +19025,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-cloudsearch/protocols/Aws_query.ts b/clients/client-cloudsearch/protocols/Aws_query.ts index a10c461de3d87..14b43a0d6b693 100644 --- a/clients/client-cloudsearch/protocols/Aws_query.ts +++ b/clients/client-cloudsearch/protocols/Aws_query.ts @@ -4921,7 +4921,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-cloudwatch/protocols/Aws_query.ts b/clients/client-cloudwatch/protocols/Aws_query.ts index 3cf08d3270a21..f63f89c32507e 100644 --- a/clients/client-cloudwatch/protocols/Aws_query.ts +++ b/clients/client-cloudwatch/protocols/Aws_query.ts @@ -6370,7 +6370,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-docdb/protocols/Aws_query.ts b/clients/client-docdb/protocols/Aws_query.ts index b0605f012bc3d..c4712b13cfb3a 100644 --- a/clients/client-docdb/protocols/Aws_query.ts +++ b/clients/client-docdb/protocols/Aws_query.ts @@ -10727,7 +10727,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-ec2/protocols/Aws_ec2.ts b/clients/client-ec2/protocols/Aws_ec2.ts index 5986490194cb2..9f6f7afefee68 100644 --- a/clients/client-ec2/protocols/Aws_ec2.ts +++ b/clients/client-ec2/protocols/Aws_ec2.ts @@ -74754,7 +74754,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-elastic-beanstalk/protocols/Aws_query.ts b/clients/client-elastic-beanstalk/protocols/Aws_query.ts index 358f8afc514d0..83af9cc81068b 100644 --- a/clients/client-elastic-beanstalk/protocols/Aws_query.ts +++ b/clients/client-elastic-beanstalk/protocols/Aws_query.ts @@ -8205,7 +8205,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-elastic-load-balancing-v2/protocols/Aws_query.ts b/clients/client-elastic-load-balancing-v2/protocols/Aws_query.ts index a7886ce6b6d29..afbb524e7f5a3 100644 --- a/clients/client-elastic-load-balancing-v2/protocols/Aws_query.ts +++ b/clients/client-elastic-load-balancing-v2/protocols/Aws_query.ts @@ -7863,7 +7863,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-elastic-load-balancing/protocols/Aws_query.ts b/clients/client-elastic-load-balancing/protocols/Aws_query.ts index d8f92c948c6f5..8979ed04ef13c 100644 --- a/clients/client-elastic-load-balancing/protocols/Aws_query.ts +++ b/clients/client-elastic-load-balancing/protocols/Aws_query.ts @@ -5410,7 +5410,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-elasticache/protocols/Aws_query.ts b/clients/client-elasticache/protocols/Aws_query.ts index 109f60ffafb58..9981edc6705c3 100644 --- a/clients/client-elasticache/protocols/Aws_query.ts +++ b/clients/client-elasticache/protocols/Aws_query.ts @@ -15016,7 +15016,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-iam/protocols/Aws_query.ts b/clients/client-iam/protocols/Aws_query.ts index ce5f4d08e415d..0a573907d7dc3 100644 --- a/clients/client-iam/protocols/Aws_query.ts +++ b/clients/client-iam/protocols/Aws_query.ts @@ -21436,7 +21436,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-neptune/protocols/Aws_query.ts b/clients/client-neptune/protocols/Aws_query.ts index d05110270bd51..20feaa21dec1a 100644 --- a/clients/client-neptune/protocols/Aws_query.ts +++ b/clients/client-neptune/protocols/Aws_query.ts @@ -13195,7 +13195,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-rds/protocols/Aws_query.ts b/clients/client-rds/protocols/Aws_query.ts index 0cc2863fb6aa0..43bebc89ad1eb 100644 --- a/clients/client-rds/protocols/Aws_query.ts +++ b/clients/client-rds/protocols/Aws_query.ts @@ -28153,7 +28153,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-redshift/protocols/Aws_query.ts b/clients/client-redshift/protocols/Aws_query.ts index 3c14ac4aefa5e..604fd90c2a7d4 100644 --- a/clients/client-redshift/protocols/Aws_query.ts +++ b/clients/client-redshift/protocols/Aws_query.ts @@ -22294,7 +22294,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-route-53/protocols/Aws_restXml.ts b/clients/client-route-53/protocols/Aws_restXml.ts index b14de6506f9c4..2847e2e5cfee0 100644 --- a/clients/client-route-53/protocols/Aws_restXml.ts +++ b/clients/client-route-53/protocols/Aws_restXml.ts @@ -10422,7 +10422,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-s3-control/protocols/Aws_restXml.ts b/clients/client-s3-control/protocols/Aws_restXml.ts index 899c6149b53c1..a6a047ca88f03 100644 --- a/clients/client-s3-control/protocols/Aws_restXml.ts +++ b/clients/client-s3-control/protocols/Aws_restXml.ts @@ -8182,7 +8182,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-s3/protocols/Aws_restXml.ts b/clients/client-s3/protocols/Aws_restXml.ts index 8d399b4720f88..90e875b35e259 100644 --- a/clients/client-s3/protocols/Aws_restXml.ts +++ b/clients/client-s3/protocols/Aws_restXml.ts @@ -14724,7 +14724,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-ses/protocols/Aws_query.ts b/clients/client-ses/protocols/Aws_query.ts index c25d45a86e934..708d7729372f5 100644 --- a/clients/client-ses/protocols/Aws_query.ts +++ b/clients/client-ses/protocols/Aws_query.ts @@ -10320,7 +10320,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-sns/protocols/Aws_query.ts b/clients/client-sns/protocols/Aws_query.ts index 01b8303f2f8d9..19a662c5062ae 100644 --- a/clients/client-sns/protocols/Aws_query.ts +++ b/clients/client-sns/protocols/Aws_query.ts @@ -6347,7 +6347,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-sqs/protocols/Aws_query.ts b/clients/client-sqs/protocols/Aws_query.ts index ae13750d59cb0..59a687088bfd8 100644 --- a/clients/client-sqs/protocols/Aws_query.ts +++ b/clients/client-sqs/protocols/Aws_query.ts @@ -3141,7 +3141,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-sts/protocols/Aws_query.ts b/clients/client-sts/protocols/Aws_query.ts index b1b9f2343060b..bd81daea0ab2a 100644 --- a/clients/client-sts/protocols/Aws_query.ts +++ b/clients/client-sts/protocols/Aws_query.ts @@ -1480,7 +1480,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; From 95e0e4c53b8343e7c3d049be3df35cbea86de2fa Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Tue, 10 Aug 2021 16:08:26 +0000 Subject: [PATCH 8/8] fix(protocol_tests): only trim xml tag values which contain newline --- protocol_tests/aws-ec2/protocols/Aws_ec2.ts | 2 +- protocol_tests/aws-query/protocols/Aws_query.ts | 2 +- protocol_tests/aws-restxml/protocols/Aws_restXml.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/protocol_tests/aws-ec2/protocols/Aws_ec2.ts b/protocol_tests/aws-ec2/protocols/Aws_ec2.ts index a619c1d068220..86c018d18cc47 100644 --- a/protocol_tests/aws-ec2/protocols/Aws_ec2.ts +++ b/protocol_tests/aws-ec2/protocols/Aws_ec2.ts @@ -2172,7 +2172,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/protocol_tests/aws-query/protocols/Aws_query.ts b/protocol_tests/aws-query/protocols/Aws_query.ts index db625f9a4e59e..20535bbf2cf16 100644 --- a/protocol_tests/aws-query/protocols/Aws_query.ts +++ b/protocol_tests/aws-query/protocols/Aws_query.ts @@ -3002,7 +3002,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/protocol_tests/aws-restxml/protocols/Aws_restXml.ts b/protocol_tests/aws-restxml/protocols/Aws_restXml.ts index c10fa817434c9..b90b6120cb7ef 100644 --- a/protocol_tests/aws-restxml/protocols/Aws_restXml.ts +++ b/protocol_tests/aws-restxml/protocols/Aws_restXml.ts @@ -6173,7 +6173,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => decodeHTML(val), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0];