diff --git a/packages/apib-parser/CHANGELOG.md b/packages/apib-parser/CHANGELOG.md index 614f3ff04..b20503d93 100644 --- a/packages/apib-parser/CHANGELOG.md +++ b/packages/apib-parser/CHANGELOG.md @@ -1,5 +1,11 @@ # API Elements: API Blueprint Parser Changelog +## Master + +### Enhancements + +- added a Link element to the specific format/version in the parse result. + ## 0.20.1 (2020-08-05) Adds compatibility for @apielements/core 0.2.0. diff --git a/packages/apib-parser/lib/adapter.js b/packages/apib-parser/lib/adapter.js index f60215d11..f4567e113 100644 --- a/packages/apib-parser/lib/adapter.js +++ b/packages/apib-parser/lib/adapter.js @@ -33,7 +33,7 @@ function validate({ source, requireBlueprintName }) { */ function parse({ source, generateSourceMap, generateMessageBody, generateMessageBodySchema, - requireBlueprintName, + requireBlueprintName, namespace, }) { const options = { exportSourcemap: !!generateSourceMap, @@ -42,9 +42,25 @@ function parse({ requireBlueprintName, }; - return drafter.parse(source, options); + return drafter.parse(source, options).then((result) => { + const parseResult = namespace.fromRefract(result); + const { Link } = namespace.elements; + const link = new Link(); + + link.title = 'API Blueprint'; + link.relation = 'via'; + link.href = 'https://apiblueprint.org/'; + + parseResult.links.push(link); + + return parseResult; + }); } module.exports = { - name, mediaTypes, detect, validate, parse, + name, + mediaTypes, + detect, + validate, + parse, }; diff --git a/packages/apib-parser/test/adapter-test.js b/packages/apib-parser/test/adapter-test.js index fb606a05d..cc7495322 100644 --- a/packages/apib-parser/test/adapter-test.js +++ b/packages/apib-parser/test/adapter-test.js @@ -51,11 +51,23 @@ describe('API Blueprint parser adapter', () => { }); it('has API category inside parse result', () => { - const filtered = result.children.filter(item => item.element === 'category' && item.classes.includes('api')); + const filtered = result.children.filter( + item => item.element === 'category' && item.classes.includes('api') + ); expect(filtered).to.have.length(1); expect(filtered.first).to.be.an('object'); }); + + it('has the format link', () => { + const link = result.links.get(0); + + expect(link.relation.toValue()).to.equal('via'); + expect(link.title.toValue()).to.equal('API Blueprint'); + expect(link.href.toValue()).to.equal( + 'https://apiblueprint.org/' + ); + }); }); it('can parse an API Blueprint with require blueprint name', (done) => {