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

docs: new core data model #530

Merged

Conversation

jonaslagoni
Copy link
Member

@jonaslagoni jonaslagoni commented Dec 15, 2021

The change I am proposing can be read about here: https://github.com/asyncapi/modelina/blob/2769d6f20bd7f3ad0cd7ac525b00d4c7844e9246/docs/processing.md

The why

These are the issues that are triggering the change, that simply just shows the problems with the current CommonModel structure. We need a more precise structure to solve and prevent these issues from keep popping up:

The following issues highlight the need for better UX:

The rewards

  • No tight coupling to JSON Schema structure.
  • Better UX for preset and generator developers.
  • Better UX for users of Modelina, as it will be easier to understand the underlying data model.
  • Abstraction between data model types.
  • Enable easier representation of other input types, such as ProtoBuf, XML, JSON Type Definition, and many many more.

The code changes

So with these changes, how does it simplify the generators and presets?

For the examples below, I only focus on TypeScript but keep in mind these changes are relevant for each generator and preset.

Rendering of properties

Old implementation can be found here.

New simplified implementation becomes straight forward because patternProperties and additionalProperties are already resolved directly as ObjectModel properties using the new DictionaryModel.

  async renderProperties(): Promise<string> {
    const properties = this.model.properties || {};
    const content: string[] = [];

    for (const [propertyName, property] of Object.entries(properties)) {
      const rendererProperty = await this.runPropertyPreset(propertyName, property);
      content.push(rendererProperty);
    }
    return this.renderBlock(content);
  }

Serialization preset

Old implementation can be found here.

New simplified implementation for de/serialization functionality make use of the DictionaryModel and serializationType: 'unwrap' | 'normal' to support this behavior:

function renderMarshalProperty(modelInstanceVariable: string, model: ConstrainedMetaModel) {
  if (model instanceof ConstrainedReferencedModel) {
    const resolvedModel = model.referencedModel;
    if (resolvedModel instanceof ConstrainedObjectModel) {
      return `$\{${modelInstanceVariable}.marshal()}`;
    }
  }
  return realizePropertyFactory(modelInstanceVariable);
}
function renderMarshalProperties(model: ObjectModel, renderer: TypeScriptRenderer) {
  const properties = model.properties || {};
  const propertyKeys = [...Object.entries(properties)];
  const marshalProperties = propertyKeys.map(([prop, propModel]) => {
    const formattedPropertyName = renderer.nameProperty(prop, propModel);
    if (propModel.propertyModel instanceof ConstrainedDictionaryModel && propModel.propertyModel.serializationType === 'unwrap') {
      const modelInstanceVariable = 'value';
      const patternPropertyMarshalCode = renderMarshalProperty(modelInstanceVariable, propModel.propertyModel.keyType);
      const marshalCode = `json += \`"$\{key}": ${patternPropertyMarshalCode},\`;`;
      return `if(this.${prop} !== undefined) { 
  for (const [key, value] of this.${prop}.entries()) {
    //Only unwrap dictionary entries which are not already part of the properties
    if(Object.keys(this).includes(String(key))) continue;
    ${marshalCode}
  }
}`;
    } 
    const modelInstanceVariable = `this.${formattedPropertyName}`;
    const propMarshalCode = renderMarshalProperty(modelInstanceVariable, propModel.propertyModel);
    const marshalCode = `json += \`"${prop}": ${propMarshalCode},\`;`;
    return \`if(${modelInstanceVariable} !== undefined) {
    ${marshalCode} 
  }`;
  });
  return marshalProperties.join('\n');
}

Referenced model's type

Old implementation can be found here.

New implementation makes it easier to access the referencedModel directly through the new ConstrainedReferencedModel.

function renderMarshalProperty(modelInstanceVariable: string, model: ConstrainedMetaModel) {
  if (model instanceof RefModel) {
    const resolvedModel = model.referencedModel;
    if (resolvedModel instanceof ConstrainedObjectModel) {
      return `$\{${modelInstanceVariable}.marshal()}`;
    }
  }
  return realizePropertyFactory(modelInstanceVariable);
}

Figuring out a property's type

Old implementation can be found here.

Because we are dealing with a constrained data model, we can get the type as is:

  renderType(model: ConstrainedMetaModel): string {
    return model.type;
  }

And we will remove this function and use the type as is.

Accessing the model type externally

Because Modelina is expected to work with AsyncAPI generator templates we need a way to access the payload type. Similar to `Figuring out a property's type`.

