aws / aws-appsync-community

The AWS AppSync community
https://aws.amazon.com/appsync
Apache License 2.0
506 stars 32 forks source link

[JS] Behaviour of Array.prototype.join() incompatible with ECMAScript v6.0 #335

Open patrik-simunic-cz opened 9 months ago

patrik-simunic-cz commented 9 months ago

Issue description

The implementation of method Array.prototype.join() diverts from the official ECMAScript (ES) version 6.0 documentation. ECMAScript treats undefined and null elements as empty strings, while this custom proprietary runtime first converts them to null, then converts null to string and only then treats these double converted strings as elements:

// ECMAScript v6.0
var officialA = ["foo", undefined].join("/"); // -> "foo/"
var officialB = ["foo", null].join("/"); // -> "foo/"

// AppSync
var customA = ["foo", undefined].join("/"); // -> "foo/null"
var customB = ["foo", null].join("/"); // -> "foo/null"

Read the relevant section here - https://262.ecma-international.org/6.0/#sec-array.prototype.join - under the procedure step 13.c you'll find stated:

If element is undefined or null, let next be the empty String; otherwise, let next be ToString(element).

Bug reproduction

See the reproducible bug demo here: https://github.com/testuj-to/appsync-esv6-incompatible-join In the demo, 2 strings are expected to be returned ("foo/" and "foo/"), instead this is the output:

Screenshot 2023-11-12 at 2 09 28