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

Commit 2d5cdfd

Browse files
committed
fix(oas3): prevent throwing during freeze for required annotations
Related to apiaryio/dredd#1762
1 parent 4f2fb55 commit 2d5cdfd

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

packages/openapi3-parser/lib/parser/parseObject.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ const hasMember = R.curry((object, key) => {
4141
const validateObjectContainsRequiredKeys = R.curry((namespace, path, requiredKeys, sendWarning, object) => {
4242
const missingKeys = R.reject(hasMember(object), requiredKeys);
4343
const createAnnotation = sendWarning ? createWarning : createError;
44-
const annotationFromKey = key => createAnnotation(namespace, `'${path}' is missing required property '${key}'`, object);
44+
const annotationFromKey = key => createAnnotation(namespace, `'${path}' is missing required property '${key}'`, object.clone());
4545

4646
if (missingKeys.length > 0) {
4747
return new namespace.elements.ParseResult(

packages/openapi3-parser/test/unit/parser/parseObject-test.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ describe('#parseObject', () => {
1818
name: 'Doe',
1919
message: 'Hello',
2020
});
21+
object.attributes.set('sourceMap', [
22+
new namespace.elements.SourceMap([[0, 10]]),
23+
]);
2124
});
2225

2326
it('provides warning when given element is non-object', () => {
@@ -141,6 +144,13 @@ describe('#parseObject', () => {
141144
"'Example Object' is missing required property 'required1'",
142145
"'Example Object' is missing required property 'required2'",
143146
]);
147+
148+
// assert errors can be frozen (we're testing that the source map
149+
// for object was cloned instead of referenced)
150+
parseResult.freeze();
151+
152+
expect(parseResult.errors.get(0)).to.have.sourceMap([[0, 10]]);
153+
expect(parseResult.errors.get(1)).to.have.sourceMap([[0, 10]]);
144154
});
145155

146156
it('fails object parsing when member parse cannot parse required key', () => {

0 commit comments

Comments
 (0)