Before, we had to use a bunch of internal functions to access it, and in some cases it was impossible. Now it is as easy as accessing the type property for the model.

const typescriptGenerator = new TypeScriptGenerator(...);
const generatedModels = await typescriptGenerator.generate(message.payload());
const messagePayloadModel = generatedModels[0];
const messagePayloadType = messagePayloadModel.type;

return `function publish(message: ${messagePayloadType}){ ... }`

Probably need to provide an extra external function to simplify this even more such as:

const typescriptGenerator = new TypeScriptGenerator(...);
const messagePayloadType = typescriptGenerator.getType(message.payload());

return `function publish(message: ${messagePayloadType}){ ... }`

But you get the idea 😄

@jonaslagoni jonaslagoni changed the title docs: new internal data model docs: new core data model Dec 16, 2021
@jonaslagoni jonaslagoni marked this pull request as ready for review December 16, 2021 14:42
@sonarcloud
Copy link

sonarcloud bot commented Dec 16, 2021

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 0 Code Smells

No Coverage information No Coverage information
No Duplication information No Duplication information

Copy link
Member

@smoya smoya left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good job @jonaslagoni! I like the approach of having that abstract model so we can support for any kind of input 👍
I dropped some comments. Might keep reviewing later!

docs/usage.md Outdated Show resolved Hide resolved
docs/README.md Outdated Show resolved Hide resolved
docs/Internal language.md Outdated Show resolved Hide resolved
docs/Internal language.md Outdated Show resolved Hide resolved
docs/Internal language.md Outdated Show resolved Hide resolved
@jonaslagoni
Copy link
Member Author

@derberg have you ever encountered a PR that can go around the restriction of one peer-review? It says I can merge, but @magicmatatjahu has not approved it anywhere 😅 Is the settings changed?

@derberg
Copy link
Member

derberg commented Feb 8, 2022

@jonaslagoni but it is not against master but some next branch. So yeah, you need to enable branch protection for this branch too

@jonaslagoni
Copy link
Member Author

@jonaslagoni but it is not against master but some next branch. So yeah, you need to enable branch protection for this branch too

Right 🤦 I don't have those permissions though 😛

@jonaslagoni
Copy link
Member Author

jonaslagoni commented Feb 16, 2022

I decided to rename DataModel to MetaModel as it's a lot of the same jab jab jab and hard to understand 😅

Hopefully, this makes much more sense 🤞 Please have a look @smoya @voxpelli @magicmatatjahu

docs/usage.md Outdated Show resolved Hide resolved
Copy link
Member

@smoya smoya left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice job @jonaslagoni 🎉 👏 ! It LGTM, however i'm not an owner 👐

Copy link
Member

@magicmatatjahu magicmatatjahu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One comment to the docs.

I have also another question related to the development of new approach. Do you wanna make it in main branch but in separate folder to have current logic and new one and in some time switch to new or do you prefer new branch (like next)?

</p>


## The Constrained Meta Model
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand idea about that but maybe we should call it as Language Meta Model and then call JavaEnumModel etc... I think that it will produce some confusion because in some languages it will be exactly constraint model, because some languages don't support enums/unions etc but some allow more freedom than others. What do you think?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or maybe just Language Model?

Copy link
Member Author

@jonaslagoni jonaslagoni Feb 18, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The idea is that all outputs should by some means support all MetaModels in one capacity or another.

For example for unions, if they are not supported like in TS string | number we can always render them as any or create wrapper classes class unionT { stringProp: string, numberProp: string }. It all comes down to the output it's possibilities, as well as what the user defines through options.

The constrained variant only refers to the values within the models, i.e. property name/type, model name and type, enum values, and keys, that ensure they are properly formatted in correct syntax.

So to me language meta model makes less sense I think 🤔

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and ok this is more generic, so 👌🏼 then, thanks for explanation! However I wonder if we really need to call this Constrained Meta. Maybe if we have a Meta Model which is "basic" then Data Model might be a better name for it, as the "final" version for the language?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Constrained, refers to the process the meta models go through, i.e. the contrainer (TypeScriptConstrained, etc).

What would you change the naming of the process and model name to, to make it consistant? 🤔

