Repository: asyncapi/modelina
Pull request #733 (2022-04-26 15:04:44)

feat: support AsyncAPI v2.4.0
<!--   Thank you for your contribution. Before you submit the pull request:
1. Follow our contribution guidelines
2. Test your changes and attach their results to the pull request.
3. Update the relevant documentation.
-->

**Description**
AsyncAPI v2.4.0 readiness

Test Results :

> cross-env CI=true jest --coverage --testPathIgnorePatterns ./test/blackbox --testPathIgnorePatterns ./examples/TEMPLATE

Browserslist: caniuse-lite is outdated. Please run:
  npx browserslist@latest --update-db
  Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
Browserslist: caniuse-lite is outdated. Please run:
  npx browserslist@latest --update-db
  Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
Browserslist: caniuse-lite is outdated. Please run:
  npx browserslist@latest --update-db
  Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
Browserslist: caniuse-lite is outdated. Please run:
  npx browserslist@latest --update-db
  Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
Browserslist: caniuse-lite is outdated. Please run:
  npx browserslist@latest --update-db
  Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
Browserslist: caniuse-lite is outdated. Please run:
  npx browserslist@latest --update-db
  Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
Browserslist: caniuse-lite is outdated. Please run:
  npx browserslist@latest --update-db
  Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
 PASS  test/models/Draft7Schema.spec.ts (8.655 s)
 PASS  test/models/CommonModel.spec.ts (10.963 s)
 PASS  test/processors/JsonSchemaInputProcessor.spec.ts (12.352 s)
 PASS  test/interpreter/unit/InterpretNot.spec.ts
 PASS  test/interpreter/unit/Intepreter.spec.ts
 PASS  test/generators/javascript/JavaScriptGenerator.spec.ts (17.143 s)
 PASS  test/interpreter/PostInterpreter.spec.ts (30.633 s)
 PASS  test/generators/java/JavaGenerator.spec.ts (30.667 s)
 PASS  test/generators/go/GoGenerator.spec.ts (22.059 s)
 PASS  test/generators/csharp/CSharpGenerator.spec.ts (17.221 s)
 PASS  test/generators/typescript/TypeScriptGenerator.spec.ts (30.779 s)
 PASS  test/generators/typescript/preset/MarshallingPreset.spec.ts (31.068 s)
 PASS  test/models/OpenAPIV3Schema.spec.ts
 PASS  test/processors/AsyncAPIInputProcessor.spec.ts
 PASS  test/models/SwaggerV2Schema.spec.ts
 PASS  test/generators/csharp/CSharpRenderer.spec.ts
 PASS  test/processors/InputProcessor.spec.ts
 PASS  test/generators/java/presets/CommonPreset.spec.ts
 PASS  test/utils/LoggingInterface.spec.ts
 PASS  test/generators/AbstractRenderer.spec.ts
 PASS  test/interpreter/unit/InterpretItems.spec.ts
 PASS  test/interpreter/unit/InterpretAllOf.spec.ts
 PASS  test/helpers/FormatHelpers.spec.ts
 PASS  test/generators/java/JavaRenderer.spec.ts
 PASS  test/interpreter/unit/Utils.spec.ts
 PASS  test/models/AsyncapiV2Schema.spec.ts
 PASS  test/generators/AbstractGenerator.spec.ts
 PASS  test/generators/typescript/TypeScriptRenderer.spec.ts
 PASS  test/interpreter/unit/InterpretAdditionalProperties.spec.ts
 PASS  test/processors/OpenAPIInputProcessor.spec.ts
 PASS  test/generators/typescript/preset/utils/ExampleFunctions.spec.ts
 PASS  test/interpreter/unit/InterpretAdditionalItems.spec.ts
 PASS  test/processors/SwaggerInputProcessor.spec.ts
 PASS  test/interpreter/unit/InterpretProperties.spec.ts
 PASS  test/generators/go/GoRenderer.spec.ts
 PASS  test/interpreter/unit/patternProperties.spec.ts
 PASS  test/helpers/NameHelpers.spec.ts
 PASS  test/generators/javascript/preset/utils/ExampleFunctions.spec.ts
 PASS  test/models/Draft4Schema.spec.ts
 PASS  test/models/Draft6Schema.spec.ts
 PASS  test/generators/javascript/JavaScriptFileGenerator.spec.ts
 PASS  test/generators/java/presets/DescriptionPreset.spec.ts
 PASS  test/generators/typescript/TypeScriptFileGenerator.spec.ts
 PASS  test/interpreter/unit/InterpretEnum.spec.ts
 PASS  test/interpreter/unit/InterpretDependencies.spec.ts
 PASS  test/interpreter/unit/InterpretConst.spec.ts
 PASS  test/models/OutputModel.spec.ts
 PASS  test/helpers/TypeHelpers.spec.ts
 PASS  test/generators/java/presets/ConstraintsPreset.spec.ts
 PASS  test/generators/csharp/CSharpFileGenerator.spec.ts
 PASS  test/generators/java/JavaFileGenerator.spec.ts
 PASS  test/generators/java/presets/JacksonPreset.spec.ts
 PASS  test/generators/javascript/JavaScriptRenderer.spec.ts
 PASS  test/helpers/FileHelpers.spec.ts
 PASS  test/generators/csharp/presets/CommonPreset.spec.ts
 PASS  test/generators/csharp/presets/JsonSerializerPreset.spec.ts
 PASS  test/generators/javascript/preset/MarshallingPreset.spec.ts
 PASS  test/generators/typescript/preset/DescriptionPreset.spec.ts
 PASS  test/models/RenderOutput.spec.ts
 PASS  test/generators/javascript/preset/ExamplePreset.spec.ts
 PASS  test/generators/typescript/preset/ExamplePreset.spec.ts
 PASS  examples/typescript-enum-type/index.spec.ts
 PASS  test/generators/typescript/renderers/EnumRenderer.spec.ts
 PASS  test/interpreter/Intepreter.spec.ts
 PASS  examples/generate-to-files/index.spec.ts
 PASS  examples/custom-logging/index.spec.ts
 PASS  examples/generate-go-enums/index.spec.ts
 PASS  examples/typescript-use-esm/index.spec.ts
 PASS  examples/javascript-use-esm/index.spec.ts
 PASS  examples/swagger2.0-from-object/index.spec.ts
 PASS  examples/typescript-use-cjs/index.spec.ts
 PASS  examples/openapi-from-object/index.spec.ts
 PASS  examples/csharp-generate-serializer/index.spec.ts
 PASS  examples/javascript-use-cjs/index.spec.ts
 PASS  examples/adapting-input-and-output/index.spec.ts
 PASS  examples/javascript-generate-marshalling/index.spec.ts
 PASS  examples/csharp-generate-equals-and-hashcode/index.spec.ts
 PASS  examples/typescript-generate-marshalling/index.spec.ts
 PASS  examples/java-generate-marshalling/index.spec.ts
 PASS  examples/java-generate-tostring/index.spec.ts
 PASS  examples/java-generate-hashcode/index.spec.ts
 PASS  examples/java-generate-equals/index.spec.ts
 PASS  examples/indentation-type-and-size/index.spec.ts
 PASS  examples/javascript-generate-example/index.spec.ts
 PASS  examples/typescript-generate-example/index.spec.ts
 PASS  examples/csharp-auto-implemented-properties/index.spec.ts
 PASS  examples/csharp-change-collection-type/index.spec.ts
 PASS  examples/java-generate-jackson-annotation/index.spec.ts
 PASS  examples/json-schema-draft7-from-object/index.spec.ts
 PASS  examples/java-change-collection-type/index.spec.ts
 PASS  examples/asyncapi-from-parser/index.spec.ts (5.11 s)
 PASS  examples/asyncapi-from-object/index.spec.ts
 PASS  examples/generate-javascript-models/index.spec.ts
 PASS  examples/include-custom-function/index.spec.ts
 PASS  examples/typescript-interface/index.spec.ts
 PASS  examples/generate-csharp-models/index.spec.ts
 PASS  examples/java-generate-javax-constraint-annotation/index.spec.ts
 PASS  examples/generate-typescript-models/index.spec.ts
 PASS  examples/typescript-generate-comments/index.spec.ts
 PASS  examples/generate-java-models/index.spec.ts
 PASS  examples/java-generate-javadoc/index.spec.ts
 PASS  examples/generate-go-models/index.spec.ts
 PASS  test/processors/TypeScriptInputProcessor.spec.ts (25.654 s)
 PASS  examples/java-from-typescript-type-with-options/index.spec.ts (22.731 s)
 PASS  examples/java-from-typescript-type/index.spec.ts (18.412 s)
