-
-
Notifications
You must be signed in to change notification settings - Fork 196
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
refactor: introduce new core models #655
refactor: introduce new core models #655
Conversation
Co-authored-by: asyncapi-bot <info@asyncapi.io>
Co-authored-by: Maciej Urbańczyk <urbanczyk.maciej.95@gmail.com>
Co-authored-by: asyncapi-bot <info@asyncapi.io>
Co-authored-by: asyncapi-bot <info@asyncapi.io>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have some problems with that implementation. I will describe them:
-
we should use inline modifiers in the constructors to initialize all properties in the models (I wonder if that type should be also readonly using
public readonly
modifiers). -
we should use generic for
originalInput
to define type of input (where possible):export class MetaModel<T = any> { constructor( public name: string, public originalInput: T, ) { } // we should discuss that generics export class StringModel extends MetaModel<string> {} export class BooleanModel extends MetaModel<boolean> {} // ...etc
-
we should avoid long name for props (and also for class names), for example
ReferencedModel
we can name asRefModel
withref
property or forUnionModel
theunion
prop is descriptive:export class RefModel extends MetaModel { constructor( name: string, originalInput: T, public ref: MetaModel, ) { super(name, originalInput); } } export class UnionModel extends MetaModel { constructor( name: string, originalInput: T, public union: MetaModel[] = [], ) { super(name, originalInput); } }
Not only meta models but also constrained models should look like this
-
what is the prop
type
responsible for inConstrainedMetaModel
?
I know these names (for props and for models) were given in the proposal but we can simplify them :)
Why? 🙂
I would probably rather have them completely descriptive, as oftentimes short names lose it's meaning to different users. And when open source, that should be prefered in my opinion 🙂 But I dont think it causes problems for now 🤔 We can change them later with a simple search-replace before releasing.
It is the usage |
Because it's a sugar syntax for manual definitions of properties: export class MetaModel<T = any> {
constructor(
public name: string,
public originalInput: T,
) {}
}
// vs
export class MetaModel<T = any> {
constructor(
name: string,
originalInput: T,
) {
this.name = name;
this.originalInput = originalInput;
}
}
You're right, but generic type should be still needed, of course with
The same arguments were used for version
So then it should be union type not as simple string. We can extend that union, but we should start with some simple type for that. |
Alright, I'll change it 🤔
No, it is the "rendered" type. For example for TS the union This means that generators and presets if they had to render properties, can simply do:
Still have to figure out how to do required and optional properties, but this should show the idea of the If for example, the MetaModel is a UnionModel, the It also serves for other code generators, outside of Modelina, to easier access the type of a model to be used elsewhere. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👌🏼 I added some suggestion. Decide what to do with them :)
Kudos, SonarCloud Quality Gate passed! |
🎉 This PR is included in version 0.39.9-next.1 🎉 The release is available on: Your semantic-release bot 📦🚀 |
🎉 This PR is included in version 1.0.0-next.23 🎉 The release is available on: Your semantic-release bot 📦🚀 |
## [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>
## [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>
Description
This PR adds the two basic models discussed in #530
Related issue(s)
Blocked by #530, #654