Can you try elaborate a bit more why you think constrain does not encapsulate correctly what it does?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The name may be but I am a man who thinks differently. To me constraint means that something is limited but in a validation/parsing way (probably too much JSON Scheme, hah 😄 ) and not in a language constraint way. I'm also not a fan of Java jargon to call it like LanguageConstrainedMetaModel, so ConstrainedMetaModel is ok but I'd prefer without Meta -> ConstrainedModel.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Haha, okay yea, I see 😄 Is there a way we need to highlight this difference in the docs?

Regarding ConstrainedModel, the "problem" is that the constrained model, is of type meta model as it inherits the class 😅 Think that will create more confusion, even though it is a long name 🤔

What if we keept it for now, and once we are ready to merge from next to master we can evaluate it then if it makes sense or not?

@jonaslagoni
Copy link
Member Author

I have also another question related to the development of new approach. Do you wanna make it in main branch but in separate folder to have current logic and new one and in some time switch to new or do you prefer new branch (like next)?

My initial idea was to use next and iterate with small PR's being merged. Of course that means it will take a few PR's before any release on the next branch will happen, because tests and code will be in a balance between the two. But thats fine by me.

Mostly it will be the same code just with MetaModel and ConstrainedMetaModel instead.

@magicmatatjahu
Copy link
Member

My initial idea was to use next and iterate with small PR's being merged. Of course that means it will take a few PR's before any release on the next branch will happen, because tests and code will be in a balance between the two. But thats fine by me.

Mostly it will be the same code just with MetaModel and ConstrainedMetaModel instead.

Ok 👌🏼

Copy link
Member

@magicmatatjahu magicmatatjahu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@jonaslagoni jonaslagoni merged commit 475e41d into asyncapi:next Feb 28, 2022
@jonaslagoni jonaslagoni deleted the feature/prepare_for_new_internal_model branch February 28, 2022 13:57
@sonarcloud
Copy link

sonarcloud bot commented Feb 28, 2022

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 0 Code Smells

No Coverage information No Coverage information
No Duplication information No Duplication information

@asyncapi-bot
Copy link
Contributor

🎉 This PR is included in version 0.39.9-next.1 🎉

The release is available on:

Your semantic-release bot 📦🚀

jonaslagoni added a commit that referenced this pull request Jan 23, 2023
## [1.0.0](v0.59.9...v1.0.0) (2023-01-23)

### Upgrade Steps

You can find the migration details here: https://github.com/asyncapi/modelina/blob/master/docs/migration.md 

Dont hesitate to reach out if you need help migrating to version 1.

### Breaking Changes
There is no specific PR that contains the breaking changes but is part of multiple PRs. See the migration part above.

