Skip to content

Commit 3d85c0f

Browse files
authored
fix(ns-asyncapi-3): refract specification extensions (#5107)
1 parent 1f3a3c1 commit 3d85c0f

File tree

3 files changed

+241
-0
lines changed

3 files changed

+241
-0
lines changed

packages/apidom-ns-asyncapi-3/src/refractor/specification.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ import ServerSecurityVisitor from './visitors/async-api-3/server/SecurityVisitor
6666
import ServerVariableVisitor from './visitors/async-api-3/server-variable/index.ts';
6767
import ServerVisitor from './visitors/async-api-3/server/index.ts';
6868
import ServersVisitor from './visitors/async-api-3/servers/index.ts';
69+
import SpecificationExtensionVisitor from './visitors/SpecificationExtensionVisitor.ts';
6970
import TagVisitor from './visitors/async-api-3/tag/index.ts';
7071
import TagsVisitor from './visitors/async-api-3/tags/index.ts';
7172
import schemaInheritedFixedFields from './visitors/async-api-3/schema/inherited-fixed-fields.ts';
@@ -1460,6 +1461,9 @@ const specification = {
14601461
},
14611462
},
14621463
},
1464+
extension: {
1465+
$visitor: SpecificationExtensionVisitor,
1466+
},
14631467
},
14641468
},
14651469
};

packages/apidom-ns-asyncapi-3/test/refractor/__snapshots__/index.ts.snap

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,224 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3+
exports[`refractor given generic ApiDOM object in AsyncApi 3.0.0 shape should refract specification extensions 1`] = `
4+
{
5+
"element": "asyncApi3",
6+
"meta": {
7+
"classes": {
8+
"element": "array",
9+
"content": [
10+
{
11+
"element": "string",
12+
"content": "api"
13+
}
14+
]
15+
}
16+
},
17+
"content": [
18+
{
19+
"element": "member",
20+
"meta": {
21+
"classes": {
22+
"element": "array",
23+
"content": [
24+
{
25+
"element": "string",
26+
"content": "fixed-field"
27+
}
28+
]
29+
}
30+
},
31+
"content": {
32+
"key": {
33+
"element": "string",
34+
"content": "asyncapi"
35+
},
36+
"value": {
37+
"element": "asyncApiVersion",
38+
"meta": {
39+
"classes": {
40+
"element": "array",
41+
"content": [
42+
{
43+
"element": "string",
44+
"content": "spec-version"
45+
},
46+
{
47+
"element": "string",
48+
"content": "version"
49+
}
50+
]
51+
}
52+
},
53+
"content": "3.0.0"
54+
}
55+
}
56+
},
57+
{
58+
"element": "member",
59+
"meta": {
60+
"classes": {
61+
"element": "array",
62+
"content": [
63+
{
64+
"element": "string",
65+
"content": "specification-extension"
66+
}
67+
]
68+
}
69+
},
70+
"content": {
71+
"key": {
72+
"element": "string",
73+
"content": "x-extension-1"
74+
},
75+
"value": {
76+
"element": "string",
77+
"content": "value1"
78+
}
79+
}
80+
},
81+
{
82+
"element": "member",
83+
"meta": {
84+
"classes": {
85+
"element": "array",
86+
"content": [
87+
{
88+
"element": "string",
89+
"content": "fixed-field"
90+
}
91+
]
92+
}
93+
},
94+
"content": {
95+
"key": {
96+
"element": "string",
97+
"content": "info"
98+
},
99+
"value": {
100+
"element": "info",
101+
"meta": {
102+
"classes": {
103+
"element": "array",
104+
"content": [
105+
{
106+
"element": "string",
107+
"content": "info"
108+
}
109+
]
110+
}
111+
},
112+
"content": [
113+
{
114+
"element": "member",
115+
"meta": {
116+
"classes": {
117+
"element": "array",
118+
"content": [
119+
{
120+
"element": "string",
121+
"content": "fixed-field"
122+
}
123+
]
124+
}
125+
},
126+
"content": {
127+
"key": {
128+
"element": "string",
129+
"content": "title"
130+
},
131+
"value": {
132+
"element": "string",
133+
"content": "Sample API"
134+
}
135+
}
136+
},
137+
{
138+
"element": "member",
139+
"meta": {
140+
"classes": {
141+
"element": "array",
142+
"content": [
143+
{
144+
"element": "string",
145+
"content": "fixed-field"
146+
}
147+
]
148+
}
149+
},
150+
"content": {
151+
"key": {
152+
"element": "string",
153+
"content": "version"
154+
},
155+
"value": {
156+
"element": "string",
157+
"meta": {
158+
"classes": {
159+
"element": "array",
160+
"content": [
161+
{
162+
"element": "string",
163+
"content": "api-version"
164+
},
165+
{
166+
"element": "string",
167+
"content": "version"
168+
}
169+
]
170+
}
171+
},
172+
"content": "1.0.0"
173+
}
174+
}
175+
},
176+
{
177+
"element": "member",
178+
"meta": {
179+
"classes": {
180+
"element": "array",
181+
"content": [
182+
{
183+
"element": "string",
184+
"content": "specification-extension"
185+
}
186+
]
187+
}
188+
},
189+
"content": {
190+
"key": {
191+
"element": "string",
192+
"content": "x-extension-2"
193+
},
194+
"value": {
195+
"element": "object",
196+
"content": [
197+
{
198+
"element": "member",
199+
"content": {
200+
"key": {
201+
"element": "string",
202+
"content": "nestedKey"
203+
},
204+
"value": {
205+
"element": "string",
206+
"content": "nestedValue"
207+
}
208+
}
209+
}
210+
]
211+
}
212+
}
213+
}
214+
]
215+
}
216+
}
217+
}
218+
]
219+
}
220+
`;
221+
3222
exports[`refractor given generic ApiDOM object in AsyncApi 3.0.0 shape should refract to AsyncApi3Element 1`] = `
4223
{
5224
"element": "asyncApi3",

packages/apidom-ns-asyncapi-3/test/refractor/index.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,24 @@ describe('refractor', function () {
2626

2727
expect(asyncApiElement).toMatchSnapshot();
2828
});
29+
30+
specify('should refract specification extensions', function () {
31+
const asyncApiPojo = {
32+
asyncapi: '3.0.0',
33+
'x-extension-1': 'value1',
34+
info: {
35+
title: 'Sample API',
36+
version: '1.0.0',
37+
'x-extension-2': {
38+
nestedKey: 'nestedValue',
39+
},
40+
},
41+
};
42+
const genericObjectElement = new ObjectElement(asyncApiPojo);
43+
const asyncApiElement = AsyncApi3Element.refract(genericObjectElement);
44+
45+
expect(asyncApiElement).toMatchSnapshot();
46+
});
2947
});
3048

3149
context('supports plugins', function () {

0 commit comments

Comments
 (0)