From 4a37943a163501ed1544831811662fbdc582beb5 Mon Sep 17 00:00:00 2001 From: David Boyne Date: Thu, 6 Feb 2025 06:10:25 +0000 Subject: [PATCH 1/2] feat(plugin): now supports x-eventcatalog-message-version --- README.md | 6 +++--- .../src/test/openapi-files/petstore.yml | 1 + .../generator-openapi/src/test/plugin.test.ts | 21 +++++++++++++------ .../generator-openapi/src/utils/messages.ts | 2 +- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index df87e42..71a3963 100644 --- a/README.md +++ b/README.md @@ -35,9 +35,9 @@ All plugins require a license key. You can get a license key from [EventCatalog - [Mapping commands, events and queries using the `x-eventcatalog-message-type` extension](./examples/generator-asyncapi/mapping-commands-events-queries/) - [Independent Message Versioning using the `x-eventcatalog-message-version` extension](./examples/generator-asyncapi/independent-message-versioning/) - [Message Ownership using the `x-eventcatalog-role` extension to control which service owns a message](./examples/generator-asyncapi/message-ownership/) - - EventCatalog will parse all messages, sometimes this leads to duplicated messages being created. - - The `x-eventcatalog-role` extension can be used to control which service owns a message. - - This is useful when you have multiple AsyncAPI files that define the same message. + - EventCatalog will parse all messages, sometimes this leads to duplicated messages being created. + - The `x-eventcatalog-role` extension can be used to control which service owns a message. + - This is useful when you have multiple AsyncAPI files that define the same message. **EventBridge Integrations** diff --git a/packages/generator-openapi/src/test/openapi-files/petstore.yml b/packages/generator-openapi/src/test/openapi-files/petstore.yml index c8987eb..9a4ee0d 100644 --- a/packages/generator-openapi/src/test/openapi-files/petstore.yml +++ b/packages/generator-openapi/src/test/openapi-files/petstore.yml @@ -26,6 +26,7 @@ paths: x-eventcatalog-message-type: query # This is a query operation x-eventcatalog-message-name: List Pets # Name used in EventCatalog x-eventcatalog-message-id: list-pets # ID value used in EventCatalog + x-eventcatalog-message-version: 5.0.0 parameters: - name: limit in: query diff --git a/packages/generator-openapi/src/test/plugin.test.ts b/packages/generator-openapi/src/test/plugin.test.ts index a97202c..2176921 100644 --- a/packages/generator-openapi/src/test/plugin.test.ts +++ b/packages/generator-openapi/src/test/plugin.test.ts @@ -498,7 +498,7 @@ describe('OpenAPI EventCatalog Plugin', () => { expect(service.receives).toHaveLength(4); expect(service.receives).toEqual([ - { id: 'list-pets', version: '1.0.0' }, + { id: 'list-pets', version: '5.0.0' }, { id: 'createPets', version: '1.0.0' }, { id: 'showPetById', version: '1.0.0' }, { id: 'petAdopted', version: '1.0.0' }, @@ -528,7 +528,7 @@ describe('OpenAPI EventCatalog Plugin', () => { expect(service.receives).toHaveLength(5); expect(service.receives).toEqual([ { id: 'userloggedin', version: '1.0.0' }, - { id: 'list-pets', version: '1.0.0' }, + { id: 'list-pets', version: '5.0.0' }, { id: 'createPets', version: '1.0.0' }, { id: 'showPetById', version: '1.0.0' }, { id: 'petAdopted', version: '1.0.0' }, @@ -546,7 +546,7 @@ describe('OpenAPI EventCatalog Plugin', () => { name: 'Random Name', markdown: 'Here is my original markdown, please do not override this!', receives: [ - { id: 'list-pets', version: '1.0.0' }, + { id: 'list-pets', version: '5.0.0' }, { id: 'createPets', version: '1.0.0' }, ], }, @@ -559,7 +559,7 @@ describe('OpenAPI EventCatalog Plugin', () => { expect(service.receives).toHaveLength(4); expect(service.receives).toEqual([ - { id: 'list-pets', version: '1.0.0' }, + { id: 'list-pets', version: '5.0.0' }, { id: 'createPets', version: '1.0.0' }, { id: 'showPetById', version: '1.0.0' }, { id: 'petAdopted', version: '1.0.0' }, @@ -601,7 +601,7 @@ describe('OpenAPI EventCatalog Plugin', () => { expect(command).toEqual( expect.objectContaining({ id: 'list-pets', - version: '1.0.0', + version: '5.0.0', name: 'List Pets', summary: 'List all pets', badges: [ @@ -686,7 +686,7 @@ describe('OpenAPI EventCatalog Plugin', () => { expect.objectContaining({ id: 'list-pets', name: 'List Pets', - version: '1.0.0', + version: '5.0.0', summary: 'List all pets', }) ); @@ -699,6 +699,15 @@ describe('OpenAPI EventCatalog Plugin', () => { const event = await getQuery('list-pets'); expect(event.id).toEqual('list-pets'); }); + + it('when messages have the `x-eventcatalog-message-version` extension defined, this value is used for the message version', async () => { + const { getQuery } = utils(catalogDir); + + await plugin(config, { services: [{ path: join(openAPIExamples, 'petstore.yml'), id: 'swagger-petstore' }] }); + + const event = await getQuery('list-pets'); + expect(event.version).toEqual('5.0.0'); + }); }); it('when the message already exists in EventCatalog but the versions do not match, the existing message is versioned', async () => { diff --git a/packages/generator-openapi/src/utils/messages.ts b/packages/generator-openapi/src/utils/messages.ts index 1847f80..ba581cb 100644 --- a/packages/generator-openapi/src/utils/messages.ts +++ b/packages/generator-openapi/src/utils/messages.ts @@ -118,7 +118,7 @@ export const buildMessage = async (pathToFile: string, document: OpenAPI.Documen return { id: extensions['x-eventcatalog-message-id'] || uniqueIdentifier, - version: document.info.version, + version: extensions['x-eventcatalog-message-version'] || document.info.version, name: extensions['x-eventcatalog-message-name'] || uniqueIdentifier, summary: getSummary(operation), markdown: defaultMarkdown(operation, requestBodiesAndResponses), From f7b8f68110522e15a54e57f2b2bf7bdf0b5920e4 Mon Sep 17 00:00:00 2001 From: David Boyne Date: Thu, 6 Feb 2025 06:11:00 +0000 Subject: [PATCH 2/2] Create late-spiders-serve.md --- .changeset/late-spiders-serve.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/late-spiders-serve.md diff --git a/.changeset/late-spiders-serve.md b/.changeset/late-spiders-serve.md new file mode 100644 index 0000000..f8cfbec --- /dev/null +++ b/.changeset/late-spiders-serve.md @@ -0,0 +1,5 @@ +--- +"@eventcatalog/generator-openapi": patch +--- + +feat(plugin): now supports x-eventcatalog-message-version