winglang / wing

A programming language for the cloud ☁️ A unified programming model, combining infrastructure and runtime code into one language ⚡
https://winglang.io
Other
4.68k stars 181 forks source link

confusing map view, putJson appears with no apparent reason #6486

Open ekeren opened 2 weeks ago

ekeren commented 2 weeks ago

I tried this:

bring cloud;

let b = new cloud.Bucket();
let sqs = new cloud.Queue();
b.onCreate(inflight (f) => {
  sqs.push(f);
});

sqs.setConsumer(inflight (m) => {
  log("{m}");
});

let fn = new cloud.Function(inflight () => {
  b.put("file.txt", "Hello World");
});

This happened:

image

I expected this:

  1. Not to see putJson
  2. The oncreate handler should have a connection to the queue (via push) - (probably already covered by https://github.com/winglang/wing/issues/6458)

Is there a workaround?

No response

Anything else?

No response

Wing Version

0.73.46

Node.js Version

No response

Platform(s)

No response

Community Notes

Chriscbr commented 2 weeks ago

The oncreate handler should have a connection to the queue (via push) - (probably already covered by https://github.com/winglang/wing/issues/6458)

I believe this will be fixed by #6509

Not to see putJson

I want to say this could be expected behavior, but I'm curious to learn what you'd like to see as a user.

Take this example:

bring cloud;

let b = new cloud.Bucket();
let q = new cloud.Queue();
q.setConsumer(inflight () => {
  b.put("file.txt", "Hello World");
});

I never call the queue's "push" method in the app code. But the Wing Console shows "push()" in the map.

Screenshot 2024-05-17 at 12 00 49 AM

@ekeren I'm curious does this feel like the same problem to you? Or do you think the problem showing put() and putJson() is different?

(BTW, we could hide the inner function if needed so that it instead looks like the map below)

Screenshot 2024-05-17 at 12 14 10 AM
ekeren commented 2 weeks ago

I don't understand why push is there, it is very confusing

I would expect to see a:

⚡️ consumer Handler and no push

Chriscbr commented 2 weeks ago

@ekeren I'm not sure I understand but maybe a synchronous discussion will help. 😄

BTW, I want to share one more example where I created my own Queue class:

bring cloud;

class Queue {
  b: cloud.Bucket;
  new() {
    this.b = new cloud.Bucket();
    nodeof(this.b).hidden = true;
  }
  pub inflight push(msg: str) {
    this.b.put("file.txt", msg);
  }
  pub inflight pop() {
    this.b.delete("file.txt");
  }
  pub inflight boring() {
    log("this method does not interact with other resources");
  }
  pub setConsumer(fn: inflight (str): void) {
    this.b.onUpdate(fn);
  }
}

let b = new cloud.Bucket();
let q = new Queue();
q.setConsumer(inflight () => {
  b.list();
});

The Queue class has three inflight methods, push, pop, and boring. boring does not interact with any other resources.

Even though I do not have a cloud.Function that is calling the push or pop methods on my class, to me it feels intuitive that the visual map shows the methods of the class I wrote.

Screenshot 2024-05-17 at 2 13 21 PM

To me what may be confusing is not all of my class's methods are shown - the Wing Console doesn't show there is a boring method that can also be called.

skyrpex commented 3 days ago

I'd prefer to have the public API of every class, too. The private methods, not that important IMO.