winglang / wing

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

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

Closed ekeren closed 2 months ago

ekeren commented 6 months 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 6 months 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 6 months 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 6 months 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 5 months ago

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

github-actions[bot] commented 2 months ago

Hi,

This issue hasn't seen activity in 90 days. Therefore, we are marking this issue as stale for now. It will be closed after 7 days. Feel free to re-open this issue when there's an update or relevant information to be added. Thanks!