-----------------------------------------|---------|----------|---------|---------|--------------------------------------
File                                     | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-----------------------------------------|---------|----------|---------|---------|--------------------------------------
All files                                |   96.94 |    86.15 |   96.72 |   97.37 | 
 src                                     |     100 |      100 |     100 |     100 | 
  index.ts                               |     100 |      100 |     100 |     100 | 
 src/generators                          |     100 |    88.57 |     100 |     100 | 
  AbstractGenerator.ts                   |     100 |    85.71 |     100 |     100 | 110,124
  AbstractRenderer.ts                    |     100 |    90.47 |     100 |     100 | 46-47
  index.ts                               |     100 |      100 |     100 |     100 | 
 src/generators/csharp                   |   90.62 |     73.8 |   83.33 |   92.39 | 
  CSharpFileGenerator.ts                 |     100 |      100 |     100 |     100 | 
  CSharpGenerator.ts                     |   86.11 |    54.54 |     100 |   88.57 | 71-72,78-79
  CSharpPreset.ts                        |     100 |      100 |     100 |     100 | 
  CSharpRenderer.ts                      |   89.47 |    80.64 |   66.66 |   91.89 | 50,66-67
  Constants.ts                           |     100 |      100 |     100 |     100 | 
  index.ts                               |     100 |      100 |     100 |     100 | 
 src/generators/csharp/presets           |     100 |       88 |     100 |     100 | 
  CommonPreset.ts                        |     100 |    83.33 |     100 |     100 | 20,32-54,80
  JsonSerializerPreset.ts                |     100 |     92.3 |     100 |     100 | 44,149
  index.ts                               |     100 |      100 |     100 |     100 | 
 src/generators/csharp/renderers         |     100 |    88.15 |     100 |     100 | 
  ClassRenderer.ts                       |     100 |    89.47 |     100 |     100 | 21-35,61,87,95-99
  EnumRenderer.ts                        |     100 |    84.21 |     100 |     100 | 50,79-93
 src/generators/go                       |    85.6 |    67.07 |   86.95 |   88.13 | 
  Constants.ts                           |     100 |      100 |     100 |     100 | 
  GoFileGenerator.ts                     |   36.36 |      100 |       0 |      40 | 16-22
  GoGenerator.ts                         |      80 |    46.42 |     100 |   84.31 | 30,39-42,79-80,86-87
  GoPreset.ts                            |     100 |      100 |     100 |     100 | 
  GoRenderer.ts                          |     100 |    76.92 |     100 |     100 | 26,59,61-73,115
  index.ts                               |     100 |      100 |       0 |     100 | 
 src/generators/go/renderers             |     100 |      100 |     100 |     100 | 
  EnumRenderer.ts                        |     100 |      100 |     100 |     100 | 
  StructRenderer.ts                      |     100 |      100 |     100 |     100 | 
 src/generators/java                     |   97.47 |     79.8 |   95.45 |   97.41 | 
  Constants.ts                           |     100 |      100 |     100 |     100 | 
  JavaFileGenerator.ts                   |     100 |      100 |     100 |     100 | 
  JavaGenerator.ts                       |   94.44 |       60 |     100 |   94.44 | 48-49
  JavaPreset.ts                          |     100 |      100 |     100 |     100 | 
  JavaRenderer.ts                        |   98.36 |    84.52 |     100 |   98.33 | 69
  index.ts                               |     100 |      100 |       0 |     100 | 
 src/generators/java/presets             |   96.96 |    83.75 |     100 |   96.87 | 
  CommonPreset.ts                        |   97.29 |    80.76 |     100 |   97.14 | 136-137
  ConstraintsPreset.ts                   |   93.54 |       90 |     100 |   93.54 | 39,43
  DescriptioPreset.ts                    |     100 |    83.33 |     100 |     100 | 17                                   
  JacksonPreset.ts                       |     100 |      100 |     100 |     100 | 
  index.ts                               |     100 |      100 |     100 |     100 | 
 src/generators/java/renderers           |     100 |    90.38 |     100 |     100 | 
  ClassRenderer.ts                       |     100 |    91.89 |     100 |     100 | 19,40,73
  EnumRenderer.ts                        |     100 |    86.66 |     100 |     100 | 23-37
 src/generators/javascript               |     100 |    72.91 |   94.44 |     100 | 
  Constants.ts                           |     100 |      100 |     100 |     100 | 
  JavaScriptFileGenerator.ts             |     100 |      100 |     100 |     100 | 
  JavaScriptGenerator.ts                 |     100 |    84.61 |     100 |     100 | 48
  JavaScriptPreset.ts                    |     100 |      100 |     100 |     100 | 
  JavaScriptRenderer.ts                  |     100 |    66.66 |     100 |     100 | 32,34-58
  index.ts                               |     100 |      100 |       0 |     100 | 
 src/generators/javascript/presets       |     100 |    78.57 |     100 |     100 | 
  CommonPreset.ts                        |     100 |    78.57 |     100 |     100 | 20-27,105-112,167-198
  index.ts                               |     100 |      100 |     100 |     100 | 
 src/generators/javascript/presets/utils |   91.42 |    80.95 |     100 |   91.42 | 
  ExampleFunction.ts                     |   91.42 |    80.95 |     100 |   91.42 | 19,43,56
 src/generators/javascript/renderers     |     100 |    85.71 |     100 |     100 | 
  ClassRenderer.ts                       |     100 |    85.71 |     100 |     100 | 31,73
 src/generators/typescript               |    98.7 |    84.25 |   96.66 |   98.65 | 
  Constants.ts                           |     100 |      100 |     100 |     100 | 
  TypeScriptFileGenerator.ts             |     100 |      100 |     100 |     100 | 
  TypeScriptGenerator.ts                 |     100 |     90.9 |     100 |     100 | 53,70
  TypeScriptPreset.ts                    |     100 |      100 |     100 |     100 | 
  TypeScriptRenderer.ts                  |   97.05 |    80.28 |     100 |   96.87 | 110,169
  index.ts                               |     100 |      100 |       0 |     100 | 
 src/generators/typescript/presets       |   95.65 |     91.3 |   81.48 |   95.61 | 
  CommonPreset.ts                        |     100 |    85.71 |     100 |     100 | 27,112,167-198
  DescriptionPreset.ts                   |   86.66 |      100 |   71.42 |   86.66 | 54-59
  ExportKeywordPreset.ts                 |   57.14 |      100 |      40 |   57.14 | 26-36
  index.ts                               |     100 |      100 |     100 |     100 | 
 src/generators/typescript/presets/utils |   94.59 |       88 |     100 |   94.59 | 
  ExampleFunction.ts                     |   94.59 |       88 |     100 |   94.59 | 53,69
 src/generators/typescript/renderers     |   99.13 |    78.57 |     100 |   99.12 | 
  ClassRenderer.ts                       |     100 |    81.81 |     100 |     100 | 30,71,95,107
  EnumRenderer.ts                        |   97.22 |    71.42 |     100 |   97.22 | 80
  InterfaceRenderer.ts                   |     100 |      100 |     100 |     100 | 
  TypeRenderer.ts                        |     100 |    83.33 |     100 |     100 | 26
 src/helpers                             |    96.9 |    91.86 |     100 |   97.64 | 
  FileHelpers.ts                         |     100 |      100 |     100 |     100 | 
  FormatHelpers.ts                       |   95.45 |    92.15 |     100 |   97.43 | 165
  NameHelpers.ts                         |   95.65 |    95.45 |     100 |   95.23 | 49
  PresetHelpers.ts                       |     100 |    33.33 |     100 |     100 | 16
  TypeHelpers.ts                         |     100 |      100 |     100 |     100 | 
  index.ts                               |     100 |      100 |     100 |     100 | 
 src/interpreter                         |   99.56 |    92.26 |     100 |     100 | 
  InterpretAdditionalItems.ts            |     100 |      100 |     100 |     100 | 
  InterpretAdditionalProperties.ts       |     100 |      100 |     100 |     100 | 
  InterpretAllOf.ts                      |     100 |      100 |     100 |     100 | 
  InterpretConst.ts                      |     100 |      100 |     100 |     100 |                                      
  InterpretDependencies.ts               |     100 |      100 |     100 |     100 | 
  InterpretEnum.ts                       |     100 |      100 |     100 |     100 | 
  InterpretItems.ts                      |     100 |    83.33 |     100 |     100 | 28,32
  InterpretNot.ts                        |   94.44 |    73.33 |     100 |     100 | 14-15,24,28
  InterpretPatternProperties.ts          |     100 |      100 |     100 |     100 | 
  InterpretProperties.ts                 |     100 |      100 |     100 |     100 | 
  Interpreter.ts                         |     100 |    82.92 |     100 |     100 | 37,59,62-67,87,97,113
  PostInterpreter.ts                     |     100 |    95.23 |     100 |     100 | 25
  Utils.ts                               |     100 |      100 |     100 |     100 | 
 src/models                              |   99.31 |    97.43 |     100 |   99.51 | 
  AsyncapiV2Schema.ts                    |     100 |      100 |     100 |     100 | 
  CommonInputModel.ts                    |     100 |      100 |     100 |     100 | 
  CommonModel.ts                         |   98.61 |    95.97 |     100 |   99.02 | 31,40
  Draft4Schema.ts                        |     100 |      100 |     100 |     100 | 
  Draft6Schema.ts                        |     100 |      100 |     100 |     100 | 
  Draft7Schema.ts                        |     100 |      100 |     100 |     100 | 
  OpenapiV3Schema.ts                     |     100 |      100 |     100 |     100 | 
  OutputModel.ts                         |     100 |      100 |     100 |     100 | 
  Preset.ts                              |     100 |      100 |     100 |     100 | 
  RenderOutput.ts                        |     100 |      100 |     100 |     100 | 
  SwaggerV2Schema.ts                     |     100 |      100 |     100 |     100 | 
  index.ts                               |     100 |      100 |     100 |     100 | 
 src/processors                          |    92.3 |    80.08 |   97.91 |    93.4 | 
  AbstractInputProcessor.ts              |     100 |      100 |     100 |     100 | 
  AsyncAPIInputProcessor.ts              |   84.78 |    80.26 |   88.88 |   85.88 | 73,79,82,85,88,91,94,100,103-106,123
  InputProcessor.ts                      |     100 |      100 |     100 |     100 | 
  JsonSchemaInputProcessor.ts            |      93 |    78.82 |     100 |   93.43 | 158,174,180,209,232,235,240,243,246 
  OpenAPIInputProcessor.ts               |   98.27 |       80 |     100 |     100 | 34,57,75-82
  SwaggerInputProcessor.ts               |     100 |    81.25 |     100 |     100 | 54-56,68
  TypeScriptInputProcessor.ts            |   83.33 |    78.57 |     100 |   87.17 | 47-50,56
  index.ts                               |     100 |      100 |     100 |     100 | 
 src/utils                               |     100 |      100 |     100 |     100 | 
  LoggingInterface.ts                    |     100 |      100 |     100 |     100 | 
  index.ts                               |     100 |      100 |     100 |     100 | 
-----------------------------------------|---------|----------|---------|---------|--------------------------------------

Test Suites: 105 passed, 105 total
Tests:       662 passed, 662 total
Snapshots:   116 passed, 116 total
Time:        70.13 s
Ran all test suites.
- ...
- ...
- ...

**Related issue(s)**
<!-- If you refer to a particular issue, provide its number, othewise, remove this section.
For example, `Resolves #123`, `Fixes #43`, or `See also #33`. The `See also #33` option will not automatically close the issue after the PR merge. -->

sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=asyncapi_generator-model-sdk&pullRequest=733)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733) No Coverage information  
[![0.0%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '0.0%')](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733&metric=new_duplicated_lines_density&view=list)


coveralls: ## Pull Request Test Coverage Report for [Build 2227560814](https://coveralls.io/builds/48588290)

* **1** of **1**   **(100.0%)**  changed or added relevant line in **1** file are covered.
* No unchanged relevant lines lost coverage.
* Overall coverage remained the same at **92.989%**

---



|  Totals | [![Coverage Status](https://coveralls.io/builds/48588290/badge)](https://coveralls.io/builds/48588290) |
| :-- | --: |
| Change from base [Build 2226766308](https://coveralls.io/builds/48577647): |  0.0% |
| Covered Lines: | 2632 |
| Relevant Lines: | 2703 |

---
##### 💛  - [Coveralls](https://coveralls.io)

owais34: @jonaslagoni the streetlights-operation-security.yml file to be placed in which folder ? 
jonaslagoni: > @jonaslagoni the streetlights-operation-security.yml file to be placed in which folder ?

In the 2.4 folder, as it uses the new operation security model 🙂 
jonaslagoni: Do you mind converting it to JSON btw? Don't think the BlackBox test setup can handle YAML 😄 
owais34: @jonaslagoni  Sure will do
sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=asyncapi_generator-model-sdk&pullRequest=733)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733) No Coverage information  
[![0.0%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '0.0%')](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=asyncapi_generator-model-sdk&pullRequest=733)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733) No Coverage information  
[![0.0%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '0.0%')](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733&metric=new_duplicated_lines_density&view=list)


owais34: @jonaslagoni done 
sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=asyncapi_generator-model-sdk&pullRequest=733)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733) No Coverage information  
[![0.0%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '0.0%')](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=asyncapi_generator-model-sdk&pullRequest=733)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733) No Coverage information  
[![0.0%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '0.0%')](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733&metric=new_duplicated_lines_density&view=list)


owais34: @jonaslagoni  I think that should do it hopefully , this was quite a learning experience  😁.
sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=asyncapi_generator-model-sdk&pullRequest=733)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=asyncapi_generator-model-sdk&pullRequest=733&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733) No Coverage information  
[![0.0%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '0.0%')](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonarcloud.io/component_measures?id=asyncapi_generator-model-sdk&pullRequest=733&metric=new_duplicated_lines_density&view=list)


owais34: @jonaslagoni  yesssss!!!!🤩

Patch:
diff --git a/README.md b/README.md
index 0cf9e6db..6f656bfa 100644
--- a/README.md
+++ b/README.md
@@ -71,7 +71,7 @@ To see the complete feature list for each language, please click the individual
   </tr>
   <tr>
     <td><a href="./docs/usage.md#generate-models-from-asyncapi-documents">AsyncAPI</a></td>
-    <td>We support the following AsyncAPI versions: <em>2.0.0, 2.1.0, 2.2.0 and 2.3.0</em>, which generates models for all the defined message payloads.</td>
+    <td>We support the following AsyncAPI versions: <em>2.0.0, 2.1.0, 2.2.0, 2.3.0 and 2.4.0</em>, which generates models for all the defined message payloads.</td>
   </tr>
   <tr>
     <td><a href="./docs/usage.md#generate-models-from-json-schema-documents">JSON Schema</a></td>
diff --git a/package-lock.json b/package-lock.json
index f400d217..0b4b8a11 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,7 @@
       "dependencies": {
         "@apidevtools/json-schema-ref-parser": "^9.0.9",
         "@apidevtools/swagger-parser": "^10.0.3",
-        "@asyncapi/parser": "^1.14.0",
+        "@asyncapi/parser": "^1.15.0",
         "change-case": "^4.1.2",
         "openapi-types": "9.3.0",
         "typescript-json-schema": "^0.53.0"
@@ -16144,8 +16144,7 @@
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
       "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==",
-      "dev": true,
-      "requires": {}
+      "dev": true
     },
     "@octokit/plugin-rest-endpoint-methods": {
       "version": "5.13.0",
@@ -16565,6 +16564,16 @@
         "eslint-visitor-keys": "^2.0.0"
       }
     },
+    "JSONStream": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+      "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+      "dev": true,
+      "requires": {
+        "jsonparse": "^1.2.0",
+        "through": ">=2.2.7 <3"
+      }
+    },
     "abab": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
@@ -16591,8 +16600,7 @@
       "version": "5.3.2",
       "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
       "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-      "dev": true,
-      "requires": {}
+      "dev": true
     },
     "acorn-walk": {
       "version": "7.2.0",
@@ -17497,8 +17505,8 @@
       "integrity": "sha512-Jr9KAKgqAkwXMRHjxDwO/zOCDKod1XdAESHAGuJX38iZ7ZzVti/tvVoysO0suMsdAObp9NQ2rHSsSbnAqZ5f5g==",
       "dev": true,
       "requires": {
-        "is-text-path": "^1.0.1",
         "JSONStream": "^1.0.4",
+        "is-text-path": "^1.0.1",
         "lodash": "^4.17.15",
         "meow": "^8.0.0",
         "split2": "^3.0.0",
@@ -18284,8 +18292,7 @@
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz",
       "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==",
-      "dev": true,
-      "requires": {}
+      "dev": true
     },
     "eslint-import-resolver-node": {
       "version": "0.3.6",
@@ -18425,8 +18432,7 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/eslint-plugin-i18n-text/-/eslint-plugin-i18n-text-1.0.1.tgz",
       "integrity": "sha512-3G3UetST6rdqhqW9SfcfzNYMpQXS7wNkJvp6dsXnjzGiku6Iu5hl3B0kmk6lIcFPwYjhQIY+tXVRtK9TlGT7RA==",
-      "dev": true,
-      "requires": {}
+      "dev": true
     },
     "eslint-plugin-import": {
       "version": "2.25.2",
@@ -18503,8 +18509,7 @@
       "version": "0.10.0",
       "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.10.0.tgz",
       "integrity": "sha512-FBRIBmWQh2UAfuLSnuYEfmle33jIup9hfkR0X8pkfjeCKNpHUG8qyZI63ahs3aw8CJrv47QJ9ccdK3ZxKH016A==",
-      "dev": true,
-      "requires": {}
+      "dev": true
     },
     "eslint-rule-documentation": {
       "version": "1.0.23",
@@ -20446,8 +20451,7 @@
       "version": "1.2.2",
       "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
       "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
-      "dev": true,
-      "requires": {}
+      "dev": true
     },
     "jest-regex-util": {
       "version": "27.0.6",
@@ -21291,16 +21295,6 @@
       "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
       "dev": true
     },
-    "JSONStream": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
-      "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
-      "dev": true,
-      "requires": {
-        "jsonparse": "^1.2.0",
-        "through": ">=2.2.7 <3"
-      }
-    },
     "kind-of": {
       "version": "6.0.3",
       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -21645,8 +21639,7 @@
       "version": "5.3.0",
       "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz",
       "integrity": "sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==",
-      "dev": true,
-      "requires": {}
+      "dev": true
     },
     "markdown-link": {
       "version": "0.1.1",
@@ -22008,76 +22001,76 @@
       "integrity": "sha512-120p116CE8VMMZ+hk8IAb1inCPk4Dj3VZw29/n2g6UI77urJKVYb7FZUDW8hY+EBnfsjI/2yrobBgFyzo7YpVQ==",
       "dev": true,
       "requires": {
-        "@isaacs/string-locale-compare": "*",
-        "@npmcli/arborist": "*",
-        "@npmcli/ci-detect": "*",
-        "@npmcli/config": "*",
-        "@npmcli/map-workspaces": "*",
-        "@npmcli/package-json": "*",
-        "@npmcli/run-script": "*",
-        "abbrev": "*",
-        "ansicolors": "*",
-        "ansistyles": "*",
-        "archy": "*",
-        "cacache": "*",
-        "chalk": "*",
-        "chownr": "*",
-        "cli-columns": "*",
-        "cli-table3": "*",
-        "columnify": "*",
-        "fastest-levenshtein": "*",
-        "glob": "*",
-        "graceful-fs": "*",
-        "hosted-git-info": "*",
-        "ini": "*",
-        "init-package-json": "*",
-        "is-cidr": "*",
-        "json-parse-even-better-errors": "*",
-        "libnpmaccess": "*",
-        "libnpmdiff": "*",
-        "libnpmexec": "*",
-        "libnpmfund": "*",
-        "libnpmhook": "*",
-        "libnpmorg": "*",
-        "libnpmpack": "*",
-        "libnpmpublish": "*",
-        "libnpmsearch": "*",
-        "libnpmteam": "*",
-        "libnpmversion": "*",
-        "make-fetch-happen": "*",
-        "minipass": "*",
-        "minipass-pipeline": "*",
-        "mkdirp": "*",
-        "mkdirp-infer-owner": "*",
-        "ms": "*",
-        "node-gyp": "*",
-        "nopt": "*",
-        "npm-audit-report": "*",
-        "npm-install-checks": "*",
-        "npm-package-arg": "*",
-        "npm-pick-manifest": "*",
-        "npm-profile": "*",
-        "npm-registry-fetch": "*",
-        "npm-user-validate": "*",
-        "npmlog": "*",
-        "opener": "*",
-        "pacote": "*",
-        "parse-conflict-json": "*",
-        "qrcode-terminal": "*",
-        "read": "*",
-        "read-package-json": "*",
-        "read-package-json-fast": "*",
-        "readdir-scoped-modules": "*",
-        "rimraf": "*",
-        "semver": "*",
-        "ssri": "*",
-        "tar": "*",
-        "text-table": "*",
-        "tiny-relative-date": "*",
-        "treeverse": "*",
-        "validate-npm-package-name": "*",
-        "which": "*",
-        "write-file-atomic": "*"
+        "@isaacs/string-locale-compare": "^1.1.0",
+        "@npmcli/arborist": "^2.9.0",
+        "@npmcli/ci-detect": "^1.2.0",
+        "@npmcli/config": "^2.3.0",
+        "@npmcli/map-workspaces": "^1.0.4",
+        "@npmcli/package-json": "^1.0.1",
+        "@npmcli/run-script": "^1.8.6",
+        "abbrev": "~1.1.1",
+        "ansicolors": "~0.3.2",
+        "ansistyles": "~0.1.3",
+        "archy": "~1.0.0",
+        "cacache": "^15.3.0",
+        "chalk": "^4.1.2",
+        "chownr": "^2.0.0",
+        "cli-columns": "^3.1.2",
+        "cli-table3": "^0.6.0",
+        "columnify": "~1.5.4",
+        "fastest-levenshtein": "^1.0.12",
+        "glob": "^7.2.0",
+        "graceful-fs": "^4.2.8",
+        "hosted-git-info": "^4.0.2",
+        "ini": "^2.0.0",
+        "init-package-json": "^2.0.5",
+        "is-cidr": "^4.0.2",
+        "json-parse-even-better-errors": "^2.3.1",
+        "libnpmaccess": "^4.0.2",
+        "libnpmdiff": "^2.0.4",
+        "libnpmexec": "^2.0.1",
+        "libnpmfund": "^1.1.0",
+        "libnpmhook": "^6.0.2",
+        "libnpmorg": "^2.0.2",
+        "libnpmpack": "^2.0.1",
+        "libnpmpublish": "^4.0.1",
+        "libnpmsearch": "^3.1.1",
+        "libnpmteam": "^2.0.3",
+        "libnpmversion": "^1.2.1",
+        "make-fetch-happen": "^9.1.0",
+        "minipass": "^3.1.3",
+        "minipass-pipeline": "^1.2.4",
+        "mkdirp": "^1.0.4",
+        "mkdirp-infer-owner": "^2.0.0",
+        "ms": "^2.1.2",
+        "node-gyp": "^7.1.2",
+        "nopt": "^5.0.0",
+        "npm-audit-report": "^2.1.5",
+        "npm-install-checks": "^4.0.0",
+        "npm-package-arg": "^8.1.5",
+        "npm-pick-manifest": "^6.1.1",
+        "npm-profile": "^5.0.3",
+        "npm-registry-fetch": "^11.0.0",
+        "npm-user-validate": "^1.0.1",
+        "npmlog": "^5.0.1",
+        "opener": "^1.5.2",
+        "pacote": "^11.3.5",
+        "parse-conflict-json": "^1.1.1",
+        "qrcode-terminal": "^0.12.0",
+        "read": "~1.0.7",
+        "read-package-json": "^4.1.1",
+        "read-package-json-fast": "^2.0.3",
+        "readdir-scoped-modules": "^1.1.0",
+        "rimraf": "^3.0.2",
+        "semver": "^7.3.5",
+        "ssri": "^8.0.1",
+        "tar": "^6.1.11",
+        "text-table": "~0.2.0",
+        "tiny-relative-date": "^1.3.0",
+        "treeverse": "^1.0.4",
+        "validate-npm-package-name": "~3.0.0",
+        "which": "^2.0.2",
+        "write-file-atomic": "^3.0.3"
       },
       "dependencies": {
         "@gar/promisify": {
@@ -23875,14 +23868,6 @@
             "minipass": "^3.1.1"
           }
         },
-        "string_decoder": {
-          "version": "1.3.0",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "safe-buffer": "~5.2.0"
-          }
-        },
         "string-width": {
           "version": "2.1.1",
           "bundled": true,
@@ -23907,6 +23892,14 @@
             }
           }
         },
+        "string_decoder": {
+          "version": "1.3.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "safe-buffer": "~5.2.0"
+          }
+        },
         "stringify-package": {
           "version": "1.0.1",
           "bundled": true,
@@ -25384,15 +25377,6 @@
       "integrity": "sha512-DBp0lSvX5G9KGRDTkR/R+a29H+Wk2xItOF+MpZLLNDWbEV9tGPnqLPxHEYjmiz8xGtJHRIqmI+hCjmNzqoA4nQ==",
       "dev": true
     },
-    "string_decoder": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
-      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
-      "dev": true,
-      "requires": {
-        "safe-buffer": "~5.2.0"
-      }
-    },
     "string-length": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
@@ -25433,6 +25417,15 @@
         "define-properties": "^1.1.3"
       }
     },
+    "string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "~5.2.0"
+      }
+    },
     "strip-ansi": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -26224,8 +26217,7 @@
       "version": "7.5.5",
       "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz",
       "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==",
-      "dev": true,
-      "requires": {}
+      "dev": true
     },
     "xml-name-validator": {
       "version": "3.0.0",
diff --git a/package.json b/package.json
index 819dbd9c..26b9f148 100644
--- a/package.json
+++ b/package.json
@@ -36,7 +36,7 @@
   "dependencies": {
     "@apidevtools/json-schema-ref-parser": "^9.0.9",
     "@apidevtools/swagger-parser": "^10.0.3",
-    "@asyncapi/parser": "^1.14.0",
+    "@asyncapi/parser": "^1.15",
     "change-case": "^4.1.2",
     "openapi-types": "9.3.0",
     "typescript-json-schema": "^0.53.0"
diff --git a/src/processors/AsyncAPIInputProcessor.ts b/src/processors/AsyncAPIInputProcessor.ts
index b5569189..b64342a9 100644
--- a/src/processors/AsyncAPIInputProcessor.ts
+++ b/src/processors/AsyncAPIInputProcessor.ts
@@ -9,7 +9,7 @@ import { AsyncapiV2Schema } from '../models/AsyncapiV2Schema';
  * Class for processing AsyncAPI inputs
  */
 export class AsyncAPIInputProcessor extends AbstractInputProcessor {
-  static supportedVersions = ['2.0.0', '2.1.0', '2.2.0', '2.3.0'];
+  static supportedVersions = ['2.0.0', '2.1.0', '2.2.0', '2.3.0','2.4.0'];
 
   /**
    * Process the input as an AsyncAPI document


Test patch:
diff --git a/test/blackbox/blackbox.spec.ts b/test/blackbox/blackbox.spec.ts
index 5dcc3702..505f910a 100644
--- a/test/blackbox/blackbox.spec.ts
+++ b/test/blackbox/blackbox.spec.ts
@@ -29,6 +29,8 @@ const jsonSchemaDraft4Files = readFilesInFolder('JsonSchemaDraft-4');
 const AsyncAPIV2_0Files = readFilesInFolder('AsyncAPI-2_0');
 const AsyncAPIV2_1Files = readFilesInFolder('AsyncAPI-2_1');
 const AsyncAPIV2_2Files = readFilesInFolder('AsyncAPI-2_2');
+const AsyncAPIV2_3Files = readFilesInFolder('AsyncAPI-2_3');
+const AsyncAPIV2_4Files = readFilesInFolder('AsyncAPI-2_4');
 
 const filesToTest = [
   ...OpenAPI3_0Files.filter(({file}) => { 
@@ -50,6 +52,14 @@ const filesToTest = [
     //Blocked by https://github.com/asyncapi/modelina/issues/504
     return file !== './docs/AsyncAPI-2_2/dummy.json';
   }),
+  ...AsyncAPIV2_3Files.filter(({file}) => {
+    //Blocked by https://github.com/asyncapi/modelina/issues/504
+    return file !== './docs/AsyncAPI-2_3/dummy.json';
+  }),
+  ...AsyncAPIV2_4Files.filter(({file}) => {
+    //Blocked by https://github.com/asyncapi/modelina/issues/504
+    return file !== './docs/AsyncAPI-2_4/dummy.json';
+  }),
   ...jsonSchemaDraft7Files.filter(({file}) => { 
     //Blocked by https://github.com/asyncapi/modelina/issues/388
     return file !== './docs/JsonSchemaDraft-7/draft-7-core.json';
diff --git a/test/blackbox/docs/AsyncAPI-2_4/dummy.json b/test/blackbox/docs/AsyncAPI-2_4/dummy.json
new file mode 100644
index 00000000..bb37a294
--- /dev/null
+++ b/test/blackbox/docs/AsyncAPI-2_4/dummy.json
@@ -0,0 +1,574 @@
+{
+  "asyncapi": "2.4.0",
+  "externalDocs": {
+    "description": "Find more info here",
+    "url": "https://www.asyncapi.com"
+  },
+  "info": {
+    "title": "Dummy example with all spec features included",
+    "version": "0.0.1",
+    "description": "This is an example of AsyncAPI specification file that is suppose to include all possible features of the AsyncAPI specification. Do not use it on production.\n\nIt's goal is to support development of documentation and code generation with the [AsyncAPI Generator](https://github.com/asyncapi/generator/) and [Template projects](https://github.com/search?q=topic%3Aasyncapi+topic%3Agenerator+topic%3Atemplate)\n",
+    "license": {
+      "name": "Apache 2.0",
+      "url": "https://www.apache.org/licenses/LICENSE-2.0"
+    },
+    "contact": {
+      "name": "API Support",
+      "url": "http://www.asyncapi.com/support",
+      "email": "info@asyncapi.io"
+    },
+    "x-twitter": "@AsyncAPISpec"
+  },
+  "tags": [
+    {
+      "name": "root-tag1",
+      "externalDocs": {
+        "description": "External docs description 1",
+        "url": "https://www.asyncapi.com/"
+      }
+    },
+    {
+      "name": "root-tag2",
+      "description": "Description 2",
+      "externalDocs": {
+        "url": "https://www.asyncapi.com/"
+      }
+    },
+    {
+      "name": "root-tag3"
+    },
+    {
+      "name": "root-tag4",
+      "description": "Description 4"
+    },
+    {
+      "name": "root-tag5",
+      "externalDocs": {
+        "url": "https://www.asyncapi.com/"
+      }
+    }
+  ],
+  "servers": {
+    "dummy-mqtt": {
+      "url": "mqtt://localhost",
+      "protocol": "mqtt",
+      "description": "dummy MQTT broker",
+      "bindings": {
+        "mqtt": {
+          "clientId": "guest",
+          "cleanSession": true
+        }
+      }
+    },
+    "dummy-amqp": {
+      "url": "amqp://localhost:{port}",
+      "protocol": "amqp",
+      "description": "dummy AMQP broker",
+      "protocolVersion": "0.9.1",
+      "variables": {
+        "port": {
+          "enum": [
+            "15672",
+            "5672"
+          ]
+        }
+      },
+      "security": [
+        {
+          "user-password": []
+        }
+      ]
+    },
+    "dummy-kafka": {
+      "url": "http://localhost:{port}",
+      "protocol": "kafka",
+      "description": "dummy Kafka broker",
+      "variables": {
+        "port": {
+          "default": "9092"
+        }
+      }
+    }
+  },
+  "defaultContentType": "application/json",
+  "channels": {
+    "dummy/channel/with/{dummy}/parameter/create": {
+      "servers": [
+        "dummy-kafka"
+      ],
+      "x-dummy-security": {
+        "$ref": "#/components/securitySchemes/supportedOauthFlows/flows/clientCredentials"
+      },
+      "description": "Dummy channel description.",
+      "parameters": {
+        "dummy": {
+          "$ref": "#/components/parameters/dummy"
+        }
+      },
+      "publish": {
+        "summary": "Inform whenever something dummy is created.",
+        "description": "Longer description.\n\nStill dummy though.\n",
+        "operationId": "receiveNewDummyInfo",
+        "tags": [
+          {
+            "name": "oparation-tag1",
+            "externalDocs": {
+              "description": "External docs description 1",
+              "url": "https://www.asyncapi.com/"
+            }
+          },
+          {
+            "name": "oparation-tag2",
+            "description": "Description 2",
+            "externalDocs": {
+              "url": "https://www.asyncapi.com/"
+            }
+          },
+          {
+            "name": "oparation-tag3"
+          },
+          {
+            "name": "oparation-tag4",
+            "description": "Description 4"
+          },
+          {
+            "name": "oparation-tag5",
+            "externalDocs": {
+              "url": "https://www.asyncapi.com/"
+            }
+          }
+        ],
+        "traits": [
+          {
+            "$ref": "#/components/operationTraits/kafka"
+          }
+        ],
+        "message": {
+          "$ref": "#/components/messages/dummyCreated"
+        }
+      }
+    },
+    "dummy/channel/without/parameter": {
+      "bindings": {
+        "amqp": {
+          "is": "routingKey"
+        }
+      },
+      "subscribe": {
+        "operationId": "receiveSystemInfo",
+        "bindings": {
+          "amqp": {
+            "expiration": 100000,
+            "userId": "guest",
+            "cc": [
+              "user.logs"
+            ],
+            "priority": 10,
+            "deliveryMode": 2,
+            "mandatory": false,
+            "bcc": [
+              "external.audit"
+            ],
+            "replyTo": "user.signedup",
+            "timestamp": true,
+            "ack": false,
+            "bindingVersion": "0.1.0"
+          }
+        },
+        "message": {
+          "$ref": "#/components/messages/dummyInfo"
+        }
+      }
+    }
+  },
+  "components": {
+    "messages": {
+      "dummyCreated": {
+        "name": "dummyCreated",
+        "title": "Dummy created message",
+        "summary": "This is just a dummy create message",
+        "correlationId": {
+          "description": "This is a dummy correlation ID.",
+          "location": "$message.header#/correlationId"
+        },
+        "tags": [
+          {
+            "name": "message-tag1",
+            "externalDocs": {
+              "description": "External docs description 1",
+              "url": "https://www.asyncapi.com/"
+            }
+          },
+          {
+            "name": "message-tag2",
+            "description": "Description 2",
+            "externalDocs": {
+              "url": "https://www.asyncapi.com/"
+            }
+          },
+          {
+            "name": "message-tag3"
+          },
+          {
+            "name": "message-tag4",
+            "description": "Description 4"
+          },
+          {
+            "name": "message-tag5",
+            "externalDocs": {
+              "url": "https://www.asyncapi.com/"
+            }
+          }
+        ],
+        "headers": {
+          "type": "object",
+          "properties": {
+            "my-custom-app-header": {
+              "type": "string"
+            },
+            "correlationId": {
+              "type": "string"
+            }
+          }
+        },
+        "payload": {
+          "$ref": "#/components/schemas/dummyCreated"
+        },
+        "bindings": {
+          "kafka": {
+            "key": {
+              "type": "object",
+              "properties": {
+                "id": {
+                  "type": "string",
+                  "format": "uuid"
+                },
+                "type": {
+                  "type": "string",
+                  "enum": [
+                    "type1",
+                    "type2"
+                  ]
+                }
+              }
+            },
+            "bindingVersion": "0.1.0"
+          },
+          "amqp": {
+            "contentEncoding": "gzip",
+            "messageType": "user.signup",
+            "bindingVersion": "0.1.0"
+          }
+        },
+        "x-response": {
+          "$ref": "#/components/messages/dummyInfo"
+        }
+      },
+      "dummyInfo": {
+        "name": "dummyInfo",
+        "title": "Dummy system info",
+        "summary": "This is just a dummy info message",
+        "correlationId": {
+          "location": "$message.header#/correlationId"
+        },
+        "description": "More description for a dummy message.\n\nIt is a dummy system info message.\n",
+        "traits": [
+          {
+            "$ref": "#/components/messageTraits/commonHeaders"
+          }
+        ],
+        "payload": {
+          "$ref": "#/components/schemas/dummyInfo"
+        },
+        "examples": [
+          {
+            "name": "option1example",
+            "summary": "this is dummy summary for option1example",
+            "headers": {
+              "my-app-header": 12
+            },
+            "payload": {
+              "prop1": "option1",
+              "sentAt": "2020-01-31T13:24:53.000Z"
+            }
+          },
+          {
+            "name": "headerExample",
+            "headers": {
+              "my-app-header": 13
+            }
+          },
+          {
+            "payload": {
+              "prop1": "option2",
+              "sentAt": "2020-01-31T13:24:53.000Z"
+            }
+          }
+        ]
+      }
+    },
+    "schemas": {
+      "dummyCreated": {
+        "type": "object",
+        "required": [
+          "prop2"
+        ],
+        "x-schema-extensions-as-object": {
+          "type": "object",
+          "properties": {
+            "prop1": {
+              "type": "string"
+            },
+            "prop2": {
+              "type": "integer",
+              "minimum": 0
+            }
+          }
+        },
+        "x-schema-extensions-as-primitive": "dummy",
+        "x-schema-extensions-as-array": [
+          "item1",
+          "item2"
+        ],
+        "properties": {
+          "prop1": {
+            "type": "integer",
+            "minimum": 0,
+            "description": "Dummy prop1",
+            "x-prop1-dummy": "dummy extension"
+          },
+          "prop2": {
+            "type": "string",
+            "description": "Dummy prop2"
+          },
+          "sentAt": {
+            "$ref": "#/components/schemas/sentAt"
+          },
+          "dummyArrayWithObject": {
+            "$ref": "#/components/schemas/dummyArrayWithObject"
+          },
+          "dummyArrayWithArray": {
+            "$ref": "#/components/schemas/dummyArrayWithArray"
+          },
+          "dummyObject": {
+            "$ref": "#/components/schemas/dummyObject"
+          },
+          "dummyArrayRank": {
+            "$ref": "#/components/schemas/dummyArrayRank"
+          }
+        }
+      },
+      "dummyInfo": {
+        "type": "object",
+        "required": [
+          "prop1"
+        ],
+        "properties": {
+          "prop1": {
+            "type": "string",
+            "enum": [
+              "option1",
+              "option2"
+            ],
+            "description": "Dummy prop1"
+          },
+          "sentAt": {
+            "$ref": "#/components/schemas/sentAt"
+          }
+        }
+      },
+      "dummyArrayWithObject": {
+        "type": "array",
+        "items": {
+          "$ref": "#/components/schemas/dummyInfo"
+        }
+      },
+      "dummyArrayWithArray": {
+        "type": "array",
+        "items": [
+          {
+            "$ref": "#/components/schemas/dummyInfo"
+          },
+          {
+            "type": "string"
+          },
+          {
+            "type": "number"
+          }
+        ]
+      },
+      "dummyObject": {
+        "type": "object",
+        "properties": {
+          "dummyObjectProp1": {
+            "$ref": "#/components/schemas/sentAt"
+          },
+          "dummyObjectProp2": {
+            "$ref": "#/components/schemas/dummyRecursiveObject"
+          },
+          "dummyObjectProp3": {
+            "type": "object",
+            "additionalProperties": true
+          },
+          "dummyObjectProp4": {
+            "type": "object",
+            "additionalProperties": false
+          }
+        }
+      },
+      "dummyRecursiveObject": {
+        "type": "object",
+        "properties": {
+          "dummyRecursiveProp1": {
+            "$ref": "#/components/schemas/dummyObject"
+          },
+          "dummyRecursiveProp2": {
+            "type": "string"
+          }
+        }
+      },
+      "sentAt": {
+        "type": "string",
+        "format": "date-time",
+        "description": "Date and time when the message was sent."
+      },
+      "dummyArrayRank": {
+        "type": "object",
+        "properties": {
+          "dummyArrayValueRank": {
+            "$ref": "#/components/schemas/dummyArrayValueRank"
+          },
+          "dummyArrayDimensions": {
+            "$ref": "#/components/schemas/dummyArrayArrayDimensions"
+          }
+        }
+      },
+      "dummyArrayValueRank": {
+        "description": "This Attribute indicates whether the val Attribute of the datapoint is an array and how many dimensions the array has.\n",
+        "type": "integer",
+        "default": -1,
+        "examples": [
+          2
+        ],
+        "oneOf": [
+          {
+            "const": -1,
+            "description": "Scalar: The value is not an array."
+          },
+          {
+            "const": 0,
+            "description": "OneOrMoreDimensions: The value is an array with one or more dimensions."
+          },
+          {
+            "const": 1,
+            "description": "OneDimension: The value is an array with one dimension."
+          },
+          {
+            "const": 2,
+            "description": "The value is an array with two dimensions."
+          }
+        ]
+      },
+      "dummyArrayArrayDimensions": {
+        "type": "array",
+        "items": {
+          "type": "integer",
+          "minimum": 0
+        },
+        "examples": [
+          [
+            3,
+            5
+          ]
+        ]
+      }
+    },
+    "securitySchemes": {
+      "user-password": {
+        "type": "userPassword"
+      },
+      "apiKey": {
+        "type": "apiKey",
+        "in": "user",
+        "description": "Provide your API key as the user and leave the password empty."
+      },
+      "supportedOauthFlows": {
+        "type": "oauth2",
+        "description": "Flows to support OAuth 2.0",
+        "flows": {
+          "implicit": {
+            "authorizationUrl": "https://authserver.example/auth",
+            "scopes": {
+              "dummy:created": "Ability to create dummy message",
+              "dymmy:read": "Ability to read dummy info"
+            }
+          },
+          "password": {
+            "tokenUrl": "https://authserver.example/token",
+            "scopes": {
+              "dummy:created": "Ability to create dummy message",
+              "dymmy:read": "Ability to read dummy info"
+            }
+          },
+          "clientCredentials": {
+            "tokenUrl": "https://authserver.example/token",
+            "scopes": {
+              "dummy:created": "Ability to create dummy message",
+              "dymmy:read": "Ability to read dummy info"
+            }
+          },
+          "authorizationCode": {
+            "authorizationUrl": "https://authserver.example/auth",
+            "tokenUrl": "https://authserver.example/token",
+            "refreshUrl": "https://authserver.example/refresh",
+            "scopes": {
+              "dummy:created": "Ability to create dummy message",
+              "dymmy:read": "Ability to read dummy info"
+            }
+          }
+        }
+      },
+      "openIdConnectWellKnown": {
+        "type": "openIdConnect",
+        "openIdConnectUrl": "https://authserver.example/.well-known"
+      }
+    },
+    "parameters": {
+      "dummy": {
+        "description": "The ID of the new dummy message.",
+        "schema": {
+          "type": "string",
+          "description": "Description that not be rendered, as parameter has explicit description."
+        }
+      }
+    },
+    "messageTraits": {
+      "commonHeaders": {
+        "headers": {
+          "type": "object",
+          "properties": {
+            "my-app-header": {
+              "type": "integer",
+              "minimum": 0,
+              "maximum": 100
+            },
+            "correlationId": {
+              "type": "string"
+            }
+          }
+        }
+      }
+    },
+    "operationTraits": {
+      "kafka": {
+        "bindings": {
+          "kafka": {
+            "groupId": "my-app-group-id",
+            "clientId": "my-app-client-id",
+            "bindingVersion": "0.1.0"
+          }
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/test/blackbox/docs/AsyncAPI-2_4/streetlights-operation-security.json b/test/blackbox/docs/AsyncAPI-2_4/streetlights-operation-security.json
new file mode 100644
index 00000000..6d197a3e
--- /dev/null
+++ b/test/blackbox/docs/AsyncAPI-2_4/streetlights-operation-security.json
@@ -0,0 +1,296 @@
+{
+  "asyncapi": "2.4.0",
+  "info": {
+      "title": "Streetlights Kafka API",
+      "version": "1.0.0",
+      "description": "The Smartylighting Streetlights API allows you to remotely manage the city lights.\n### Check out its awesome features:\n* Turn a specific streetlight on/off 🌃\n* Dim a specific streetlight 😎\n* Receive real-time information about environmental lighting conditions 📈\n",
+      "license": {
+          "name": "Apache 2.0",
+          "url": "https://www.apache.org/licenses/LICENSE-2.0"
+      }
+  },
+  "servers": {
+      "test": {
+          "url": "test.mykafkacluster.org:8092",
+          "protocol": "kafka-secure",
+          "description": "Test broker",
+          "security": [
+              {
+                  "saslScram": []
+              }
+          ]
+      },
+      "test_oauth": {
+          "url": "test.mykafkacluster.org:8093",
+          "protocol": "kafka-secure",
+          "description": "Test port for oauth",
+          "security": [
+              {
+                  "streetlights_auth": [
+                      "streetlights:write",
+                      "streetlights:read"
+                  ]
+              }
+          ]
+      }
+  },
+  "defaultContentType": "application/json",
+  "channels": {
+      "smartylighting.streetlights.1.0.event.{streetlightId}.lighting.measured": {
+          "description": "The topic on which measured values may be produced and consumed.",
+          "servers": [
+              "test"
+          ],
+          "parameters": {
+              "streetlightId": {
+                  "$ref": "#/components/parameters/streetlightId"
+              }
+          },
+          "publish": {
+              "summary": "Inform about environmental lighting conditions of a particular streetlight.",
+              "operationId": "receiveLightMeasurement",
+              "traits": [
+                  {
+                      "$ref": "#/components/operationTraits/kafka"
+                  }
+              ],
+              "message": {
+                  "$ref": "#/components/messages/lightMeasured"
+              }
+          }
+      },
+      "smartylighting.streetlights.1.0.action.{streetlightId}.turn.on": {
+          "servers": [
+              "test_oauth"
+          ],
+          "parameters": {
+              "streetlightId": {
+                  "$ref": "#/components/parameters/streetlightId"
+              }
+          },
+          "subscribe": {
+              "operationId": "turnOn",
+              "traits": [
+                  {
+                      "$ref": "#/components/operationTraits/kafka"
+                  }
+              ],
+              "message": {
+                  "$ref": "#/components/messages/turnOnOff"
+              },
+              "security": [
+                  {
+                      "streetlights_auth": [
+                          "streetlights:read"
+                      ]
+                  }
+              ]
+          }
+      },
+      "smartylighting.streetlights.1.0.action.{streetlightId}.turn.off": {
+          "servers": [
+              "test_oauth"
+          ],
+          "parameters": {
+              "streetlightId": {
+                  "$ref": "#/components/parameters/streetlightId"
+              }
+          },
+          "subscribe": {
+              "operationId": "turnOff",
+              "traits": [
+                  {
+                      "$ref": "#/components/operationTraits/kafka"
+                  }
+              ],
+              "message": {
+                  "$ref": "#/components/messages/turnOnOff"
+              },
+              "security": [
+                  {
+                      "streetlights_auth": [
+                          "streetlights:read"
+                      ]
+                  }
+              ]
+          }
+      },
+      "smartylighting.streetlights.1.0.action.{streetlightId}.dim": {
+          "servers": [
+              "test_oauth"
+          ],
+          "parameters": {
+              "streetlightId": {
+                  "$ref": "#/components/parameters/streetlightId"
+              }
+          },
+          "subscribe": {
+              "operationId": "dimLight",
+              "traits": [
+                  {
+                      "$ref": "#/components/operationTraits/kafka"
+                  }
+              ],
+              "message": {
+                  "$ref": "#/components/messages/dimLight"
+              },
+              "security": [
+                  {
+                      "streetlights_auth": [
+                          "streetlights:read"
+                      ]
+                  }
+              ]
+          }
+      }
+  },
+  "components": {
+      "messages": {
+          "lightMeasured": {
+              "name": "lightMeasured",
+              "title": "Light measured",
+              "summary": "Inform about environmental lighting conditions of a particular streetlight.",
+              "contentType": "application/json",
+              "traits": [
+                  {
+                      "$ref": "#/components/messageTraits/commonHeaders"
+                  }
+              ],
+              "payload": {
+                  "$ref": "#/components/schemas/lightMeasuredPayload"
+              }
+          },
+          "turnOnOff": {
+              "name": "turnOnOff",
+              "title": "Turn on/off",
+              "summary": "Command a particular streetlight to turn the lights on or off.",
+              "traits": [
+                  {
+                      "$ref": "#/components/messageTraits/commonHeaders"
+                  }
+              ],
+              "payload": {
+                  "$ref": "#/components/schemas/turnOnOffPayload"
+              }
+          },
+          "dimLight": {
+              "name": "dimLight",
+              "title": "Dim light",
+              "summary": "Command a particular streetlight to dim the lights.",
+              "traits": [
+                  {
+                      "$ref": "#/components/messageTraits/commonHeaders"
+                  }
+              ],
+              "payload": {
+                  "$ref": "#/components/schemas/dimLightPayload"
+              }
+          }
+      },
+      "schemas": {
+          "lightMeasuredPayload": {
+              "type": "object",
+              "properties": {
+                  "lumens": {
+                      "type": "integer",
+                      "minimum": 0,
+                      "description": "Light intensity measured in lumens."
+                  },
+                  "sentAt": {
+                      "$ref": "#/components/schemas/sentAt"
+                  }
+              }
+          },
+          "turnOnOffPayload": {
+              "type": "object",
+              "properties": {
+                  "command": {
+                      "type": "string",
+                      "enum": [
+                          "on",
+                          "off"
+                      ],
+                      "description": "Whether to turn on or off the light."
+                  },
+                  "sentAt": {
+                      "$ref": "#/components/schemas/sentAt"
+                  }
+              }
+          },
+          "dimLightPayload": {
+              "type": "object",
+              "properties": {
+                  "percentage": {
+                      "type": "integer",
+                      "description": "Percentage to which the light should be dimmed to.",
+                      "minimum": 0,
+                      "maximum": 100
+                  },
+                  "sentAt": {
+                      "$ref": "#/components/schemas/sentAt"
+                  }
+              }
+          },
+          "sentAt": {
+              "type": "string",
+              "format": "date-time",
+              "description": "Date and time when the message was sent."
+          }
+      },
+      "securitySchemes": {
+          "saslScram": {
+              "type": "scramSha256",
+              "description": "Provide your username and password for SASL/SCRAM authentication"
+          },
+          "streetlights_auth": {
+              "type": "oauth2",
+              "description": "The oauth security descriptions",
+              "flows": {
+                  "clientCredentials": {
+                      "tokenUrl": "https://example.com/api/oauth/dialog",
+                      "scopes": {
+                          "streetlights:read": "Scope required for subscribing to channel",
+                          "streetlights:write": "Scope required for publishing to channel"
+                      }
+                  }
+              }
+          }
+      },
+      "parameters": {
+          "streetlightId": {
+              "description": "The ID of the streetlight.",
+              "schema": {
+                  "type": "string"
+              }
+          }
+      },
+      "messageTraits": {
+          "commonHeaders": {
+              "headers": {
+                  "type": "object",
+                  "properties": {
+                      "my-app-header": {
+                          "type": "integer",
+                          "minimum": 0,
+                          "maximum": 100
+                      }
+                  }
+              }
+          }
+      },
+      "operationTraits": {
+          "kafka": {
+              "bindings": {
+                  "kafka": {
+                      "clientId": {
+                          "type": "string",
+                          "enum": [
+                              "my-app-id"
+                          ]
+                      }
+                  }
+              }
+          }
+      }
+  }
+}
\ No newline at end of file
diff --git a/test/processors/AsyncAPIInputProcessor.spec.ts b/test/processors/AsyncAPIInputProcessor.spec.ts
index f84a696d..8b0c8b0f 100644
--- a/test/processors/AsyncAPIInputProcessor.spec.ts
+++ b/test/processors/AsyncAPIInputProcessor.spec.ts
@@ -50,6 +50,10 @@ describe('AsyncAPIInputProcessor', () => {
       const parsedObject = {asyncapi: '2.3.0'};
       expect(processor.shouldProcess(parsedObject)).toEqual(true);
     });
+    test('should be able to process AsyncAPI 2.4.0', () => {
+      const parsedObject = {asyncapi: '2.4.0'};
+      expect(processor.shouldProcess(parsedObject)).toEqual(true);
+    });
   });
   describe('tryGetVersionOfDocument()', () => {
     const processor = new AsyncAPIInputProcessor();