-
-
Notifications
You must be signed in to change notification settings - Fork 54
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
fix: wrong validation with AsyncAPI v3 in VS Code and JetBrains IDEs #495
Changes from 18 commits
0396524
8af32be
518e3e0
78ce54d
b5f2139
87a6097
981c80d
212cc82
e8ee4a2
b573b54
62c5193
297e778
dddb3d3
a4c5ef0
acfb26e
469431c
b45e610
52b06c5
d34130d
a9a7d47
eba77ed
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,6 @@ | ||
node_modules | ||
.nyc_output | ||
.vscode | ||
coverage | ||
coverage | ||
|
||
.DS_Store |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,21 @@ | ||
{ | ||
"if": { | ||
"required": [ | ||
"schema" | ||
] | ||
}, | ||
"then": { | ||
"$ref": "http://asyncapi.com/definitions/3.0.0/multiFormatSchema.json" | ||
}, | ||
"else": { | ||
"$ref": "http://asyncapi.com/definitions/3.0.0/schema.json" | ||
}, | ||
"description": "An object representing either a schema or a multiFormatSchema based on the existence of the 'schema' property. If the property 'schema' is present, use the multi-format schema. Use the default AsyncAPI Schema otherwise.", | ||
"$id": "http://asyncapi.com/definitions/3.0.0/anySchema.json", | ||
"$schema": "http://json-schema.org/draft-07/schema#", | ||
"$id": "http://asyncapi.com/definitions/3.0.0/anySchema.json" | ||
"type": "object", | ||
"description": "An object representing either a Reference, a Schema or a Multi Format Schema", | ||
"oneOf": [ | ||
{ | ||
"description": "Because of $ref collision in Reference and AsyncAPI Schema(includes $ref from Json Schema)", | ||
"not": {"required": ["schemaFormat", "schema"]}, | ||
"$ref": "http://asyncapi.com/definitions/3.0.0/schema.json" | ||
}, | ||
{ | ||
"type": "object", | ||
"required": ["schemaFormat", "schema"], | ||
"not": {"required": ["$ref"]}, | ||
"minProperties": 2, | ||
"maxProperties": 2, | ||
"$ref": "http://asyncapi.com/definitions/3.0.0/multiFormatSchema.json" | ||
} | ||
] | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Meant the entire thing @Pakisan, There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done |
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,11 @@ | ||
{ | ||
"description": "The Multi Format Schema Object represents a schema definition. It differs from the Schema Object in that it supports multiple schema formats or languages (e.g., JSON Schema, Avro, etc.).", | ||
"type": "object", | ||
"patternProperties": { | ||
"^x-[\\w\\d\\.\\x2d_]+$": { | ||
"$ref": "http://asyncapi.com/definitions/3.0.0/specificationExtension.json" | ||
} | ||
}, | ||
"if": { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If you want, feel free to remove this if/then as #507 does ✌️ |
||
"not": { | ||
"type": "object" | ||
|
@@ -9,13 +15,6 @@ | |
"$ref": "http://asyncapi.com/definitions/3.0.0/schema.json" | ||
}, | ||
"else": { | ||
"type": "object", | ||
"additionalProperties": false, | ||
"patternProperties": { | ||
"^x-[\\w\\d\\.\\x2d_]+$": { | ||
"$ref": "http://asyncapi.com/definitions/3.0.0/specificationExtension.json" | ||
} | ||
}, | ||
"properties": { | ||
"schemaFormat": { | ||
"description": "A string containing the name of the schema format that is used to define the information. If schemaFormat is missing, it MUST default to application/vnd.aai.asyncapi+json;version={{asyncapi}} where {{asyncapi}} matches the AsyncAPI Version String. In such a case, this would make the Multi Format Schema Object equivalent to the Schema Object. When using Reference Object within the schema, the schemaFormat of the resource being referenced MUST match the schemaFormat of the schema that contains the initial reference. For example, if you reference Avro schema, then schemaFormat of referencing resource and the resource being reference MUST match.", | ||
|
@@ -37,21 +36,18 @@ | |
{ | ||
"description": "All the schema formats tools are RECOMMENDED to support", | ||
"enum": [ | ||
"application/vnd.oai.openapi;version=3.0.0", | ||
"application/vnd.oai.openapi+json;version=3.0.0", | ||
"application/vnd.oai.openapi;version=3.0.0", | ||
"application/vnd.oai.openapi+json;version=3.0.0", | ||
"application/vnd.oai.openapi+yaml;version=3.0.0", | ||
|
||
"application/vnd.apache.avro;version=1.9.0", | ||
"application/vnd.apache.avro+json;version=1.9.0", | ||
"application/vnd.apache.avro+yaml;version=1.9.0", | ||
|
||
"application/raml+yaml;version=1.0" | ||
] | ||
} | ||
] | ||
}, | ||
"schema": { | ||
"description": "Definition of the message payload. It can be of any type but defaults to Schema Object. It MUST match the schema format defined in schemaFormat, including the encoding type. E.g., Avro should be inlined as either a YAML or JSON object instead of as a string to be parsed as YAML or JSON. Non-JSON-based schemas (e.g., Protobuf or XSD) MUST be inlined as a string." | ||
} | ||
}, | ||
"allOf": [ | ||
|
@@ -67,14 +63,7 @@ | |
"then": { | ||
"properties": { | ||
"schema": { | ||
"oneOf": [ | ||
{ | ||
"$ref": "http://asyncapi.com/definitions/3.0.0/Reference.json" | ||
}, | ||
{ | ||
"$ref": "http://asyncapi.com/definitions/3.0.0/schema.json" | ||
} | ||
] | ||
"$ref": "http://asyncapi.com/definitions/3.0.0/schema.json" | ||
} | ||
} | ||
} | ||
|
@@ -119,14 +108,7 @@ | |
"then": { | ||
"properties": { | ||
"schema": { | ||
"oneOf": [ | ||
{ | ||
"$ref": "http://asyncapi.com/definitions/3.0.0/Reference.json" | ||
}, | ||
{ | ||
"$ref": "http://asyncapi.com/definitions/3.0.0/schema.json" | ||
} | ||
] | ||
"$ref": "http://asyncapi.com/definitions/3.0.0/schema.json" | ||
} | ||
} | ||
} | ||
|
@@ -148,14 +130,7 @@ | |
"then": { | ||
"properties": { | ||
"schema": { | ||
"oneOf": [ | ||
{ | ||
"$ref": "http://asyncapi.com/definitions/3.0.0/Reference.json" | ||
}, | ||
{ | ||
"$ref": "http://json-schema.org/draft-07/schema" | ||
} | ||
] | ||
"$ref": "http://json-schema.org/draft-07/schema" | ||
} | ||
} | ||
} | ||
|
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 dont think these changes with
additionalProperties
is necessary, and on the other side, are you not allowed to have additional properties in Avro? 🤔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.
As I remember Avro is allows only defined attributes. For example Record - https://avro.apache.org/docs/1.11.1/specification/#schema-record
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.
Seems like additional properties is allowed on the different levels of Avro: https://asyncapi.slack.com/archives/C0230UAM6R3/p1712059889567579?thread_ts=1711713980.293369&cid=C0230UAM6R3
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 removed restriction