Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generate TypeScript event name -> message type map #1437

Closed
trevordixon opened this issue Jul 11, 2023 · 4 comments
Closed

Generate TypeScript event name -> message type map #1437

trevordixon opened this issue Jul 11, 2023 · 4 comments
Labels
enhancement New feature or request stale

Comments

@trevordixon
Copy link

Reason/Context

Please try answering few of those questions

  • Why we need this improvement?
  • How will this change help?
  • What is the motivation?

I'd like TypeScript to be able to verify that I'm associating the correct message type with a channel. Modelina could generate a type map, e.g.:

type ChannelToMessageType = {
  'foo.bar': FooBarMessage,
  'bar.baz': BarBazMessage,
}

This type could then be used to write safer code where TypeScript would ensure channels and message types match.

function pub<C extends keyof ChannelToMessageType>(channel: C, payload: ChannelToMessageType[C]) {
}

Description

Please try answering few of those questions

  • What changes have to be introduced?
  • Will this be a breaking change?
  • How could it be implemented/designed?

Not sure about this. I'd take a crack at implementing it if I could get a few pointers.

@trevordixon trevordixon added the enhancement New feature or request label Jul 11, 2023
@github-actions
Copy link
Contributor

Welcome to AsyncAPI. Thanks a lot for reporting your first issue. Please check out our contributors guide and the instructions about a basic recommended setup useful for opening a pull request.
Keep in mind there are also other channels you can use to interact with AsyncAPI community. For more details check out this issue.

@jonaslagoni
Copy link
Member

Hey @trevordixon, thanks for the issue!

By using the https://modelina.org/examples?selectedExample=asyncapi-from-parser and https://modelina.org/examples?selectedExample=meta-model you can pretty easily assemble this yourself 🙂

Here is some pseudo code to get you started:

const customModel = new ObjectModel('ChannelToMessageType', undefined, {});
for (channel in asyncapi.channels()) {
  const messageType = FormatHelpers.toPascalCase(channel.publish().message().payload().uid());
  const refModel = new ReferenceModel(messageType, undefined, {}, new ObjectModel(messageType, undefined, {}))
  const propertyModel = new ObjectPropertyModel(
    refModel.name,
    false,
    refModel
  );
  customModel.properties[propertyModel.propertyName] = propertyModel;
}
const inputModel = new InputMetaModel();
inputModel.models[customModel.name] = customModel;

... generator.generate(inputModel);

This means 15 lines of code and you have the model in all languages (just use different generators) 🙂

Whether this is something we want part of the native AsyncAPI input processor, not sure 🤔 Similar issues are #181 and #982

Copy link
Contributor

This issue has been automatically marked as stale because it has not had recent activity 😴

It will be closed in 120 days if no further activity occurs. To unstale this issue, add a comment with a detailed explanation.

There can be many reasons why some specific issue has no activity. The most probable cause is lack of time, not lack of interest. AsyncAPI Initiative is a Linux Foundation project not owned by a single for-profit company. It is a community-driven initiative ruled under open governance model.

Let us figure out together how to push this issue forward. Connect with us through one of many communication channels we established here.

Thank you for your patience ❤️

@github-actions github-actions bot added the stale label Nov 22, 2023
@github-actions github-actions bot closed this as not planned Won't fix, can't repro, duplicate, stale Mar 21, 2024
@jonaslagoni jonaslagoni reopened this Mar 22, 2024
@github-actions github-actions bot removed the stale label Mar 23, 2024
Copy link
Contributor

This issue has been automatically marked as stale because it has not had recent activity 😴

It will be closed in 120 days if no further activity occurs. To unstale this issue, add a comment with a detailed explanation.

There can be many reasons why some specific issue has no activity. The most probable cause is lack of time, not lack of interest. AsyncAPI Initiative is a Linux Foundation project not owned by a single for-profit company. It is a community-driven initiative ruled under open governance model.

Let us figure out together how to push this issue forward. Connect with us through one of many communication channels we established here.

Thank you for your patience ❤️

@github-actions github-actions bot added the stale label Jul 21, 2024
@github-actions github-actions bot closed this as not planned Won't fix, can't repro, duplicate, stale Nov 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request stale
Projects
None yet
Development

No branches or pull requests

2 participants