### New Features
* feat: add Rust Generator (#818)
* feat: add Kotlin model generator (#1074)
* feat: add Python generator (#863)
* feat: add jsonbinpack preset for TypeScript (#854)
* feat: add support for AsyncAPI 2.5 (#893)
* feat: add support for oneOf and anyOf as UnionModel (#899)
* feat: integrate new AsyncAPI parser version (#925)
* feat: add C# Newtonsoft preset (#970)
* feat: add access to entire property object in constrainer (#985)
* feat: add precise csharp enum type (#1047)
* feat: add dependency manager (#1063)

### Bug Fixes
* fix: unwrapping dictionaries not working in marshaling preset (#855)
* fix: import path of helpers in DartRenderer (#794)
* fix: modelina cannot be used in website environments (#843)
* fix: duplicate dependencies being rendered (#842)
* fix: inner references not being found (#844)
* fix: root level references are not handled for JSON Schema (#829)
* fix: wrong typescript number type used for integers (#902)
* fix: merging CommonModel properties should not carry over properties to other models (#917)
* fix: duplicate and self dependencies should not be rendered (#903)
* fix: python generates unusable class for empty properties (#901)
* fix: javascript should not split out enums (#926)
* fix: typescript marshaling preset not caring about external models (#927)
* fix: typescript rendering wrong array type when union (#928)
* fix: java dictionary constrainer gives unusable integer type for map value (#929)
* fix: remove unintended characters for typescript marshaling preset (#935)
* fix: enable processor options to be passed processors (#920)
* fix: references are getting incorrect model names (#951)
* fix: enum generator for Java should use strict types for it's values (#944)
* fix: implicit python import error (#981)
* fix: rust compile errors on enum members containing digits (#994)
* fix: add `exec` as a reserved keyword for Python (#1000)
* fix: c# newtonsoft preset syntax errors (#1004)
* fix: rust enum renderer only working for JSON Schema inputs (#1001)
* fix: dependencies are rendered twice (#1002)
* fix: rust impl new fn for Boxed values (#1013)
* fix: solving blackbox tests problems (#905)
* fix: structs missing pub keyword in RustGenerator (#1021)
* fix: reserved keywords in Rust should be case-sensitive (#1031)
* fix: pattern properties not being accounted for (#1006)
* fix: csharp generator does not render optional types for optional properties (#1051)
* fix: polymorphic / union models rendered with index in enum member name (#1056)
* fix: add Jackson annotations at the field level (#1059)
* fix: improve integration with old AsyncAPI parser (#1050)
* fix: add Java constraints annotations at the field level (#1067)
* fix: java generator could generate illegal package names (#1084)

### Other Changes
* docs: new core data model (#530)
* refactor: introduce new core models (#655)
* refactor: add CommonModel conversion to MetaModel (#677)
* refactor: add TypeScript constrainer (#683)
* refactor: add JavaScript constrainer (#693)
* refactor: add Go constrainer (#695)
* refactor: add splitter (#676)
* refactor: add C# constrainer (#696)
* refactor: add Java constrainer (#694)
* refactor: simplified constraints and type mapping (#725)
* refactor: convert CSharp to new constraint setup (#735)
* refactor: convert Go to new constraint setup (#732)
* refactor: convert TS to new constraint setup (#736)
* refactor: convert JS to new constraint setup (#741)
* refactor: add object property model (#758)
* chore: refactored model setup to support generators (#766)
* chore: refactored input processors (#767)
* chore: refactored TypeScript and generator implementation (#765)
* chore: refactored Java to new core model (#769)
* chore: refactored Go generator (#771)
* chore: refactored CSharp generator (#770)
* chore: refactored JavaScript generator  (#773)
* chore: refactored dart generator (#778)
* chore: fix build errors (#779)
* chore: fix file generator tests (#782)
* chore: add test and fix constrain implementation (#781)
* chore: fix wrongful import (#783)
* refactor: switch interpretation of pattern properties (#791)
* refactor: fix constrain helpers and add test (#792)
* chore: convert to any model from common model (#793)
* chore: remove old post interpreter and fix tests (#795)
* chore: fix TypeHelpers tests (#802)
* chore: fix generator and renderer tests (#803)
* chore: remove unnecessary common model test (#798)
* chore: remove name helpers (#801)
* chore: fix tests for OutputModel (#800)
* chore: give constrained properties access to the raw property (#799)
* chore: fix enum model conversion (#797)
* chore: fix contains property check failing (#810)
* chore: removed unused property and fix general tests (#809)
* chore: refactor dart generators and test (#796)
* chore: rewrite java generator tests (#804)
* chore: rewrite TypeScript generator tests (#806)
* chore: rewrite CSharp generator tests (#807)
* chore: rewrite javascript generator tests (#805)
* fix: remaining test and implementation issues (#824)
* docs: move banner location (#865)
* docs: update language documentation (#862)
* docs: add migration guidelines (#860)
* docs: update input processing documentation (#859)
* docs: update constraint documentation (#858)
* chore: remove unused functions (#849)
* docs: update usage documentation (#857)
* docs: update preset documentation (#861)
* refactor: simplified example tests (#868)
* chore: add a template for new generators (#850)
* docs: remove duplicate dart output (#892)
* test: update snapshot for failing test (#907)
* chore: add a new example for json-schema-draft4-from-object (#897)
* chore: add a new example for JSON schema draft 6 (#933)
* ci: use @swc/jest to speedup tests (#938)
* ci: fix broken release pipeline (#956)
* docs: add contribution guidelines for processors (#950)
* chore: add missing test dependency for docker (#992)
* docs: add contributing guidelines for presets (#990)
* docs: improve readme with use-cases and examples (#1034)
* chore: add missing blackbox scripts (#1046)
* docs: add versioning and maintenance section (#991)
* test: update snapshots (#1064)
* docs: fix the wrong link to constraint example (#1065)
* test: added example to generate all models within the same file (#1054)
* chore: added prettier config (#838)
* chore: format code (#1088)


Co-authored-by: Kenneth Aasan <k.aasan@sportradar.com>, Co-authored-by: Leigh Johnson <hi@leighjohnson.me>, Co-authored-by: Maciej Urbańczyk <urbanczyk.maciej.95@gmail.com>, Co-authored-by: Nitin Tejuja <95347924+nitintejuja@users.noreply.github.com>, Co-authored-by: Amit Kumar Sharma <ksamit1110@gmail.com>, Co-authored-by: artur-ciocanu <artur.ciocanu@gmail.com>, Co-authored-by: Andrey Zaytsev <zaytsevand@outlook.com>, Co-authored-by: Zbigniew Malcherczyk <zmalcherczyk@gmail.com>, Co-authored-by: Yushi OMOTE <yushiomote@gmail.com>, Co-authored-by: Alejandra Quetzalli  <alejandra.quetzalli@postman.com>, Co-authored-by: Artur Ciocanu <ciocanu@adobe.com>, Co-authored-by: Julian R <mail@julianrapp.de>, Co-authored-by: Anay Sarkar <53341181+anaysarkar7@users.noreply.github.com>, Co-authored-by: Louis Xhaferi <louis.xhaferi@gmx.de>, Co-authored-by: Akshat Nema <76521428+akshatnema@users.noreply.github.com>
jonaslagoni added a commit that referenced this pull request Jan 24, 2023
## [1.0.0](v0.59.9...v1.0.0) (2023-01-23)

### Upgrade Steps

You can find the migration details here: https://github.com/asyncapi/modelina/blob/master/docs/migration.md 

Dont hesitate to reach out if you need help migrating to version 1.

### Breaking Changes
There is no specific PR that contains the breaking changes but is part of multiple PRs. See the migration part above.

### New Features
* feat: add Rust Generator (#818)
* feat: add Kotlin model generator (#1074)
* feat: add Python generator (#863)
* feat: add jsonbinpack preset for TypeScript (#854)
* feat: add support for AsyncAPI 2.5 (#893)
* feat: add support for oneOf and anyOf as UnionModel (#899)
* feat: integrate new AsyncAPI parser version (#925)
* feat: add C# Newtonsoft preset (#970)
* feat: add access to entire property object in constrainer (#985)
* feat: add precise csharp enum type (#1047)
* feat: add dependency manager (#1063)

### Bug Fixes
* fix: unwrapping dictionaries not working in marshaling preset (#855)
* fix: import path of helpers in DartRenderer (#794)
* fix: modelina cannot be used in website environments (#843)
* fix: duplicate dependencies being rendered (#842)
* fix: inner references not being found (#844)
* fix: root level references are not handled for JSON Schema (#829)
* fix: wrong typescript number type used for integers (#902)
* fix: merging CommonModel properties should not carry over properties to other models (#917)
* fix: duplicate and self dependencies should not be rendered (#903)
* fix: python generates unusable class for empty properties (#901)
* fix: javascript should not split out enums (#926)
* fix: typescript marshaling preset not caring about external models (#927)
* fix: typescript rendering wrong array type when union (#928)
* fix: java dictionary constrainer gives unusable integer type for map value (#929)
* fix: remove unintended characters for typescript marshaling preset (#935)
* fix: enable processor options to be passed processors (#920)
* fix: references are getting incorrect model names (#951)
* fix: enum generator for Java should use strict types for it's values (#944)
* fix: implicit python import error (#981)
* fix: rust compile errors on enum members containing digits (#994)
* fix: add `exec` as a reserved keyword for Python (#1000)
* fix: c# newtonsoft preset syntax errors (#1004)
* fix: rust enum renderer only working for JSON Schema inputs (#1001)
* fix: dependencies are rendered twice (#1002)
* fix: rust impl new fn for Boxed values (#1013)
* fix: solving blackbox tests problems (#905)
* fix: structs missing pub keyword in RustGenerator (#1021)
* fix: reserved keywords in Rust should be case-sensitive (#1031)
* fix: pattern properties not being accounted for (#1006)
* fix: csharp generator does not render optional types for optional properties (#1051)
* fix: polymorphic / union models rendered with index in enum member name (#1056)
* fix: add Jackson annotations at the field level (#1059)
* fix: improve integration with old AsyncAPI parser (#1050)
* fix: add Java constraints annotations at the field level (#1067)
* fix: java generator could generate illegal package names (#1084)

### Other Changes
* docs: new core data model (#530)
* refactor: introduce new core models (#655)
* refactor: add CommonModel conversion to MetaModel (#677)
* refactor: add TypeScript constrainer (#683)
* refactor: add JavaScript constrainer (#693)
* refactor: add Go constrainer (#695)
* refactor: add splitter (#676)
* refactor: add C# constrainer (#696)
* refactor: add Java constrainer (#694)
* refactor: simplified constraints and type mapping (#725)
* refactor: convert CSharp to new constraint setup (#735)
* refactor: convert Go to new constraint setup (#732)
* refactor: convert TS to new constraint setup (#736)
* refactor: convert JS to new constraint setup (#741)
* refactor: add object property model (#758)
* chore: refactored model setup to support generators (#766)
* chore: refactored input processors (#767)
* chore: refactored TypeScript and generator implementation (#765)
* chore: refactored Java to new core model (#769)
* chore: refactored Go generator (#771)
* chore: refactored CSharp generator (#770)
* chore: refactored JavaScript generator  (#773)
* chore: refactored dart generator (#778)
* chore: fix build errors (#779)
* chore: fix file generator tests (#782)
* chore: add test and fix constrain implementation (#781)
* chore: fix wrongful import (#783)
* refactor: switch interpretation of pattern properties (#791)
* refactor: fix constrain helpers and add test (#792)
* chore: convert to any model from common model (#793)
* chore: remove old post interpreter and fix tests (#795)
* chore: fix TypeHelpers tests (#802)
* chore: fix generator and renderer tests (#803)
* chore: remove unnecessary common model test (#798)
* chore: remove name helpers (#801)
* chore: fix tests for OutputModel (#800)
* chore: give constrained properties access to the raw property (#799)
* chore: fix enum model conversion (#797)
* chore: fix contains property check failing (#810)
* chore: removed unused property and fix general tests (#809)
* chore: refactor dart generators and test (#796)
* chore: rewrite java generator tests (#804)
* chore: rewrite TypeScript generator tests (#806)
* chore: rewrite CSharp generator tests (#807)
* chore: rewrite javascript generator tests (#805)
* fix: remaining test and implementation issues (#824)
* docs: move banner location (#865)
* docs: update language documentation (#862)
* docs: add migration guidelines (#860)
* docs: update input processing documentation (#859)
* docs: update constraint documentation (#858)
* chore: remove unused functions (#849)
* docs: update usage documentation (#857)
* docs: update preset documentation (#861)
* refactor: simplified example tests (#868)
* chore: add a template for new generators (#850)
* docs: remove duplicate dart output (#892)
* test: update snapshot for failing test (#907)
* chore: add a new example for json-schema-draft4-from-object (#897)
* chore: add a new example for JSON schema draft 6 (#933)
* ci: use @swc/jest to speedup tests (#938)
* ci: fix broken release pipeline (#956)
* docs: add contribution guidelines for processors (#950)
* chore: add missing test dependency for docker (#992)
* docs: add contributing guidelines for presets (#990)
* docs: improve readme with use-cases and examples (#1034)
* chore: add missing blackbox scripts (#1046)
* docs: add versioning and maintenance section (#991)
* test: update snapshots (#1064)
* docs: fix the wrong link to constraint example (#1065)
* test: added example to generate all models within the same file (#1054)
* chore: added prettier config (#838)
* chore: format code (#1088)


Co-authored-by: Kenneth Aasan <k.aasan@sportradar.com>
Co-authored-by: Leigh Johnson <hi@leighjohnson.me>
Co-authored-by: Maciej Urbańczyk <urbanczyk.maciej.95@gmail.com>
Co-authored-by: Nitin Tejuja <95347924+nitintejuja@users.noreply.github.com>
Co-authored-by: Amit Kumar Sharma <ksamit1110@gmail.com>
Co-authored-by: artur-ciocanu <artur.ciocanu@gmail.com>
Co-authored-by: Andrey Zaytsev <zaytsevand@outlook.com>
Co-authored-by: Zbigniew Malcherczyk <zmalcherczyk@gmail.com>
Co-authored-by: Yushi OMOTE <yushiomote@gmail.com>
Co-authored-by: Alejandra Quetzalli  <alejandra.quetzalli@postman.com>
Co-authored-by: Artur Ciocanu <ciocanu@adobe.com>
Co-authored-by: Julian R <mail@julianrapp.de>
Co-authored-by: Anay Sarkar <53341181+anaysarkar7@users.noreply.github.com>
Co-authored-by: Louis Xhaferi <louis.xhaferi@gmx.de>
Co-authored-by: Akshat Nema <76521428+akshatnema@users.noreply.github.com>
Ferror pushed a commit to Ferror/modelina that referenced this pull request Mar 7, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants