Skip to content
This repository was archived by the owner on Nov 8, 2024. It is now read-only.

Commit cc84a18

Browse files
committed
fix(oas3): fix missing source map for media type examples >1
Fixes #519
1 parent e8c110b commit cc84a18

File tree

4 files changed

+233
-1
lines changed

4 files changed

+233
-1
lines changed

packages/openapi3-parser/lib/parser/oas/parseMediaTypeObject.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,12 @@ function parseMediaTypeObject(context, MessageBodyClass, element) {
168168
}
169169

170170
if (examples.length > 1) {
171-
parseResult.push(createWarning(namespace, `'${name}' 'examples' only one example is supported, other examples have been ignored`, examples.content[1]));
171+
const annotation = createWarning(
172+
namespace,
173+
`'${name}' 'examples' only one example is supported, other examples have been ignored`,
174+
examples.content[1].key
175+
);
176+
parseResult.push(annotation);
172177
}
173178

174179
return parseResult;
Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
{
2+
"element": "parseResult",
3+
"content": [
4+
{
5+
"element": "category",
6+
"meta": {
7+
"classes": {
8+
"element": "array",
9+
"content": [
10+
{
11+
"element": "string",
12+
"content": "api"
13+
}
14+
]
15+
},
16+
"title": {
17+
"element": "string",
18+
"content": "Media Type Object - Multiple Examples Warning"
19+
}
20+
},
21+
"attributes": {
22+
"version": {
23+
"element": "string",
24+
"content": "2.0"
25+
}
26+
},
27+
"content": [
28+
{
29+
"element": "copy",
30+
"content": "https://github.com/apiaryio/api-elements.js/issues/519"
31+
},
32+
{
33+
"element": "resource",
34+
"attributes": {
35+
"href": {
36+
"element": "string",
37+
"content": "/questions"
38+
}
39+
},
40+
"content": [
41+
{
42+
"element": "transition",
43+
"meta": {
44+
"title": {
45+
"element": "string",
46+
"content": "Description of the resource"
47+
}
48+
},
49+
"content": [
50+
{
51+
"element": "httpTransaction",
52+
"content": [
53+
{
54+
"element": "httpRequest",
55+
"attributes": {
56+
"method": {
57+
"element": "string",
58+
"content": "GET"
59+
},
60+
"headers": {
61+
"element": "httpHeaders",
62+
"content": [
63+
{
64+
"element": "member",
65+
"content": {
66+
"key": {
67+
"element": "string",
68+
"content": "Accept"
69+
},
70+
"value": {
71+
"element": "string",
72+
"content": "application/json"
73+
}
74+
}
75+
}
76+
]
77+
}
78+
}
79+
},
80+
{
81+
"element": "httpResponse",
82+
"attributes": {
83+
"headers": {
84+
"element": "httpHeaders",
85+
"content": [
86+
{
87+
"element": "member",
88+
"content": {
89+
"key": {
90+
"element": "string",
91+
"content": "Content-Type"
92+
},
93+
"value": {
94+
"element": "string",
95+
"content": "application/json"
96+
}
97+
}
98+
}
99+
]
100+
},
101+
"statusCode": {
102+
"element": "string",
103+
"content": "200"
104+
}
105+
},
106+
"content": [
107+
{
108+
"element": "asset",
109+
"meta": {
110+
"classes": {
111+
"element": "array",
112+
"content": [
113+
{
114+
"element": "string",
115+
"content": "messageBody"
116+
}
117+
]
118+
}
119+
},
120+
"attributes": {
121+
"contentType": {
122+
"element": "string",
123+
"content": "application/json"
124+
}
125+
},
126+
"content": "\"hello world\""
127+
},
128+
{
129+
"element": "copy",
130+
"content": "OK"
131+
}
132+
]
133+
}
134+
]
135+
}
136+
]
137+
}
138+
]
139+
}
140+
]
141+
},
142+
{
143+
"element": "annotation",
144+
"meta": {
145+
"classes": {
146+
"element": "array",
147+
"content": [
148+
{
149+
"element": "string",
150+
"content": "warning"
151+
}
152+
]
153+
}
154+
},
155+
"attributes": {
156+
"sourceMap": {
157+
"element": "array",
158+
"content": [
159+
{
160+
"element": "sourceMap",
161+
"content": [
162+
{
163+
"element": "array",
164+
"content": [
165+
{
166+
"element": "number",
167+
"attributes": {
168+
"line": {
169+
"element": "number",
170+
"content": 18
171+
},
172+
"column": {
173+
"element": "number",
174+
"content": 19
175+
}
176+
},
177+
"content": 451
178+
},
179+
{
180+
"element": "number",
181+
"attributes": {
182+
"line": {
183+
"element": "number",
184+
"content": 18
185+
},
186+
"column": {
187+
"element": "number",
188+
"content": 22
189+
}
190+
},
191+
"content": 3
192+
}
193+
]
194+
}
195+
]
196+
}
197+
]
198+
}
199+
},
200+
"content": "'Media Type Object' 'examples' only one example is supported, other examples have been ignored"
201+
}
202+
]
203+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
openapi: 3.0.1
2+
info:
3+
title: Media Type Object - Multiple Examples Warning
4+
description: 'https://github.com/apiaryio/api-elements.js/issues/519'
5+
version: '2.0'
6+
paths:
7+
/questions:
8+
get:
9+
summary: Description of the resource
10+
responses:
11+
'200':
12+
description: OK
13+
content:
14+
application/json:
15+
examples:
16+
one:
17+
value: hello world
18+
two:
19+
value: hello world

packages/openapi3-parser/test/integration/parse-test.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,10 @@ describe('#parse', () => {
5252
const file = path.join(__dirname, 'fixtures', 'regression', 'dredd-1685');
5353
return testParseFixture(file);
5454
});
55+
56+
it('can parse #519 media types examples warning missing source maps', () => {
57+
const file = path.join(__dirname, 'fixtures', 'regression', '519-examples-warning-source-map');
58+
return testParseFixture(file);
59+
});
5560
});
5661
});

0 commit comments

Comments
 (0)