Skip to content

Commit bebbd39

Browse files
authored
feat: create rule asyncapi3-channel-no-query-nor-fragment for v3 core ruleset (#1051)
1 parent 0d33904 commit bebbd39

File tree

4 files changed

+82
-14
lines changed

4 files changed

+82
-14
lines changed

.changeset/strong-garlics-think.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@asyncapi/parser": minor
3+
---
4+
5+
feat: create rule `asyncapi3-channel-no-query-nor-fragment` for v3 core ruleset

packages/parser/src/ruleset/v2/ruleset.ts

+13-13
Original file line numberDiff line numberDiff line change
@@ -49,19 +49,6 @@ export const v2CoreRuleset = {
4949
function: serverVariables,
5050
},
5151
},
52-
'asyncapi2-channel-no-query-nor-fragment': {
53-
description: 'Channel address should not include query ("?") or fragment ("#") delimiter.',
54-
severity: 'error',
55-
recommended: true,
56-
given: '$.channels',
57-
then: {
58-
field: '@key',
59-
function: pattern,
60-
functionOptions: {
61-
notMatch: '[\\?#]',
62-
},
63-
},
64-
},
6552

6653
/**
6754
* Channel Object rules
@@ -86,6 +73,19 @@ export const v2CoreRuleset = {
8673
function: channelServers,
8774
},
8875
},
76+
'asyncapi2-channel-no-query-nor-fragment': {
77+
description: 'Channel address should not include query ("?") or fragment ("#") delimiter.',
78+
severity: 'error',
79+
recommended: true,
80+
given: '$.channels',
81+
then: {
82+
field: '@key',
83+
function: pattern,
84+
functionOptions: {
85+
notMatch: '[\\?#]',
86+
},
87+
},
88+
},
8989

9090
/**
9191
* Operation Object rules

packages/parser/src/ruleset/v3/ruleset.ts

+14-1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,19 @@ export const v3CoreRuleset = {
5656
match: '#\\/servers\\/', // If doesn't match, rule fails.
5757
},
5858
},
59-
}
59+
},
60+
'asyncapi3-channel-no-query-nor-fragment': {
61+
description: 'Channel address should not include query ("?") or fragment ("#") delimiter.',
62+
severity: 'error',
63+
recommended: true,
64+
given: '$.channels',
65+
then: {
66+
field: '@key',
67+
function: pattern,
68+
functionOptions: {
69+
notMatch: '[\\?#]',
70+
},
71+
},
72+
},
6073
},
6174
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { testRule, DiagnosticSeverity } from '../../tester';
2+
3+
testRule('asyncapi3-channel-no-query-nor-fragment', [
4+
{
5+
name: 'valid case',
6+
document: {
7+
asyncapi: '3.0.0',
8+
channels: {
9+
'users/{userId}/signedUp': {},
10+
},
11+
},
12+
errors: [],
13+
},
14+
15+
{
16+
name: 'channels.{channel} contains a query delimiter',
17+
document: {
18+
asyncapi: '3.0.0',
19+
channels: {
20+
'users/{userId}/signedUp': {},
21+
'users/{userId}/signedOut?byMistake={didFatFingerTheSignOutButton}': {},
22+
},
23+
},
24+
errors: [
25+
{
26+
message: 'Channel address should not include query ("?") or fragment ("#") delimiter.',
27+
path: ['channels', 'users/{userId}/signedOut?byMistake={didFatFingerTheSignOutButton}'],
28+
severity: DiagnosticSeverity.Error,
29+
},
30+
],
31+
},
32+
33+
{
34+
name: 'channels.{channel} contains a fragment delimiter',
35+
document: {
36+
asyncapi: '3.0.0',
37+
channels: {
38+
'users/{userId}/signedUp': {},
39+
'users/{userId}/signedOut#onPurpose': {},
40+
},
41+
},
42+
errors: [
43+
{
44+
message: 'Channel address should not include query ("?") or fragment ("#") delimiter.',
45+
path: ['channels', 'users/{userId}/signedOut#onPurpose'],
46+
severity: DiagnosticSeverity.Error,
47+
},
48+
],
49+
},
50+
]);

0 commit comments

Comments
 (0)