diff --git a/apidom/packages/apidom-parser-adapter-openapi3/src/parser/index.js b/apidom/packages/apidom-parser-adapter-openapi3/src/parser/index.js index f3ee88b62c..75c21170a6 100644 --- a/apidom/packages/apidom-parser-adapter-openapi3/src/parser/index.js +++ b/apidom/packages/apidom-parser-adapter-openapi3/src/parser/index.js @@ -8,12 +8,20 @@ const { visit } = require('./visitor'); const parse = (source, { sourceMap = false, verbose = true, junker = true, specObj = specification } = {}) => { const namespace = apiDOM.createNamespace(openapi3); - const ast = jsonAst.parse(source, { verbose, junker }); + const parseResultElement = new namespace.elements.ParseResult(); const documentVisitor = specObj.visitors.document.$visitor(); + let ast = null; - visit(ast, documentVisitor, { state: { namespace, specObj, sourceMap }}); - - return documentVisitor.element; + try { + ast = jsonAst.parse(source, {verbose, junker}); + visit(ast, documentVisitor, { state: { namespace, specObj, sourceMap, element: parseResultElement }}); + return documentVisitor.element; + } catch (error) { + const annotation = new namespace.elements.Annotation(error.message) + annotation.classes.push('error'); + parseResultElement.push(annotation); + return parseResultElement; + } }; module.exports = parse; diff --git a/apidom/packages/apidom-parser-adapter-openapi3/src/parser/visitors/DocumentVisitor.js b/apidom/packages/apidom-parser-adapter-openapi3/src/parser/visitors/DocumentVisitor.js index fb6c0e0b81..3c6e321fae 100644 --- a/apidom/packages/apidom-parser-adapter-openapi3/src/parser/visitors/DocumentVisitor.js +++ b/apidom/packages/apidom-parser-adapter-openapi3/src/parser/visitors/DocumentVisitor.js @@ -8,7 +8,6 @@ const CommentVisitor = require('./CommentVisitor'); const DocumentVisitor = stampit(SpecificationVisitor, { methods: { document(documentNode) { - this.element = new this.namespace.elements.ParseResult(); const openApiVisitor = this.retrieveVisitorInstance(['document', 'openApi']); const commentVisitor = this.retrieveVisitorInstance(['document', 'comment']);