From 8dacc39d9ff4143f9a8fc418b3019a40c2b98c0e Mon Sep 17 00:00:00 2001 From: Marco Friso Date: Fri, 7 Aug 2020 15:18:17 +0200 Subject: [PATCH 1/6] feat(apib): add format link --- packages/apib-parser/lib/adapter.js | 41 +++++++++++++++++++++-- packages/apib-parser/test/adapter-test.js | 14 +++++++- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/packages/apib-parser/lib/adapter.js b/packages/apib-parser/lib/adapter.js index f60215d11..c51e23816 100644 --- a/packages/apib-parser/lib/adapter.js +++ b/packages/apib-parser/lib/adapter.js @@ -42,9 +42,46 @@ function parse({ requireBlueprintName, }; - return drafter.parse(source, options); + const formatLink = { + links: { + element: 'array', + content: [ + { + element: 'link', + meta: { + title: { + element: 'string', + content: 'Apiary Blueprint', + }, + }, + attributes: { + relation: { + element: 'string', + content: 'via', + }, + href: { + element: 'string', + content: 'https://apiary.io/blueprint', + }, + }, + }, + ], + }, + }; + + return drafter.parse(source, options).then((result) => { + const refractElement = {}; + refractElement.element = result.element; + refractElement.meta = formatLink; + refractElement.content = result.content; + return refractElement; + }); } 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..34a528a14 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('Apiary Blueprint'); + expect(link.href.toValue()).to.equal( + 'https://apiary.io/blueprint' + ); + }); }); it('can parse an API Blueprint with require blueprint name', (done) => { From 6b022f99ace74701fae24110d8319f53bc2546eb Mon Sep 17 00:00:00 2001 From: Marco Friso Date: Tue, 11 Aug 2020 18:26:45 +0200 Subject: [PATCH 2/6] docs(apib): update `changelog` --- packages/apib-parser/CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) 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. From a283becc01c618da780d8cc345646b30c9dfd7af Mon Sep 17 00:00:00 2001 From: Marco Friso Date: Mon, 17 Aug 2020 12:16:21 +0200 Subject: [PATCH 3/6] fix(apib): change format link parsing --- packages/apib-parser/lib/adapter.js | 49 ++++++++--------------- packages/apib-parser/test/adapter-test.js | 2 +- 2 files changed, 17 insertions(+), 34 deletions(-) diff --git a/packages/apib-parser/lib/adapter.js b/packages/apib-parser/lib/adapter.js index c51e23816..07e1d9104 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,39 +42,22 @@ function parse({ requireBlueprintName, }; - const formatLink = { - links: { - element: 'array', - content: [ - { - element: 'link', - meta: { - title: { - element: 'string', - content: 'Apiary Blueprint', - }, - }, - attributes: { - relation: { - element: 'string', - content: 'via', - }, - href: { - element: 'string', - content: 'https://apiary.io/blueprint', - }, - }, - }, - ], - }, - }; - return drafter.parse(source, options).then((result) => { - const refractElement = {}; - refractElement.element = result.element; - refractElement.meta = formatLink; - refractElement.content = result.content; - return refractElement; + const parseResult = namespace.fromRefract(result); + const isAnnotation = element => element.element === 'annotation'; + const { Link } = namespace.elements; + + if (!isAnnotation(parseResult.content[0])) { + const link = new Link(); + + link.title = 'Apiary Blueprint'; + link.relation = 'via'; + link.href = 'https://apiblueprint.org/'; + + parseResult.links.push(link); + } + + return parseResult; }); } diff --git a/packages/apib-parser/test/adapter-test.js b/packages/apib-parser/test/adapter-test.js index 34a528a14..8f83ff327 100644 --- a/packages/apib-parser/test/adapter-test.js +++ b/packages/apib-parser/test/adapter-test.js @@ -65,7 +65,7 @@ describe('API Blueprint parser adapter', () => { expect(link.relation.toValue()).to.equal('via'); expect(link.title.toValue()).to.equal('Apiary Blueprint'); expect(link.href.toValue()).to.equal( - 'https://apiary.io/blueprint' + 'https://apiblueprint.org/' ); }); }); From e46bb05deb04c4c19fd4edbe49263e1c61751e58 Mon Sep 17 00:00:00 2001 From: Marco Friso Date: Mon, 17 Aug 2020 17:11:49 +0200 Subject: [PATCH 4/6] fix(apib): change format link title --- packages/apib-parser/lib/adapter.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/apib-parser/lib/adapter.js b/packages/apib-parser/lib/adapter.js index 07e1d9104..a0f9b9770 100644 --- a/packages/apib-parser/lib/adapter.js +++ b/packages/apib-parser/lib/adapter.js @@ -50,7 +50,8 @@ function parse({ if (!isAnnotation(parseResult.content[0])) { const link = new Link(); - link.title = 'Apiary Blueprint'; + link.title = 'API Blueprint'; + link.relation = 'via'; link.href = 'https://apiblueprint.org/'; From d04e9e438c22263bf28fb7bb3e7702b0d9f702b3 Mon Sep 17 00:00:00 2001 From: Marco Friso Date: Mon, 17 Aug 2020 20:45:13 +0200 Subject: [PATCH 5/6] test(apib): correct format link test --- packages/apib-parser/test/adapter-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apib-parser/test/adapter-test.js b/packages/apib-parser/test/adapter-test.js index 8f83ff327..cc7495322 100644 --- a/packages/apib-parser/test/adapter-test.js +++ b/packages/apib-parser/test/adapter-test.js @@ -63,7 +63,7 @@ describe('API Blueprint parser adapter', () => { const link = result.links.get(0); expect(link.relation.toValue()).to.equal('via'); - expect(link.title.toValue()).to.equal('Apiary Blueprint'); + expect(link.title.toValue()).to.equal('API Blueprint'); expect(link.href.toValue()).to.equal( 'https://apiblueprint.org/' ); From e310ea38b517a25339e50e8b3c62679204790438 Mon Sep 17 00:00:00 2001 From: Marco Friso Date: Tue, 18 Aug 2020 10:18:12 +0200 Subject: [PATCH 6/6] fix(apib): remove isAnnotation condition --- packages/apib-parser/lib/adapter.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/packages/apib-parser/lib/adapter.js b/packages/apib-parser/lib/adapter.js index a0f9b9770..f4567e113 100644 --- a/packages/apib-parser/lib/adapter.js +++ b/packages/apib-parser/lib/adapter.js @@ -44,19 +44,14 @@ function parse({ return drafter.parse(source, options).then((result) => { const parseResult = namespace.fromRefract(result); - const isAnnotation = element => element.element === 'annotation'; const { Link } = namespace.elements; + const link = new Link(); - if (!isAnnotation(parseResult.content[0])) { - const link = new Link(); + link.title = 'API Blueprint'; + link.relation = 'via'; + link.href = 'https://apiblueprint.org/'; - link.title = 'API Blueprint'; - - link.relation = 'via'; - link.href = 'https://apiblueprint.org/'; - - parseResult.links.push(link); - } + parseResult.links.push(link); return parseResult; });