superfaceai / one-sdk-js

1️⃣ One Node.js SDK for all the APIs you want to integrate with
https://superface.ai
MIT License
46 stars 3 forks source link

[BUG] When replacing a variable's value with object, it gets merged into an existing object #338

Open jnv opened 1 year ago

jnv commented 1 year ago

Provide a general summary of the issue in the Title above

I have a Comlink with roughly the following flow (based on linkedin's PublishPost use case):

set {
  content = input.link ? {article: { source: input.link, title: input.title || input.link }} : undefined
}
// ...something
set if (Array.isArray(images) && images.length > 0) {
  // set content (and override link if it was set); assume single image here
  content = {media: images[0]}
}
set if (Array.isArray(images) && images.length > 1) {
  content = {
    multiImage: {
      images: images,
    }
  }
}

Expected Behavior

I expect the content variable to always contain a new object with the single property; either {article}, {media}, or {multiImage}.

Current Behavior

It seems the existing object in the content variable gets merged with the new object instead, so I end up with {article, media}, {media, multiImage} and similar.

Possible Solution

I suspect the culprit might be in the interpreter; updating the stack is done with mergeVariables function which merges objects recursively:

https://github.com/superfaceai/one-sdk-js/blob/e6895950db899e595a3d59e7b0ecac9fa816002b/src/core/interpreter/map-interpreter.ts#L389

Your Environment