parser-js
parser-js copied to clipboard
Parser do not validate and throw error when `parameters` are provided but address is null
Like in the subject.
Document:
asyncapi: 3.0.0
info:
title: Account Service
version: 1.0.0
description: This service is in charge of processing user signups
channels:
userSignedup:
address: user/signedup
parameters:
test:
description: I should get an error that I provide a parameter but there are no parameters in the address, or basically address in `null`
messages:
UserSignedUp:
$ref: '#/components/messages/UserSignedUp'
operations:
sendUserSignedup:
action: send
channel:
$ref: '#/channels/userSignedup'
messages:
- $ref: '#/channels/userSignedup/messages/UserSignedUp'
components:
messages:
UserSignedUp:
payload:
type: object
properties:
displayName:
type: string
description: Name of the user
email:
type: string
format: email
description: Email of the user
it should not be a valid document and I should get an error saying that I have parameters but there are no parameters in the address
We need to adapt the spectral rules to solve this issue. Here is how:
- Use the v2 rule that does this for AsyncAPI v2: https://github.com/asyncapi/parser-js/blob/0a765c1ed46af605707d9e37f71d76192b950602/src/ruleset/v2/ruleset.ts#L69
- Add it to the core ruleset: https://github.com/asyncapi/parser-js/blob/next-major-spec/src/ruleset/ruleset.ts
- Make the v3 rule look for the address not in the key of the key/value pair, but in the value.address instead.
This issue is marked as good first issue, but it's a medium difficulty!
Remember to target the next-major-spec branch.
/gfi typescript
We need to adapt the spectral rules to solve this issue. Here is how:
- Use the v2 rule that does this for AsyncAPI v2: https://github.com/asyncapi/parser-js/blob/0a765c1ed46af605707d9e37f71d76192b950602/src/ruleset/v2/ruleset.ts#L69
Note that the linked rule only applies for channels with parameters in their address. Otherwise, it just skips it. See the following code that executes for the channel address: https://github.com/asyncapi/parser-js/blob/0a765c1ed46af605707d9e37f71d76192b950602/src/ruleset/v2/functions/channelParameters.ts#L25
We need to additionally make it fail in case there are parameters defined for such a channel but they are not added into the address. This is the usecase @derberg shared.
Remember to target the next-major-spec branch.
This is not anymore a requirement since all v3-related stuff has been merged now to master
.
cc @Min2who