Skip to content

Commit 8b5d6b3

Browse files
jonaslagoniP0lip
authored andcommitted
feat(formats): support AsyncAPI 2.4 (#2146)
1 parent 0445b8a commit 8b5d6b3

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

docs/getting-started/3-rulesets.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ Formats are an optional way to specify which API description formats a rule, or
8080
- `aas2_1` (AsyncAPI v2.1.0)
8181
- `aas2_2` (AsyncAPI v2.2.0)
8282
- `aas2_3` (AsyncAPI v2.3.0)
83+
- `aas2_4` (AsyncAPI v2.4.0)
8384
- `oas2` (OpenAPI v2.0)
8485
- `oas3` (OpenAPI v3.x)
8586
- `oas3.0` (OpenAPI v3.0.x)

packages/formats/src/__tests__/asyncapi.test.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { aas2, aas2_0, aas2_1, aas2_2, aas2_3 } from '../asyncapi';
1+
import { aas2, aas2_0, aas2_1, aas2_2, aas2_3, aas2_4 } from '../asyncapi';
22

33
describe('AsyncAPI format', () => {
44
describe('AsyncAPI 2.x', () => {
@@ -75,4 +75,17 @@ describe('AsyncAPI format', () => {
7575
},
7676
);
7777
});
78+
79+
describe('AsyncAPI 2.4', () => {
80+
it.each(['2.4.0', '2.4.3'])('recognizes %s version correctly', version => {
81+
expect(aas2_4({ asyncapi: version }, null)).toBe(true);
82+
});
83+
84+
it.each(['2', '2.3', '2.0.0', '2.1.0', '2.1.37', '2.2.0', '2.3.0', '2.5.0', '2.5.3'])(
85+
'does not recognize %s version',
86+
version => {
87+
expect(aas2_4({ asyncapi: version }, null)).toBe(false);
88+
},
89+
);
90+
});
7891
});

packages/formats/src/asyncapi.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const aas2_0Regex = /^2\.0(?:\.[0-9]*)?$/;
88
const aas2_1Regex = /^2\.1(?:\.[0-9]*)?$/;
99
const aas2_2Regex = /^2\.2(?:\.[0-9]*)?$/;
1010
const aas2_3Regex = /^2\.3(?:\.[0-9]*)?$/;
11+
const aas2_4Regex = /^2\.4(?:\.[0-9]*)?$/;
1112

1213
const isAas2 = (document: unknown): document is { asyncapi: string } & Record<string, unknown> =>
1314
isPlainObject(document) && 'asyncapi' in document && aas2Regex.test(String((document as MaybeAAS2).asyncapi));
@@ -34,3 +35,7 @@ aas2_2.displayName = 'AsyncAPI 2.2.x';
3435
export const aas2_3: Format = (document: unknown): boolean =>
3536
isAas2(document) && aas2_3Regex.test(String((document as MaybeAAS2).asyncapi));
3637
aas2_3.displayName = 'AsyncAPI 2.3.x';
38+
39+
export const aas2_4: Format = (document: unknown): boolean =>
40+
isAas2(document) && aas2_4Regex.test(String((document as MaybeAAS2).asyncapi));
41+
aas2_4.displayName = 'AsyncAPI 2.4.x';

0 commit comments

Comments
 (0)