awslabs / aws-mobile-appsync-sdk-js

JavaScript library files for Offline, Sync, Sigv4. includes support for React Native
Apache License 2.0
916 stars 265 forks source link

Spread operator does not work with util.appendError #753

Open ryancausey opened 9 months ago

ryancausey commented 9 months ago

Note: If your issue/feature-request/question is regarding the AWS AppSync service, please log it in the official AWS AppSync forum

Do you want to request a feature or report a bug? Bug

What is the current behavior? Spread operator does not work to pass arguments to util.appendError. This causes an error when attempting to update the resolver code: "Ln 12, Col 22 code.js(12,22): error TS2556: A spread argument must either have a tuple type or be passed to a rest parameter. "

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem. Here is the minimal reproduction using a JavaScript unit resolver with a null data source:

export function request(ctx) {
    return {};
}

export function response(ctx) {
    const error_args = [
        `Downstream HTTP request failed with status foo.`,
        `http_504`,
        {a: 1},
        {b: 2},
    ]
    util.appendError(...error_args)
    return ctx.prev.result;
}

What is the expected behavior? The util.appendError call should be allowed, and the resolver code should be updated without receiving a TypeScript error.

Which versions and which environment (browser, react-native, nodejs) / OS are affected by this issue? Did this work in previous versions? APPSYNC_JS issue. It has never worked as far as I can tell.

A workaround is to define a wrapper function and use that to call util.AppendError:

function wrapper(a, b, c, d) {
    util.appendError(a, b, c, d)
}

export function request(ctx) {
    return {};
}

export function response(ctx) {
    const error_args = [
        `Downstream HTTP request failed with status foo.`,
        `http_504`,
        {a: 1},
        {b: 2},
    ]
    wrapper(...error_args)
    return ctx.prev.result;
}
tvmendoza commented 9 months ago

Hi there,

this would be the wrong repo for this particular issue. I created an issue there, feel free to track it there: https://github.com/aws/aws-appsync-community/issues/323