From f1424c8b8cb364682aeb2a09fe3f64ed185c0651 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sun, 6 Oct 2024 12:10:16 +0200 Subject: [PATCH 01/18] docs(community): update latest maintainers list (#3273) --- config/MAINTAINERS.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/config/MAINTAINERS.json b/config/MAINTAINERS.json index 465d80cba81..7ae06a8ebac 100644 --- a/config/MAINTAINERS.json +++ b/config/MAINTAINERS.json @@ -189,8 +189,6 @@ "generator", "parser-js", "converter-js", - "ts-nats-template", - "dotnet-nats-template", "generator-react-sdk", "modelina", "simulator", @@ -301,8 +299,6 @@ "html-template", "markdown-template", "github-action-for-cli", - "ts-nats-template", - "dotnet-nats-template", "template-for-generator-templates", "generator-react-sdk", "modelina", From d070b2e3a7c01b3296e6eaef37c1f01c082e0150 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Mon, 7 Oct 2024 02:39:29 +0200 Subject: [PATCH 02/18] chore: update tools.json (#3274) --- config/all-tags.json | 2 +- config/tools-automated.json | 225 +++++++++++++++++++----------------- config/tools.json | 2 +- 3 files changed, 123 insertions(+), 106 deletions(-) diff --git a/config/all-tags.json b/config/all-tags.json index b8274f82abb..b2a1c6f3c3a 100644 --- a/config/all-tags.json +++ b/config/all-tags.json @@ -1 +1 @@ -{"languages":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"},{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"},{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"},{"name":"HTML","color":"bg-[#E2A291]","borderColor":"border-[#E44D26]"},{"name":"C/C++","color":"bg-[#93CDEF]","borderColor":"border-[#0080CC]"},{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"},{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"},{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"},{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"},{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"},{"name":"Markdown","color":"bg-[#BABEBF]","borderColor":"border-[#445B64]"},{"name":"YAML","color":"bg-[#FFB764]","borderColor":"border-[#F1901F]"},{"name":"R","color":"bg-[#84B5ED]","borderColor":"border-[#246BBE]"},{"name":"Ruby","color":"bg-[#FF8289]","borderColor":"border-[#FF000F]"},{"name":"Rust","color":"bg-[#FFB8AA]","borderColor":"border-[#E43716]"},{"name":"Shell","color":"bg-[#87D4FF]","borderColor":"border-[#389ED7]"},{"name":"Groovy","color":"bg-[#B6D5E5]","borderColor":"border-[#609DBC]"}],"technologies":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Hermes","color":"bg-[#8AEEBD]","borderColor":"border-[#2AB672]"},{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"AWS","color":"bg-[#FF9F59]","borderColor":"border-[#EF6703]"},{"name":"Docker","color":"bg-[#B8E0FF]","borderColor":"border-[#2596ED]"},{"name":"Node-RED","color":"bg-[#FF7474]","borderColor":"border-[#8F0101]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Saas","color":"bg-[#6AB8EC]","borderColor":"border-[#2275AD]"},{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Scala","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Azure","color":"bg-[#4B93FF]","borderColor":"border-[#015ADF]"},{"name":"Jenkins","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Nest Js","color":"bg-[#E1224E]","borderColor":"border-[#B9012b]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Groovy","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Markdown","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Shell","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Babel","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Storybook","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"HTML","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Java","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}]} \ No newline at end of file +{"languages":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"},{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"},{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"},{"name":"HTML","color":"bg-[#E2A291]","borderColor":"border-[#E44D26]"},{"name":"C/C++","color":"bg-[#93CDEF]","borderColor":"border-[#0080CC]"},{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"},{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"},{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"},{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"},{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"},{"name":"Markdown","color":"bg-[#BABEBF]","borderColor":"border-[#445B64]"},{"name":"YAML","color":"bg-[#FFB764]","borderColor":"border-[#F1901F]"},{"name":"R","color":"bg-[#84B5ED]","borderColor":"border-[#246BBE]"},{"name":"Ruby","color":"bg-[#FF8289]","borderColor":"border-[#FF000F]"},{"name":"Rust","color":"bg-[#FFB8AA]","borderColor":"border-[#E43716]"},{"name":"Shell","color":"bg-[#87D4FF]","borderColor":"border-[#389ED7]"},{"name":"Groovy","color":"bg-[#B6D5E5]","borderColor":"border-[#609DBC]"}],"technologies":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Hermes","color":"bg-[#8AEEBD]","borderColor":"border-[#2AB672]"},{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"AWS","color":"bg-[#FF9F59]","borderColor":"border-[#EF6703]"},{"name":"Docker","color":"bg-[#B8E0FF]","borderColor":"border-[#2596ED]"},{"name":"Node-RED","color":"bg-[#FF7474]","borderColor":"border-[#8F0101]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Saas","color":"bg-[#6AB8EC]","borderColor":"border-[#2275AD]"},{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Scala","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Azure","color":"bg-[#4B93FF]","borderColor":"border-[#015ADF]"},{"name":"Jenkins","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Nest Js","color":"bg-[#E1224E]","borderColor":"border-[#B9012b]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Groovy","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Markdown","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Shell","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Babel","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Storybook","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"HTML","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Java","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}]} \ No newline at end of file diff --git a/config/tools-automated.json b/config/tools-automated.json index 36660341489..6fac6523de4 100644 --- a/config/tools-automated.json +++ b/config/tools-automated.json @@ -139,21 +139,6 @@ "Code Generators": { "description": "The following is a list of tools that generate code from an AsyncAPI document; not the other way around.", "toolsList": [ - { - "title": "Golang AsyncAPI Code Generator", - "description": "Generate Go user and application boilerplate from AsyncAPI specifications. Can be called from `go generate` without requirements.\n", - "links": { - "repoUrl": "https://github.com/lerenn/asyncapi-codegen" - }, - "filters": { - "language": "golang", - "categories": [ - "code-generator" - ], - "hasCommercial": false, - "isAsyncAPIOwner": false - } - }, { "title": "ZenWave SDK", "description": "DDD and API-First for Event-Driven Microservices", @@ -180,6 +165,21 @@ "isAsyncAPIOwner": false } }, + { + "title": "Golang AsyncAPI Code Generator", + "description": "Generate Go user and application boilerplate from AsyncAPI specifications. Can be called from `go generate` without requirements.\n", + "links": { + "repoUrl": "https://github.com/lerenn/asyncapi-codegen" + }, + "filters": { + "language": "golang", + "categories": [ + "code-generator" + ], + "hasCommercial": false, + "isAsyncAPIOwner": false + } + }, { "title": "AsyncAPI Modelina", "description": "Generate payload models into Java, TypeScript, Go, etc, you name it, from AsyncAPI documents. This tool gives you full control over the models through high customization", @@ -289,28 +289,6 @@ "DSL": { "description": "Writing YAML by hand is no fun, and maybe you don't want a GUI, so use a Domain Specific Language to write AsyncAPI in your language of choice.", "toolsList": [ - { - "title": "Zod Sockets", - "description": "Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.", - "links": { - "websiteUrl": "https://www.npmjs.com/package/zod-sockets", - "repoUrl": "https://github.com/RobinTail/zod-sockets" - }, - "filters": { - "language": "TypeScript", - "technology": [ - "Node.js", - "TypeScript" - ], - "categories": [ - "code-first", - "dsl", - "framework" - ], - "hasCommercial": false, - "isAsyncAPIOwner": false - } - }, { "title": "ZenWave SDK", "description": "DDD and API-First for Event-Driven Microservices", @@ -336,6 +314,28 @@ "hasCommercial": false, "isAsyncAPIOwner": false } + }, + { + "title": "Zod Sockets", + "description": "Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.", + "links": { + "websiteUrl": "https://www.npmjs.com/package/zod-sockets", + "repoUrl": "https://github.com/RobinTail/zod-sockets" + }, + "filters": { + "language": "TypeScript", + "technology": [ + "Node.js", + "TypeScript" + ], + "categories": [ + "code-first", + "dsl", + "framework" + ], + "hasCommercial": false, + "isAsyncAPIOwner": false + } } ] }, @@ -386,6 +386,23 @@ "isAsyncAPIOwner": false } }, + { + "title": "GitHub Action for Generator", + "description": "CLI to work with your AsyncAPI files. You can validate them and in the future use a generator and even bootstrap a new file. Contributions are welcomed!", + "links": { + "repoUrl": "https://github.com/asyncapi/cli" + }, + "filters": { + "technology": [ + "AsyncAPI Generator" + ], + "categories": [ + "github-actions" + ], + "hasCommercial": false, + "isAsyncAPIOwner": true + } + }, { "title": "GitHub Action for CLI", "description": "GitHub Action with generator, validator, converter and others - all in one for your AsyncAPI documents with AsyncAPI CLI as backbone", @@ -547,25 +564,6 @@ "CLIs": { "description": "The following is a list of tools that you can work with in terminal or do some CI/CD automation.", "toolsList": [ - { - "title": "AsyncAPI CLI", - "description": "One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n", - "links": { - "websiteUrl": "https://www.asyncapi.com/tools/cli", - "repoUrl": "https://github.com/asyncapi/cli" - }, - "filters": { - "technology": [ - "TypeScript" - ], - "categories": [ - "others", - "cli" - ], - "hasCommercial": false, - "isAsyncAPIOwner": true - } - }, { "title": "ZenWave SDK", "description": "DDD and API-First for Event-Driven Microservices", @@ -592,6 +590,25 @@ "isAsyncAPIOwner": false } }, + { + "title": "AsyncAPI CLI", + "description": "One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n", + "links": { + "websiteUrl": "https://www.asyncapi.com/tools/cli", + "repoUrl": "https://github.com/asyncapi/cli" + }, + "filters": { + "technology": [ + "TypeScript" + ], + "categories": [ + "others", + "cli" + ], + "hasCommercial": false, + "isAsyncAPIOwner": true + } + }, { "title": "AsyncAPI CLI", "description": "One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n", @@ -640,18 +657,15 @@ "description": "The following is a list of extensions for different IDEs like VSCode, IntelliJ IDEA and others", "toolsList": [ { - "title": "jAsyncAPI - IDEA plugin", - "description": "Idea plugin for the java-asyncapi - Helps to edit and validate AsyncAPI schemas.", + "title": "asyncapi-preview", + "description": "VSCode extension that enables you to:\n - Preview documentation generated using you AsyncAPI document. It uses AsyncAPI React component under the hood,\n - Create AsyncAPI documents faster using SmartPaste functionality\n", "links": { - "websiteUrl": "https://plugins.jetbrains.com/plugin/15673-asyncapi", - "docsUrl": "https://github.com/asyncapi/jasyncapi-idea-plugin#usage", - "repoUrl": "https://github.com/asyncapi/jasyncapi-idea-plugin" + "repoUrl": "https://github.com/asyncapi/vs-asyncapi-preview" }, "filters": { - "language": "Kotlin", "technology": [ - "JetBrains", - "IntelliJ IDEA" + "VSCode", + "SmartPaste" ], "categories": [ "ide-extension" @@ -661,15 +675,18 @@ } }, { - "title": "asyncapi-preview", - "description": "VSCode extension that enables you to:\n - Preview documentation generated using you AsyncAPI document. It uses AsyncAPI React component under the hood,\n - Create AsyncAPI documents faster using SmartPaste functionality\n", + "title": "jAsyncAPI - IDEA plugin", + "description": "Idea plugin for the java-asyncapi - Helps to edit and validate AsyncAPI schemas.", "links": { - "repoUrl": "https://github.com/asyncapi/vs-asyncapi-preview" + "websiteUrl": "https://plugins.jetbrains.com/plugin/15673-asyncapi", + "docsUrl": "https://github.com/asyncapi/jasyncapi-idea-plugin#usage", + "repoUrl": "https://github.com/asyncapi/jasyncapi-idea-plugin" }, "filters": { + "language": "Kotlin", "technology": [ - "VSCode", - "SmartPaste" + "JetBrains", + "IntelliJ IDEA" ], "categories": [ "ide-extension" @@ -702,15 +719,15 @@ "description": "The following is a list of templates compatible with AsyncAPI Generator. You can use them to generate apps, clients or documentation from your AsyncAPI documents.", "toolsList": [ { - "title": "Node.js Websockets Template", - "description": "Node.js WebSockets template for the AsyncAPI Generator. It showcases how from a single AsyncAPI document you can generate a server and a client at the same time.", + "title": "HTML Template", + "description": "HTML template for AsyncAPI Generator. Use it to generate a static docs. It is using AsyncAPI React component under the hood.", "links": { - "repoUrl": "https://github.com/asyncapi/nodejs-ws-template" + "repoUrl": "https://github.com/asyncapi/html-template" }, "filters": { "language": "javascript", "technology": [ - "Node.js" + "HTML" ], "categories": [ "generator-template" @@ -720,18 +737,17 @@ } }, { - "title": "Java Spring Cloud Stream Template", - "description": "Java Spring Cloud Stream template for the AsyncAPI Generator", + "title": "Java Template", + "description": "Java template for the AsyncAPI Generator", "links": { - "repoUrl": "https://github.com/asyncapi/java-spring-cloud-stream-template" + "repoUrl": "https://github.com/asyncapi/java-template" }, "filters": { "language": [ "javascript" ], "technology": [ - "Spring Cloud Streams", - "Maven" + "Java" ], "categories": [ "generator-template" @@ -741,15 +757,19 @@ } }, { - "title": "HTML Template", - "description": "HTML template for AsyncAPI Generator. Use it to generate a static docs. It is using AsyncAPI React component under the hood.", + "title": "Java Spring Template", + "description": "Java Spring template for the AsyncAPI Generator", "links": { - "repoUrl": "https://github.com/asyncapi/html-template" + "repoUrl": "https://github.com/asyncapi/java-spring-template" }, "filters": { - "language": "javascript", + "language": [ + "javascript" + ], "technology": [ - "HTML" + "Springboot", + "Maven", + "Gradle" ], "categories": [ "generator-template" @@ -759,15 +779,18 @@ } }, { - "title": "Node.js Multiprotocol Template", - "description": "This template generates a server using your AsyncAPI document. It supports multiple different protocols, like Kafka or MQTT. It is designed in the way that generated code is a library and with it's API you can start the server, send messages or register a middleware for listening incoming messages. Runtime message validation included.", + "title": "Java Spring Cloud Stream Template", + "description": "Java Spring Cloud Stream template for the AsyncAPI Generator", "links": { - "repoUrl": "https://github.com/asyncapi/nodejs-template" + "repoUrl": "https://github.com/asyncapi/java-spring-cloud-stream-template" }, "filters": { - "language": "javascript", + "language": [ + "javascript" + ], "technology": [ - "Node.js" + "Spring Cloud Streams", + "Maven" ], "categories": [ "generator-template" @@ -777,17 +800,15 @@ } }, { - "title": "Java Template", - "description": "Java template for the AsyncAPI Generator", + "title": "Node.js Multiprotocol Template", + "description": "This template generates a server using your AsyncAPI document. It supports multiple different protocols, like Kafka or MQTT. It is designed in the way that generated code is a library and with it's API you can start the server, send messages or register a middleware for listening incoming messages. Runtime message validation included.", "links": { - "repoUrl": "https://github.com/asyncapi/java-template" + "repoUrl": "https://github.com/asyncapi/nodejs-template" }, "filters": { - "language": [ - "javascript" - ], + "language": "javascript", "technology": [ - "Java" + "Node.js" ], "categories": [ "generator-template" @@ -797,19 +818,15 @@ } }, { - "title": "Java Spring Template", - "description": "Java Spring template for the AsyncAPI Generator", + "title": "Node.js Websockets Template", + "description": "Node.js WebSockets template for the AsyncAPI Generator. It showcases how from a single AsyncAPI document you can generate a server and a client at the same time.", "links": { - "repoUrl": "https://github.com/asyncapi/java-spring-template" + "repoUrl": "https://github.com/asyncapi/nodejs-ws-template" }, "filters": { - "language": [ - "javascript" - ], + "language": "javascript", "technology": [ - "Springboot", - "Maven", - "Gradle" + "Node.js" ], "categories": [ "generator-template" diff --git a/config/tools.json b/config/tools.json index 052756e16fc..ccb2d7a5f45 100644 --- a/config/tools.json +++ b/config/tools.json @@ -1 +1 @@ -{"APIs":{"description":"The following is a list of APIs that expose functionality related to AsyncAPI.","toolsList":[{"title":"API Tracker - AsyncAPI specs","description":"Explore APIs and companies with public AsyncAPI specifications.","links":{"websiteUrl":"https://apitracker.io/specifications/asyncapi","repoUrl":""},"filters":{"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI Server API","description":"Server API providing official AsyncAPI tools","links":{"websiteUrl":"https://api.asyncapi.com/v1","docsUrl":"https://api.asyncapi.com/v1/docs","repoUrl":"https://github.com/asyncapi/server-api"},"filters":{"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI-Directory by APIs.guru","description":"Directory of asynchronous API specifications in AsyncAPI format.","links":{"websiteUrl":"https://apis.guru/asyncapi-directory/","repoUrl":"https://github.com/APIs-guru/asyncapi-directory"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"SIO-AsyncAPI","description":"This is code-first approach to generate AsyncAPI specification from Socket.IO server.","links":{"websiteUrl":"https://github.com/daler-rahimov/sio-asyncapi","docsUrl":"https://github.com/daler-rahimov/sio-asyncapi","repoUrl":"https://github.com/daler-rahimov/sio-asyncapi"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["code-first","api"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Code-first tools":{"description":"The following is a list of tools that generate AsyncAPI documents from your code.","toolsList":[{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncApi.Net.Generator","description":"Code-first AsyncAPI documentation generator and ui","links":{"repoUrl":"https://github.com/yurvon-screamo/asyncapi.net"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"EventBridge Atlas","description":"Tool that translates your AWS EventBridge Schemas into an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://eventbridge-atlas.netlify.app/","repoUrl":"https://github.com/boyney123/eventbridge-atlas"},"filters":{"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"FastStream","description":"A powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ and NATS.","links":{"websiteUrl":"https://faststream.airt.ai","repoUrl":"https://github.com/airtai/FastStream"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"categories":["code-first","framework"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Go AsyncAPI","description":"This library helps to create AsyncAPI spec from your Go message structures. It uses reflection to translate Go structures in JSON Schema definitions and arrange them in AsyncAPI schema.","links":{"repoUrl":"https://github.com/swaggest/go-asyncapi"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Java AsyncAPI","description":"This tool stores modules, which simplifies interacting with AsyncAPI in jvm ecosystem.","links":{"repoUrl":"https://github.com/asyncapi/jasyncapi"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"KnstEventBus","description":"AsyncApi code-first tools for c#. Generates document and view.","links":{"repoUrl":"https://github.com/d0972058277/KnstEventBus"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Kotlin AsyncAPI","description":"The Kotlin AsyncAPI project aims to provide convenience tools for generating and serving AsyncAPI documentation. The core of this project is a Kotlin DSL for building the specification in a typesafe way.","links":{"repoUrl":"https://github.com/OpenFolder/kotlin-asyncapi"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"nestjs-asyncapi","description":"Utilize decorators to generate AsyncAPI document utilizing DTOs (similar to @nestjs/swagger) and a web UI.","links":{"repoUrl":"https://github.com/flamewow/nestjs-asyncapi"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Nest Js","color":"bg-[#E1224E]","borderColor":"border-[#B9012b]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Neuroglia AsyncAPI","description":"A .NET SDK for the Async API specification. Automatically generates and serves AsyncAPI documents based on your code. Includes fluent-builders to create AsyncAPI documents from scratch, and provides a web-based GUI to browse generated documents.","links":{"repoUrl":"https://github.com/neuroglia-io/AsyncApi"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Saunter","description":"Saunter is an AsyncAPI documentation generator for dotnet. Generates (and hosts) an AsyncAPI schema document from your code.","links":{"repoUrl":"https://github.com/tehmantra/saunter"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"SIO-AsyncAPI","description":"This is code-first approach to generate AsyncAPI specification from Socket.IO server.","links":{"websiteUrl":"https://github.com/daler-rahimov/sio-asyncapi","docsUrl":"https://github.com/daler-rahimov/sio-asyncapi","repoUrl":"https://github.com/daler-rahimov/sio-asyncapi"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["code-first","api"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Springwolf","description":"Automated documentation for async APIs built with Spring Boot. Like Springfox for AsyncAPI. Auto-generates an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://www.springwolf.dev","repoUrl":"https://github.com/springwolf/springwolf-core"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"sttp tapir","description":"Library for describing HTTP endpoints, and then interpreting them as a server, client, or documentation","links":{"websiteUrl":"https://tapir.softwaremill.com/","repoUrl":"https://github.com/softwaremill/tapir"},"filters":{"language":[{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Code Generators":{"description":"The following is a list of tools that generate code from an AsyncAPI document; not the other way around.","toolsList":[{"title":"AsyncAPI Generator","description":"Generator is a tool that you can use to generate whatever you want basing on the AsyncAPI specification file as an input.","links":{"docsUrl":"https://www.asyncapi.com/docs/tools/generator","repoUrl":"https://github.com/asyncapi/generator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["code-generator","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI Modelina","description":"Generate payload models into Java, TypeScript, Go, etc, you name it, from AsyncAPI documents. This tool gives you full control over the models through high customization","links":{"websiteUrl":"https://modelina.org","docsUrl":"https://github.com/asyncapi/modelina/tree/master/docs","repoUrl":"https://github.com/asyncapi/modelina"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"Docker","color":"bg-[#B8E0FF]","borderColor":"border-[#2596ED]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Golang AsyncAPI Code Generator","description":"Generate Go user and application boilerplate from AsyncAPI specifications. Can be called from `go generate` without requirements.\n","links":{"repoUrl":"https://github.com/lerenn/asyncapi-codegen"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"MultiAPI Generator","description":"This is a plugin designed to help developers automatizing the creation of code classes from YML files based on AsyncApi and OpenAPI. It is presented in 2 flavours Maven and Gradle","links":{"repoUrl":"https://github.com/sngular/scs-multiapi-plugin"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Groovy","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Node-RED AsyncAPI plugin","description":"A plugin for generating and configuring nodes for Kafka, MQTT, AMQP, etc. automatically from an AsyncAPI specification.","links":{"repoUrl":"https://github.com/dalelane/node-red-contrib-plugin-asyncapi"},"filters":{"technology":[{"name":"Node-RED","color":"bg-[#FF7474]","borderColor":"border-[#8F0101]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Converters":{"description":"The following is a list of tools that do not yet belong to any specific category but are also useful for the community.","toolsList":[{"title":"AsyncAPI-format","description":"Format an AsyncAPI document by ordering, casing, formatting, and filtering fields.","links":{"repoUrl":"https://github.com/thim81/asyncapi-format"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Converter","description":"Converts old versions of AsyncAPI files into the latest version.","links":{"repoUrl":"https://github.com/asyncapi/converter-js"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Converter-Go","description":"The AsyncAPI Converter converts AsyncAPI documents from versions 1.0.0, 1.1.0 and 1.2.0 to version 2.0.0. It supports both json and yaml formats on input and output. By default, the AsyncAPI Converter converts a document into the json format.","links":{"repoUrl":"https://github.com/asyncapi/converter-go"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["converter"],"hasCommercial":false,"isAsyncAPIOwner":true,"technology":[]}}]},"Directories":{"description":"The following is a list of directories that index public AsyncAPI documents.","toolsList":[{"title":"API Tracker - AsyncAPI specs","description":"Explore APIs and companies with public AsyncAPI specifications.","links":{"websiteUrl":"https://apitracker.io/specifications/asyncapi","repoUrl":""},"filters":{"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI-Directory by APIs.guru","description":"Directory of asynchronous API specifications in AsyncAPI format.","links":{"websiteUrl":"https://apis.guru/asyncapi-directory/","repoUrl":"https://github.com/APIs-guru/asyncapi-directory"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Documentation Generators":{"description":"The following is a list of tools that generate human-readable documentation from an AsyncAPI document.","toolsList":[{"title":"AsyncAPI Generator","description":"Generator is a tool that you can use to generate whatever you want basing on the AsyncAPI specification file as an input.","links":{"docsUrl":"https://www.asyncapi.com/docs/tools/generator","repoUrl":"https://github.com/asyncapi/generator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Markdown","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"asyncapi-asciidoc-template","description":"Asciidoc template for the asyncapi generator","links":{"repoUrl":"https://gitlab.com/djencks/asyncapi-asciidoc-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"}],"categories":["documentation-generator","generator-template"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Bump.sh","description":"OpenAPI 2 & 3 / AsyncAPI 2 documentation generator, with automatic changelog and visual diff.","links":{"websiteUrl":"https://bump.sh/","docsUrl":"https://docs.bump.sh/help/","repoUrl":""},"filters":{"categories":["documentation-generator"],"hasCommercial":true,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Cupid","description":"A library that focuses on finding and analyzing the relationships between AsyncAPI documents. It outputs a map of the system architecture.","links":{"repoUrl":"https://github.com/asyncapi/cupid"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"KnstEventBus","description":"AsyncApi code-first tools for c#. Generates document and view.","links":{"repoUrl":"https://github.com/d0972058277/KnstEventBus"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Springwolf","description":"Automated documentation for async APIs built with Spring Boot. Like Springfox for AsyncAPI. Auto-generates an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://www.springwolf.dev","repoUrl":"https://github.com/springwolf/springwolf-core"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Widdershins","description":"OpenAPI 3.0 / Swagger 2.0 / AsyncAPI 1.0 definition to Slate / Shins compatible markdown.","links":{"websiteUrl":"https://mermade.github.io/reslate/","repoUrl":"https://github.com/Mermade/widdershins"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Shell","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Editors":{"description":"The following is a list of editors or related tools that allow editing of AsyncAPI document.","toolsList":[{"title":"AsyncAPI Studio","description":"Visually design your AsyncAPI files and event-driven architecture.","links":{"websiteUrl":"https://studio.asyncapi.com","repoUrl":"https://github.com/asyncapi/studio"},"filters":{"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["editor"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"UI components":{"description":"The following is a list of UI components to view AsyncAPI documents.","toolsList":[{"title":"Api-Diff-Viewer","description":"React component to view the difference between two Json based API documents. Supported specifications: JsonSchema, OpenAPI 3.x, AsyncAPI 2.x.","links":{"repoUrl":"https://github.com/udamir/api-diff-viewer","websiteUrl":"https://api-diff-viewer.vercel.app/"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"Babel","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Storybook","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ui-component"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI React component","description":"React component for rendering documentation from your specification in real-time in the browser. It also provides a WebComponent and bundle for Angular and Vue","links":{"repoUrl":"https://github.com/asyncapi/asyncapi-react"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ui-component"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"DSL":{"description":"Writing YAML by hand is no fun, and maybe you don't want a GUI, so use a Domain Specific Language to write AsyncAPI in your language of choice.","toolsList":[{"title":"BOATS","description":"Compile your single AsyncAPI file from multiple YAML files with BOATS and with the help of the template engine Nunjucks, plus a many extra helpers to automate much of the donkey work.","links":{"repoUrl":"https://github.com/j-d-carmichael/boats"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["dsl"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Frameworks":{"description":"The following is a list of API/application frameworks that make use of AsyncAPI.","toolsList":[{"title":"Asynction","description":"SocketIO server framework driven by the AsyncAPI specification. Asynction guarantees that your API will work in accordance with its AsyncAPI documentation. Built on top of Flask-SocketIO.","links":{"websiteUrl":"https://pypi.org/project/asynction/","repoUrl":"https://github.com/dedoussis/asynction"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["framework"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"FastStream","description":"A powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ and NATS.","links":{"websiteUrl":"https://faststream.airt.ai","repoUrl":"https://github.com/airtai/FastStream"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"categories":["code-first","framework"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"GitHub Actions":{"description":"The following is a list of GitHub Actions that you can use in your workflows","toolsList":[{"title":"API documentation generation on Bump.sh","description":"With this GitHub Action you can automatically generate your API reference (with the changelog and diff) on Bump.sh from any AsyncAPI file.","links":{"websiteUrl":"https://github.com/marketplace/actions/api-documentation-on-bump","repoUrl":"https://github.com/bump-sh/github-action"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI GitHub Action","description":"This action validates if the AsyncAPI schema file is valid or not.","links":{"websiteUrl":"https://github.com/marketplace/actions/asyncapi-github-action","repoUrl":"https://github.com/WaleedAshraf/asyncapi-github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Automated version bump for AsyncAPI documents","description":"With this GitHub Action, you can automatically bump the version based on commit messages, which is similar to what semantic-release is for NPM.","links":{"websiteUrl":"https://github.com/marketplace/actions/automated-version-bump-for-asyncapi","repoUrl":"https://github.com/bump-sh/github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"GitHub Action for CLI","description":"GitHub Action with generator, validator, converter and others - all in one for your AsyncAPI documents with AsyncAPI CLI as backbone","links":{"repoUrl":"https://github.com/asyncapi/github-action-for-cli"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"GitHub Action for Generator","description":null,"links":{"repoUrl":"https://github.com/actions-marketplace-validations/asyncapi_github-action-for-generator"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Mocking and Testing":{"description":"The tools below take specification documents as input, then publish fake messages to broker destinations for simulation purposes. They may also check that publisher messages are compliant with schemas.","toolsList":[{"title":"Microcks","description":"Mocking and testing platform for API and microservices. Turn your AsyncAPI, OpenAPI contract examples, or Postman collections into ready-to-use mocks. Use examples to simulate and validate received messages according to schema elements.","links":{"websiteUrl":"https://microcks.io/","repoUrl":"https://github.com/microcks/microcks"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Saas","color":"bg-[#6AB8EC]","borderColor":"border-[#2275AD]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"MultiAPI Converter","description":"Use AsyncAPI definition, to generate Spring Cloud Contract producer validation or consumer stubs, using maven.","links":{"repoUrl":"https://github.com/sngular/scc-multiapi-converter"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Specmatic","description":"An API contract testing tool that helps ensure the correctness APIs by automatically generating test cases and verifying them against the API spec. It simplifies the process of testing APIs and reduces the likelihood of bugs and compatibility issues.","links":{"websiteUrl":"https://specmatic.io","docsUrl":"https://specmatic.io/documentation/","repoUrl":"https://github.com/znsio/specmatic"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Virtualan","description":"Mocking and testing platform for API and microservices. Allows you to create and setup mocks for OpenAPI and AsyncAPI contracts. Shows how to setup and create AsyncAPI GitHub Reference Examples and OpenAPI GitHub Reference Examples.","links":{"websiteUrl":"https://www.virtualan.io/index.html","repoUrl":"https://github.com/virtualansoftware"},"filters":{"technology":[{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Validators":{"description":"The following is a list of tools that validate AsyncAPI documents.","toolsList":[{"title":"AMF","description":"AMF (AML Modeling Framework) is an open-source library capable of parsing and validating AML metadata documents.","links":{"docsUrl":"https://a.ml/docs/","repoUrl":"https://github.com/aml-org/amf"},"filters":{"language":[{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI GitHub Action","description":"This action validates if the AsyncAPI schema file is valid or not.","links":{"websiteUrl":"https://github.com/marketplace/actions/asyncapi-github-action","repoUrl":"https://github.com/WaleedAshraf/asyncapi-github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI Parser","description":"Use this package to parse and validate AsyncAPI documents —either YAML or JSON— in your Node.js or browser application. Updated bundle for the browser is always attached to the GitHub Release.","links":{"repoUrl":"https://github.com/asyncapi/parser-js"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI Parser","description":"The AsyncAPI Parser validates AsyncAPI documents according to dedicated schemas.","links":{"repoUrl":"https://github.com/asyncapi/parser-go"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":true,"technology":[]}},{"title":"AsyncAPI Parser Wrapper","description":"Use this library to parse and validate AsyncAPI documents — either YAML or JSON — in your Java application. It is a Java wrapper over JavaScript Parser implemented using J2V8.","links":{"repoUrl":"https://github.com/AsyncAPITools/parser-java-wrapper"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI Validation","description":"Message validation package for YAML and JSON AsyncAPI documents.","links":{"repoUrl":"https://github.com/Elhebert/asyncapi-validation"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"asyncapi-validator","description":"It allows you to validate the schema of your messages against your AsyncAPI schema definition. You can use it with Kafka, RabbitMQ or any other messaging/queue.","links":{"repoUrl":"https://github.com/WaleedAshraf/asyncapi-validator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Spectral","description":"A flexible JSON/YAML linter for creating automated style guides, with baked in support for OpenAPI v3.1, v3.0, and v2.0 as well as AsyncAPI v2.x.","links":{"repoUrl":"https://github.com/stoplightio/spectral"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Compare tools":{"description":"The following is a list of tools that compare AsyncAPI documents.","toolsList":[{"title":"Api-Smart-Diff","description":"It allows you to compare two API documents and classify changes. Supported API specifications: OpenAPI, AsyncAPI, JsonSchema.","links":{"repoUrl":"https://github.com/udamir/api-smart-diff"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI Diff","description":"Diff is a library that compares two AsyncAPI Documents and provides information about the differences by pointing out explicitly information like breaking changes.","links":{"repoUrl":"https://github.com/asyncapi/diff"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"jasyncapicmp","description":"Tool for comparing two AsyncAPI versions and evaluating compatibility.","links":{"websiteUrl":"https://siom79.github.io/jasyncapicmp/","docsUrl":"https://github.com/siom79/jasyncapicmp","repoUrl":"https://github.com/siom79/jasyncapicmp"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"jasyncapicmp","description":"Tool/library/maven-plugin for comparing two AsyncAPI versions and evaluating compatibility.","links":{"websiteUrl":"https://siom79.github.io/jasyncapicmp/","repoUrl":"https://github.com/siom79/jasyncapicmp"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"CLIs":{"description":"The following is a list of tools that you can work with in terminal or do some CI/CD automation.","toolsList":[{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/hkirat/asyncapi-fork"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI-format","description":"Format an AsyncAPI document by ordering, casing, formatting, and filtering fields.","links":{"repoUrl":"https://github.com/asyncapi/converter-go"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Bundlers":{"description":"The following is a list of tools that you can work with to bundle AsyncAPI documents.","toolsList":[{"title":"Api-ref-bundler","description":"It allows you bundle/dereference external/internal $refs in Json based API document. Supported specifications: OpenAPI, AsyncAPI, JsonSchema.","links":{"repoUrl":"https://github.com/udamir/api-ref-bundler"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["bundler"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI Bundler","description":"Combine multiple AsyncAPI specification files into one.","links":{"repoUrl":"https://github.com/asyncapi/bundler"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["bundler"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"IDE Extensions":{"description":"The following is a list of extensions for different IDEs like VSCode, IntelliJ IDEA and others","toolsList":[{"title":"asyncapi-preview","description":"VSCode extension that enables you to:\n - Preview documentation generated using you AsyncAPI document. It uses AsyncAPI React component under the hood,\n - Create AsyncAPI documents faster using SmartPaste functionality\n","links":{"repoUrl":"https://github.com/asyncapi/vs-asyncapi-preview"},"filters":{"technology":[{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ide-extension"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"asyncapi-preview","description":"VSCode extension that enables you to:\n - Preview documentation generated using you AsyncAPI document. It uses AsyncAPI React component under the hood,\n - Create AsyncAPI documents faster using SmartPaste functionality\n","links":{"repoUrl":"https://github.com/Savio629/testing2"},"filters":{"technology":[{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ide-extension"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"jAsyncAPI - IDEA plugin","description":"Idea plugin for the java-asyncapi - Helps to edit and validate AsyncAPI schemas.","links":{"websiteUrl":"https://plugins.jetbrains.com/plugin/15673-asyncapi","docsUrl":"https://github.com/asyncapi/jasyncapi-idea-plugin#usage","repoUrl":"https://github.com/asyncapi/jasyncapi-idea-plugin"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ide-extension"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"AsyncAPI Generator Templates":{"description":"The following is a list of templates compatible with AsyncAPI Generator. You can use them to generate apps, clients or documentation from your AsyncAPI documents.","toolsList":[{"title":"HTML Template","description":"HTML template for AsyncAPI Generator. Use it to generate a static docs. It is using AsyncAPI React component under the hood.","links":{"repoUrl":"https://github.com/asyncapi/html-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"HTML","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Spring Cloud Stream Template","description":"Java Spring Cloud Stream template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-spring-cloud-stream-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Spring Template","description":"Java Spring template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-spring-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Template","description":"Java template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Java","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Node.js Multiprotocol Template","description":"This template generates a server using your AsyncAPI document. It supports multiple different protocols, like Kafka or MQTT. It is designed in the way that generated code is a library and with it's API you can start the server, send messages or register a middleware for listening incoming messages. Runtime message validation included.","links":{"repoUrl":"https://github.com/asyncapi/nodejs-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Node.js Websockets Template","description":"Node.js WebSockets template for the AsyncAPI Generator. It showcases how from a single AsyncAPI document you can generate a server and a client at the same time.","links":{"repoUrl":"https://github.com/asyncapi/nodejs-ws-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"Others":{"description":"The following is a list of tools that comes under Other category.","toolsList":[{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/hkirat/asyncapi-fork"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]}} \ No newline at end of file +{"APIs":{"description":"The following is a list of APIs that expose functionality related to AsyncAPI.","toolsList":[{"title":"API Tracker - AsyncAPI specs","description":"Explore APIs and companies with public AsyncAPI specifications.","links":{"websiteUrl":"https://apitracker.io/specifications/asyncapi","repoUrl":""},"filters":{"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI Server API","description":"Server API providing official AsyncAPI tools","links":{"websiteUrl":"https://api.asyncapi.com/v1","docsUrl":"https://api.asyncapi.com/v1/docs","repoUrl":"https://github.com/asyncapi/server-api"},"filters":{"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI-Directory by APIs.guru","description":"Directory of asynchronous API specifications in AsyncAPI format.","links":{"websiteUrl":"https://apis.guru/asyncapi-directory/","repoUrl":"https://github.com/APIs-guru/asyncapi-directory"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"SIO-AsyncAPI","description":"This is code-first approach to generate AsyncAPI specification from Socket.IO server.","links":{"websiteUrl":"https://github.com/daler-rahimov/sio-asyncapi","docsUrl":"https://github.com/daler-rahimov/sio-asyncapi","repoUrl":"https://github.com/daler-rahimov/sio-asyncapi"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["code-first","api"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Code-first tools":{"description":"The following is a list of tools that generate AsyncAPI documents from your code.","toolsList":[{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncApi.Net.Generator","description":"Code-first AsyncAPI documentation generator and ui","links":{"repoUrl":"https://github.com/yurvon-screamo/asyncapi.net"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"EventBridge Atlas","description":"Tool that translates your AWS EventBridge Schemas into an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://eventbridge-atlas.netlify.app/","repoUrl":"https://github.com/boyney123/eventbridge-atlas"},"filters":{"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"FastStream","description":"A powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ and NATS.","links":{"websiteUrl":"https://faststream.airt.ai","repoUrl":"https://github.com/airtai/FastStream"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"categories":["code-first","framework"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Go AsyncAPI","description":"This library helps to create AsyncAPI spec from your Go message structures. It uses reflection to translate Go structures in JSON Schema definitions and arrange them in AsyncAPI schema.","links":{"repoUrl":"https://github.com/swaggest/go-asyncapi"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Java AsyncAPI","description":"This tool stores modules, which simplifies interacting with AsyncAPI in jvm ecosystem.","links":{"repoUrl":"https://github.com/asyncapi/jasyncapi"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"KnstEventBus","description":"AsyncApi code-first tools for c#. Generates document and view.","links":{"repoUrl":"https://github.com/d0972058277/KnstEventBus"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Kotlin AsyncAPI","description":"The Kotlin AsyncAPI project aims to provide convenience tools for generating and serving AsyncAPI documentation. The core of this project is a Kotlin DSL for building the specification in a typesafe way.","links":{"repoUrl":"https://github.com/OpenFolder/kotlin-asyncapi"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"nestjs-asyncapi","description":"Utilize decorators to generate AsyncAPI document utilizing DTOs (similar to @nestjs/swagger) and a web UI.","links":{"repoUrl":"https://github.com/flamewow/nestjs-asyncapi"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Nest Js","color":"bg-[#E1224E]","borderColor":"border-[#B9012b]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Neuroglia AsyncAPI","description":"A .NET SDK for the Async API specification. Automatically generates and serves AsyncAPI documents based on your code. Includes fluent-builders to create AsyncAPI documents from scratch, and provides a web-based GUI to browse generated documents.","links":{"repoUrl":"https://github.com/neuroglia-io/AsyncApi"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Saunter","description":"Saunter is an AsyncAPI documentation generator for dotnet. Generates (and hosts) an AsyncAPI schema document from your code.","links":{"repoUrl":"https://github.com/tehmantra/saunter"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"SIO-AsyncAPI","description":"This is code-first approach to generate AsyncAPI specification from Socket.IO server.","links":{"websiteUrl":"https://github.com/daler-rahimov/sio-asyncapi","docsUrl":"https://github.com/daler-rahimov/sio-asyncapi","repoUrl":"https://github.com/daler-rahimov/sio-asyncapi"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["code-first","api"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Springwolf","description":"Automated documentation for async APIs built with Spring Boot. Like Springfox for AsyncAPI. Auto-generates an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://www.springwolf.dev","repoUrl":"https://github.com/springwolf/springwolf-core"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"sttp tapir","description":"Library for describing HTTP endpoints, and then interpreting them as a server, client, or documentation","links":{"websiteUrl":"https://tapir.softwaremill.com/","repoUrl":"https://github.com/softwaremill/tapir"},"filters":{"language":[{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Code Generators":{"description":"The following is a list of tools that generate code from an AsyncAPI document; not the other way around.","toolsList":[{"title":"AsyncAPI Generator","description":"Generator is a tool that you can use to generate whatever you want basing on the AsyncAPI specification file as an input.","links":{"docsUrl":"https://www.asyncapi.com/docs/tools/generator","repoUrl":"https://github.com/asyncapi/generator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["code-generator","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI Modelina","description":"Generate payload models into Java, TypeScript, Go, etc, you name it, from AsyncAPI documents. This tool gives you full control over the models through high customization","links":{"websiteUrl":"https://modelina.org","docsUrl":"https://github.com/asyncapi/modelina/tree/master/docs","repoUrl":"https://github.com/asyncapi/modelina"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"Docker","color":"bg-[#B8E0FF]","borderColor":"border-[#2596ED]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Golang AsyncAPI Code Generator","description":"Generate Go user and application boilerplate from AsyncAPI specifications. Can be called from `go generate` without requirements.\n","links":{"repoUrl":"https://github.com/lerenn/asyncapi-codegen"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"MultiAPI Generator","description":"This is a plugin designed to help developers automatizing the creation of code classes from YML files based on AsyncApi and OpenAPI. It is presented in 2 flavours Maven and Gradle","links":{"repoUrl":"https://github.com/sngular/scs-multiapi-plugin"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Groovy","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Node-RED AsyncAPI plugin","description":"A plugin for generating and configuring nodes for Kafka, MQTT, AMQP, etc. automatically from an AsyncAPI specification.","links":{"repoUrl":"https://github.com/dalelane/node-red-contrib-plugin-asyncapi"},"filters":{"technology":[{"name":"Node-RED","color":"bg-[#FF7474]","borderColor":"border-[#8F0101]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Converters":{"description":"The following is a list of tools that do not yet belong to any specific category but are also useful for the community.","toolsList":[{"title":"AsyncAPI-format","description":"Format an AsyncAPI document by ordering, casing, formatting, and filtering fields.","links":{"repoUrl":"https://github.com/thim81/asyncapi-format"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Converter","description":"Converts old versions of AsyncAPI files into the latest version.","links":{"repoUrl":"https://github.com/asyncapi/converter-js"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Converter-Go","description":"The AsyncAPI Converter converts AsyncAPI documents from versions 1.0.0, 1.1.0 and 1.2.0 to version 2.0.0. It supports both json and yaml formats on input and output. By default, the AsyncAPI Converter converts a document into the json format.","links":{"repoUrl":"https://github.com/asyncapi/converter-go"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["converter"],"hasCommercial":false,"isAsyncAPIOwner":true,"technology":[]}}]},"Directories":{"description":"The following is a list of directories that index public AsyncAPI documents.","toolsList":[{"title":"API Tracker - AsyncAPI specs","description":"Explore APIs and companies with public AsyncAPI specifications.","links":{"websiteUrl":"https://apitracker.io/specifications/asyncapi","repoUrl":""},"filters":{"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI-Directory by APIs.guru","description":"Directory of asynchronous API specifications in AsyncAPI format.","links":{"websiteUrl":"https://apis.guru/asyncapi-directory/","repoUrl":"https://github.com/APIs-guru/asyncapi-directory"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Documentation Generators":{"description":"The following is a list of tools that generate human-readable documentation from an AsyncAPI document.","toolsList":[{"title":"AsyncAPI Generator","description":"Generator is a tool that you can use to generate whatever you want basing on the AsyncAPI specification file as an input.","links":{"docsUrl":"https://www.asyncapi.com/docs/tools/generator","repoUrl":"https://github.com/asyncapi/generator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Markdown","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"asyncapi-asciidoc-template","description":"Asciidoc template for the asyncapi generator","links":{"repoUrl":"https://gitlab.com/djencks/asyncapi-asciidoc-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"}],"categories":["documentation-generator","generator-template"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Bump.sh","description":"OpenAPI 2 & 3 / AsyncAPI 2 documentation generator, with automatic changelog and visual diff.","links":{"websiteUrl":"https://bump.sh/","docsUrl":"https://docs.bump.sh/help/","repoUrl":""},"filters":{"categories":["documentation-generator"],"hasCommercial":true,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Cupid","description":"A library that focuses on finding and analyzing the relationships between AsyncAPI documents. It outputs a map of the system architecture.","links":{"repoUrl":"https://github.com/asyncapi/cupid"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"KnstEventBus","description":"AsyncApi code-first tools for c#. Generates document and view.","links":{"repoUrl":"https://github.com/d0972058277/KnstEventBus"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Springwolf","description":"Automated documentation for async APIs built with Spring Boot. Like Springfox for AsyncAPI. Auto-generates an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://www.springwolf.dev","repoUrl":"https://github.com/springwolf/springwolf-core"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Widdershins","description":"OpenAPI 3.0 / Swagger 2.0 / AsyncAPI 1.0 definition to Slate / Shins compatible markdown.","links":{"websiteUrl":"https://mermade.github.io/reslate/","repoUrl":"https://github.com/Mermade/widdershins"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Shell","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Editors":{"description":"The following is a list of editors or related tools that allow editing of AsyncAPI document.","toolsList":[{"title":"AsyncAPI Studio","description":"Visually design your AsyncAPI files and event-driven architecture.","links":{"websiteUrl":"https://studio.asyncapi.com","repoUrl":"https://github.com/asyncapi/studio"},"filters":{"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["editor"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"UI components":{"description":"The following is a list of UI components to view AsyncAPI documents.","toolsList":[{"title":"Api-Diff-Viewer","description":"React component to view the difference between two Json based API documents. Supported specifications: JsonSchema, OpenAPI 3.x, AsyncAPI 2.x.","links":{"repoUrl":"https://github.com/udamir/api-diff-viewer","websiteUrl":"https://api-diff-viewer.vercel.app/"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"Babel","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Storybook","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ui-component"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI React component","description":"React component for rendering documentation from your specification in real-time in the browser. It also provides a WebComponent and bundle for Angular and Vue","links":{"repoUrl":"https://github.com/asyncapi/asyncapi-react"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ui-component"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"DSL":{"description":"Writing YAML by hand is no fun, and maybe you don't want a GUI, so use a Domain Specific Language to write AsyncAPI in your language of choice.","toolsList":[{"title":"BOATS","description":"Compile your single AsyncAPI file from multiple YAML files with BOATS and with the help of the template engine Nunjucks, plus a many extra helpers to automate much of the donkey work.","links":{"repoUrl":"https://github.com/j-d-carmichael/boats"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["dsl"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Frameworks":{"description":"The following is a list of API/application frameworks that make use of AsyncAPI.","toolsList":[{"title":"Asynction","description":"SocketIO server framework driven by the AsyncAPI specification. Asynction guarantees that your API will work in accordance with its AsyncAPI documentation. Built on top of Flask-SocketIO.","links":{"websiteUrl":"https://pypi.org/project/asynction/","repoUrl":"https://github.com/dedoussis/asynction"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["framework"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"FastStream","description":"A powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ and NATS.","links":{"websiteUrl":"https://faststream.airt.ai","repoUrl":"https://github.com/airtai/FastStream"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"categories":["code-first","framework"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"GitHub Actions":{"description":"The following is a list of GitHub Actions that you can use in your workflows","toolsList":[{"title":"API documentation generation on Bump.sh","description":"With this GitHub Action you can automatically generate your API reference (with the changelog and diff) on Bump.sh from any AsyncAPI file.","links":{"websiteUrl":"https://github.com/marketplace/actions/api-documentation-on-bump","repoUrl":"https://github.com/bump-sh/github-action"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI GitHub Action","description":"This action validates if the AsyncAPI schema file is valid or not.","links":{"websiteUrl":"https://github.com/marketplace/actions/asyncapi-github-action","repoUrl":"https://github.com/WaleedAshraf/asyncapi-github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Automated version bump for AsyncAPI documents","description":"With this GitHub Action, you can automatically bump the version based on commit messages, which is similar to what semantic-release is for NPM.","links":{"websiteUrl":"https://github.com/marketplace/actions/automated-version-bump-for-asyncapi","repoUrl":"https://github.com/bump-sh/github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"GitHub Action for CLI","description":"GitHub Action with generator, validator, converter and others - all in one for your AsyncAPI documents with AsyncAPI CLI as backbone","links":{"repoUrl":"https://github.com/asyncapi/github-action-for-cli"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"GitHub Action for Generator","description":null,"links":{"repoUrl":"https://github.com/actions-marketplace-validations/asyncapi_github-action-for-generator"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"GitHub Action for Generator","description":"CLI to work with your AsyncAPI files. You can validate them and in the future use a generator and even bootstrap a new file. Contributions are welcomed!","links":{"repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-actions"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"Mocking and Testing":{"description":"The tools below take specification documents as input, then publish fake messages to broker destinations for simulation purposes. They may also check that publisher messages are compliant with schemas.","toolsList":[{"title":"Microcks","description":"Mocking and testing platform for API and microservices. Turn your AsyncAPI, OpenAPI contract examples, or Postman collections into ready-to-use mocks. Use examples to simulate and validate received messages according to schema elements.","links":{"websiteUrl":"https://microcks.io/","repoUrl":"https://github.com/microcks/microcks"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Saas","color":"bg-[#6AB8EC]","borderColor":"border-[#2275AD]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"MultiAPI Converter","description":"Use AsyncAPI definition, to generate Spring Cloud Contract producer validation or consumer stubs, using maven.","links":{"repoUrl":"https://github.com/sngular/scc-multiapi-converter"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Specmatic","description":"An API contract testing tool that helps ensure the correctness APIs by automatically generating test cases and verifying them against the API spec. It simplifies the process of testing APIs and reduces the likelihood of bugs and compatibility issues.","links":{"websiteUrl":"https://specmatic.io","docsUrl":"https://specmatic.io/documentation/","repoUrl":"https://github.com/znsio/specmatic"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Virtualan","description":"Mocking and testing platform for API and microservices. Allows you to create and setup mocks for OpenAPI and AsyncAPI contracts. Shows how to setup and create AsyncAPI GitHub Reference Examples and OpenAPI GitHub Reference Examples.","links":{"websiteUrl":"https://www.virtualan.io/index.html","repoUrl":"https://github.com/virtualansoftware"},"filters":{"technology":[{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Validators":{"description":"The following is a list of tools that validate AsyncAPI documents.","toolsList":[{"title":"AMF","description":"AMF (AML Modeling Framework) is an open-source library capable of parsing and validating AML metadata documents.","links":{"docsUrl":"https://a.ml/docs/","repoUrl":"https://github.com/aml-org/amf"},"filters":{"language":[{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI GitHub Action","description":"This action validates if the AsyncAPI schema file is valid or not.","links":{"websiteUrl":"https://github.com/marketplace/actions/asyncapi-github-action","repoUrl":"https://github.com/WaleedAshraf/asyncapi-github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI Parser","description":"Use this package to parse and validate AsyncAPI documents —either YAML or JSON— in your Node.js or browser application. Updated bundle for the browser is always attached to the GitHub Release.","links":{"repoUrl":"https://github.com/asyncapi/parser-js"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI Parser","description":"The AsyncAPI Parser validates AsyncAPI documents according to dedicated schemas.","links":{"repoUrl":"https://github.com/asyncapi/parser-go"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":true,"technology":[]}},{"title":"AsyncAPI Parser Wrapper","description":"Use this library to parse and validate AsyncAPI documents — either YAML or JSON — in your Java application. It is a Java wrapper over JavaScript Parser implemented using J2V8.","links":{"repoUrl":"https://github.com/AsyncAPITools/parser-java-wrapper"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI Validation","description":"Message validation package for YAML and JSON AsyncAPI documents.","links":{"repoUrl":"https://github.com/Elhebert/asyncapi-validation"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"asyncapi-validator","description":"It allows you to validate the schema of your messages against your AsyncAPI schema definition. You can use it with Kafka, RabbitMQ or any other messaging/queue.","links":{"repoUrl":"https://github.com/WaleedAshraf/asyncapi-validator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Spectral","description":"A flexible JSON/YAML linter for creating automated style guides, with baked in support for OpenAPI v3.1, v3.0, and v2.0 as well as AsyncAPI v2.x.","links":{"repoUrl":"https://github.com/stoplightio/spectral"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Compare tools":{"description":"The following is a list of tools that compare AsyncAPI documents.","toolsList":[{"title":"Api-Smart-Diff","description":"It allows you to compare two API documents and classify changes. Supported API specifications: OpenAPI, AsyncAPI, JsonSchema.","links":{"repoUrl":"https://github.com/udamir/api-smart-diff"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI Diff","description":"Diff is a library that compares two AsyncAPI Documents and provides information about the differences by pointing out explicitly information like breaking changes.","links":{"repoUrl":"https://github.com/asyncapi/diff"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"jasyncapicmp","description":"Tool for comparing two AsyncAPI versions and evaluating compatibility.","links":{"websiteUrl":"https://siom79.github.io/jasyncapicmp/","docsUrl":"https://github.com/siom79/jasyncapicmp","repoUrl":"https://github.com/siom79/jasyncapicmp"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"jasyncapicmp","description":"Tool/library/maven-plugin for comparing two AsyncAPI versions and evaluating compatibility.","links":{"websiteUrl":"https://siom79.github.io/jasyncapicmp/","repoUrl":"https://github.com/siom79/jasyncapicmp"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"CLIs":{"description":"The following is a list of tools that you can work with in terminal or do some CI/CD automation.","toolsList":[{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/hkirat/asyncapi-fork"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI-format","description":"Format an AsyncAPI document by ordering, casing, formatting, and filtering fields.","links":{"repoUrl":"https://github.com/asyncapi/converter-go"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Bundlers":{"description":"The following is a list of tools that you can work with to bundle AsyncAPI documents.","toolsList":[{"title":"Api-ref-bundler","description":"It allows you bundle/dereference external/internal $refs in Json based API document. Supported specifications: OpenAPI, AsyncAPI, JsonSchema.","links":{"repoUrl":"https://github.com/udamir/api-ref-bundler"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["bundler"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI Bundler","description":"Combine multiple AsyncAPI specification files into one.","links":{"repoUrl":"https://github.com/asyncapi/bundler"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["bundler"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"IDE Extensions":{"description":"The following is a list of extensions for different IDEs like VSCode, IntelliJ IDEA and others","toolsList":[{"title":"asyncapi-preview","description":"VSCode extension that enables you to:\n - Preview documentation generated using you AsyncAPI document. It uses AsyncAPI React component under the hood,\n - Create AsyncAPI documents faster using SmartPaste functionality\n","links":{"repoUrl":"https://github.com/asyncapi/vs-asyncapi-preview"},"filters":{"technology":[{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ide-extension"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"asyncapi-preview","description":"VSCode extension that enables you to:\n - Preview documentation generated using you AsyncAPI document. It uses AsyncAPI React component under the hood,\n - Create AsyncAPI documents faster using SmartPaste functionality\n","links":{"repoUrl":"https://github.com/Savio629/testing2"},"filters":{"technology":[{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ide-extension"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"jAsyncAPI - IDEA plugin","description":"Idea plugin for the java-asyncapi - Helps to edit and validate AsyncAPI schemas.","links":{"websiteUrl":"https://plugins.jetbrains.com/plugin/15673-asyncapi","docsUrl":"https://github.com/asyncapi/jasyncapi-idea-plugin#usage","repoUrl":"https://github.com/asyncapi/jasyncapi-idea-plugin"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ide-extension"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"AsyncAPI Generator Templates":{"description":"The following is a list of templates compatible with AsyncAPI Generator. You can use them to generate apps, clients or documentation from your AsyncAPI documents.","toolsList":[{"title":"HTML Template","description":"HTML template for AsyncAPI Generator. Use it to generate a static docs. It is using AsyncAPI React component under the hood.","links":{"repoUrl":"https://github.com/asyncapi/html-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"HTML","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Spring Cloud Stream Template","description":"Java Spring Cloud Stream template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-spring-cloud-stream-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Spring Template","description":"Java Spring template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-spring-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Template","description":"Java template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Java","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Node.js Multiprotocol Template","description":"This template generates a server using your AsyncAPI document. It supports multiple different protocols, like Kafka or MQTT. It is designed in the way that generated code is a library and with it's API you can start the server, send messages or register a middleware for listening incoming messages. Runtime message validation included.","links":{"repoUrl":"https://github.com/asyncapi/nodejs-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Node.js Websockets Template","description":"Node.js WebSockets template for the AsyncAPI Generator. It showcases how from a single AsyncAPI document you can generate a server and a client at the same time.","links":{"repoUrl":"https://github.com/asyncapi/nodejs-ws-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"Others":{"description":"The following is a list of tools that comes under Other category.","toolsList":[{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/hkirat/asyncapi-fork"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]}} \ No newline at end of file From 65838926c05df93aa82fd6e2e0c0582357b03654 Mon Sep 17 00:00:00 2001 From: dishafaujdar Date: Mon, 7 Oct 2024 08:18:01 +0530 Subject: [PATCH 03/18] fix the alignment --- components/Calendar.tsx | 11 ++++++++--- next-env.d.ts | 2 +- styles/globals.css | 16 ++++++++++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/components/Calendar.tsx b/components/Calendar.tsx index 2805abf2f7c..6c22fdfbb0c 100644 --- a/components/Calendar.tsx +++ b/components/Calendar.tsx @@ -30,8 +30,13 @@ export default function Calendar({ className = '', size }: ICalendarProps) { const eventsExist = eventsData.length > 0; return ( -
- +
+ {t('calendar.title')}
    @@ -53,7 +58,7 @@ export default function Calendar({ className = '', size }: ICalendarProps) { ))}
{eventsExist ? ( -
+
) : ( diff --git a/next-env.d.ts b/next-env.d.ts index 4f11a03dc6c..a4a7b3f5cfa 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -2,4 +2,4 @@ /// // NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. +// see https://nextjs.org/docs/pages/building-your-application/configuring/typescript for more information. diff --git a/styles/globals.css b/styles/globals.css index fa419b64514..312487b1a84 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -123,6 +123,22 @@ abbr[title] { text-overflow: ellipsis; } +@media (min-width: 300px) and (max-width: 400px) { + .calendar-container { + padding: 30px 35px; + margin: 10px 20px 20px 35 px; + max-width: 100%; + + } + .calendar-title { + font-size: 25px; + } + + .calendar-button { + font-size: 25px; + } +} + /* adjust DocsSearch mobile styles */ @media (max-width: 750px) { .DocSearch-Container { From 6983d0225ccbccf21033a3642e105e5408dd1722 Mon Sep 17 00:00:00 2001 From: dishafaujdar Date: Mon, 7 Oct 2024 08:30:25 +0530 Subject: [PATCH 04/18] fix the css --- styles/globals.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/styles/globals.css b/styles/globals.css index 312487b1a84..728d9ac95c5 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -126,7 +126,7 @@ abbr[title] { @media (min-width: 300px) and (max-width: 400px) { .calendar-container { padding: 30px 35px; - margin: 10px 20px 20px 35 px; + margin: 10px 20px 20px 35px; max-width: 100%; } From 2b29124d8a7951abb86dcb7dca17363b1578757b Mon Sep 17 00:00:00 2001 From: dishafaujdar Date: Mon, 7 Oct 2024 09:47:30 +0530 Subject: [PATCH 05/18] fix the css-desktop --- styles/globals.css | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/styles/globals.css b/styles/globals.css index 728d9ac95c5..86d79054c60 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -122,13 +122,27 @@ abbr[title] { overflow: hidden; text-overflow: ellipsis; } - -@media (min-width: 300px) and (max-width: 400px) { +@media (min-width: 1000px) { + .calendar-container { + padding: 40px; + margin: 20px 0; + width: 100%; + height: 100%; + } + .calendar-title { + font-size: 50px; + } + .calendar-button { + font-size: 50px; + } +} + +@media (min-width: 300px) and (max-width: 1000px) { .calendar-container { - padding: 30px 35px; - margin: 10px 20px 20px 35px; - max-width: 100%; - + padding: 35px 35px; + margin: 0px 0px 20px 10px; + width: 100%; + height: 100%; } .calendar-title { font-size: 25px; From f541d95211c61a0a25d0ce4354065b904c8a52b9 Mon Sep 17 00:00:00 2001 From: dishafaujdar Date: Mon, 7 Oct 2024 12:08:57 +0530 Subject: [PATCH 06/18] fix the css using tailwind --- components/Calendar.tsx | 23 +++++++++++++++-------- styles/globals.css | 32 +------------------------------- 2 files changed, 16 insertions(+), 39 deletions(-) diff --git a/components/Calendar.tsx b/components/Calendar.tsx index 6c22fdfbb0c..b5fba72182f 100644 --- a/components/Calendar.tsx +++ b/components/Calendar.tsx @@ -32,11 +32,15 @@ export default function Calendar({ className = '', size }: ICalendarProps) { return (
- + {t('calendar.title')}
    @@ -47,10 +51,9 @@ export default function Calendar({ className = '', size }: ICalendarProps) { {moment(event.date).format('D')}
-

{event.title}

-

- {moment(event.date).local().format('LLLL')} UTC - {moment(event.date).local().format('Z')} +

{event.title}

+

+ {moment(event.date).local().format('LLLL')} UTC {moment(event.date).local().format('Z')}

@@ -59,10 +62,14 @@ export default function Calendar({ className = '', size }: ICalendarProps) { {eventsExist ? (
- +
) : ( -
{t('calendar.noMeetingsMessage')}
+
{t('calendar.noMeetingsMessage')}
)}
); diff --git a/styles/globals.css b/styles/globals.css index 86d79054c60..26abb5f57af 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -122,36 +122,6 @@ abbr[title] { overflow: hidden; text-overflow: ellipsis; } -@media (min-width: 1000px) { - .calendar-container { - padding: 40px; - margin: 20px 0; - width: 100%; - height: 100%; - } - .calendar-title { - font-size: 50px; - } - .calendar-button { - font-size: 50px; - } -} - -@media (min-width: 300px) and (max-width: 1000px) { - .calendar-container { - padding: 35px 35px; - margin: 0px 0px 20px 10px; - width: 100%; - height: 100%; - } - .calendar-title { - font-size: 25px; - } - - .calendar-button { - font-size: 25px; - } -} /* adjust DocsSearch mobile styles */ @media (max-width: 750px) { @@ -380,4 +350,4 @@ abbr[title] { .explorer-menu-wrapper > div > div > div > button { margin-top: 0px; -} +} \ No newline at end of file From 582db84115553b262f179658bc6d1c61a3c96160 Mon Sep 17 00:00:00 2001 From: dishafaujdar Date: Mon, 7 Oct 2024 12:35:34 +0530 Subject: [PATCH 07/18] fix the css-tailwind --- components/Calendar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/Calendar.tsx b/components/Calendar.tsx index b5fba72182f..83a91c6ff2b 100644 --- a/components/Calendar.tsx +++ b/components/Calendar.tsx @@ -65,7 +65,7 @@ export default function Calendar({ className = '', size }: ICalendarProps) {
) : ( From 2fe03d5ac496f535670e9362933930a9d4bdc55b Mon Sep 17 00:00:00 2001 From: dishafaujdar Date: Mon, 7 Oct 2024 13:26:37 +0530 Subject: [PATCH 08/18] rm .env --- next-env.d.ts | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 next-env.d.ts diff --git a/next-env.d.ts b/next-env.d.ts deleted file mode 100644 index a4a7b3f5cfa..00000000000 --- a/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/pages/building-your-application/configuring/typescript for more information. From 5d8b6f8b484164efa1ca20845f5428b04487f916 Mon Sep 17 00:00:00 2001 From: dishafaujdar Date: Mon, 7 Oct 2024 18:08:18 +0530 Subject: [PATCH 09/18] Reverted changes in next-env.d.ts and globals.css --- next-env.d.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 next-env.d.ts diff --git a/next-env.d.ts b/next-env.d.ts new file mode 100644 index 00000000000..4f11a03dc6c --- /dev/null +++ b/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. From 7e6082cfa5e6a679d20ae6622e11050f4199307d Mon Sep 17 00:00:00 2001 From: dishafaujdar Date: Mon, 7 Oct 2024 18:22:17 +0530 Subject: [PATCH 10/18] css global --- styles/globals.css | 353 --------------------------------------------- 1 file changed, 353 deletions(-) delete mode 100644 styles/globals.css diff --git a/styles/globals.css b/styles/globals.css deleted file mode 100644 index 26abb5f57af..00000000000 --- a/styles/globals.css +++ /dev/null @@ -1,353 +0,0 @@ -@import url(https://cdn.jsdelivr.net/gh/tonsky/FiraCode@4/distr/fira_code.css); -@import url(https://cdn.jsdelivr.net/npm/@docsearch/css@3); - -@import "swiper/css"; -@import "swiper/css/a11y"; -@import "swiper/css/navigation"; -@import "swiper/css/pagination"; -@import "swiper/css/scrollbar"; - -@tailwind base; -@tailwind components; -@tailwind utilities; -@tailwind variants; - -html, -body { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - scroll-behavior: smooth; -} - -li>p { - display: inline; -} - -.atss { - /* AddThis plugin */ - z-index: 10 !important; -} - -abbr[title] { - text-decoration: none; -} - -.countdown-text-gradient { - background: linear-gradient( - 230deg, - #e74694, - #4b79cf, - #4bc5cf, - #4b79cf, - #e74694 - ); - background-size: 500% 100%; - background-clip: text; - -webkit-text-fill-color: transparent; - -webkit-animation: GradientAnimation 50s ease infinite alternate; - -moz-animation: GradientAnimation 50s ease infinite alternate; - animation: GradientAnimation 50s ease infinite alternate; -} - -@keyframes GradientAnimation { - 0% { - background-position: 0% 50% - } - - 100% { - background-position: 200% 50% - } -} - -:target { - scroll-margin-top: 120px; -} - -@media (max-width: 1280px) { - :target { - scroll-margin-top: 155px; - } -} - -/* adjust swiper library */ -.swiper-wrapper { - align-items: stretch; -} - -.swiper-slide { - height: auto !important; -} - -/* adjust DocsSearch input styles */ -.DocSearch-Input { - border-width: 0; - background-color: transparent; -} - -.DocSearch-Input:focus { - outline: 0; - outline-offset: 0; - box-shadow: none; -} - -.DocSearch-Screen-Icon { - display: flex; - flex-flow: row; - justify-content: center; - align-items: center; -} - -.DocSearch-Help > a { - appearance: none; - background: none; - border: 0; - border-radius: 1em; - color: var(--docsearch-highlight-color); - cursor: pointer; - display: inline-block; - font-size: 1em; - font-weight: 700; - padding: 0; -} - -.DocSearch-Help > a:focus, .DocSearch-Help > a:hover { - outline: none; - text-decoration: underline; -} - -.two-liner { - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - overflow: hidden; - text-overflow: ellipsis; -} - -/* adjust DocsSearch mobile styles */ -@media (max-width: 750px) { - .DocSearch-Container { - position: fixed !important; - } -} - -@media (max-width: 767px){ - .orbits{ - display: none; - } -} -.orbit-container { - position: relative; - margin: 0 auto; - width: 100%; - height: 100%; - top: -200px; -} - -.orbit { - position: absolute; - border-radius: 100%; - border: solid 3px #f3f3f4; - transition: 0.2s; -} - -.orbit > div { - cursor: pointer; -} - -.orbit > div > img { - border-radius: 100%; -} -.title { - line-height: 0.9; - font-size: 60px; -} -#first-orbit { - --n: 6; /* number of item */ - --d: 70s; /* duration */ - width: 600px; - height: 600px; - top: 165px; - left: calc(50% - 300px); - position: relative; - display: grid; - grid-template-columns: 35px; - grid-template-rows: 35px; - place-content: center; -} - -#second-orbit { - --no: 7; /* number of item */ - --de: 80s; /* duration */ - width: 800px; - height: 800px; - top: 75px; - left: calc(50% - 400px); - display: grid; - grid-template-columns: 35px; - grid-template-rows: 35px; - place-content: center; -} - -#third-orbit { - --ni: 7; /* number of item */ - --ds: 80s; /* duration */ - width: 1000px; - height: 1000px; - top: -10px; - left: calc(50% - 500px); - display: grid; - grid-template-columns: 35px; - grid-template-rows: 35px; - place-content: center; -} - -.item, -.item-2, -.item-3 { - grid-area: 1/1; - line-height: 30px; - text-align: center; - border-radius: 50%; -} - -.item { - animation: orbit-spin var(--d) linear infinite; - transform: rotate(0) translate(300px) rotate(0); -} - -.item-2 { - animation: orbit-spin2 var(--de) linear infinite; - transform: rotate(-0) translate(400px) rotate(-0); -} - -.item-3 { - animation: orbit-spin3 var(--ds) linear infinite; - transform: rotate(0) translate(500px) rotate(0); -} -@keyframes orbit-spin { - 100% { - transform: rotate(1turn) translate(300px) rotate(-1turn); - } -} - -.item:nth-child(1) { - animation-delay: calc(-0 * var(--d) / var(--n)); -} -.item:nth-child(2) { - animation-delay: calc(-1 * var(--d) / var(--n)); -} -.item:nth-child(3) { - animation-delay: calc(-2 * var(--d) / var(--n)); -} -.item:nth-child(4) { - animation-delay: calc(-3 * var(--d) / var(--n)); -} -.item:nth-child(5) { - animation-delay: calc(-4 * var(--d) / var(--n)); -} -.item:nth-child(6) { - animation-delay: calc(-5 * var(--d) / var(--n)); -} - -@keyframes orbit-spin2 { - 100% { - transform: rotate(-1turn) translate(400px) rotate(1turn); - } -} - -.item-2:nth-child(1) { - animation-delay: calc(-0 * var(--de) / var(--no)); -} -.item-2:nth-child(2) { - animation-delay: calc(-1 * var(--de) / var(--no)); -} -.item-2:nth-child(3) { - animation-delay: calc(-2 * var(--de) / var(--no)); -} -.item-2:nth-child(4) { - animation-delay: calc(-3 * var(--de) / var(--no)); -} -.item-2:nth-child(5) { - animation-delay: calc(-4 * var(--de) / var(--no)); -} -.item-2:nth-child(6) { - animation-delay: calc(-5 * var(--de) / var(--no)); -} -.item-2:nth-child(7) { - animation-delay: calc(-6 * var(--de) / var(--no)); -} -.item-2:nth-child(8) { - animation-delay: calc(-7 * var(--de) / var(--no)); -} -.item-2:nth-child(9) { - animation-delay: calc(-8 * var(--de) / var(--no)); -} - -@keyframes orbit-spin3 { - 100% { - transform: rotate(1turn) translate(500px) rotate(-1turn); - } -} - -.item-3:nth-child(1) { - animation-delay: calc(-0 * var(--ds) / var(--ni)); -} -.item-3:nth-child(2) { - animation-delay: calc(-1 * var(--ds) / var(--ni)); -} -.item-3:nth-child(3) { - animation-delay: calc(-2 * var(--ds) / var(--ni)); -} -.item-3:nth-child(4) { - animation-delay: calc(-3 * var(--ds) / var(--ni)); -} -.item-3:nth-child(5) { - animation-delay: calc(-4 * var(--ds) / var(--ni)); -} -.item-3:nth-child(6) { - animation-delay: calc(-5 * var(--ds) / var(--ni)); -} -.item-3:nth-child(7) { - animation-delay: calc(-6 * var(--ds) / var(--ni)); -} -.item-3:nth-child(8) { - animation-delay: calc(-7 * var(--ds) / var(--ni)); -} -.item-3:nth-child(9) { - animation-delay: calc(-8 * var(--ds) / var(--ni)); -} - -.gh-img { - border: 1px solid #d4cfd76a; - border-radius: 10px; - box-shadow: 5px 20px 18px 10px #e8e8e8; - background: linear-gradient(225deg, #2dccfd 9.35%, #ad20e2 88.41%); -} - -.community-pattern { - background: url('/img/homepage/circular-pattern.png'); - width: 100%; - height: 90%; - background-position: center; - background-size: cover; - margin-top: -1900px; -} - -.meeting-card:hover > div:nth-child(1) > div { - display: block; - color: white; -} - -.meeting-card:hover > div:nth-child(2) > p { - color: white; -} - -.explorer-menu-wrapper > div > div{ - border: 1px solid rgb(228, 228, 228); - border-radius: 10px; - padding: 10px; -} - -.explorer-menu-wrapper > div > div > div > button { - margin-top: 0px; -} \ No newline at end of file From 2c6d7e8b8f371e2fe71a651baaa7acf9dc0635ef Mon Sep 17 00:00:00 2001 From: dishafaujdar Date: Mon, 7 Oct 2024 18:26:41 +0530 Subject: [PATCH 11/18] css global add --- styles/globals.css | 353 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 353 insertions(+) create mode 100644 styles/globals.css diff --git a/styles/globals.css b/styles/globals.css new file mode 100644 index 00000000000..26abb5f57af --- /dev/null +++ b/styles/globals.css @@ -0,0 +1,353 @@ +@import url(https://cdn.jsdelivr.net/gh/tonsky/FiraCode@4/distr/fira_code.css); +@import url(https://cdn.jsdelivr.net/npm/@docsearch/css@3); + +@import "swiper/css"; +@import "swiper/css/a11y"; +@import "swiper/css/navigation"; +@import "swiper/css/pagination"; +@import "swiper/css/scrollbar"; + +@tailwind base; +@tailwind components; +@tailwind utilities; +@tailwind variants; + +html, +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + scroll-behavior: smooth; +} + +li>p { + display: inline; +} + +.atss { + /* AddThis plugin */ + z-index: 10 !important; +} + +abbr[title] { + text-decoration: none; +} + +.countdown-text-gradient { + background: linear-gradient( + 230deg, + #e74694, + #4b79cf, + #4bc5cf, + #4b79cf, + #e74694 + ); + background-size: 500% 100%; + background-clip: text; + -webkit-text-fill-color: transparent; + -webkit-animation: GradientAnimation 50s ease infinite alternate; + -moz-animation: GradientAnimation 50s ease infinite alternate; + animation: GradientAnimation 50s ease infinite alternate; +} + +@keyframes GradientAnimation { + 0% { + background-position: 0% 50% + } + + 100% { + background-position: 200% 50% + } +} + +:target { + scroll-margin-top: 120px; +} + +@media (max-width: 1280px) { + :target { + scroll-margin-top: 155px; + } +} + +/* adjust swiper library */ +.swiper-wrapper { + align-items: stretch; +} + +.swiper-slide { + height: auto !important; +} + +/* adjust DocsSearch input styles */ +.DocSearch-Input { + border-width: 0; + background-color: transparent; +} + +.DocSearch-Input:focus { + outline: 0; + outline-offset: 0; + box-shadow: none; +} + +.DocSearch-Screen-Icon { + display: flex; + flex-flow: row; + justify-content: center; + align-items: center; +} + +.DocSearch-Help > a { + appearance: none; + background: none; + border: 0; + border-radius: 1em; + color: var(--docsearch-highlight-color); + cursor: pointer; + display: inline-block; + font-size: 1em; + font-weight: 700; + padding: 0; +} + +.DocSearch-Help > a:focus, .DocSearch-Help > a:hover { + outline: none; + text-decoration: underline; +} + +.two-liner { + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; +} + +/* adjust DocsSearch mobile styles */ +@media (max-width: 750px) { + .DocSearch-Container { + position: fixed !important; + } +} + +@media (max-width: 767px){ + .orbits{ + display: none; + } +} +.orbit-container { + position: relative; + margin: 0 auto; + width: 100%; + height: 100%; + top: -200px; +} + +.orbit { + position: absolute; + border-radius: 100%; + border: solid 3px #f3f3f4; + transition: 0.2s; +} + +.orbit > div { + cursor: pointer; +} + +.orbit > div > img { + border-radius: 100%; +} +.title { + line-height: 0.9; + font-size: 60px; +} +#first-orbit { + --n: 6; /* number of item */ + --d: 70s; /* duration */ + width: 600px; + height: 600px; + top: 165px; + left: calc(50% - 300px); + position: relative; + display: grid; + grid-template-columns: 35px; + grid-template-rows: 35px; + place-content: center; +} + +#second-orbit { + --no: 7; /* number of item */ + --de: 80s; /* duration */ + width: 800px; + height: 800px; + top: 75px; + left: calc(50% - 400px); + display: grid; + grid-template-columns: 35px; + grid-template-rows: 35px; + place-content: center; +} + +#third-orbit { + --ni: 7; /* number of item */ + --ds: 80s; /* duration */ + width: 1000px; + height: 1000px; + top: -10px; + left: calc(50% - 500px); + display: grid; + grid-template-columns: 35px; + grid-template-rows: 35px; + place-content: center; +} + +.item, +.item-2, +.item-3 { + grid-area: 1/1; + line-height: 30px; + text-align: center; + border-radius: 50%; +} + +.item { + animation: orbit-spin var(--d) linear infinite; + transform: rotate(0) translate(300px) rotate(0); +} + +.item-2 { + animation: orbit-spin2 var(--de) linear infinite; + transform: rotate(-0) translate(400px) rotate(-0); +} + +.item-3 { + animation: orbit-spin3 var(--ds) linear infinite; + transform: rotate(0) translate(500px) rotate(0); +} +@keyframes orbit-spin { + 100% { + transform: rotate(1turn) translate(300px) rotate(-1turn); + } +} + +.item:nth-child(1) { + animation-delay: calc(-0 * var(--d) / var(--n)); +} +.item:nth-child(2) { + animation-delay: calc(-1 * var(--d) / var(--n)); +} +.item:nth-child(3) { + animation-delay: calc(-2 * var(--d) / var(--n)); +} +.item:nth-child(4) { + animation-delay: calc(-3 * var(--d) / var(--n)); +} +.item:nth-child(5) { + animation-delay: calc(-4 * var(--d) / var(--n)); +} +.item:nth-child(6) { + animation-delay: calc(-5 * var(--d) / var(--n)); +} + +@keyframes orbit-spin2 { + 100% { + transform: rotate(-1turn) translate(400px) rotate(1turn); + } +} + +.item-2:nth-child(1) { + animation-delay: calc(-0 * var(--de) / var(--no)); +} +.item-2:nth-child(2) { + animation-delay: calc(-1 * var(--de) / var(--no)); +} +.item-2:nth-child(3) { + animation-delay: calc(-2 * var(--de) / var(--no)); +} +.item-2:nth-child(4) { + animation-delay: calc(-3 * var(--de) / var(--no)); +} +.item-2:nth-child(5) { + animation-delay: calc(-4 * var(--de) / var(--no)); +} +.item-2:nth-child(6) { + animation-delay: calc(-5 * var(--de) / var(--no)); +} +.item-2:nth-child(7) { + animation-delay: calc(-6 * var(--de) / var(--no)); +} +.item-2:nth-child(8) { + animation-delay: calc(-7 * var(--de) / var(--no)); +} +.item-2:nth-child(9) { + animation-delay: calc(-8 * var(--de) / var(--no)); +} + +@keyframes orbit-spin3 { + 100% { + transform: rotate(1turn) translate(500px) rotate(-1turn); + } +} + +.item-3:nth-child(1) { + animation-delay: calc(-0 * var(--ds) / var(--ni)); +} +.item-3:nth-child(2) { + animation-delay: calc(-1 * var(--ds) / var(--ni)); +} +.item-3:nth-child(3) { + animation-delay: calc(-2 * var(--ds) / var(--ni)); +} +.item-3:nth-child(4) { + animation-delay: calc(-3 * var(--ds) / var(--ni)); +} +.item-3:nth-child(5) { + animation-delay: calc(-4 * var(--ds) / var(--ni)); +} +.item-3:nth-child(6) { + animation-delay: calc(-5 * var(--ds) / var(--ni)); +} +.item-3:nth-child(7) { + animation-delay: calc(-6 * var(--ds) / var(--ni)); +} +.item-3:nth-child(8) { + animation-delay: calc(-7 * var(--ds) / var(--ni)); +} +.item-3:nth-child(9) { + animation-delay: calc(-8 * var(--ds) / var(--ni)); +} + +.gh-img { + border: 1px solid #d4cfd76a; + border-radius: 10px; + box-shadow: 5px 20px 18px 10px #e8e8e8; + background: linear-gradient(225deg, #2dccfd 9.35%, #ad20e2 88.41%); +} + +.community-pattern { + background: url('/img/homepage/circular-pattern.png'); + width: 100%; + height: 90%; + background-position: center; + background-size: cover; + margin-top: -1900px; +} + +.meeting-card:hover > div:nth-child(1) > div { + display: block; + color: white; +} + +.meeting-card:hover > div:nth-child(2) > p { + color: white; +} + +.explorer-menu-wrapper > div > div{ + border: 1px solid rgb(228, 228, 228); + border-radius: 10px; + padding: 10px; +} + +.explorer-menu-wrapper > div > div > div > button { + margin-top: 0px; +} \ No newline at end of file From a4ce00e7b8e6da0e88a90e452fdcc116efddf7dd Mon Sep 17 00:00:00 2001 From: dishafaujdar Date: Mon, 7 Oct 2024 18:36:59 +0530 Subject: [PATCH 12/18] Removed styles folder and globals.css --- styles/globals.css | 353 --------------------------------------------- 1 file changed, 353 deletions(-) delete mode 100644 styles/globals.css diff --git a/styles/globals.css b/styles/globals.css deleted file mode 100644 index 26abb5f57af..00000000000 --- a/styles/globals.css +++ /dev/null @@ -1,353 +0,0 @@ -@import url(https://cdn.jsdelivr.net/gh/tonsky/FiraCode@4/distr/fira_code.css); -@import url(https://cdn.jsdelivr.net/npm/@docsearch/css@3); - -@import "swiper/css"; -@import "swiper/css/a11y"; -@import "swiper/css/navigation"; -@import "swiper/css/pagination"; -@import "swiper/css/scrollbar"; - -@tailwind base; -@tailwind components; -@tailwind utilities; -@tailwind variants; - -html, -body { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - scroll-behavior: smooth; -} - -li>p { - display: inline; -} - -.atss { - /* AddThis plugin */ - z-index: 10 !important; -} - -abbr[title] { - text-decoration: none; -} - -.countdown-text-gradient { - background: linear-gradient( - 230deg, - #e74694, - #4b79cf, - #4bc5cf, - #4b79cf, - #e74694 - ); - background-size: 500% 100%; - background-clip: text; - -webkit-text-fill-color: transparent; - -webkit-animation: GradientAnimation 50s ease infinite alternate; - -moz-animation: GradientAnimation 50s ease infinite alternate; - animation: GradientAnimation 50s ease infinite alternate; -} - -@keyframes GradientAnimation { - 0% { - background-position: 0% 50% - } - - 100% { - background-position: 200% 50% - } -} - -:target { - scroll-margin-top: 120px; -} - -@media (max-width: 1280px) { - :target { - scroll-margin-top: 155px; - } -} - -/* adjust swiper library */ -.swiper-wrapper { - align-items: stretch; -} - -.swiper-slide { - height: auto !important; -} - -/* adjust DocsSearch input styles */ -.DocSearch-Input { - border-width: 0; - background-color: transparent; -} - -.DocSearch-Input:focus { - outline: 0; - outline-offset: 0; - box-shadow: none; -} - -.DocSearch-Screen-Icon { - display: flex; - flex-flow: row; - justify-content: center; - align-items: center; -} - -.DocSearch-Help > a { - appearance: none; - background: none; - border: 0; - border-radius: 1em; - color: var(--docsearch-highlight-color); - cursor: pointer; - display: inline-block; - font-size: 1em; - font-weight: 700; - padding: 0; -} - -.DocSearch-Help > a:focus, .DocSearch-Help > a:hover { - outline: none; - text-decoration: underline; -} - -.two-liner { - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - overflow: hidden; - text-overflow: ellipsis; -} - -/* adjust DocsSearch mobile styles */ -@media (max-width: 750px) { - .DocSearch-Container { - position: fixed !important; - } -} - -@media (max-width: 767px){ - .orbits{ - display: none; - } -} -.orbit-container { - position: relative; - margin: 0 auto; - width: 100%; - height: 100%; - top: -200px; -} - -.orbit { - position: absolute; - border-radius: 100%; - border: solid 3px #f3f3f4; - transition: 0.2s; -} - -.orbit > div { - cursor: pointer; -} - -.orbit > div > img { - border-radius: 100%; -} -.title { - line-height: 0.9; - font-size: 60px; -} -#first-orbit { - --n: 6; /* number of item */ - --d: 70s; /* duration */ - width: 600px; - height: 600px; - top: 165px; - left: calc(50% - 300px); - position: relative; - display: grid; - grid-template-columns: 35px; - grid-template-rows: 35px; - place-content: center; -} - -#second-orbit { - --no: 7; /* number of item */ - --de: 80s; /* duration */ - width: 800px; - height: 800px; - top: 75px; - left: calc(50% - 400px); - display: grid; - grid-template-columns: 35px; - grid-template-rows: 35px; - place-content: center; -} - -#third-orbit { - --ni: 7; /* number of item */ - --ds: 80s; /* duration */ - width: 1000px; - height: 1000px; - top: -10px; - left: calc(50% - 500px); - display: grid; - grid-template-columns: 35px; - grid-template-rows: 35px; - place-content: center; -} - -.item, -.item-2, -.item-3 { - grid-area: 1/1; - line-height: 30px; - text-align: center; - border-radius: 50%; -} - -.item { - animation: orbit-spin var(--d) linear infinite; - transform: rotate(0) translate(300px) rotate(0); -} - -.item-2 { - animation: orbit-spin2 var(--de) linear infinite; - transform: rotate(-0) translate(400px) rotate(-0); -} - -.item-3 { - animation: orbit-spin3 var(--ds) linear infinite; - transform: rotate(0) translate(500px) rotate(0); -} -@keyframes orbit-spin { - 100% { - transform: rotate(1turn) translate(300px) rotate(-1turn); - } -} - -.item:nth-child(1) { - animation-delay: calc(-0 * var(--d) / var(--n)); -} -.item:nth-child(2) { - animation-delay: calc(-1 * var(--d) / var(--n)); -} -.item:nth-child(3) { - animation-delay: calc(-2 * var(--d) / var(--n)); -} -.item:nth-child(4) { - animation-delay: calc(-3 * var(--d) / var(--n)); -} -.item:nth-child(5) { - animation-delay: calc(-4 * var(--d) / var(--n)); -} -.item:nth-child(6) { - animation-delay: calc(-5 * var(--d) / var(--n)); -} - -@keyframes orbit-spin2 { - 100% { - transform: rotate(-1turn) translate(400px) rotate(1turn); - } -} - -.item-2:nth-child(1) { - animation-delay: calc(-0 * var(--de) / var(--no)); -} -.item-2:nth-child(2) { - animation-delay: calc(-1 * var(--de) / var(--no)); -} -.item-2:nth-child(3) { - animation-delay: calc(-2 * var(--de) / var(--no)); -} -.item-2:nth-child(4) { - animation-delay: calc(-3 * var(--de) / var(--no)); -} -.item-2:nth-child(5) { - animation-delay: calc(-4 * var(--de) / var(--no)); -} -.item-2:nth-child(6) { - animation-delay: calc(-5 * var(--de) / var(--no)); -} -.item-2:nth-child(7) { - animation-delay: calc(-6 * var(--de) / var(--no)); -} -.item-2:nth-child(8) { - animation-delay: calc(-7 * var(--de) / var(--no)); -} -.item-2:nth-child(9) { - animation-delay: calc(-8 * var(--de) / var(--no)); -} - -@keyframes orbit-spin3 { - 100% { - transform: rotate(1turn) translate(500px) rotate(-1turn); - } -} - -.item-3:nth-child(1) { - animation-delay: calc(-0 * var(--ds) / var(--ni)); -} -.item-3:nth-child(2) { - animation-delay: calc(-1 * var(--ds) / var(--ni)); -} -.item-3:nth-child(3) { - animation-delay: calc(-2 * var(--ds) / var(--ni)); -} -.item-3:nth-child(4) { - animation-delay: calc(-3 * var(--ds) / var(--ni)); -} -.item-3:nth-child(5) { - animation-delay: calc(-4 * var(--ds) / var(--ni)); -} -.item-3:nth-child(6) { - animation-delay: calc(-5 * var(--ds) / var(--ni)); -} -.item-3:nth-child(7) { - animation-delay: calc(-6 * var(--ds) / var(--ni)); -} -.item-3:nth-child(8) { - animation-delay: calc(-7 * var(--ds) / var(--ni)); -} -.item-3:nth-child(9) { - animation-delay: calc(-8 * var(--ds) / var(--ni)); -} - -.gh-img { - border: 1px solid #d4cfd76a; - border-radius: 10px; - box-shadow: 5px 20px 18px 10px #e8e8e8; - background: linear-gradient(225deg, #2dccfd 9.35%, #ad20e2 88.41%); -} - -.community-pattern { - background: url('/img/homepage/circular-pattern.png'); - width: 100%; - height: 90%; - background-position: center; - background-size: cover; - margin-top: -1900px; -} - -.meeting-card:hover > div:nth-child(1) > div { - display: block; - color: white; -} - -.meeting-card:hover > div:nth-child(2) > p { - color: white; -} - -.explorer-menu-wrapper > div > div{ - border: 1px solid rgb(228, 228, 228); - border-radius: 10px; - padding: 10px; -} - -.explorer-menu-wrapper > div > div > div > button { - margin-top: 0px; -} \ No newline at end of file From 662ec26825fb47edcc4c61baea5728a99043a8f8 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela <90895835+vishvamsinh28@users.noreply.github.com> Date: Mon, 7 Oct 2024 18:41:56 +0530 Subject: [PATCH 13/18] feat: add test for build docs script (#3137) Co-authored-by: Ansh Goyal --- scripts/build-docs.js | 208 ++++++++++++----------- tests/build-docs/addDocButtons.test.js | 91 ++++++++++ tests/build-docs/buildNavTree.test.js | 133 +++++++++++++++ tests/build-docs/convertDocPosts.test.js | 62 +++++++ tests/fixtures/addDocButtonsData.js | 41 +++++ tests/fixtures/buildNavTreeData.js | 45 +++++ tests/fixtures/convertDocPostData.js | 31 ++++ 7 files changed, 516 insertions(+), 95 deletions(-) create mode 100644 tests/build-docs/addDocButtons.test.js create mode 100644 tests/build-docs/buildNavTree.test.js create mode 100644 tests/build-docs/convertDocPosts.test.js create mode 100644 tests/fixtures/addDocButtonsData.js create mode 100644 tests/fixtures/buildNavTreeData.js create mode 100644 tests/fixtures/convertDocPostData.js diff --git a/scripts/build-docs.js b/scripts/build-docs.js index a51971cc248..ac47b6751ce 100644 --- a/scripts/build-docs.js +++ b/scripts/build-docs.js @@ -1,61 +1,65 @@ const sortBy = require('lodash/sortBy') function buildNavTree(navItems) { + try { const tree = { 'welcome': { item: { title: 'Welcome', weight: 0, isRootSection: true, isSection: true, rootSectionId: 'welcome', sectionWeight: 0, slug: '/docs' }, children: {} } } - + //first we make sure that list of items lists main section items and then sub sections, documents last - const sortedItems = sortBy(navItems, ['isRootSection', 'weight', 'isSection']); - + const sortedItems = sortBy(navItems, ['isRootSection', 'weight', 'isSection']); + sortedItems.forEach(item => { //identify main sections if (item.isRootSection) { tree[item.rootSectionId] = { item, children: {} } } - + //identify subsections if (item.parent) { - tree[item.parent].children[item.sectionId] = { item, children: [] } + if (!tree[item.parent]) { + throw new Error(`Parent section ${item.parent} not found for item ${item.title}`); + } + tree[item.parent].children[item.sectionId] = { item, children: [] }; } - + if (!item.isSection) { if (item.sectionId) { - let section = tree[item.rootSectionId].children[item.sectionId]; + let section = tree[item.rootSectionId]?.children[item.sectionId]; if (!section) { - tree[item.rootSectionId].children[item.sectionId] = { item, children: [] } + tree[item.rootSectionId].children[item.sectionId] = { item, children: [] }; } - tree[item.rootSectionId].children[item.sectionId].children.push(item) + tree[item.rootSectionId].children[item.sectionId].children.push(item); } else { tree[item.rootSectionId].children[item.title] = { item }; } } - }) - + }); + for (const [rootKey, rootValue] of Object.entries(tree)) { const allChildren = rootValue.children; const allChildrenKeys = Object.keys(allChildren); - + rootValue.children = allChildrenKeys .sort((prev, next) => { return allChildren[prev].item.weight - allChildren[next].item.weight; - }).reduce( - (obj, key) => { - obj[key] = allChildren[key]; - return obj; - }, - {} - ); - + }) + .reduce((obj, key) => { + obj[key] = allChildren[key]; + return obj; + }, {}); + //handling subsections if (allChildrenKeys.length > 1) { for (const key of allChildrenKeys) { - allChildren[key].children?.sort((prev, next) => { - return prev.weight - next.weight; - }); - + if (allChildren[key].children) { + allChildren[key].children.sort((prev, next) => { + return prev.weight - next.weight; + }); + } + // point in slug for specification subgroup to the latest specification version if (rootKey === 'reference' && key === 'specification') { allChildren[key].item.href = allChildren[key].children.find(c => c.isPrerelease === undefined).slug; @@ -63,17 +67,22 @@ function buildNavTree(navItems) { } } } - + return tree; + + } catch (err) { + throw new Error(`Failed to build navigation tree: ${err.message}`); + } } - // A recursion function, works on the logic of Depth First Search to traverse all the root and child posts of the - // DocTree to get sequential order of the Doc Posts +// A recursion function, works on the logic of Depth First Search to traverse all the root and child posts of the +// DocTree to get sequential order of the Doc Posts const convertDocPosts = (docObject) => { + try { let docsArray = [] // certain entries in the DocPosts are either a parent to many posts or itself a post. - docsArray.push(docObject?.item || docObject) - if(docObject.children){ + docsArray.push(docObject?.item || docObject) + if (docObject.children) { let children = docObject.children Object.keys(children).forEach((child) => { let docChildArray = convertDocPosts(children[child]) @@ -81,84 +90,93 @@ const convertDocPosts = (docObject) => { }) } return docsArray + } + catch (err) { + throw new Error('Error in convertDocPosts:', err); + } } - -function addDocButtons(docPosts, treePosts){ + +function addDocButtons(docPosts, treePosts) { let structuredPosts = []; let rootSections = []; - // Traversing the whole DocTree and storing each post inside them in sequential order - Object.keys(treePosts).forEach((rootElement) => { - structuredPosts.push(treePosts[rootElement].item) - if(treePosts[rootElement].children){ - let children = treePosts[rootElement].children - Object.keys(children).forEach((child) => { - let docChildArray = convertDocPosts(children[child]) - structuredPosts = [...structuredPosts, ...docChildArray] - }) - } - }) - // Appending the content of welcome page pf Docs from the posts.json - structuredPosts[0] = docPosts.filter(p => p.slug === '/docs')[0] - - // Traversing the strucutredPosts in order to add `nextPage` and `prevPage` details for each page - let countDocPages = structuredPosts.length - structuredPosts = structuredPosts.map((post, index) => { - // post item specifying the root Section or sub-section in the docs are excluded as - // they doesn't comprise any Doc Page or content to be shown in website. - if(post?.isRootSection || post?.isSection || index==0){ - if(post?.isRootSection || index==0) - rootSections.push(post.title) - return post - } + try { + // Traversing the whole DocTree and storing each post inside them in sequential order + Object.keys(treePosts).forEach((rootElement) => { + structuredPosts.push(treePosts[rootElement].item); + if (treePosts[rootElement].children) { + let children = treePosts[rootElement].children; + Object.keys(children).forEach((child) => { + let docChildArray = convertDocPosts(children[child]); + structuredPosts = [...structuredPosts, ...docChildArray]; + }); + } + }); - let nextPage = {}, prevPage = {} - let docPost = post; - - // checks whether the next page for the current docPost item exists or not - if(index+1 p.slug === '/docs')[0]; + + // Traversing the structuredPosts in order to add `nextPage` and `prevPage` details for each page + let countDocPages = structuredPosts.length; + structuredPosts = structuredPosts.map((post, index) => { + // post item specifying the root Section or sub-section in the docs are excluded as + // they doesn't comprise any Doc Page or content to be shown in website. + if (post?.isRootSection || post?.isSection || index == 0) { + if (post?.isRootSection || index == 0) + rootSections.push(post.title) + return post } - docPost = {...docPost, nextPage} - } - // checks whether the previous page for the current docPost item exists or not - if(index>0){ - // checks whether the previous item inside structuredPosts is a rootElement or a sectionElement - // if yes, it goes again to a next previous item in structuredPosts to link the prevPage - if(!structuredPosts[index-1]?.isRootElement && !structuredPosts[index-1]?.isSection){ - prevPage = { - title: structuredPosts[index-1].title, - href: structuredPosts[index-1].slug + let nextPage = {}, prevPage = {} + let docPost = post; + + // checks whether the next page for the current docPost item exists or not + if (index + 1 < countDocPages) { + // checks whether the next item inside structuredPosts is a rootElement or a sectionElement + // if yes, it goes again to a next to next item in structuredPosts to link the nextPage + if (!structuredPosts[index + 1].isRootElement && !structuredPosts[index + 1].isSection) { + nextPage = { + title: structuredPosts[index + 1].title, + href: structuredPosts[index + 1].slug + } + } else { + nextPage = { + title: `${structuredPosts[index + 1].title} - ${structuredPosts[index + 2].title}`, + href: structuredPosts[index + 2].slug + } } - docPost = {...docPost, prevPage} - }else{ - // additonal check for the first page of Docs so that it doesn't give any Segementation fault - if(index-2>=0){ + docPost = { ...docPost, nextPage } + } + + // checks whether the previous page for the current docPost item exists or not + if (index > 0) { + // checks whether the previous item inside structuredPosts is a rootElement or a sectionElement + // if yes, it goes again to a next previous item in structuredPosts to link the prevPage + if (!structuredPosts[index - 1]?.isRootElement && !structuredPosts[index - 1]?.isSection) { prevPage = { - title: `${structuredPosts[index-1]?.isRootSection ? rootSections[rootSections.length - 2] : rootSections[rootSections.length - 1]} - ${structuredPosts[index-2].title}`, - href: structuredPosts[index-2].slug + title: structuredPosts[index - 1].title, + href: structuredPosts[index - 1].slug + } + docPost = { ...docPost, prevPage } + } else { + // additonal check for the first page of Docs so that it doesn't give any Segementation fault + if (index - 2 >= 0) { + prevPage = { + title: `${structuredPosts[index - 1]?.isRootSection ? rootSections[rootSections.length - 2] : rootSections[rootSections.length - 1]} - ${structuredPosts[index - 2].title}`, + href: structuredPosts[index - 2].slug + }; + docPost = { ...docPost, prevPage }; } - docPost = {...docPost, prevPage} } } - } - return docPost - }) - return structuredPosts -} + return docPost; + }); + } catch (err) { + throw new Error("An error occurred while adding doc buttons:", err); + } + return structuredPosts; +} -module.exports = {buildNavTree, addDocButtons, convertDocPosts} \ No newline at end of file +module.exports = { buildNavTree, addDocButtons, convertDocPosts } \ No newline at end of file diff --git a/tests/build-docs/addDocButtons.test.js b/tests/build-docs/addDocButtons.test.js new file mode 100644 index 00000000000..b867d838954 --- /dev/null +++ b/tests/build-docs/addDocButtons.test.js @@ -0,0 +1,91 @@ +const { addDocButtons } = require("../../scripts/build-docs"); +const { docPosts, treePosts, mockDocPosts, mockTreePosts, invalidTreePosts } = require("../fixtures/addDocButtonsData"); + +describe('addDocButtons', () => { + it('should add next and previous page information', () => { + const expectedFirstItem = { + title: 'Welcome', + slug: '/docs', + content: 'Welcome content' + }; + + const expectedSecondItem = { + isRootSection: true, + title: 'Section 1' + }; + + const expectedThirdItem = { + title: 'Page 1', + slug: '/docs/section1/page1', + nextPage: { + title: 'Page 2', + href: '/docs/section1/page2' + }, + prevPage: { + title: 'Section 1', + href: undefined + } + }; + + const expectedFourthItem = { + title: 'Page 2', + slug: '/docs/section1/page2', + prevPage: { + title: 'Page 1', + href: '/docs/section1/page1' + } + }; + + const result = addDocButtons(docPosts, treePosts); + + expect(result).toHaveLength(4); + expect(result[0]).toEqual(expectedFirstItem); + expect(result[1]).toEqual(expectedSecondItem); + expect(result[2]).toEqual(expectedThirdItem); + expect(result[3]).toEqual(expectedFourthItem); + }); + + it('should set nextPage correctly when next item is a root element', () => { + const result = addDocButtons(mockDocPosts, mockTreePosts); + + expect(result[1].nextPage).toBeDefined(); + expect(result[1].nextPage.title).toBe('Root 2 - Child 2'); + expect(result[1].nextPage.href).toBe('/docs/root2/child2'); + }); + + it('should throw an error if treePosts is missing', () => { + let error; + + try { + addDocButtons(docPosts, undefined); + } catch (err) { + error = err + expect(err.message).toContain("An error occurred while adding doc buttons:"); + } + expect(error).toBeDefined() + }); + + it('should throw an error if docPosts is missing', () => { + let error; + + try { + addDocButtons(undefined, treePosts); + } catch (err) { + error = err + expect(err.message).toContain("An error occurred while adding doc buttons:"); + } + expect(error).toBeDefined() + }); + + it('should handle invalid data structure in treePosts', () => { + let error; + + try { + addDocButtons(docPosts, invalidTreePosts); + } catch (err) { + error = err; + expect(err.message).toContain("An error occurred while adding doc buttons:"); + } + expect(error).toBeDefined() + }); +}); diff --git a/tests/build-docs/buildNavTree.test.js b/tests/build-docs/buildNavTree.test.js new file mode 100644 index 00000000000..992011be949 --- /dev/null +++ b/tests/build-docs/buildNavTree.test.js @@ -0,0 +1,133 @@ +const { buildNavTree } = require('../../scripts/build-docs'); + +const { + basicNavItems, + sectionNavItems, + orphanNavItems, + missingFieldsNavItems, + invalidParentNavItems, + multipleSubsectionsNavItems +} = require('../fixtures/buildNavTreeData') + +describe('buildNavTree', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should create a tree structure from nav items', () => { + + const result = buildNavTree(basicNavItems); + + expect(result['welcome'].item).toEqual( + expect.objectContaining({ + title: 'Welcome', + slug: '/docs' + }) + ); + + expect(result['getting-started'].item).toEqual( + expect.objectContaining({ + title: 'Getting Started', + slug: '/docs/getting-started' + }) + ); + + expect(result['getting-started'].children).toHaveProperty('installation'); + expect(result['getting-started'].children).toHaveProperty('configuration'); + + expect(result['reference'].item).toEqual( + expect.objectContaining({ + title: 'Reference', + slug: '/docs/reference' + }) + ); + + expect(result['reference'].children.api.item).toEqual( + expect.objectContaining({ + title: 'API', + slug: '/docs/reference/api' + }) + ); + + expect(result['reference'].children.specification.item.slug).toBe('/docs/reference/specification'); + expect(result['reference'].children.specification.children[0].slug).toBe('/docs/reference/specification/v3.0'); + + }); + + it('should handle items without sectionId', () => { + + const result = buildNavTree(sectionNavItems); + + expect(result['root'].item).toEqual( + expect.objectContaining({ + title: 'Root', + slug: '/docs' + }) + ); + + expect(result['root'].children).toHaveProperty('Item without sectionId'); + expect(result['root'].children['Item without sectionId'].item).toEqual( + expect.objectContaining({ + title: 'Item without sectionId', + slug: '/docs/item' + }) + ); + }); + + it('should throw and catch an error if a parent section is missing', () => { + let error; + + try { + buildNavTree(orphanNavItems); + } catch (err) { + error = err; + expect(err.message).toContain('Parent section non-existent-parent not found for item Orphaned Subsection'); + } + expect(error).toBeDefined() + }); + + it('should handle items with missing required fields gracefully', () => { + let error; + + try { + buildNavTree(missingFieldsNavItems); + } catch (err) { + error = err; + expect(err.message).toContain('Failed to build navigation tree'); + } + expect(error).toBeDefined(); + }); + + it('should throw an error when parent references are invalid', () => { + let error; + + try { + buildNavTree(invalidParentNavItems); + } catch (err) { + error = err; + expect(err.message).toContain('Parent section non-existent-parent not found for item Child with invalid parent'); + } + expect(error).toBeDefined(); + }); + + it('should sort children within subsections based on weight', () => { + const result = buildNavTree(multipleSubsectionsNavItems); + + const apiChildren = result['reference'].children.api.children; + expect(apiChildren[0].title).toBe('Authentication'); + expect(apiChildren[1].title).toBe('Endpoints'); + expect(apiChildren[2].title).toBe('Rate Limiting'); + + const specChildren = result['reference'].children.specification.children; + expect(specChildren[0].title).toBe('v1.0'); + expect(specChildren[1].title).toBe('v2.0'); + expect(specChildren[2].title).toBe('v3.0'); + + expect(apiChildren[0].weight).toBeLessThan(apiChildren[1].weight); + expect(apiChildren[1].weight).toBeLessThan(apiChildren[2].weight); + + expect(specChildren[0].weight).toBeLessThan(specChildren[1].weight); + expect(specChildren[1].weight).toBeLessThan(specChildren[2].weight); + }); + +}); diff --git a/tests/build-docs/convertDocPosts.test.js b/tests/build-docs/convertDocPosts.test.js new file mode 100644 index 00000000000..6cc397ed98b --- /dev/null +++ b/tests/build-docs/convertDocPosts.test.js @@ -0,0 +1,62 @@ +const { convertDocPosts } = require('../../scripts/build-docs'); +const { + docObject, + emptyDocObject, + singlePostDocObject, + nestedChildrenDocObject + } = require('../fixtures/convertDocPostData'); + +describe('convertDocPosts', () => { + it('should convert a doc object to an array', () => { + const result = convertDocPosts(docObject); + expect(result).toHaveLength(3); + expect(result[0].title).toBe('Root'); + expect(result[1].title).toBe('Child 1'); + expect(result[2].title).toBe('Child 2'); + }); + + it('should return an array with an empty object for an empty doc object', () => { + const result = convertDocPosts(emptyDocObject); + expect(result).toEqual([{}]); + }); + + it('should handle a doc object with no children', () => { + const result = convertDocPosts(singlePostDocObject); + expect(result).toHaveLength(1); + expect(result[0].title).toBe('Single Post'); + }); + + it('should handle nested children', () => { + const result = convertDocPosts(nestedChildrenDocObject); + expect(result).toHaveLength(4); + expect(result[0].title).toBe('Root'); + expect(result[1].title).toBe('Child 1'); + expect(result[2].title).toBe('Grandchild 1'); + expect(result[3].title).toBe('Child 2'); + }); + + it('should throw an error if docObject is undefined', () => { + let error; + + try { + convertDocPosts(undefined); + } catch (err) { + error = err; + expect(err.message).toContain('Error in convertDocPosts:'); + } + expect(error).toBeDefined(); + }); + + it('should throw an error if docObject is null', () => { + let error; + + try { + convertDocPosts(null); + } catch (err) { + error = err; + expect(err.message).toContain('Error in convertDocPosts:'); + } + expect(error).toBeDefined(); + }); + +}); diff --git a/tests/fixtures/addDocButtonsData.js b/tests/fixtures/addDocButtonsData.js new file mode 100644 index 00000000000..8b2f437fc9b --- /dev/null +++ b/tests/fixtures/addDocButtonsData.js @@ -0,0 +1,41 @@ +const docPosts = [ + { title: 'Welcome', slug: '/docs', content: 'Welcome content' }, +]; + +const treePosts = { + welcome: { + item: { title: 'Welcome', isRootSection: true, slug: '/docs' }, + children: {}, + }, + section1: { + item: { title: 'Section 1', isRootSection: true }, + children: { + page1: { item: { title: 'Page 1', slug: '/docs/section1/page1' } }, + page2: { item: { title: 'Page 2', slug: '/docs/section1/page2' } }, + }, + }, +}; + +const mockDocPosts = [ + { slug: '/docs', title: 'Welcome to Docs' }, + { slug: '/docs/page1', title: 'Page 1' }, +]; + +const mockTreePosts = { + root1: { + item: { title: 'Root 1', isRootSection: true }, + children: { + child1: { item: { title: 'Child 1', slug: '/docs/root1/child1' } }, + }, + }, + root2: { + item: { title: 'Root 2', isRootElement: true }, + children: { + child2: { item: { title: 'Child 2', slug: '/docs/root2/child2' } }, + }, + }, +}; + +const invalidTreePosts = ['tree1','tree2','tree3','tree4']; + +module.exports = { docPosts, treePosts, mockDocPosts, mockTreePosts, invalidTreePosts }; diff --git a/tests/fixtures/buildNavTreeData.js b/tests/fixtures/buildNavTreeData.js new file mode 100644 index 00000000000..99638901f81 --- /dev/null +++ b/tests/fixtures/buildNavTreeData.js @@ -0,0 +1,45 @@ +module.exports = { + basicNavItems: [ + { title: 'Welcome', weight: 0, isRootSection: true, isSection: true, rootSectionId: 'welcome', sectionWeight: 0, slug: '/docs' }, + { title: 'Getting Started', weight: 1, isRootSection: true, isSection: true, rootSectionId: 'getting-started', sectionWeight: 1, slug: '/docs/getting-started' }, + { title: 'Installation', weight: 0, isSection: false, rootSectionId: 'getting-started', sectionId: 'installation', slug: '/docs/getting-started/installation' }, + { title: 'Configuration', weight: 1, isSection: false, rootSectionId: 'getting-started', sectionId: 'configuration', slug: '/docs/getting-started/configuration' }, + { title: 'Reference', weight: 2, isRootSection: true, isSection: true, rootSectionId: 'reference', sectionWeight: 2, slug: '/docs/reference' }, + { title: 'API', weight: 0, isSection: true, rootSectionId: 'reference', sectionId: 'api', parent: 'reference', slug: '/docs/reference/api' }, + { title: 'Endpoints', weight: 0, isSection: false, rootSectionId: 'reference', sectionId: 'api', slug: '/docs/reference/api/endpoints' }, + { title: 'Specification', weight: 1, isSection: true, rootSectionId: 'reference', sectionId: 'specification', parent: 'reference', slug: '/docs/reference/specification' }, + { title: 'v1.0', weight: 0, isSection: false, rootSectionId: 'reference', sectionId: 'specification', slug: '/docs/reference/specification/v1.0', isPrerelease: false }, + { title: 'v2.0', weight: 1, isSection: false, rootSectionId: 'reference', sectionId: 'specification', slug: '/docs/reference/specification/v2.0', isPrerelease: true }, + { title: 'v3.0', weight: 2, isSection: false, rootSectionId: 'reference', sectionId: 'specification', slug: '/docs/reference/specification/v3.0' } + ], + + sectionNavItems: [ + { title: 'Root', weight: 0, isRootSection: true, isSection: true, rootSectionId: 'root', sectionWeight: 0, slug: '/docs' }, + { title: 'Item without sectionId', weight: 1, isSection: false, rootSectionId: 'root', slug: '/docs/item' }, + ], + + orphanNavItems: [ + { title: 'Orphaned Subsection', weight: 0, isSection: true, rootSectionId: 'root', sectionId: 'orphan', parent: 'non-existent-parent', slug: '/docs/orphaned' } + ], + + missingFieldsNavItems: [ + { title: 'Incomplete Item', weight: 0, isSection: false, rootSectionId: 'incomplete', slug: '/docs/incomplete' }, + ], + + invalidParentNavItems: [ + { title: 'Valid Root', weight: 0, isRootSection: true, isSection: true, rootSectionId: 'valid-root', sectionWeight: 0, slug: '/docs/valid-root' }, + { title: 'Child with invalid parent', weight: 1, isSection: true, rootSectionId: 'valid-root', sectionId: 'child-invalid', parent: 'non-existent-parent', slug: '/docs/valid-root/child-invalid' }, + ], + + multipleSubsectionsNavItems: [ + { title: 'Reference', weight: 0, isRootSection: true, isSection: true, rootSectionId: 'reference', sectionWeight: 0, slug: '/docs/reference' }, + { title: 'API', weight: 0, isSection: true, rootSectionId: 'reference', sectionId: 'api', parent: 'reference', slug: '/docs/reference/api' }, + { title: 'Endpoints', weight: 2, isSection: false, rootSectionId: 'reference', sectionId: 'api', slug: '/docs/reference/api/endpoints' }, + { title: 'Authentication', weight: 1, isSection: false, rootSectionId: 'reference', sectionId: 'api', slug: '/docs/reference/api/authentication' }, + { title: 'Rate Limiting', weight: 3, isSection: false, rootSectionId: 'reference', sectionId: 'api', slug: '/docs/reference/api/rate-limiting' }, + { title: 'Specification', weight: 1, isSection: true, rootSectionId: 'reference', sectionId: 'specification', parent: 'reference', slug: '/docs/reference/specification' }, + { title: 'v1.0', weight: 10, isSection: false, rootSectionId: 'reference', sectionId: 'specification', slug: '/docs/reference/specification/v1.0' }, + { title: 'v2.0', weight: 20, isSection: false, rootSectionId: 'reference', sectionId: 'specification', slug: '/docs/reference/specification/v2.0' }, + { title: 'v3.0', weight: 30, isSection: false, rootSectionId: 'reference', sectionId: 'specification', slug: '/docs/reference/specification/v3.0' } + ] +}; \ No newline at end of file diff --git a/tests/fixtures/convertDocPostData.js b/tests/fixtures/convertDocPostData.js new file mode 100644 index 00000000000..cf1d8217d6c --- /dev/null +++ b/tests/fixtures/convertDocPostData.js @@ -0,0 +1,31 @@ +const docObject = { + item: { title: 'Root', slug: '/root' }, + children: { + child1: { item: { title: 'Child 1', slug: '/child1' } }, + child2: { item: { title: 'Child 2', slug: '/child2' } }, + }, + }; + +const emptyDocObject = {}; + +const singlePostDocObject = { item: { title: 'Single Post', slug: '/single' } }; + +const nestedChildrenDocObject = { + item: { title: 'Root', slug: '/root' }, + children: { + child1: { + item: { title: 'Child 1', slug: '/child1' }, + children: { + grandchild1: { item: { title: 'Grandchild 1', slug: '/grandchild1' } }, + }, + }, + child2: { item: { title: 'Child 2', slug: '/child2' } }, + }, +}; + +module.exports = { + docObject, + emptyDocObject, + singlePostDocObject, + nestedChildrenDocObject +}; From f2529e8c69a3608d4cea46f217013fd90ab9f5df Mon Sep 17 00:00:00 2001 From: dishafaujdar Date: Mon, 7 Oct 2024 18:53:14 +0530 Subject: [PATCH 14/18] global-css --- styles/globals.css | 353 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 353 insertions(+) create mode 100644 styles/globals.css diff --git a/styles/globals.css b/styles/globals.css new file mode 100644 index 00000000000..26abb5f57af --- /dev/null +++ b/styles/globals.css @@ -0,0 +1,353 @@ +@import url(https://cdn.jsdelivr.net/gh/tonsky/FiraCode@4/distr/fira_code.css); +@import url(https://cdn.jsdelivr.net/npm/@docsearch/css@3); + +@import "swiper/css"; +@import "swiper/css/a11y"; +@import "swiper/css/navigation"; +@import "swiper/css/pagination"; +@import "swiper/css/scrollbar"; + +@tailwind base; +@tailwind components; +@tailwind utilities; +@tailwind variants; + +html, +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + scroll-behavior: smooth; +} + +li>p { + display: inline; +} + +.atss { + /* AddThis plugin */ + z-index: 10 !important; +} + +abbr[title] { + text-decoration: none; +} + +.countdown-text-gradient { + background: linear-gradient( + 230deg, + #e74694, + #4b79cf, + #4bc5cf, + #4b79cf, + #e74694 + ); + background-size: 500% 100%; + background-clip: text; + -webkit-text-fill-color: transparent; + -webkit-animation: GradientAnimation 50s ease infinite alternate; + -moz-animation: GradientAnimation 50s ease infinite alternate; + animation: GradientAnimation 50s ease infinite alternate; +} + +@keyframes GradientAnimation { + 0% { + background-position: 0% 50% + } + + 100% { + background-position: 200% 50% + } +} + +:target { + scroll-margin-top: 120px; +} + +@media (max-width: 1280px) { + :target { + scroll-margin-top: 155px; + } +} + +/* adjust swiper library */ +.swiper-wrapper { + align-items: stretch; +} + +.swiper-slide { + height: auto !important; +} + +/* adjust DocsSearch input styles */ +.DocSearch-Input { + border-width: 0; + background-color: transparent; +} + +.DocSearch-Input:focus { + outline: 0; + outline-offset: 0; + box-shadow: none; +} + +.DocSearch-Screen-Icon { + display: flex; + flex-flow: row; + justify-content: center; + align-items: center; +} + +.DocSearch-Help > a { + appearance: none; + background: none; + border: 0; + border-radius: 1em; + color: var(--docsearch-highlight-color); + cursor: pointer; + display: inline-block; + font-size: 1em; + font-weight: 700; + padding: 0; +} + +.DocSearch-Help > a:focus, .DocSearch-Help > a:hover { + outline: none; + text-decoration: underline; +} + +.two-liner { + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; +} + +/* adjust DocsSearch mobile styles */ +@media (max-width: 750px) { + .DocSearch-Container { + position: fixed !important; + } +} + +@media (max-width: 767px){ + .orbits{ + display: none; + } +} +.orbit-container { + position: relative; + margin: 0 auto; + width: 100%; + height: 100%; + top: -200px; +} + +.orbit { + position: absolute; + border-radius: 100%; + border: solid 3px #f3f3f4; + transition: 0.2s; +} + +.orbit > div { + cursor: pointer; +} + +.orbit > div > img { + border-radius: 100%; +} +.title { + line-height: 0.9; + font-size: 60px; +} +#first-orbit { + --n: 6; /* number of item */ + --d: 70s; /* duration */ + width: 600px; + height: 600px; + top: 165px; + left: calc(50% - 300px); + position: relative; + display: grid; + grid-template-columns: 35px; + grid-template-rows: 35px; + place-content: center; +} + +#second-orbit { + --no: 7; /* number of item */ + --de: 80s; /* duration */ + width: 800px; + height: 800px; + top: 75px; + left: calc(50% - 400px); + display: grid; + grid-template-columns: 35px; + grid-template-rows: 35px; + place-content: center; +} + +#third-orbit { + --ni: 7; /* number of item */ + --ds: 80s; /* duration */ + width: 1000px; + height: 1000px; + top: -10px; + left: calc(50% - 500px); + display: grid; + grid-template-columns: 35px; + grid-template-rows: 35px; + place-content: center; +} + +.item, +.item-2, +.item-3 { + grid-area: 1/1; + line-height: 30px; + text-align: center; + border-radius: 50%; +} + +.item { + animation: orbit-spin var(--d) linear infinite; + transform: rotate(0) translate(300px) rotate(0); +} + +.item-2 { + animation: orbit-spin2 var(--de) linear infinite; + transform: rotate(-0) translate(400px) rotate(-0); +} + +.item-3 { + animation: orbit-spin3 var(--ds) linear infinite; + transform: rotate(0) translate(500px) rotate(0); +} +@keyframes orbit-spin { + 100% { + transform: rotate(1turn) translate(300px) rotate(-1turn); + } +} + +.item:nth-child(1) { + animation-delay: calc(-0 * var(--d) / var(--n)); +} +.item:nth-child(2) { + animation-delay: calc(-1 * var(--d) / var(--n)); +} +.item:nth-child(3) { + animation-delay: calc(-2 * var(--d) / var(--n)); +} +.item:nth-child(4) { + animation-delay: calc(-3 * var(--d) / var(--n)); +} +.item:nth-child(5) { + animation-delay: calc(-4 * var(--d) / var(--n)); +} +.item:nth-child(6) { + animation-delay: calc(-5 * var(--d) / var(--n)); +} + +@keyframes orbit-spin2 { + 100% { + transform: rotate(-1turn) translate(400px) rotate(1turn); + } +} + +.item-2:nth-child(1) { + animation-delay: calc(-0 * var(--de) / var(--no)); +} +.item-2:nth-child(2) { + animation-delay: calc(-1 * var(--de) / var(--no)); +} +.item-2:nth-child(3) { + animation-delay: calc(-2 * var(--de) / var(--no)); +} +.item-2:nth-child(4) { + animation-delay: calc(-3 * var(--de) / var(--no)); +} +.item-2:nth-child(5) { + animation-delay: calc(-4 * var(--de) / var(--no)); +} +.item-2:nth-child(6) { + animation-delay: calc(-5 * var(--de) / var(--no)); +} +.item-2:nth-child(7) { + animation-delay: calc(-6 * var(--de) / var(--no)); +} +.item-2:nth-child(8) { + animation-delay: calc(-7 * var(--de) / var(--no)); +} +.item-2:nth-child(9) { + animation-delay: calc(-8 * var(--de) / var(--no)); +} + +@keyframes orbit-spin3 { + 100% { + transform: rotate(1turn) translate(500px) rotate(-1turn); + } +} + +.item-3:nth-child(1) { + animation-delay: calc(-0 * var(--ds) / var(--ni)); +} +.item-3:nth-child(2) { + animation-delay: calc(-1 * var(--ds) / var(--ni)); +} +.item-3:nth-child(3) { + animation-delay: calc(-2 * var(--ds) / var(--ni)); +} +.item-3:nth-child(4) { + animation-delay: calc(-3 * var(--ds) / var(--ni)); +} +.item-3:nth-child(5) { + animation-delay: calc(-4 * var(--ds) / var(--ni)); +} +.item-3:nth-child(6) { + animation-delay: calc(-5 * var(--ds) / var(--ni)); +} +.item-3:nth-child(7) { + animation-delay: calc(-6 * var(--ds) / var(--ni)); +} +.item-3:nth-child(8) { + animation-delay: calc(-7 * var(--ds) / var(--ni)); +} +.item-3:nth-child(9) { + animation-delay: calc(-8 * var(--ds) / var(--ni)); +} + +.gh-img { + border: 1px solid #d4cfd76a; + border-radius: 10px; + box-shadow: 5px 20px 18px 10px #e8e8e8; + background: linear-gradient(225deg, #2dccfd 9.35%, #ad20e2 88.41%); +} + +.community-pattern { + background: url('/img/homepage/circular-pattern.png'); + width: 100%; + height: 90%; + background-position: center; + background-size: cover; + margin-top: -1900px; +} + +.meeting-card:hover > div:nth-child(1) > div { + display: block; + color: white; +} + +.meeting-card:hover > div:nth-child(2) > p { + color: white; +} + +.explorer-menu-wrapper > div > div{ + border: 1px solid rgb(228, 228, 228); + border-radius: 10px; + padding: 10px; +} + +.explorer-menu-wrapper > div > div > div > button { + margin-top: 0px; +} \ No newline at end of file From 4291be1533205e67897de456ab218f66e19f866a Mon Sep 17 00:00:00 2001 From: dishafaujdar Date: Mon, 7 Oct 2024 19:09:00 +0530 Subject: [PATCH 15/18] ignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0a69d4de26c..a97e80be759 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ cypress/videos /storybook-static/ coverage deno.lock +/styles/globals.css From 8249080d3f2ac49e374d8b378fae59a69537bad8 Mon Sep 17 00:00:00 2001 From: dishafaujdar Date: Mon, 7 Oct 2024 19:21:45 +0530 Subject: [PATCH 16/18] fixed css --- .gitignore | 3 +-- components/Calendar.tsx | 30 +++++++++--------------------- pages/[lang]/index.tsx | 2 +- 3 files changed, 11 insertions(+), 24 deletions(-) diff --git a/.gitignore b/.gitignore index a97e80be759..6408a216ee9 100644 --- a/.gitignore +++ b/.gitignore @@ -21,5 +21,4 @@ cypress/videos *storybook.log /storybook-static/ coverage -deno.lock -/styles/globals.css +deno.lock \ No newline at end of file diff --git a/components/Calendar.tsx b/components/Calendar.tsx index 83a91c6ff2b..2805abf2f7c 100644 --- a/components/Calendar.tsx +++ b/components/Calendar.tsx @@ -30,17 +30,8 @@ export default function Calendar({ className = '', size }: ICalendarProps) { const eventsExist = eventsData.length > 0; return ( -
- +
+ {t('calendar.title')}
    @@ -51,9 +42,10 @@ export default function Calendar({ className = '', size }: ICalendarProps) { {moment(event.date).format('D')}
-

{event.title}

-

- {moment(event.date).local().format('LLLL')} UTC {moment(event.date).local().format('Z')} +

{event.title}

+

+ {moment(event.date).local().format('LLLL')} UTC + {moment(event.date).local().format('Z')}

@@ -61,15 +53,11 @@ export default function Calendar({ className = '', size }: ICalendarProps) { ))} {eventsExist ? ( -
- +
+
) : ( -
{t('calendar.noMeetingsMessage')}
+
{t('calendar.noMeetingsMessage')}
)}
); diff --git a/pages/[lang]/index.tsx b/pages/[lang]/index.tsx index ad5fe83ba6c..806d7bd67a4 100644 --- a/pages/[lang]/index.tsx +++ b/pages/[lang]/index.tsx @@ -108,7 +108,7 @@ export default function HomePage() {
- +
From a3f09fbd6d23ca1cfde8d3cdb6b98f5cf8fbd44b Mon Sep 17 00:00:00 2001 From: dishafaujdar Date: Mon, 7 Oct 2024 19:35:59 +0530 Subject: [PATCH 17/18] rm --- .gitignore | 2 +- styles/globals.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 6408a216ee9..0a69d4de26c 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,4 @@ cypress/videos *storybook.log /storybook-static/ coverage -deno.lock \ No newline at end of file +deno.lock diff --git a/styles/globals.css b/styles/globals.css index 26abb5f57af..fa419b64514 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -350,4 +350,4 @@ abbr[title] { .explorer-menu-wrapper > div > div > div > button { margin-top: 0px; -} \ No newline at end of file +} From 6a62d7dc32f3e1609af10b7a36a8530edc4bb443 Mon Sep 17 00:00:00 2001 From: dishafaujdar Date: Tue, 8 Oct 2024 20:15:30 +0530 Subject: [PATCH 18/18] changed height of caleder box --- components/Calendar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/Calendar.tsx b/components/Calendar.tsx index 2805abf2f7c..c34dfbff38f 100644 --- a/components/Calendar.tsx +++ b/components/Calendar.tsx @@ -30,7 +30,7 @@ export default function Calendar({ className = '', size }: ICalendarProps) { const eventsExist = eventsData.length > 0; return ( -
+
{t('calendar.title')}