diff --git a/components/navigation/communityItems.js b/components/navigation/communityItems.js index c595a320c548..2901901dba94 100644 --- a/components/navigation/communityItems.js +++ b/components/navigation/communityItems.js @@ -10,7 +10,7 @@ import IconNewsroom from '../icons/Newsroom' export default [ - { icon: IconTools, title: 'Tools & Services', href: '/docs/tools', description: 'Explore the tools and services our awesome community has created.' }, + { icon: IconTools, title: 'Tools & Services', href: '/tools', description: 'Explore the tools and services our awesome community has created.' }, { icon: IconGithubOrganization, title: 'GitHub Organization', href: 'https://github.com/asyncapi', target: '_blank', description: 'Want to sneak in the code? Everything we do is open-sourced in our GitHub organization.' }, { icon: IconSlack, title: 'Slack Workspace', href: 'https://asyncapi.com/slack-invite', target: '_blank', description: `Need help? Want to share something? Join our Slack workspace. We're nice people :)` }, { icon: IconContributing, title: 'Contributing', href: 'https://github.com/asyncapi?type=source#-contribute-to-asyncapi', target: '_blank', description: `We are always welcoming and looking for contributions. If you are interested check out our contribution guide.` }, diff --git a/components/tools/Filters.js b/components/tools/Filters.js index bb5ebeae9591..58d39411c3f7 100644 --- a/components/tools/Filters.js +++ b/components/tools/Filters.js @@ -48,7 +48,7 @@ export default function Filters({setOpenFilter}) { } return ( -
+
Pricing
@@ -57,11 +57,11 @@ export default function Filters({setOpenFilter}) {
-
setCheckPaid("free")}> +
(checkPaid === "free" ? setCheckPaid("all") : setCheckPaid("free"))}>
Open Source
-
setCheckPaid("paid")}> +
(checkPaid === "paid" ? setCheckPaid("all") : setCheckPaid("paid"))}>
Commercial
diff --git a/components/tools/ToolDashboard.js b/components/tools/ToolDashboard.js index 0de755b286aa..b192d2b627c0 100644 --- a/components/tools/ToolDashboard.js +++ b/components/tools/ToolDashboard.js @@ -103,7 +103,7 @@ export default function ToolDashboard() {
Filter
{openFilter && ( -
+
)} diff --git a/components/tools/ToolsCard.js b/components/tools/ToolsCard.js index 8eeb93247f4e..e579de3289d6 100644 --- a/components/tools/ToolsCard.js +++ b/components/tools/ToolsCard.js @@ -10,34 +10,37 @@ export default function ToolsCard({ toolData }) { const descriptionRef = useRef(null) useEffect(() => { let divHeight = descriptionRef.current.offsetHeight; - let numberOfLines = divHeight/20; - if(numberOfLines > 3) setShowMoreDescription(true) + let numberOfLines = divHeight / 20; + if (numberOfLines > 3) setShowMoreDescription(true) else setShowMoreDescription(false) }, []) + let onGit = false; - const url = new URL(toolData.links.repoUrl) - if (url.host == 'github.com') onGit = true - else onGit = false + if (toolData.links.repoUrl) { + const url = new URL(toolData.links.repoUrl) + if (url.host == 'github.com') onGit = true + else onGit = false + } return ( -
+
{toolData.title} -
+
{toolData.filters.hasCommercial === false ? 'Open Source' : 'Commercial'}
-
(setTimeout(() => {if(showMoreDescription) setShowDescription(true)}, 500))}> -
+
(setTimeout(() => { if (showMoreDescription) setShowDescription(true) }, 500))}> +
{showDescription &&
(setShowDescription(false))}> @@ -48,8 +51,8 @@ export default function ToolsCard({ toolData }) {

- {(toolData?.filters?.language || toolData?.filters?.technology?.length>0) && -
+
+ {(toolData?.filters?.language || toolData?.filters?.technology?.length > 0) ?
{toolData.filters.language &&
LANGUAGES
@@ -60,7 +63,7 @@ export default function ToolsCard({ toolData }) { />
} - {toolData.filters.technology.length > 0 && <>
+ {toolData.filters.technology.length > 0 &&
TECHNOLOGIES
{toolData.filters.technology.map((item, index) => ( @@ -71,37 +74,48 @@ export default function ToolsCard({ toolData }) { /> ))}
-
} +
} +
: +
+
No further details provided
} - {(toolData.links.repoUrl || toolData.links.websiteUrl) && <> -
-
- {onGit ? - -
- -
View on Github
-
-
: - -
-
View Source Code
-
-
- } - {toolData.links.websiteUrl && ( - <> -
- +
+ {(toolData.links.repoUrl || toolData.links.websiteUrl || toolData.links.docsUrl) && <> +
+
- } -
- ); + )} + {toolData.links.docsUrl && ( + +
+ +
Visit Docs
+
+
+ )} +
+ } +
+ ); } diff --git a/components/tools/ToolsList.js b/components/tools/ToolsList.js index f97f4215f75c..12962a3b59ec 100644 --- a/components/tools/ToolsList.js +++ b/components/tools/ToolsList.js @@ -14,7 +14,7 @@ export default function toolsList({ toolsData }) { {toolsData[categoryName].description}
-
+
{toolsData[categoryName].toolsList.map((tool, toolIndex) => ( ))} diff --git a/config/all-tags.json b/config/all-tags.json index dcb17cf8ce24..58ba3a48aaa2 100644 --- a/config/all-tags.json +++ b/config/all-tags.json @@ -1 +1 @@ -{"languages":[{"name":"Go","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":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}]} \ No newline at end of file +{"languages":[{"name":"Go","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":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","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":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","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 2f76c682b6f1..ee577402f51f 100644 --- a/config/tools-automated.json +++ b/config/tools-automated.json @@ -1 +1,289 @@ -{"APIs":{"description":"The following is a list of APIs that expose functionality related to AsyncAPI.","toolsList":[]},"Code-first tools":{"description":"The following is a list of tools that generate AsyncAPI documents from your code.","toolsList":[]},"Code Generators":{"description":"The following is a list of tools that generate code from an AsyncAPI document; not the other way around.","toolsList":[{"title":"Sample Tool","description":"Tool for testing","links":{"websiteUrl":"https://akshatnema.netlify.app","docsUrl":"","repoUrl":"https://github.com/akshatnema/Login-Registration-project"},"filters":{"language":"javascript","technology":["react"],"categories":["code generator"],"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":[]},"Directories":{"description":"The following is a list of directories that index public AsyncAPI documents.","toolsList":[]},"Documentation Generators":{"description":"The following is a list of tools that generate human-readable documentation from an AsyncAPI document.","toolsList":[]},"Editors":{"description":"The following is a list of editors or related tools that allow editing of AsyncAPI document.","toolsList":[]},"UI components":{"description":"The following is a list of UI components to view AsyncAPI documents.","toolsList":[{"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":{"languages":["TypeScript"],"technology":["React","WebComponents"],"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":[]},"Frameworks":{"description":"The following is a list of API/application frameworks that make use of AsyncAPI.","toolsList":[]},"GitHub Actions":{"description":"The following is a list of GitHub Actions that you can use in your workflows","toolsList":[{"title":"GitHub Action for Generator","description":"GitHub Action to generate all the things from your AsyncAPI document using the AsyncAPI generator","links":{"repoUrl":"https://github.com/asyncapi/github-action-for-generator"},"filters":{"technology":["AsyncAPI Generator"],"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":[]},"Validators":{"description":"The following is a list of tools that validate AsyncAPI documents.","toolsList":[]},"Compare tools":{"description":"The following is a list of tools that compare AsyncAPI documents.","toolsList":[{"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":{"languages":["TypeScript"],"technology":["TypeScript"],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"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}}]},"Bundlers":{"description":"The following is a list of tools that you can work with to bundle AsyncAPI documents.","toolsList":[{"title":"AsyncAPI Bundler","description":"Combine multiple AsyncAPI specification files into one","links":{"repoUrl":"https://github.com/asyncapi/bundler"},"filters":{"languages":["TypeScript"],"technology":["TypeScript"],"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":["VSCode","SmartPaste"],"categories":["ide-extension"],"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":["TypeScript"],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}}]}} \ No newline at end of file +{ + "APIs": { + "description": "The following is a list of APIs that expose functionality related to AsyncAPI.", + "toolsList": [] + }, + "Code-first tools": { + "description": "The following is a list of tools that generate AsyncAPI documents from your code.", + "toolsList": [] + }, + "Code Generators": { + "description": "The following is a list of tools that generate code from an AsyncAPI document; not the other way around.", + "toolsList": [ + { + "title": "ZenWave Code Generator", + "description": "DDD and API-First for Event-Driven Microservices", + "links": { + "websiteUrl": "https://zenwave360.github.io/", + "docsUrl": "https://zenwave360.github.io/zenwave-code-generator/plugins/asyncapi-spring-cloud-streams3/", + "repoUrl": "https://github.com/zenwave360/zenwave-code-generator" + }, + "filters": { + "language": "Java", + "technology": [ + "Maven", + "Spring Cloud Streams" + ], + "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": [] + }, + "Directories": { + "description": "The following is a list of directories that index public AsyncAPI documents.", + "toolsList": [] + }, + "Documentation Generators": { + "description": "The following is a list of tools that generate human-readable documentation from an AsyncAPI document.", + "toolsList": [] + }, + "Editors": { + "description": "The following is a list of editors or related tools that allow editing of AsyncAPI document.", + "toolsList": [] + }, + "UI components": { + "description": "The following is a list of UI components to view AsyncAPI documents.", + "toolsList": [ + { + "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": "TypeScript", + "technology": [ + "React js", + "WebComponents" + ], + "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": "ZenWave Code Generator", + "description": "DDD and API-First for Event-Driven Microservices", + "links": { + "websiteUrl": "https://zenwave360.github.io/", + "docsUrl": "https://zenwave360.github.io/zenwave-code-generator/plugins/asyncapi-spring-cloud-streams3/", + "repoUrl": "https://github.com/zenwave360/zenwave-code-generator" + }, + "filters": { + "language": "Java", + "technology": [ + "Maven", + "Spring Cloud Streams" + ], + "categories": [ + "code-generator", + "dsl", + "mocking-and-testing", + "cli" + ], + "hasCommercial": false, + "isAsyncAPIOwner": false + } + } + ] + }, + "Frameworks": { + "description": "The following is a list of API/application frameworks that make use of AsyncAPI.", + "toolsList": [] + }, + "GitHub Actions": { + "description": "The following is a list of GitHub Actions that you can use in your workflows", + "toolsList": [ + { + "title": "GitHub Action for Generator", + "description": "GitHub Action to generate all the things from your AsyncAPI document using the AsyncAPI generator", + "links": { + "repoUrl": "https://github.com/asyncapi/github-action-for-generator" + }, + "filters": { + "technology": [ + "AsyncAPI Generator" + ], + "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": "ZenWave Code Generator", + "description": "DDD and API-First for Event-Driven Microservices", + "links": { + "websiteUrl": "https://zenwave360.github.io/", + "docsUrl": "https://zenwave360.github.io/zenwave-code-generator/plugins/asyncapi-spring-cloud-streams3/", + "repoUrl": "https://github.com/zenwave360/zenwave-code-generator" + }, + "filters": { + "language": "Java", + "technology": [ + "Maven", + "Spring Cloud Streams" + ], + "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": [] + }, + "Compare tools": { + "description": "The following is a list of tools that compare AsyncAPI documents.", + "toolsList": [] + }, + "CLIs": { + "description": "The following is a list of tools that you can work with in terminal or do some CI/CD automation.", + "toolsList": [ + { + "title": "ZenWave Code Generator", + "description": "DDD and API-First for Event-Driven Microservices", + "links": { + "websiteUrl": "https://zenwave360.github.io/", + "docsUrl": "https://zenwave360.github.io/zenwave-code-generator/plugins/asyncapi-spring-cloud-streams3/", + "repoUrl": "https://github.com/zenwave360/zenwave-code-generator" + }, + "filters": { + "language": "Java", + "technology": [ + "Maven", + "Spring Cloud Streams" + ], + "categories": [ + "code-generator", + "dsl", + "mocking-and-testing", + "cli" + ], + "hasCommercial": false, + "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 + } + } + ] + }, + "Bundlers": { + "description": "The following is a list of tools that you can work with to bundle AsyncAPI documents.", + "toolsList": [ + { + "title": "AsyncAPI Bundler", + "description": "Combine multiple AsyncAPI specification files into one", + "links": { + "repoUrl": "https://github.com/asyncapi/bundler" + }, + "filters": { + "language": "TypeScript", + "technology": [ + "TypeScript" + ], + "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": [ + "VSCode", + "SmartPaste" + ], + "categories": [ + "ide-extension" + ], + "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": [ + "TypeScript" + ], + "categories": [ + "others", + "cli" + ], + "hasCommercial": false, + "isAsyncAPIOwner": true + } + } + ] + } +} \ No newline at end of file diff --git a/config/tools-manual.json b/config/tools-manual.json index 5bf77f584661..62d043b1ed9e 100644 --- a/config/tools-manual.json +++ b/config/tools-manual.json @@ -1,23 +1,265 @@ { "APIs": { "description": "The following is a list of APIs that expose functionality related to AsyncAPI.", - "toolsList": [] + "toolsList": [ + { + "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": "JavaScript", + "technology": ["Node.js", "Liquid"], + "categories": ["api", "directory"] + } + }, + { + "title": "API Tracker - AsyncAPI specs", + "description": "Explore APIs and companies with public AsyncAPI specifications.", + "links": { + "websiteUrl": "https://apitracker.io/specifications/asyncapi" + }, + "filters": { + "categories": ["api", "directory"] + } + }, + { + "title": "Check-API", + "description": "Check_api is a simple utility wrapping a collection of API definition format validators. It allows you to validate a local file or remote URL with a single command-line or programmatic invocation.", + "links": { + "repoUrl": "https://github.com/Mermade/check_api" + }, + "filters": { + "language": "JavaScript", + "technology": ["Node.js"], + "categories": ["api","validator"] + } + } + ] }, "Code-first tools": { "description": "The following is a list of tools that generate AsyncAPI documents from your code.", - "toolsList": [] + "toolsList": [ + { + "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": "Go", + "categories": ["code-first"] + } + }, + { + "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": "C#", + "technology": [".NET", "ASP.NET"], + "categories": ["code-first"] + } + }, + { + "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": "Java", + "technology": ["Kotlin", "Maven"], + "categories": ["code-first"] + } + }, + { + "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": "Kotlin", + "technology": ["Spring Boot", "Maven"], + "categories": ["code-first"] + } + }, + { + "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://springwolf.github.io/", + "repoUrl": "https://github.com/springwolf/springwolf-core" + }, + "filters": { + "language": "Java", + "technology": ["Springboot"], + "categories": ["code-first", "documentation-generator"] + } + }, + { + "title": "KnstEventBus", + "description": "AsyncApi code-first tools for c#. Generates document and view.", + "links": { + "repoUrl": "https://github.com/d0972058277/KnstEventBus" + }, + "filters": { + "language": "C#", + "technology": ["ASP.NET", ".NET"], + "categories": ["code-first", "documentation-generator"] + } + }, + { + "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": "Scala", + "categories": ["code-first"] + } + }, + { + "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": ["Node.js"], + "categories": ["code-first"] + } + }, + { + "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": "C#", + "technology": [".NET"], + "categories": ["code-first"] + } + } + ] }, "Code Generators": { "description": "The following is a list of tools that generate code from an AsyncAPI document; not the other way around.", - "toolsList": [] + "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": "JavaScript", + "technology": ["Node.js"], + "categories": ["code-generator", "documentation-generator"] + } + }, + { + "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": ["Node-RED"], + "categories": ["code-generator"] + } + }, + { + "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": "Java", + "technology": ["Groovy", "Maven"], + "categories": ["code-generator"] + } + } + ] }, "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": [] + "toolsList": [ + { + "title": "Converter", + "description": "Converts old versions of AsyncAPI files into the latest version.", + "links": { + "repoUrl": "https://github.com/asyncapi/converter-js" + }, + "filters": { + "language": "TypeScript", + "technology": ["Node.js"], + "categories": ["converter"] + } + }, + { + "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": "Go", + "categories": ["converter"] + } + }, + { + "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": "JavaScript", + "technology": ["Node.js"], + "categories": ["converter", "cli"] + } + } + ] }, "Directories": { "description": "The following is a list of directories that index public AsyncAPI documents.", - "toolsList": [] + "toolsList": [ + { + "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": "JavaScript", + "technology": ["Node.js", "Liquid"], + "categories": ["api", "directory"] + } + }, + { + "title": "API Tracker - AsyncAPI specs", + "description": "Explore APIs and companies with public AsyncAPI specifications.", + "links": { + "websiteUrl": "https://apitracker.io/specifications/asyncapi" + }, + "filters": { + "categories": ["api", "directory"] + } + } + ] }, "Documentation Generators": { "description": "The following is a list of tools that generate human-readable documentation from an AsyncAPI document.", @@ -29,15 +271,88 @@ "repoUrl": "https://gitlab.com/djencks/asyncapi-asciidoc-template" }, "filters": { - "language": "javascript", + "language": "JavaScript", "technology": [ "react" ], "categories": [ - "documentation generator" + "documentation-generator" ], - "hasCommercial": false, - "isAsyncAPIOwner": false + "hasCommercial": 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://springwolf.github.io/", + "repoUrl": "https://github.com/springwolf/springwolf-core" + }, + "filters": { + "language": "Java", + "technology": ["Springboot"], + "categories": ["code-first", "documentation-generator"] + } + }, + { + "title": "KnstEventBus", + "description": "AsyncApi code-first tools for c#. Generates document and view.", + "links": { + "repoUrl": "https://github.com/d0972058277/KnstEventBus" + }, + "filters": { + "language": "C#", + "technology": ["ASP.NET", ".NET"], + "categories": ["code-first", "documentation-generator"] + } + }, + { + "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": "JavaScript", + "technology": ["Node.js", "Markdown"], + "categories": ["code-generator", "documentation-generator"] + } + }, + { + "title": "Bump.sh", + "description": "OpenAPI 2 & 3 / AsyncAPI 2 documentation generator, with automatic changelog and visual diff.", + "links": { + "websiteUrl": "https://bump.sh/" + }, + "filters": { + "categories": ["documentation-generator"], + "hasCommercial": true + } + }, + { + "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": "JavaScript", + "technology": ["Node.js", "Shell"], + "categories": ["documentation-generator"] + } + }, + { + "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": "JavaScript", + "technology": ["Node.js"], + "categories": ["documentation-generator"] } } ] @@ -48,31 +363,256 @@ }, "UI components": { "description": "The following is a list of UI components to view AsyncAPI documents.", - "toolsList": [] + "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" + }, + "filters": { + "language": "TypeScript", + "technology": ["React js", "Babel", "Storybook"], + "categories": ["ui-component"] + } + } + ] }, "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": [] + "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": "TypeScript", + "technology": ["Node.js"], + "categories": ["dsl"] + } + } + ] }, "Frameworks": { "description": "The following is a list of API/application frameworks that make use of AsyncAPI.", - "toolsList": [] + "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": "Python", + "technology": ["Flask"], + "categories": ["framework"] + } + } + ] }, "GitHub Actions": { "description": "The following is a list of GitHub Actions that you can use in your workflows", - "toolsList": [] + "toolsList": [ + { + "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": "JavaScript", + "technology": ["Node.js"], + "categories": ["github-action", "validator"] + } + }, + { + "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": "TypeScript", + "categories": ["github-action"] + } + }, + { + "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": "JavaScript", + "technology": ["Node.js"], + "categories": ["github-action"] + } + } + ] }, "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": [] + "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": "Java", + "technology": ["TypeScript", "Kubernetes-Native", "Saas"], + "categories": ["mocking-and-testing"] + } + }, + { + "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": ["Kubernetes-Native"], + "categories": ["mocking-and-testing"] + } + }, + { + "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": "Java", + "technology": ["Springboot"], + "categories": ["mocking-and-testing"] + } + } + ] }, "Validators": { "description": "The following is a list of tools that validate AsyncAPI documents.", - "toolsList": [] + "toolsList": [ + { + "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": "JavaScript", + "technology": ["Node.js"], + "categories": ["github-action", "validator"] + } + }, + { + "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": "JavaScript", + "technology": ["Node.js"], + "categories": ["validator"] + } + }, + { + "title": "Check-API", + "description": "Check_api is a simple utility wrapping a collection of API definition format validators. It allows you to validate a local file or remote URL with a single command-line or programmatic invocation.", + "links": { + "repoUrl": "https://github.com/Mermade/check_api" + }, + "filters": { + "language": "JavaScript", + "technology": ["Node.js"], + "categories": ["api","validator"] + } + }, + { + "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": "JavaScript", + "technology": ["Node.js"], + "categories": ["validator"] + } + }, + { + "title": "AsyncAPI Parser", + "description": "The AsyncAPI Parser validates AsyncAPI documents according to dedicated schemas.", + "links": { + "repoUrl": "https://github.com/asyncapi/parser-go" + }, + "filters": { + "language": "Go", + "categories": ["validator"] + } + }, + { + "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": "TypeScript", + "technology": ["Node.js"], + "categories": ["validator"] + } + }, + { + "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": "Scala", + "categories": ["validator"] + } + }, + { + "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": "Java", + "categories": ["validator"] + } + } + ] }, "Compare tools": { "description": "The following is a list of tools that compare AsyncAPI documents.", - "toolsList": [] + "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": "TypeScript", + "categories": ["compare-tool"] + } + } + ] }, "Others": { "description": "The following is a list of tools that comes under Other category", @@ -80,7 +620,20 @@ }, "CLIs": { "description": "The following is a list of tools that you can work with in terminal or do some CI/CD automation", - "toolsList": [] + "toolsList": [ + { + "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": "JavaScript", + "technology": ["Node.js"], + "categories": ["converter", "cli"] + } + } + ] }, "Bundlers": { "description": "The following is a list of tools that you can work with to bundle AsyncAPI documents.", diff --git a/config/tools.json b/config/tools.json index d061bca0e17c..dbd26d4ca8b9 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":[]},"Code-first tools":{"description":"The following is a list of tools that generate AsyncAPI documents from your code.","toolsList":[]},"Code Generators":{"description":"The following is a list of tools that generate code from an AsyncAPI document; not the other way around.","toolsList":[{"title":"Sample Tool","description":"Tool for testing","links":{"websiteUrl":"https://akshatnema.netlify.app","docsUrl":"","repoUrl":"https://github.com/akshatnema/Login-Registration-project"},"filters":{"language":{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"},"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"}],"categories":["code generator"],"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":[]},"Directories":{"description":"The following is a list of directories that index public AsyncAPI documents.","toolsList":[]},"Documentation Generators":{"description":"The following is a list of tools that generate human-readable documentation from an AsyncAPI document.","toolsList":[{"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"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Editors":{"description":"The following is a list of editors or related tools that allow editing of AsyncAPI document.","toolsList":[]},"UI components":{"description":"The following is a list of UI components to view AsyncAPI documents.","toolsList":[{"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":{"languages":["TypeScript"],"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":[]},"Frameworks":{"description":"The following is a list of API/application frameworks that make use of AsyncAPI.","toolsList":[]},"GitHub Actions":{"description":"The following is a list of GitHub Actions that you can use in your workflows","toolsList":[{"title":"GitHub Action for Generator","description":"GitHub Action to generate all the things from your AsyncAPI document using the AsyncAPI generator","links":{"repoUrl":"https://github.com/asyncapi/github-action-for-generator"},"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":[]},"Validators":{"description":"The following is a list of tools that validate AsyncAPI documents.","toolsList":[]},"Compare tools":{"description":"The following is a list of tools that compare AsyncAPI documents.","toolsList":[{"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":{"languages":["TypeScript"],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"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}}]},"Bundlers":{"description":"The following is a list of tools that you can work with to bundle AsyncAPI documents.","toolsList":[{"title":"AsyncAPI Bundler","description":"Combine multiple AsyncAPI specification files into one","links":{"repoUrl":"https://github.com/asyncapi/bundler"},"filters":{"languages":["TypeScript"],"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}}]},"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}}]}} \ No newline at end of file +{"APIs":{"description":"The following is a list of APIs that expose functionality related to AsyncAPI.","toolsList":[{"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":"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":"Check-API","description":"Check_api is a simple utility wrapping a collection of API definition format validators. It allows you to validate a local file or remote URL with a single command-line or programmatic invocation.","links":{"repoUrl":"https://github.com/Mermade/check_api"},"filters":{"language":{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"},"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["api","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Code-first tools":{"description":"The following is a list of tools that generate AsyncAPI documents from your code.","toolsList":[{"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","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"},"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"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":"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":"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":"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://springwolf.github.io/","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]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"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":"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":"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":"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}}]},"Code Generators":{"description":"The following is a list of tools that generate code from an AsyncAPI document; not the other way around.","toolsList":[{"title":"ZenWave Code Generator","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-code-generator/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-code-generator"},"filters":{"language":{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"},"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"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":"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":"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}}]},"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":"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","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"},"categories":["converter"],"hasCommercial":false,"isAsyncAPIOwner":true,"technology":[]}},{"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}}]},"Directories":{"description":"The following is a list of directories that index public AsyncAPI documents.","toolsList":[{"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":"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":[]}}]},"Documentation Generators":{"description":"The following is a list of tools that generate human-readable documentation from an AsyncAPI document.","toolsList":[{"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"],"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://springwolf.github.io/","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]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"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":"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":"Bump.sh","description":"OpenAPI 2 & 3 / AsyncAPI 2 documentation generator, with automatic changelog and visual diff.","links":{"websiteUrl":"https://bump.sh/","repoUrl":""},"filters":{"categories":["documentation-generator"],"hasCommercial":true,"isAsyncAPIOwner":false,"technology":[]}},{"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}},{"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}}]},"Editors":{"description":"The following is a list of editors or related tools that allow editing of AsyncAPI document.","toolsList":[]},"UI components":{"description":"The following is a list of UI components to view AsyncAPI documents.","toolsList":[{"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}},{"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"},"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}}]},"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":"ZenWave Code Generator","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-code-generator/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-code-generator"},"filters":{"language":{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"},"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"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}}]},"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}}]},"GitHub Actions":{"description":"The following is a list of GitHub Actions that you can use in your workflows","toolsList":[{"title":"GitHub Action for Generator","description":"GitHub Action to generate all the things from your AsyncAPI document using the AsyncAPI generator","links":{"repoUrl":"https://github.com/asyncapi/github-action-for-generator"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-actions"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"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":"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":"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}}]},"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":"ZenWave Code Generator","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-code-generator/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-code-generator"},"filters":{"language":{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"},"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"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":"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":"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}}]},"Validators":{"description":"The following is a list of tools that validate AsyncAPI documents.","toolsList":[{"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":"Check-API","description":"Check_api is a simple utility wrapping a collection of API definition format validators. It allows you to validate a local file or remote URL with a single command-line or programmatic invocation.","links":{"repoUrl":"https://github.com/Mermade/check_api"},"filters":{"language":{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"},"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["api","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 Parser","description":"The AsyncAPI Parser validates AsyncAPI documents according to dedicated schemas.","links":{"repoUrl":"https://github.com/asyncapi/parser-go"},"filters":{"language":{"name":"Go","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"},"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":true,"technology":[]}},{"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}},{"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 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":[]}}]},"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":[]}}]},"CLIs":{"description":"The following is a list of tools that you can work with in terminal or do some CI/CD automation.","toolsList":[{"title":"ZenWave Code Generator","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-code-generator/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-code-generator"},"filters":{"language":{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"},"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"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":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"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}}]},"Bundlers":{"description":"The following is a list of tools that you can work with to bundle AsyncAPI documents.","toolsList":[{"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}}]},"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}}]}} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f93c7a7bdf77..eb67e60170b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,7 @@ "@tailwindcss/typography": "^0.5.2", "@zeit/next-css": "^1.0.1", "ajv": "^8.11.0", + "ajv-formats": "^2.1.1", "autoprefixer": "^10.4.7", "axios": "^0.27.2", "clsx": "^1.1.1", @@ -1434,6 +1435,22 @@ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -9660,6 +9677,14 @@ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "requires": { + "ajv": "^8.0.0" + } + }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", diff --git a/package.json b/package.json index 5ddd71785af9..109cc70e5ee7 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "@tailwindcss/typography": "^0.5.2", "@zeit/next-css": "^1.0.1", "ajv": "^8.11.0", + "ajv-formats": "^2.1.1", "autoprefixer": "^10.4.7", "axios": "^0.27.2", "clsx": "^1.1.1", diff --git a/public/img/illustrations/icons/docs-icon.svg b/public/img/illustrations/icons/docs-icon.svg new file mode 100644 index 000000000000..2c612861cdfa --- /dev/null +++ b/public/img/illustrations/icons/docs-icon.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/scripts/build-tools.js b/scripts/build-tools.js index 5da52d06607a..363e34188161 100644 --- a/scripts/build-tools.js +++ b/scripts/build-tools.js @@ -12,7 +12,7 @@ const buildTools = async () => { let automatedTools = await convertTools(githubExtractData); fs.writeFileSync( resolve(__dirname, '../config', 'tools-automated.json'), - JSON.stringify(automatedTools) + JSON.stringify(automatedTools, null, ' ') ); await combineTools(automatedTools, manualTools); } catch (err) { diff --git a/scripts/tools/categorylist.js b/scripts/tools/categorylist.js index 9836e0c269c7..02bd86dbac7f 100644 --- a/scripts/tools/categorylist.js +++ b/scripts/tools/categorylist.js @@ -52,7 +52,7 @@ const categoryList = [ }, { name: "GitHub Actions", - tag: "github-actions", + tag: "github-action", description: "The following is a list of GitHub Actions that you can use in your workflows" }, { diff --git a/scripts/tools/combine-tools.js b/scripts/tools/combine-tools.js index f7c8340c9de0..cb73a2e737ba 100644 --- a/scripts/tools/combine-tools.js +++ b/scripts/tools/combine-tools.js @@ -1,8 +1,15 @@ const { languagesColor, technologiesColor } = require("./tags-color") const { categoryList } = require("./categorylist.js") +const { createToolObject } = require("./tools-object") const fs = require('fs') +const schema = require("./tools-schema.json"); +const Ajv = require("ajv") +const addFormats = require("ajv-formats") const { resolve } = require('path'); const Fuse = require("fuse.js") +const ajv = new Ajv() +addFormats(ajv, ["uri"]) +const validate = ajv.compile(schema) let finalTools = {}; for (var category of categoryList) { @@ -49,7 +56,8 @@ const getFinalTool = async (toolObject) => { } } let technologyArray = []; - for (const technology of toolObject.filters.technology) { + if(toolObject.filters.technology){ + for (const technology of toolObject?.filters?.technology) { const technologySearch = await technologyFuse.search(technology) if (technologySearch.length > 0) { technologyArray.push(technologySearch[0].item); @@ -67,6 +75,7 @@ const getFinalTool = async (toolObject) => { technologyFuse = new Fuse(technologyList, options) } } + } finalObject.filters.technology = technologyArray; return finalObject; } @@ -84,7 +93,21 @@ const combineTools = async (automatedTools, manualTools) => { } if (manualTools[key] && manualTools[key].toolsList.length) { for (const tool of manualTools[key].toolsList) { - finalToolsList.push(await getFinalTool(tool)) + let isAsyncAPIrepo; + const isValid = await validate(tool) + if(isValid) { + if(tool?.links?.repoUrl){ + const url = new URL(tool.links.repoUrl) + isAsyncAPIrepo = url.href.startsWith("https://github.com/asyncapi/") + }else isAsyncAPIrepo = false + let toolObject = await createToolObject(tool, "", "", isAsyncAPIrepo) + finalToolsList.push(await getFinalTool(toolObject)) + }else{ + console.error('Script is not failing, it is just dropping errors for further investigation'); + console.error(`Invalid ${tool.title} .asyncapi-tool file.`); + console.error(`Located in manual-tools.json file`); + console.error('Validation errors:', JSON.stringify(validate.errors, null, 2)); + } } } finalTools[key].toolsList = finalToolsList diff --git a/scripts/tools/tags-color.js b/scripts/tools/tags-color.js index 46d5eb298b0a..71d5e157e20e 100644 --- a/scripts/tools/tags-color.js +++ b/scripts/tools/tags-color.js @@ -89,7 +89,7 @@ const languagesColor = [ const technologiesColor = [ { - name: "Node js", + name: "Node.js", color: "bg-[#BDFF67]", borderColor: "border-[#84CE24]" }, @@ -129,7 +129,7 @@ const technologiesColor = [ borderColor: "border-[#2596ED]" }, { - name: "Node-red", + name: "Node-RED", color: "bg-[#FF7474]", borderColor: "border-[#8F0101]" }, diff --git a/scripts/tools/tools-object.js b/scripts/tools/tools-object.js index 81b9b4c2928b..eda730424c7f 100644 --- a/scripts/tools/tools-object.js +++ b/scripts/tools/tools-object.js @@ -1,12 +1,15 @@ const schema = require("./tools-schema.json"); const axios = require('axios') const Ajv = require("ajv") +const addFormats = require("ajv-formats") const Fuse = require("fuse.js") const yaml = require('yaml'); const { categoryList } = require("./categorylist") const ajv = new Ajv() +addFormats(ajv, ["uri"]) const validate = ajv.compile(schema) + // Config options set for the Fuse object const options = { includeScore: true, @@ -22,7 +25,7 @@ const fuse = new Fuse(categoryList, options) // isAsyncAPIrepo boolean variable to define whether the tool repository is under // AsyncAPI organization or not, to create a JSON tool object as required in the frontend // side to show ToolCard. -const createToolObject = async (toolFile, repositoryUrl, repoDescription, isAsyncAPIrepo) => { +const createToolObject = async (toolFile, repositoryUrl='', repoDescription='', isAsyncAPIrepo='') => { let resultantObject = { title: toolFile.title, description: toolFile?.description ? toolFile.description : repoDescription, @@ -32,7 +35,7 @@ const createToolObject = async (toolFile, repositoryUrl, repoDescription, isAsyn }, filters: { ...toolFile.filters, - hasCommercial: toolFile?.filters?.hasCommmercial ? toolFile.filters.hasCommercial : false, + hasCommercial: toolFile?.filters?.hasCommercial ? toolFile.filters.hasCommercial : false, isAsyncAPIOwner: isAsyncAPIrepo } }; @@ -120,4 +123,4 @@ async function convertToJson(contentYAMLorJSON) { return yaml.parse(contentYAMLorJSON); } -module.exports = { convertTools } +module.exports = { convertTools, createToolObject } diff --git a/scripts/tools/tools-schema.json b/scripts/tools/tools-schema.json index f5dd56efb567..b75277af937c 100644 --- a/scripts/tools/tools-schema.json +++ b/scripts/tools/tools-schema.json @@ -45,40 +45,72 @@ "type": "object", "additionalProperties": false, "required": [ - "technology", "categories" ], "properties": { "language": { "type": "string", "description": "Provide information on how other can integrate with the tool in case it is possible. If your code generator generates Python code, then specify Python, even if code generator itself is written in JavaScript. If we forgot about some language then please add it through a pull request to AsyncAPI website repository.", - "enum": [ - "Go", - "Java", - "JavaScript", - "HTML", - "C/C++", - "C#", - "Python", - "TypeScript", - "Kotlin", - "Scala", - "Markdown", - "YAML", - "R", - "Rubby", - "Rust", - "Shell", - "Groovy" + "anyOf": [ + { + "type": "string", + "enum": [ + "Go", + "Java", + "JavaScript", + "HTML", + "C/C++", + "C#", + "Python", + "TypeScript", + "Kotlin", + "Scala", + "Markdown", + "YAML", + "R", + "Rubby", + "Rust", + "Shell", + "Groovy" + ] + }, + { + "type": "string" + } ] }, "technology": { "type": "array", "description": "Provide a list of different technologies used in the tool. Put details useful for tool user and tool contributor.", "items": { - "type": "string" + "type": "string", + "anyOf": [ + { + "type": "string", + "enum": [ + "Node js", + "Hermes", + "React JS", + ".NET", + "ASP.NET", + "Springboot", + "AWS", + "Docker", + "Node-red", + "Maven", + "Saas", + "Kubernetes-native", + "Scala", + "Azure", + "Jenkins", + "Flask" + ] + }, + { + "type": "string" + } + ] }, - "minItems": 1, "examples": [ "Express.js", "Kafka" @@ -89,8 +121,38 @@ "description": "Categories are used to group tools by different use case, like documentation or code generation. If have a list of fixed categories. If you use different one that your tool lands under \"other\" category. Feel free to add your category through a pull request to AsyncAPI website repository.", "items": { "type": "string", - "enum": [ - "api", + "anyOf": [ + { + "type": "string", + "enum": [ + "api", + "code-first", + "code-generator", + "converter", + "directory", + "documentation-generator", + "editor", + "ui-component", + "dsl", + "framework", + "github-action", + "mocking-and-testing", + "validator", + "compare-tool", + "other", + "cli", + "bundler", + "ide-extension" + ] + }, + { + "type": "string" + } + ] + }, + "minItems": 1, + "examples": [ + "api", "code-first", "code-generator", "converter", @@ -100,7 +162,7 @@ "ui-component", "dsl", "framework", - "github-actions", + "github-action", "mocking-and-testing", "validator", "compare-tool", @@ -108,12 +170,6 @@ "cli", "bundler", "ide-extension" - ] - }, - "minItems": 1, - "examples": [ - "Express.js", - "Kafka" ] }, "hasCommercial": {